From c02dd59e5428880a5f711d411ed70642a22b5697 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B7=B3=E5=86=89?= <455274752@qq.com> Date: Tue, 10 Oct 2023 09:53:46 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + docs/README-en.md | 61 +++++++++++++++++------------------------- docs/README.md | 68 +++++++++++++++++------------------------------ docs/en/README.md | 61 +++++++++++++++++------------------------- docs/zh/README.md | 61 +++++++++++++++++------------------------- 5 files changed, 97 insertions(+), 155 deletions(-) diff --git a/.gitignore b/.gitignore index 1e203969ad..a7279b5aad 100644 --- a/.gitignore +++ b/.gitignore @@ -63,3 +63,4 @@ Thumbs.db /Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7/App_Data/NeuChar /Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7/App_Data/WeChat_OfficialAccount/ node_modules +yarn.lock diff --git a/docs/README-en.md b/docs/README-en.md index 90c7c8e706..45a812f119 100644 --- a/docs/README-en.md +++ b/docs/README-en.md @@ -34,47 +34,34 @@ features: yarn docs:dev ``` - - ## Document catalogue | Document catalogue | Description | | ------------------------------------------------------------------------------- | ---------------------------------- | -| [zh/guide/](zh/guide/) | **Guide** | -| [zh/guide/mp/](zh/guide/mp/install.html) | **MP Document** | -| [ zh/guide/mp/jssdk/](zh/guide/mp/jssdk.html) |  JSSDK | -| [ zh/guide/mp/oauth2.0/](zh/guide/mp/oauth2.0.html) |  OAuth 2.0 | -| [ zh/guide/mp/menu/](zh/guide/mp/menu.html) |  Menu Setting | -| [zh/guide/wxopen/](zh/guide/wxopen/install.html) | **WxOpen Document** | -| [ zh/guide/request-service/](zh/guide/wxopen/request-service.html) |  MiniProgram Request Service | -| [ zh/guide/login/](zh/guide/wxopen/login.html) |  Login | -| [ zh/guide/get-phone-number/](zh/guide/wxopen/get-phone-number.html) |  GetPhoneNumber | -| [zh/guide/work/](zh/guide/work/install.html) | **Work Document** | -| [ zh/guide/work/jssdk-general/](zh/guide/work/jssdk-general.html) |  JSSDK (General) | -| [ zh/guide/work/jssdk-agent-config/](zh/guide/work/jssdk-agent-config.html)|  JSSDK(agentConfig) | -| [ zh/guide/work/oauth2.0/](zh/guide/work/oauth2.0.html) |  OAuth 2.0 | -| [ zh/guide/work/menu/](zh/guide/work/menu.html) |  Menu Setting | -| [zh/guide/tenpayv3/](zh/guide/tenpayv3/install.html) | **TenPayV3 Document** | -| [ zh/guide/tenpayv3/jssdk/](zh/guide/tenpayv3/jssdk.html) |  JSAPI | -| [ zh/guide/tenpayv3/callback/](zh/guide/tenpayv3/callback.html) |  PayNotify | -| [ zh/guide/tenpayv3/nativepay/](zh/guide/tenpayv3/nativepay.html) |  Native Pay | -| [ zh/guide/tenpayv3/refund/](zh/guide/tenpayv3/refund.html) |  Refund | -| [zh/guide/tenpayv2/](zh/guide/tenpayv2/install.html) | **TenPayV2 Document** | -| [ zh/guide/tenpayv2/jssdk/](zh/guide/tenpayv2/jssdk.html) |  JSAPI | -| [ zh/guide/tenpayv2/callback/](zh/guide/tenpayv2/callback.html) |  PayNotify | -| [ zh/guide/tenpayv2/nativepay/](zh/guide/tenpayv2/nativepay.html) |  Native Pay | -| [ zh/guide/tenpayv2/refund/](zh/guide/tenpayv2/refund.html) |  Refund | +| [/en/guide/](/en/guide/) | **Guide** | +| [/en/guide/mp/](/en/guide/mp/install.md) | **MP Document** | +| [ /en/guide/mp/jssdk/](/en/guide/mp/jssdk.md) |  JSSDK | +| [ /en/guide/mp/oauth2.0/](/en/guide/mp/oauth2.0.md) |  OAuth 2.0 | +| [ /en/guide/mp/menu/](/en/guide/mp/menu.md) |  Menu Setting | +| [/en/guide/wxopen/](/en/guide/wxopen/install.md) | **WxOpen Document** | +| [ /en/guide/request-service/](/en/guide/wxopen/request-service.md) |  MiniProgram Request Service | +| [ /en/guide/login/](/en/guide/wxopen/login.md) |  Login | +| [ /en/guide/get-phone-number/](/en/guide/wxopen/get-phone-number.md) |  GetPhoneNumber | +| [/en/guide/work/](/en/guide/work/install.md) | **Work Document** | +| [ /en/guide/work/jssdk-general/](/en/guide/work/jssdk-general.md) |  JSSDK (General) | +| [ /en/guide/work/jssdk-agent-config/](/en/guide/work/jssdk-agent-config.md)|  JSSDK(agentConfig) | +| [ /en/guide/work/oauth2.0/](/en/guide/work/oauth2.0.md) |  OAuth 2.0 | +| [ /en/guide/work/menu/](/en/guide/work/menu.md) |  Menu Setting | +| [/en/guide/tenpayv3/](/en/guide/tenpayv3/install.md) | **TenPayV3 Document** | +| [ /en/guide/tenpayv3/jssdk/](/en/guide/tenpayv3/jssdk.md) |  JSAPI | +| [ /en/guide/tenpayv3/callback/](/en/guide/tenpayv3/callback.md) |  PayNotify | +| [ /en/guide/tenpayv3/nativepay/](/en/guide/tenpayv3/nativepay.md) |  Native Pay | +| [ /en/guide/tenpayv3/refund/](/en/guide/tenpayv3/refund.md) |  Refund | +| [/en/guide/tenpayv2/](/en/guide/tenpayv2/install.md) | **TenPayV2 Document** | +| [ /en/guide/tenpayv2/jssdk/](/en/guide/tenpayv2/jssdk.md) |  JSAPI | +| [ /en/guide/tenpayv2/callback/](/en/guide/tenpayv2/callback.md) |  PayNotify | +| [ /en/guide/tenpayv2/nativepay/](/en/guide/tenpayv2/nativepay.md) |  Native Pay | +| [ /en/guide/tenpayv2/refund/](/en/guide/tenpayv2/refund.md) |  Refund | ::: slot footer Apache License Version 2.0 | Copyright © 2006-present [JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK) diff --git a/docs/README.md b/docs/README.md index 00bea8a973..a4f52f4f24 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,13 +6,6 @@ heroText: JeffreySu/WeiXinMPSDK tagline: 轻松打造微信各平台的扩展应用 actionText: 快速上手 → actionLink: /zh/guide/ -features: - - title: 应用广泛 - details: 目前使用率最高的微信 .NET SDK。 - - title: 多平台 - details: 微信公众号、小程序、微信支付V2/V3、JS-SDK、开放平台、企业号、企业微信…… - - title: 可扩展 - details: Senparc.Weixin SDK 扩展组件用于提供缓存、WebSocket 等一系列扩展模块。 --- ## 如何使用文档 @@ -41,47 +34,34 @@ features: yarn docs:dev ``` - - ## 文档目录 | 中文文档目录 | 说明 | | ------------------------------------------------------------------------------- | ------------------------ | -| [zh/guide/](zh/guide/) | **概要** | -| [zh/guide/mp/](zh/guide/mp/install.html) | **公众号模块文档** | -| [ zh/guide/mp/jssdk/](zh/guide/mp/jssdk.html) |  JSSDK | -| [ zh/guide/mp/oauth2.0/](zh/guide/mp/oauth2.0.html) |  OAuth 2.0 | -| [ zh/guide/mp/menu/](zh/guide/mp/menu.html) |  菜单设置 | -| [zh/guide/wxopen/](zh/guide/wxopen/install.html) | **小程序文档** | -| [ zh/guide/request-service/](zh/guide/wxopen/request-service.html) |  小程序请求服务 | -| [ zh/guide/login/](zh/guide/wxopen/login.html) |  登录 | -| [ zh/guide/get-phone-number/](zh/guide/wxopen/get-phone-number.html) |  获取手机号 | -| [zh/guide/work/](zh/guide/work/install.html) | **企业微信文档** | -| [ zh/guide/work/jssdk-general/](zh/guide/work/jssdk-general.html) |  JSSDK常规 | -| [ zh/guide/work/jssdk-agent-config/](zh/guide/work/jssdk-agent-config.html)|  JSSDK(agentConfig) | -| [ zh/guide/work/oauth2.0/](zh/guide/work/oauth2.0.html) |  OAuth 2.0 | -| [ zh/guide/work/menu/](zh/guide/work/menu.html) |  菜单设置 | -| [zh/guide/tenpayv3/](zh/guide/tenpayv3/install.html) | **微信支付 V3 文档** | -| [ zh/guide/tenpayv3/jssdk/](zh/guide/tenpayv3/jssdk.html) |  JSAPI 支付 | -| [ zh/guide/tenpayv3/callback/](zh/guide/tenpayv3/callback.html) |  支付回调 | -| [ zh/guide/tenpayv3/nativepay/](zh/guide/tenpayv3/nativepay.html) |  Native 支付 | -| [ zh/guide/tenpayv3/refund/](zh/guide/tenpayv3/refund.html) |  退款 | -| [zh/guide/tenpayv2/](zh/guide/tenpayv2/install.html) | **微信支付 V2 文档** | -| [ zh/guide/tenpayv2/jssdk/](zh/guide/tenpayv2/jssdk.html) |  JSAPI 支付 | -| [ zh/guide/tenpayv2/callback/](zh/guide/tenpayv2/callback.html) |  支付回调 | -| [ zh/guide/tenpayv2/nativepay/](zh/guide/tenpayv2/nativepay.html) |  Native 支付 | -| [ zh/guide/tenpayv2/refund/](zh/guide/tenpayv2/refund.html) |  退款 | +| [/zh/guide/](/zh/guide/) | **概要** | +| [/zh/guide/mp/](/zh/guide/mp/install.md) | **公众号模块文档** | +| [ /zh/guide/mp/jssdk/](/zh/guide/mp/jssdk.md) |  JSSDK | +| [ /zh/guide/mp/oauth2.0/](/zh/guide/mp/oauth2.0.md) |  OAuth 2.0 | +| [ /zh/guide/mp/menu/](/zh/guide/mp/menu.md) |  菜单设置 | +| [/zh/guide/wxopen/](/zh/guide/wxopen/install.md) | **小程序文档** | +| [ /zh/guide/request-service/](/zh/guide/wxopen/request-service.md) |  小程序请求服务 | +| [ /zh/guide/login/](/zh/guide/wxopen/login.md) |  登录 | +| [ /zh/guide/get-phone-number/](/zh/guide/wxopen/get-phone-number.md) |  获取手机号 | +| [/zh/guide/work/](/zh/guide/work/install.md) | **企业微信文档** | +| [ /zh/guide/work/jssdk-general/](/zh/guide/work/jssdk-general.md) |  JSSDK常规 | +| [ /zh/guide/work/jssdk-agent-config/](/zh/guide/work/jssdk-agent-config.md)|  JSSDK(agentConfig) | +| [ /zh/guide/work/oauth2.0/](/zh/guide/work/oauth2.0.md) |  OAuth 2.0 | +| [ /zh/guide/work/menu/](/zh/guide/work/menu.md) |  菜单设置 | +| [/zh/guide/tenpayv3/](/zh/guide/tenpayv3/install.md) | **微信支付 V3 文档** | +| [ /zh/guide/tenpayv3/jssdk/](/zh/guide/tenpayv3/jssdk.md) |  JSAPI 支付 | +| [ /zh/guide/tenpayv3/callback/](/zh/guide/tenpayv3/callback.md) |  支付回调 | +| [ /zh/guide/tenpayv3/nativepay/](/zh/guide/tenpayv3/nativepay.md) |  Native 支付 | +| [ /zh/guide/tenpayv3/refund/](/zh/guide/tenpayv3/refund.md) |  退款 | +| [/zh/guide/tenpayv2/](/zh/guide/tenpayv2/install.md) | **微信支付 V2 文档** | +| [ /zh/guide/tenpayv2/jssdk/](/zh/guide/tenpayv2/jssdk.md) |  JSAPI 支付 | +| [ /zh/guide/tenpayv2/callback/](/zh/guide/tenpayv2/callback.md) |  支付回调 | +| [ /zh/guide/tenpayv2/nativepay/](/zh/guide/tenpayv2/nativepay.md) |  Native 支付 | +| [ /zh/guide/tenpayv2/refund/](/zh/guide/tenpayv2/refund.md) |  退款 | ::: slot footer Apache License Version 2.0 | Copyright © 2006-present [JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK) diff --git a/docs/en/README.md b/docs/en/README.md index cdad32dccc..4d24aac891 100644 --- a/docs/en/README.md +++ b/docs/en/README.md @@ -14,47 +14,34 @@ features: details: Senparc.Weixin SDK Extension components are used to provide a series of extension modules such as cache and WebSocket. --- - - ## Document catalogue | Document catalogue | Description | | ------------------------------------------------------------------------------- | ---------------------------------- | -| [guide/](guide/) | **Guide** | -| [guide/mp/](guide/mp/install.html) | **MP Document** | -| [ guide/mp/jssdk/](guide/mp/jssdk.html) |  JSSDK | -| [ guide/mp/oauth2.0/](guide/mp/oauth2.0.html) |  OAuth 2.0 | -| [ guide/mp/menu/](guide/mp/menu.html) |  Menu Setting | -| [guide/wxopen/](guide/wxopen/install.html) | **WxOpen Document** | -| [ guide/request-service/](guide/wxopen/request-service.html) |  MiniProgram Request Service | -| [ guide/login/](guide/wxopen/login.html) |  Login | -| [ guide/get-phone-number/](guide/wxopen/get-phone-number.html) |  GetPhoneNumber | -| [guide/work/](guide/work/install.html) | **Work Document** | -| [ guide/work/jssdk-general/](guide/work/jssdk-general.html) |  JSSDK (General) | -| [ guide/work/jssdk-agent-config/](guide/work/jssdk-agent-config.html)|  JSSDK(agentConfig) | -| [ guide/work/oauth2.0/](guide/work/oauth2.0.html) |  OAuth 2.0 | -| [ guide/work/menu/](guide/work/menu.html) |  Menu Setting | -| [guide/tenpayv3/](guide/tenpayv3/install.html) | **TenPayV3 Document** | -| [ guide/tenpayv3/jssdk/](guide/tenpayv3/jssdk.html) |  JSAPI | -| [ guide/tenpayv3/callback/](guide/tenpayv3/callback.html) |  PayNotify | -| [ guide/tenpayv3/nativepay/](guide/tenpayv3/nativepay.html) |  Native Pay | -| [ guide/tenpayv3/refund/](guide/tenpayv3/refund.html) |  Refund | -| [guide/tenpayv2/](guide/tenpayv2/install.html) | **TenPayV2 Document** | -| [ guide/tenpayv2/jssdk/](guide/tenpayv2/jssdk.html) |  JSAPI | -| [ guide/tenpayv2/callback/](guide/tenpayv2/callback.html) |  PayNotify | -| [ guide/tenpayv2/nativepay/](guide/tenpayv2/nativepay.html) |  Native Pay | -| [ guide/tenpayv2/refund/](guide/tenpayv2/refund.html) |  Refund | +| [/guide/](//guide/) | **Guide** | +| [/guide/mp/](//guide/mp/install.md) | **MP Document** | +| [ /guide/mp/jssdk/](//guide/mp/jssdk.md) |  JSSDK | +| [ /guide/mp/oauth2.0/](//guide/mp/oauth2.0.md) |  OAuth 2.0 | +| [ /guide/mp/menu/](/guide/mp/menu.md) |  Menu Setting | +| [/guide/wxopen/](/guide/wxopen/install.md) | **WxOpen Document** | +| [ /guide/request-service/](/guide/wxopen/request-service.md) |  MiniProgram Request Service | +| [ /guide/login/](/guide/wxopen/login.md) |  Login | +| [ /guide/get-phone-number/](/guide/wxopen/get-phone-number.md) |  GetPhoneNumber | +| [/guide/work/](/guide/work/install.md) | **Work Document** | +| [ /guide/work/jssdk-general/](/guide/work/jssdk-general.md) |  JSSDK (General) | +| [ /guide/work/jssdk-agent-config/](/guide/work/jssdk-agent-config.md)|  JSSDK(agentConfig) | +| [ /guide/work/oauth2.0/](/guide/work/oauth2.0.md) |  OAuth 2.0 | +| [ /guide/work/menu/](/guide/work/menu.md) |  Menu Setting | +| [/guide/tenpayv3/](/guide/tenpayv3/install.md) | **TenPayV3 Document** | +| [ /guide/tenpayv3/jssdk/](/guide/tenpayv3/jssdk.md) |  JSAPI | +| [ /guide/tenpayv3/callback/](/guide/tenpayv3/callback.md) |  PayNotify | +| [ /guide/tenpayv3/nativepay/](/guide/tenpayv3/nativepay.md) |  Native Pay | +| [ /guide/tenpayv3/refund/](/guide/tenpayv3/refund.md) |  Refund | +| [/guide/tenpayv2/](/guide/tenpayv2/install.md) | **TenPayV2 Document** | +| [ /guide/tenpayv2/jssdk/](/guide/tenpayv2/jssdk.md) |  JSAPI | +| [ /guide/tenpayv2/callback/](/guide/tenpayv2/callback.md) |  PayNotify | +| [ /guide/tenpayv2/nativepay/](/guide/tenpayv2/nativepay.md) |  Native Pay | +| [ /guide/tenpayv2/refund/](/guide/tenpayv2/refund.md) |  Refund | ::: slot footer Apache License Version 2.0 | Copyright © 2006-present [JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK) diff --git a/docs/zh/README.md b/docs/zh/README.md index 1f7b305bfe..f175690d55 100644 --- a/docs/zh/README.md +++ b/docs/zh/README.md @@ -14,47 +14,34 @@ features: details: Senparc.Weixin SDK 扩展组件用于提供缓存、WebSocket 等一系列扩展模块。 --- - - ## 文档目录 | 中文文档目录 | 说明 | | ------------------------------------------------------------------------------- | ------------------------ | -| [guide/](guide/) | **概要** | -| [guide/mp/](guide/mp/install.html) | **公众号模块文档** | -| [ guide/mp/jssdk/](guide/mp/jssdk.html) |  JSSDK | -| [ guide/mp/oauth2.0/](guide/mp/oauth2.0.html) |  OAuth 2.0 | -| [ guide/mp/menu/](guide/mp/menu.html) |  菜单设置 | -| [guide/wxopen/](guide/wxopen/install.html) | **小程序文档** | -| [ guide/request-service/](guide/wxopen/request-service.html) |  小程序请求服务 | -| [ guide/login/](guide/wxopen/login.html) |  登录 | -| [ guide/get-phone-number/](guide/wxopen/get-phone-number.html) |  获取手机号 | -| [guide/work/](guide/work/install.html) | **企业微信文档** | -| [ guide/work/jssdk-general/](guide/work/jssdk-general.html) |  JSSDK常规 | -| [ guide/work/jssdk-agent-config/](guide/work/jssdk-agent-config.html)|  JSSDK(agentConfig) | -| [ guide/work/oauth2.0/](guide/work/oauth2.0.html) |  OAuth 2.0 | -| [ guide/work/menu/](guide/work/menu.html) |  菜单设置 | -| [guide/tenpayv3/](guide/tenpayv3/install.html) | **微信支付 V3 文档** | -| [ guide/tenpayv3/jssdk/](guide/tenpayv3/jssdk.html) |  JSAPI 支付 | -| [ guide/tenpayv3/callback/](guide/tenpayv3/callback.html) |  支付回调 | -| [ guide/tenpayv3/nativepay/](guide/tenpayv3/nativepay.html) |  Native 支付 | -| [ guide/tenpayv3/refund/](guide/tenpayv3/refund.html) |  退款 | -| [guide/tenpayv2/](guide/tenpayv2/install.html) | **微信支付 V2 文档** | -| [ guide/tenpayv2/jssdk/](guide/tenpayv2/jssdk.html) |  JSAPI 支付 | -| [ guide/tenpayv2/callback/](guide/tenpayv2/callback.html) |  支付回调 | -| [ guide/tenpayv2/nativepay/](guide/tenpayv2/nativepay.html) |  Native 支付 | -| [ guide/tenpayv2/refund/](guide/tenpayv2/refund.html) |  退款 | +| [/guide/](/guide/) | **概要** | +| [/guide/mp/](/guide/mp/install.md) | **公众号模块文档** | +| [ /guide/mp/jssdk/](/guide/mp/jssdk.md) |  JSSDK | +| [ /guide/mp/oauth2.0/](/guide/mp/oauth2.0.md) |  OAuth 2.0 | +| [ /guide/mp/menu/](/guide/mp/menu.md) |  菜单设置 | +| [/guide/wxopen/](/guide/wxopen/install.md) | **小程序文档** | +| [ /guide/request-service/](/guide/wxopen/request-service.md) |  小程序请求服务 | +| [ /guide/login/](/guide/wxopen/login.md) |  登录 | +| [ /guide/get-phone-number/](/guide/wxopen/get-phone-number.md) |  获取手机号 | +| [/guide/work/](/guide/work/install.md) | **企业微信文档** | +| [ /guide/work/jssdk-general/](/guide/work/jssdk-general.md) |  JSSDK常规 | +| [ /guide/work/jssdk-agent-config/](/guide/work/jssdk-agent-config.md)|  JSSDK(agentConfig) | +| [ /guide/work/oauth2.0/](/guide/work/oauth2.0.md) |  OAuth 2.0 | +| [ /guide/work/menu/](/guide/work/menu.md) |  菜单设置 | +| [/guide/tenpayv3/](/guide/tenpayv3/install.md) | **微信支付 V3 文档** | +| [ /guide/tenpayv3/jssdk/](/guide/tenpayv3/jssdk.md) |  JSAPI 支付 | +| [ /guide/tenpayv3/callback/](/guide/tenpayv3/callback.md) |  支付回调 | +| [ /guide/tenpayv3/nativepay/](/guide/tenpayv3/nativepay.md) |  Native 支付 | +| [ /guide/tenpayv3/refund/](/guide/tenpayv3/refund.md) |  退款 | +| [/guide/tenpayv2/](/guide/tenpayv2/install.md) | **微信支付 V2 文档** | +| [ /guide/tenpayv2/jssdk/](/guide/tenpayv2/jssdk.md) |  JSAPI 支付 | +| [ /guide/tenpayv2/callback/](/guide/tenpayv2/callback.md) |  支付回调 | +| [ /guide/tenpayv2/nativepay/](/guide/tenpayv2/nativepay.md) |  Native 支付 | +| [ /guide/tenpayv2/refund/](/guide/tenpayv2/refund.md) |  退款 | ::: slot footer Apache License Version 2.0 | Copyright © 2006-present [JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK) From b3d753e658c7080e0de4fa3e09fb93c98648f968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B7=B3=E5=86=89?= <455274752@qq.com> Date: Tue, 10 Oct 2023 11:32:19 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README-en.md | 52 +- docs/README.md | 64 +- docs/en/README.md | 52 +- package.json => docs/package.json | 4 +- docs/zh/README.md | 52 +- yarn.lock | 8721 ----------------------------- 6 files changed, 115 insertions(+), 8830 deletions(-) rename package.json => docs/package.json (76%) delete mode 100644 yarn.lock diff --git a/docs/README-en.md b/docs/README-en.md index 45a812f119..7bf8d531f0 100644 --- a/docs/README-en.md +++ b/docs/README-en.md @@ -36,32 +36,32 @@ features: ## Document catalogue -| Document catalogue | Description | -| ------------------------------------------------------------------------------- | ---------------------------------- | -| [/en/guide/](/en/guide/) | **Guide** | -| [/en/guide/mp/](/en/guide/mp/install.md) | **MP Document** | -| [ /en/guide/mp/jssdk/](/en/guide/mp/jssdk.md) |  JSSDK | -| [ /en/guide/mp/oauth2.0/](/en/guide/mp/oauth2.0.md) |  OAuth 2.0 | -| [ /en/guide/mp/menu/](/en/guide/mp/menu.md) |  Menu Setting | -| [/en/guide/wxopen/](/en/guide/wxopen/install.md) | **WxOpen Document** | -| [ /en/guide/request-service/](/en/guide/wxopen/request-service.md) |  MiniProgram Request Service | -| [ /en/guide/login/](/en/guide/wxopen/login.md) |  Login | -| [ /en/guide/get-phone-number/](/en/guide/wxopen/get-phone-number.md) |  GetPhoneNumber | -| [/en/guide/work/](/en/guide/work/install.md) | **Work Document** | -| [ /en/guide/work/jssdk-general/](/en/guide/work/jssdk-general.md) |  JSSDK (General) | -| [ /en/guide/work/jssdk-agent-config/](/en/guide/work/jssdk-agent-config.md)|  JSSDK(agentConfig) | -| [ /en/guide/work/oauth2.0/](/en/guide/work/oauth2.0.md) |  OAuth 2.0 | -| [ /en/guide/work/menu/](/en/guide/work/menu.md) |  Menu Setting | -| [/en/guide/tenpayv3/](/en/guide/tenpayv3/install.md) | **TenPayV3 Document** | -| [ /en/guide/tenpayv3/jssdk/](/en/guide/tenpayv3/jssdk.md) |  JSAPI | -| [ /en/guide/tenpayv3/callback/](/en/guide/tenpayv3/callback.md) |  PayNotify | -| [ /en/guide/tenpayv3/nativepay/](/en/guide/tenpayv3/nativepay.md) |  Native Pay | -| [ /en/guide/tenpayv3/refund/](/en/guide/tenpayv3/refund.md) |  Refund | -| [/en/guide/tenpayv2/](/en/guide/tenpayv2/install.md) | **TenPayV2 Document** | -| [ /en/guide/tenpayv2/jssdk/](/en/guide/tenpayv2/jssdk.md) |  JSAPI | -| [ /en/guide/tenpayv2/callback/](/en/guide/tenpayv2/callback.md) |  PayNotify | -| [ /en/guide/tenpayv2/nativepay/](/en/guide/tenpayv2/nativepay.md) |  Native Pay | -| [ /en/guide/tenpayv2/refund/](/en/guide/tenpayv2/refund.md) |  Refund | +| Document catalogue | Description | +| ----------------------------------------------------------------------------------------- | ---------------------------------- | +| [/docs/en/guide/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/) | **Guide** | +| [/docs/en/guide/mp/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/mp/install.md) | **MP Document** | +| [ /docs/en/guide/mp/jssdk/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/mp/jssdk.md) |  JSSDK | +| [ /docs/en/guide/mp/oauth2.0/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/mp/oauth2.0.md) |  OAuth 2.0 | +| [ /docs/en/guide/mp/menu/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/mp/menu.md) |  Menu Setting | +| [/docs/en/guide/wxopen/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/wxopen/install.md) | **WxOpen Document** | +| [ /docs/en/guide/request-service/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/wxopen/request-service.md) |  MiniProgram Request Service | +| [ /docs/en/guide/login/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/wxopen/login.md) |  Login | +| [ /docs/en/guide/get-phone-number/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/wxopen/get-phone-number.md) |  GetPhoneNumber | +| [/docs/en/guide/work/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/work/install.md) | **Work Document** | +| [ /docs/en/guide/work/jssdk-general/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/work/jssdk-general.md) |  JSSDK (General) | +| [ /docs/en/guide/work/jssdk-agent-config/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/work/jssdk-agent-config.md)|  JSSDK(agentConfig) | +| [ /docs/en/guide/work/oauth2.0/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/work/oauth2.0.md) |  OAuth 2.0 | +| [ /docs/en/guide/work/menu/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/work/menu.md) |  Menu Setting | +| [/docs/en/guide/tenpayv3/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/tenpayv3/install.md) | **TenPayV3 Document** | +| [ /docs/en/guide/tenpayv3/jssdk/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/tenpayv3/jssdk.md) |  JSAPI | +| [ /docs/en/guide/tenpayv3/callback/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/tenpayv3/callback.md) |  PayNotify | +| [ /docs/en/guide/tenpayv3/nativepay/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/tenpayv3/nativepay.md) |  Native Pay | +| [ /docs/en/guide/tenpayv3/refund/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/tenpayv3/refund.md) |  Refund | +| [/docs/en/guide/tenpayv2/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/tenpayv2/install.md) | **TenPayV2 Document** | +| [ /docs/en/guide/tenpayv2/jssdk/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/tenpayv2/jssdk.md) |  JSAPI | +| [ /docs/en/guide/tenpayv2/callback/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/tenpayv2/callback.md) |  PayNotify | +| [ /docs/en/guide/tenpayv2/nativepay/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/tenpayv2/nativepay.md) |  Native Pay | +| [ /docs/en/guide/tenpayv2/refund/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/en/guide/tenpayv2/refund.md) |  Refund | ::: slot footer Apache License Version 2.0 | Copyright © 2006-present [JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK) diff --git a/docs/README.md b/docs/README.md index a4f52f4f24..0b8d3f74aa 100644 --- a/docs/README.md +++ b/docs/README.md @@ -16,19 +16,25 @@ actionLink: /zh/guide/ **相关阅读:** 可使用NVM管理Node版本,下载[NVM](https://github.com/coreybutler/nvm-windows/releases)。 -1. 通过Node安装yarn +1. 进度项目根目录的文档子文件docs + + ``` bash + cd docs + ``` + +2. 通过Node安装yarn ``` bash npm install -g yarn ``` -2. 安装项目依赖运行(项目源码根目录运行) +3. 安装项目依赖运行(项目源码根目录运行) ``` bash yarn install ``` -3. 运行文档项目 +4. 运行文档项目 ``` bash yarn docs:dev @@ -36,32 +42,32 @@ actionLink: /zh/guide/ ## 文档目录 -| 中文文档目录 | 说明 | -| ------------------------------------------------------------------------------- | ------------------------ | -| [/zh/guide/](/zh/guide/) | **概要** | -| [/zh/guide/mp/](/zh/guide/mp/install.md) | **公众号模块文档** | -| [ /zh/guide/mp/jssdk/](/zh/guide/mp/jssdk.md) |  JSSDK | -| [ /zh/guide/mp/oauth2.0/](/zh/guide/mp/oauth2.0.md) |  OAuth 2.0 | -| [ /zh/guide/mp/menu/](/zh/guide/mp/menu.md) |  菜单设置 | -| [/zh/guide/wxopen/](/zh/guide/wxopen/install.md) | **小程序文档** | -| [ /zh/guide/request-service/](/zh/guide/wxopen/request-service.md) |  小程序请求服务 | -| [ /zh/guide/login/](/zh/guide/wxopen/login.md) |  登录 | -| [ /zh/guide/get-phone-number/](/zh/guide/wxopen/get-phone-number.md) |  获取手机号 | -| [/zh/guide/work/](/zh/guide/work/install.md) | **企业微信文档** | -| [ /zh/guide/work/jssdk-general/](/zh/guide/work/jssdk-general.md) |  JSSDK常规 | -| [ /zh/guide/work/jssdk-agent-config/](/zh/guide/work/jssdk-agent-config.md)|  JSSDK(agentConfig) | -| [ /zh/guide/work/oauth2.0/](/zh/guide/work/oauth2.0.md) |  OAuth 2.0 | -| [ /zh/guide/work/menu/](/zh/guide/work/menu.md) |  菜单设置 | -| [/zh/guide/tenpayv3/](/zh/guide/tenpayv3/install.md) | **微信支付 V3 文档** | -| [ /zh/guide/tenpayv3/jssdk/](/zh/guide/tenpayv3/jssdk.md) |  JSAPI 支付 | -| [ /zh/guide/tenpayv3/callback/](/zh/guide/tenpayv3/callback.md) |  支付回调 | -| [ /zh/guide/tenpayv3/nativepay/](/zh/guide/tenpayv3/nativepay.md) |  Native 支付 | -| [ /zh/guide/tenpayv3/refund/](/zh/guide/tenpayv3/refund.md) |  退款 | -| [/zh/guide/tenpayv2/](/zh/guide/tenpayv2/install.md) | **微信支付 V2 文档** | -| [ /zh/guide/tenpayv2/jssdk/](/zh/guide/tenpayv2/jssdk.md) |  JSAPI 支付 | -| [ /zh/guide/tenpayv2/callback/](/zh/guide/tenpayv2/callback.md) |  支付回调 | -| [ /zh/guide/tenpayv2/nativepay/](/zh/guide/tenpayv2/nativepay.md) |  Native 支付 | -| [ /zh/guide/tenpayv2/refund/](/zh/guide/tenpayv2/refund.md) |  退款 | +| 中文文档目录 | 说明 | +| ----------------------------------------------------------------------------------------- | ------------------------ | +| [/docs/zh/guide/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/) | **概要** | +| [/docs/zh/guide/mp/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/mp/install.md) | **公众号模块文档** | +| [ /docs/zh/guide/mp/jssdk/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/mp/jssdk.md) |  JSSDK | +| [ /docs/zh/guide/mp/oauth2.0/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/mp/oauth2.0.md) |  OAuth 2.0 | +| [ /docs/zh/guide/mp/menu/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/mp/menu.md) |  菜单设置 | +| [/docs/zh/guide/wxopen/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/wxopen/install.md) | **小程序文档** | +| [ /docs/zh/guide/request-service/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/wxopen/request-service.md) |  小程序请求服务 | +| [ /docs/zh/guide/login/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/wxopen/login.md) |  登录 | +| [ /docs/zh/guide/get-phone-number/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/wxopen/get-phone-number.md) |  获取手机号 | +| [/docs/zh/guide/work/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/work/install.md) | **企业微信文档** | +| [ /docs/zh/guide/work/jssdk-general/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/work/jssdk-general.md) |  JSSDK常规 | +| [ /docs/zh/guide/work/jssdk-agent-config/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/work/jssdk-agent-config.md)|  JSSDK(agentConfig) | +| [ /docs/zh/guide/work/oauth2.0/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/work/oauth2.0.md) |  OAuth 2.0 | +| [ /docs/zh/guide/work/menu/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/work/menu.md) |  菜单设置 | +| [/docs/zh/guide/tenpayv3/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/tenpayv3/install.md) | **微信支付 V3 文档** | +| [ /docs/zh/guide/tenpayv3/jssdk/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/tenpayv3/jssdk.md) |  JSAPI 支付 | +| [ /docs/zh/guide/tenpayv3/callback/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/tenpayv3/callback.md) |  支付回调 | +| [ /docs/zh/guide/tenpayv3/nativepay/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/tenpayv3/nativepay.md) |  Native 支付 | +| [ /docs/zh/guide/tenpayv3/refund/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/tenpayv3/refund.md) |  退款 | +| [/docs/zh/guide/tenpayv2/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/tenpayv2/install.md) | **微信支付 V2 文档** | +| [ /docs/zh/guide/tenpayv2/jssdk/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/tenpayv2/jssdk.md) |  JSAPI 支付 | +| [ /docs/zh/guide/tenpayv2/callback/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/tenpayv2/callback.md) |  支付回调 | +| [ /docs/zh/guide/tenpayv2/nativepay/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/tenpayv2/nativepay.md) |  Native 支付 | +| [ /docs/zh/guide/tenpayv2/refund/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/zh/guide/tenpayv2/refund.md) |  退款 | ::: slot footer Apache License Version 2.0 | Copyright © 2006-present [JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK) diff --git a/docs/en/README.md b/docs/en/README.md index 4d24aac891..9f6bd8b017 100644 --- a/docs/en/README.md +++ b/docs/en/README.md @@ -16,32 +16,32 @@ features: ## Document catalogue -| Document catalogue | Description | -| ------------------------------------------------------------------------------- | ---------------------------------- | -| [/guide/](//guide/) | **Guide** | -| [/guide/mp/](//guide/mp/install.md) | **MP Document** | -| [ /guide/mp/jssdk/](//guide/mp/jssdk.md) |  JSSDK | -| [ /guide/mp/oauth2.0/](//guide/mp/oauth2.0.md) |  OAuth 2.0 | -| [ /guide/mp/menu/](/guide/mp/menu.md) |  Menu Setting | -| [/guide/wxopen/](/guide/wxopen/install.md) | **WxOpen Document** | -| [ /guide/request-service/](/guide/wxopen/request-service.md) |  MiniProgram Request Service | -| [ /guide/login/](/guide/wxopen/login.md) |  Login | -| [ /guide/get-phone-number/](/guide/wxopen/get-phone-number.md) |  GetPhoneNumber | -| [/guide/work/](/guide/work/install.md) | **Work Document** | -| [ /guide/work/jssdk-general/](/guide/work/jssdk-general.md) |  JSSDK (General) | -| [ /guide/work/jssdk-agent-config/](/guide/work/jssdk-agent-config.md)|  JSSDK(agentConfig) | -| [ /guide/work/oauth2.0/](/guide/work/oauth2.0.md) |  OAuth 2.0 | -| [ /guide/work/menu/](/guide/work/menu.md) |  Menu Setting | -| [/guide/tenpayv3/](/guide/tenpayv3/install.md) | **TenPayV3 Document** | -| [ /guide/tenpayv3/jssdk/](/guide/tenpayv3/jssdk.md) |  JSAPI | -| [ /guide/tenpayv3/callback/](/guide/tenpayv3/callback.md) |  PayNotify | -| [ /guide/tenpayv3/nativepay/](/guide/tenpayv3/nativepay.md) |  Native Pay | -| [ /guide/tenpayv3/refund/](/guide/tenpayv3/refund.md) |  Refund | -| [/guide/tenpayv2/](/guide/tenpayv2/install.md) | **TenPayV2 Document** | -| [ /guide/tenpayv2/jssdk/](/guide/tenpayv2/jssdk.md) |  JSAPI | -| [ /guide/tenpayv2/callback/](/guide/tenpayv2/callback.md) |  PayNotify | -| [ /guide/tenpayv2/nativepay/](/guide/tenpayv2/nativepay.md) |  Native Pay | -| [ /guide/tenpayv2/refund/](/guide/tenpayv2/refund.md) |  Refund | +| Document catalogue*(Static URL please ignore the navigation below) | Description | +| ----------------------------------------------------------------------------------- | ---------------------------------- | +| [/docs/guide/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/) | **Guide** | +| [/docs/guide/mp/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/mp/install.md) | **MP Document** | +| [ /docs/guide/mp/jssdk/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/mp/jssdk.md) |  JSSDK | +| [ /docs/guide/mp/oauth2.0/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/mp/oauth2.0.md) |  OAuth 2.0 | +| [ /docs/guide/mp/menu/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/mp/menu.md) |  Menu Setting | +| [/docs/guide/wxopen/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/wxopen/install.md) | **WxOpen Document** | +| [ /docs/guide/request-service/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/wxopen/request-service.md) |  MiniProgram Request Service | +| [ /docs/guide/login/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/wxopen/login.md) |  Login | +| [ /docs/guide/get-phone-number/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/wxopen/get-phone-number.md) |  GetPhoneNumber | +| [/docs/guide/work/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/work/install.md) | **Work Document** | +| [ /docs/guide/work/jssdk-general/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/work/jssdk-general.md) |  JSSDK (General) | +| [ /docs/guide/work/jssdk-agent-config/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/work/jssdk-agent-config.md)|  JSSDK(agentConfig) | +| [ /docs/guide/work/oauth2.0/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/work/oauth2.0.md) |  OAuth 2.0 | +| [ /docs/guide/work/menu/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/work/menu.md) |  Menu Setting | +| [/docs/guide/tenpayv3/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv3/install.md) | **TenPayV3 Document** | +| [ /docs/guide/tenpayv3/jssdk/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv3/jssdk.md) |  JSAPI | +| [ /docs/guide/tenpayv3/callback/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv3/callback.md) |  PayNotify | +| [ /docs/guide/tenpayv3/nativepay/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv3/nativepay.md) |  Native Pay | +| [ /docs/guide/tenpayv3/refund/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv3/refund.md) |  Refund | +| [/docs/guide/tenpayv2/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv2/install.md) | **TenPayV2 Document** | +| [ /docs/guide/tenpayv2/jssdk/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv2/jssdk.md) |  JSAPI | +| [ /docs/guide/tenpayv2/callback/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv2/callback.md) |  PayNotify | +| [ /docs/guide/tenpayv2/nativepay/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv2/nativepay.md) |  Native Pay | +| [ /docs/guide/tenpayv2/refund/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv2/refund.md) |  Refund | ::: slot footer Apache License Version 2.0 | Copyright © 2006-present [JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK) diff --git a/package.json b/docs/package.json similarity index 76% rename from package.json rename to docs/package.json index 3df7e270c7..b243b1a6ed 100644 --- a/package.json +++ b/docs/package.json @@ -11,7 +11,7 @@ "vuepress": "^1.9.9" }, "scripts": { - "docs:dev": "vuepress dev docs --host localhost --open true", - "docs:build": "vuepress build docs" + "docs:dev": "vuepress dev --host localhost --open true", + "docs:build": "vuepress build" } } diff --git a/docs/zh/README.md b/docs/zh/README.md index f175690d55..12aeab0b89 100644 --- a/docs/zh/README.md +++ b/docs/zh/README.md @@ -16,32 +16,32 @@ features: ## 文档目录 -| 中文文档目录 | 说明 | -| ------------------------------------------------------------------------------- | ------------------------ | -| [/guide/](/guide/) | **概要** | -| [/guide/mp/](/guide/mp/install.md) | **公众号模块文档** | -| [ /guide/mp/jssdk/](/guide/mp/jssdk.md) |  JSSDK | -| [ /guide/mp/oauth2.0/](/guide/mp/oauth2.0.md) |  OAuth 2.0 | -| [ /guide/mp/menu/](/guide/mp/menu.md) |  菜单设置 | -| [/guide/wxopen/](/guide/wxopen/install.md) | **小程序文档** | -| [ /guide/request-service/](/guide/wxopen/request-service.md) |  小程序请求服务 | -| [ /guide/login/](/guide/wxopen/login.md) |  登录 | -| [ /guide/get-phone-number/](/guide/wxopen/get-phone-number.md) |  获取手机号 | -| [/guide/work/](/guide/work/install.md) | **企业微信文档** | -| [ /guide/work/jssdk-general/](/guide/work/jssdk-general.md) |  JSSDK常规 | -| [ /guide/work/jssdk-agent-config/](/guide/work/jssdk-agent-config.md)|  JSSDK(agentConfig) | -| [ /guide/work/oauth2.0/](/guide/work/oauth2.0.md) |  OAuth 2.0 | -| [ /guide/work/menu/](/guide/work/menu.md) |  菜单设置 | -| [/guide/tenpayv3/](/guide/tenpayv3/install.md) | **微信支付 V3 文档** | -| [ /guide/tenpayv3/jssdk/](/guide/tenpayv3/jssdk.md) |  JSAPI 支付 | -| [ /guide/tenpayv3/callback/](/guide/tenpayv3/callback.md) |  支付回调 | -| [ /guide/tenpayv3/nativepay/](/guide/tenpayv3/nativepay.md) |  Native 支付 | -| [ /guide/tenpayv3/refund/](/guide/tenpayv3/refund.md) |  退款 | -| [/guide/tenpayv2/](/guide/tenpayv2/install.md) | **微信支付 V2 文档** | -| [ /guide/tenpayv2/jssdk/](/guide/tenpayv2/jssdk.md) |  JSAPI 支付 | -| [ /guide/tenpayv2/callback/](/guide/tenpayv2/callback.md) |  支付回调 | -| [ /guide/tenpayv2/nativepay/](/guide/tenpayv2/nativepay.md) |  Native 支付 | -| [ /guide/tenpayv2/refund/](/guide/tenpayv2/refund.md) |  退款 | +| 中文文档目录 | 说明 | +| ----------------------------------------------------------------------------------- | ------------------------ | +| [/docs/guide/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/) | **概要** | +| [/docs/guide/mp/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/mp/install.md) | **公众号模块文档** | +| [ /docs/guide/mp/jssdk/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/mp/jssdk.md) |  JSSDK | +| [ /docs/guide/mp/oauth2.0/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/mp/oauth2.0.md) |  OAuth 2.0 | +| [ /docs/guide/mp/menu/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/mp/menu.md) |  菜单设置 | +| [/docs/guide/wxopen/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/wxopen/install.md) | **小程序文档** | +| [ /docs/guide/request-service/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/wxopen/request-service.md) |  小程序请求服务 | +| [ /docs/guide/login/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/wxopen/login.md) |  登录 | +| [ /docs/guide/get-phone-number/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/wxopen/get-phone-number.md) |  获取手机号 | +| [/docs/guide/work/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/work/install.md) | **企业微信文档** | +| [ /docs/guide/work/jssdk-general/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/work/jssdk-general.md) |  JSSDK常规 | +| [ /docs/guide/work/jssdk-agent-config/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/work/jssdk-agent-config.md)|  JSSDK(agentConfig) | +| [ /docs/guide/work/oauth2.0/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/work/oauth2.0.md) |  OAuth 2.0 | +| [ /docs/guide/work/menu/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/work/menu.md) |  菜单设置 | +| [/docs/guide/tenpayv3/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv3/install.md) | **微信支付 V3 文档** | +| [ /docs/guide/tenpayv3/jssdk/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv3/jssdk.md) |  JSAPI 支付 | +| [ /docs/guide/tenpayv3/callback/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv3/callback.md) |  支付回调 | +| [ /docs/guide/tenpayv3/nativepay/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv3/nativepay.md) |  Native 支付 | +| [ /docs/guide/tenpayv3/refund/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv3/refund.md) |  退款 | +| [/docs/guide/tenpayv2/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv2/install.md) | **微信支付 V2 文档** | +| [ /docs/guide/tenpayv2/jssdk/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv2/jssdk.md) |  JSAPI 支付 | +| [ /docs/guide/tenpayv2/callback/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv2/callback.md) |  支付回调 | +| [ /docs/guide/tenpayv2/nativepay/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv2/nativepay.md) |  Native 支付 | +| [ /docs/guide/tenpayv2/refund/](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/docs/guide/tenpayv2/refund.md) |  退款 | ::: slot footer Apache License Version 2.0 | Copyright © 2006-present [JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK) diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index b4c0658c5f..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,8721 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" - integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== - dependencies: - "@babel/highlight" "^7.22.10" - chalk "^2.4.2" - -"@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" - integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== - -"@babel/core@^7.11.0", "@babel/core@^7.8.4": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.10.tgz#aad442c7bcd1582252cb4576747ace35bc122f35" - integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" - "@babel/helper-compilation-targets" "^7.22.10" - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helpers" "^7.22.10" - "@babel/parser" "^7.22.10" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.10" - "@babel/types" "^7.22.10" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.1" - -"@babel/generator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" - integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== - dependencies: - "@babel/types" "^7.22.10" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz#573e735937e99ea75ea30788b57eb52fab7468c9" - integrity sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ== - dependencies: - "@babel/types" "^7.22.10" - -"@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.9.6": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" - integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3" - integrity sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" - integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== - -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== - dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" - integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.22.5", "@babel/helper-module-imports@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" - integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" - integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.9" - -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" - integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== - -"@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== - -"@babel/helper-wrap-function@^7.22.9": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" - integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.10" - -"@babel/helpers@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.10.tgz#ae6005c539dfbcb5cd71fb51bfc8a52ba63bc37a" - integrity sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw== - dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.10" - "@babel/types" "^7.22.10" - -"@babel/highlight@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" - integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== - dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.18.4", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55" - integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" - integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" - integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" - -"@babel/plugin-proposal-class-properties@^7.8.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-decorators@^7.8.3": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.10.tgz#d6a8c3a9018e1b13e6647f869c5ea56ff2b585d4" - integrity sha512-KxN6TqZzcFi4uD3UifqXElBTBNLAEH1l3vzMQj6JwJZbL2sZlThxSViOKCYY+4Ah4V4JhQ95IVB7s/Y6SJSlMQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.10" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/plugin-syntax-decorators" "^7.22.10" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - 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-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-decorators@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz#7d83ea04d893c442b78ebf4c3cbac59a7211deff" - integrity sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - 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-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - 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.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - 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.3": - 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.3": - 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-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-async-generator-functions@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz#45946cd17f915b10e65c29b8ed18a0a50fc648c8" - integrity sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa" - integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-static-block@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" - integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" - integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" - -"@babel/plugin-transform-destructuring@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2" - integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dynamic-import@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" - integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-export-namespace-from@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" - integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" - integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-json-strings@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" - integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-logical-assignment-operators@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" - integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" - integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" - integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" - integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" - integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" - integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" - integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== - dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.5" - -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - -"@babel/plugin-transform-optional-catch-binding@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" - integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz#076d28a7e074392e840d4ae587d83445bac0372a" - integrity sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" - integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" - integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-runtime@^7.11.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz#89eda6daf1d3af6f36fb368766553054c8d7cd46" - integrity sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" - semver "^6.3.1" - -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/preset-env@^7.11.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.10.tgz#3263b9fe2c8823d191d28e61eac60a79f9ce8a0f" - integrity sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.10" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.10" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.10" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.5" - "@babel/plugin-transform-classes" "^7.22.6" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.10" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.5" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.5" - "@babel/plugin-transform-for-of" "^7.22.5" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.5" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.5" - "@babel/plugin-transform-modules-systemjs" "^7.22.5" - "@babel/plugin-transform-modules-umd" "^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" - "@babel/plugin-transform-numeric-separator" "^7.22.5" - "@babel/plugin-transform-object-rest-spread" "^7.22.5" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.10" - "@babel/plugin-transform-parameters" "^7.22.5" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.5" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" - "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.10" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.11.0", "@babel/runtime@^7.8.4": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" - integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/traverse@^7.22.10", "@babel/traverse@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.10.tgz#20252acb240e746d27c2e82b4484f199cf8141aa" - integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig== - dependencies: - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.10" - "@babel/types" "^7.22.10" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.4.4": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" - integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - to-fast-properties "^2.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/connect-history-api-fallback@*": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#9fd20b3974bdc2bcd4ac6567e2e0f6885cb2cf41" - integrity sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.35" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" - integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*": - version "4.17.17" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/highlight.js@^9.7.0": - version "9.12.4" - resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.12.4.tgz#8c3496bd1b50cc04aeefd691140aa571d4dbfa34" - integrity sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww== - -"@types/http-errors@*": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" - integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== - -"@types/http-proxy@^1.17.5": - version "1.17.11" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293" - integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA== - dependencies: - "@types/node" "*" - -"@types/json-schema@^7.0.5": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - -"@types/linkify-it@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" - integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== - -"@types/markdown-it@^10.0.0": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-10.0.3.tgz#a9800d14b112c17f1de76ec33eff864a4815eec7" - integrity sha512-daHJk22isOUvNssVGF2zDnnSyxHhFYhtjeX4oQaKD6QzL3ZR1QSgiD1g+Q6/WSWYVogNXYDXODtbgW/WiFCtyw== - dependencies: - "@types/highlight.js" "^9.7.0" - "@types/linkify-it" "*" - "@types/mdurl" "*" - highlight.js "^9.7.0" - -"@types/mdurl@*": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" - integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== - -"@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== - -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== - -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/node@*": - version "20.4.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.9.tgz#c7164e0f8d3f12dfae336af0b1f7fdec8c6b204f" - integrity sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ== - -"@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== - -"@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/send@*": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" - integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" - integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -"@types/source-list-map@*": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== - -"@types/tapable@^1": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" - integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== - -"@types/uglify-js@*": - version "3.17.1" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.17.1.tgz#e0ffcef756476410e5bce2cb01384ed878a195b5" - integrity sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g== - dependencies: - source-map "^0.6.1" - -"@types/webpack-dev-server@^3": - version "3.11.6" - resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.6.tgz#d8888cfd2f0630203e13d3ed7833a4d11b8a34dc" - integrity sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ== - dependencies: - "@types/connect-history-api-fallback" "*" - "@types/express" "*" - "@types/serve-static" "*" - "@types/webpack" "^4" - http-proxy-middleware "^1.0.0" - -"@types/webpack-sources@*": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz#16d759ba096c289034b26553d2df1bf45248d38b" - integrity sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg== - dependencies: - "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.7.3" - -"@types/webpack@^4": - version "4.41.33" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.33.tgz#16164845a5be6a306bcbe554a8e67f9cac215ffc" - integrity sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g== - dependencies: - "@types/node" "*" - "@types/tapable" "^1" - "@types/uglify-js" "*" - "@types/webpack-sources" "*" - anymatch "^3.0.0" - source-map "^0.6.0" - -"@vue/babel-helper-vue-jsx-merge-props@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz#8d53a1e21347db8edbe54d339902583176de09f2" - integrity sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA== - -"@vue/babel-helper-vue-transform-on@^1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz#a976486b21e108e545524fe41ffe3fc9bbc28c7f" - integrity sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w== - -"@vue/babel-plugin-jsx@^1.0.3": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz#5088bae7dbb83531d94df3742ff650c12fd54973" - integrity sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - "@vue/babel-helper-vue-transform-on" "^1.1.5" - camelcase "^6.3.0" - html-tags "^3.3.1" - svg-tags "^1.0.0" - -"@vue/babel-plugin-transform-vue-jsx@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz#4d4b3d46a39ea62b7467dd6e26ce47f7ceafb2fe" - integrity sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-helper-vue-jsx-merge-props" "^1.4.0" - html-tags "^2.0.0" - lodash.kebabcase "^4.1.1" - svg-tags "^1.0.0" - -"@vue/babel-preset-app@^4.1.2": - version "4.5.19" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.5.19.tgz#baee457da0065c016f74fac4149f7c97631ba5a7" - integrity sha512-VCNRiAt2P/bLo09rYt3DLe6xXUMlhJwrvU18Ddd/lYJgC7s8+wvhgYs+MTx4OiAXdu58drGwSBO9SPx7C6J82Q== - dependencies: - "@babel/core" "^7.11.0" - "@babel/helper-compilation-targets" "^7.9.6" - "@babel/helper-module-imports" "^7.8.3" - "@babel/plugin-proposal-class-properties" "^7.8.3" - "@babel/plugin-proposal-decorators" "^7.8.3" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.11.0" - "@babel/preset-env" "^7.11.0" - "@babel/runtime" "^7.11.0" - "@vue/babel-plugin-jsx" "^1.0.3" - "@vue/babel-preset-jsx" "^1.2.4" - babel-plugin-dynamic-import-node "^2.3.3" - core-js "^3.6.5" - core-js-compat "^3.6.5" - semver "^6.1.0" - -"@vue/babel-preset-jsx@^1.2.4": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz#f4914ba314235ab097bc4372ed67473c0780bfcc" - integrity sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA== - dependencies: - "@vue/babel-helper-vue-jsx-merge-props" "^1.4.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.4.0" - "@vue/babel-sugar-composition-api-inject-h" "^1.4.0" - "@vue/babel-sugar-composition-api-render-instance" "^1.4.0" - "@vue/babel-sugar-functional-vue" "^1.4.0" - "@vue/babel-sugar-inject-h" "^1.4.0" - "@vue/babel-sugar-v-model" "^1.4.0" - "@vue/babel-sugar-v-on" "^1.4.0" - -"@vue/babel-sugar-composition-api-inject-h@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz#187e1389f8871d89ece743bb50aed713be9d6c85" - integrity sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-composition-api-render-instance@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz#2c1607ae6dffdab47e785bc01fa45ba756e992c1" - integrity sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-functional-vue@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz#60da31068567082287c7337c66ef4df04e0a1029" - integrity sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-inject-h@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz#bf39aa6631fb1d0399b1c49b4c59e1c8899b4363" - integrity sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-v-model@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz#a51d986609f430c4f70ada3a93cc560a2970f720" - integrity sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-helper-vue-jsx-merge-props" "^1.4.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.4.0" - camelcase "^5.0.0" - html-tags "^2.0.0" - svg-tags "^1.0.0" - -"@vue/babel-sugar-v-on@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz#43b7106a9672d8cbeefc0eb8afe1d376edc6166e" - integrity sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.4.0" - camelcase "^5.0.0" - -"@vue/compiler-sfc@2.7.14": - version "2.7.14" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz#3446fd2fbb670d709277fc3ffa88efc5e10284fd" - integrity sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA== - dependencies: - "@babel/parser" "^7.18.4" - postcss "^8.4.14" - source-map "^0.6.1" - -"@vue/component-compiler-utils@^3.1.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz#f9f5fb53464b0c37b2c8d2f3fbfe44df60f61dc9" - integrity sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ== - dependencies: - consolidate "^0.15.1" - hash-sum "^1.0.2" - lru-cache "^4.1.2" - merge-source-map "^1.1.0" - postcss "^7.0.36" - postcss-selector-parser "^6.0.2" - source-map "~0.6.1" - vue-template-es2015-compiler "^1.9.0" - optionalDependencies: - prettier "^1.18.2 || ^2.0.0" - -"@vuepress/core@1.9.9": - version "1.9.9" - resolved "https://registry.yarnpkg.com/@vuepress/core/-/core-1.9.9.tgz#aa8bc4497fcbb6aab9c1e290944d422edeb20495" - integrity sha512-Ekgu409ZSgvAV9n14F3DaEWtgkwrEicg1nWs0gbxGgUCdREeX/7rwxSfKwWwBjCwfCUKR2L3+6pXGjzxex0t+g== - dependencies: - "@babel/core" "^7.8.4" - "@vue/babel-preset-app" "^4.1.2" - "@vuepress/markdown" "1.9.9" - "@vuepress/markdown-loader" "1.9.9" - "@vuepress/plugin-last-updated" "1.9.9" - "@vuepress/plugin-register-components" "1.9.9" - "@vuepress/shared-utils" "1.9.9" - "@vuepress/types" "1.9.9" - autoprefixer "^9.5.1" - babel-loader "^8.0.4" - bundle-require "2.1.8" - cache-loader "^3.0.0" - chokidar "^2.0.3" - connect-history-api-fallback "^1.5.0" - copy-webpack-plugin "^5.0.2" - core-js "^3.6.4" - cross-spawn "^6.0.5" - css-loader "^2.1.1" - esbuild "0.14.7" - file-loader "^3.0.1" - js-yaml "^3.13.1" - lru-cache "^5.1.1" - mini-css-extract-plugin "0.6.0" - optimize-css-assets-webpack-plugin "^5.0.1" - portfinder "^1.0.13" - postcss-loader "^3.0.0" - postcss-safe-parser "^4.0.1" - toml "^3.0.0" - url-loader "^1.0.1" - vue "^2.6.10" - vue-loader "^15.7.1" - vue-router "^3.4.5" - vue-server-renderer "^2.6.10" - vue-template-compiler "^2.6.10" - vuepress-html-webpack-plugin "^3.2.0" - vuepress-plugin-container "^2.0.2" - webpack "^4.8.1" - webpack-chain "^6.0.0" - webpack-dev-server "^3.5.1" - webpack-merge "^4.1.2" - webpackbar "3.2.0" - -"@vuepress/markdown-loader@1.9.9": - version "1.9.9" - resolved "https://registry.yarnpkg.com/@vuepress/markdown-loader/-/markdown-loader-1.9.9.tgz#b44e446a04808b9aef503d32fdcbc1e7fb7afef4" - integrity sha512-nyY+sytuQaDLEIk6Yj9JFUfSQpe9/sz30xQFkGCYqi0lQTRGQM6IcRDgfcTS7b25A0qRlwpDGBfKQiGGMZKSfg== - dependencies: - "@vuepress/markdown" "1.9.9" - loader-utils "^1.1.0" - lru-cache "^5.1.1" - -"@vuepress/markdown@1.9.9": - version "1.9.9" - resolved "https://registry.yarnpkg.com/@vuepress/markdown/-/markdown-1.9.9.tgz#1f582e6302e91a09491ca7bd0c8bcf9683140e03" - integrity sha512-JzFdBdGe5aoiKSaEgF+h3JLDXNVfWPI5DJWXrIt7rhhkMJesF6HowIznPLdXqukzHfXHcPvo9oQ4o6eT0YmVGA== - dependencies: - "@vuepress/shared-utils" "1.9.9" - markdown-it "^8.4.1" - markdown-it-anchor "^5.0.2" - markdown-it-chain "^1.3.0" - markdown-it-emoji "^1.4.0" - markdown-it-table-of-contents "^0.4.0" - prismjs "^1.13.0" - -"@vuepress/plugin-active-header-links@1.9.9": - version "1.9.9" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.9.9.tgz#fad96c550bea0b204fe16266cff1405e8636c1e1" - integrity sha512-lTnIhbuALjOjFts33jJD8r4ScNBxnZ6MtmePKEwvYlC3J9uvngs1Htpb1JzLEX9QCydt+bhLmZ92bTXn/PdTpg== - dependencies: - "@vuepress/types" "1.9.9" - lodash.debounce "^4.0.8" - -"@vuepress/plugin-back-to-top@^1.9.9": - version "1.9.9" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-back-to-top/-/plugin-back-to-top-1.9.9.tgz#eedd5b08e11790cd994636b458188fd40205e967" - integrity sha512-8bNsdZ0Dr96OdcoJ67dxCx1ysXpeTHma8w+YSsqBJoWGEOucBr0nW9oaDH85yoOtpiriWBlhUO32/Q0ojJtMfA== - dependencies: - "@vuepress/types" "1.9.9" - lodash.debounce "^4.0.8" - -"@vuepress/plugin-last-updated@1.9.9": - version "1.9.9" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-last-updated/-/plugin-last-updated-1.9.9.tgz#a7cb5f39b2793c8d113de08a514c316c26cc38c1" - integrity sha512-MV4csmM0/lye83VtkOc+b8fs0roi7mvE7BmCCOE39Z6t8nv/ZmEPOwKeHD0+hXPT+ZfoATYvDcsYU7uxbdw0Pw== - dependencies: - "@vuepress/types" "1.9.9" - cross-spawn "^6.0.5" - -"@vuepress/plugin-nprogress@1.9.9": - version "1.9.9" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-nprogress/-/plugin-nprogress-1.9.9.tgz#4fee4818ddc8ddc6a1778b7f2b74ab784c90915d" - integrity sha512-+3fLxjwTLH8MeU54E7i1ovRu9KzBom2lvSeUsu9B8PuLyrETAqW7Pe1H66awEEALEe0ZnnEU4d7SeVe9ljsLAQ== - dependencies: - "@vuepress/types" "1.9.9" - nprogress "^0.2.0" - -"@vuepress/plugin-register-components@1.9.9": - version "1.9.9" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-register-components/-/plugin-register-components-1.9.9.tgz#95be133d6ef33c03f410caae8eb1fabdf27a7999" - integrity sha512-tddnAiSmJsIWWPzE7TcbGU8xzndXf4a8i4BfIev2QzSUnIOQFZDGXUAsCkw4/f9N9UFxQSObjFPzTeUUxb7EvA== - dependencies: - "@vuepress/shared-utils" "1.9.9" - "@vuepress/types" "1.9.9" - -"@vuepress/plugin-search@1.9.9": - version "1.9.9" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-search/-/plugin-search-1.9.9.tgz#d30804b86f9b7f54b3db0b987a288433be3cfd7b" - integrity sha512-W/FE+YHoXDD4qk2wu5yRMkti271TA4y+7UBMrmCavvVAGrLIRnaZfswRUgIiDlEthBc+Pn8/As/Dy1jFTLBa9A== - dependencies: - "@vuepress/types" "1.9.9" - -"@vuepress/shared-utils@1.9.9", "@vuepress/shared-utils@^1.2.0": - version "1.9.9" - resolved "https://registry.yarnpkg.com/@vuepress/shared-utils/-/shared-utils-1.9.9.tgz#f6561ec2264d54e4e459d17678766ffe09f4bfc6" - integrity sha512-qhk/7QF5LgMEXhEB1hlqreGFgkz4p2pmaBBNFxnAnYmSwmyO+u/oFOpZLI16QRx9Wg6ekR2ENmByQLxV7y4lJg== - dependencies: - chalk "^2.3.2" - escape-html "^1.0.3" - fs-extra "^7.0.1" - globby "^9.2.0" - gray-matter "^4.0.1" - hash-sum "^1.0.2" - semver "^6.0.0" - toml "^3.0.0" - upath "^1.1.0" - -"@vuepress/theme-default@1.9.9": - version "1.9.9" - resolved "https://registry.yarnpkg.com/@vuepress/theme-default/-/theme-default-1.9.9.tgz#26f1965e1204445fa617308d3b06f134baab4936" - integrity sha512-de0FiOwM/h3rFTBSZK0NNBB117lA/e3IHusU7Xm2XeZRiZ/EE3yvbWclZnbbRNt3YjDMmrWXEW/kBTBxfiMuWQ== - dependencies: - "@vuepress/plugin-active-header-links" "1.9.9" - "@vuepress/plugin-nprogress" "1.9.9" - "@vuepress/plugin-search" "1.9.9" - "@vuepress/types" "1.9.9" - docsearch.js "^2.5.2" - lodash "^4.17.15" - stylus "^0.54.8" - stylus-loader "^3.0.2" - vuepress-plugin-container "^2.0.2" - vuepress-plugin-smooth-scroll "^0.0.3" - -"@vuepress/types@1.9.9": - version "1.9.9" - resolved "https://registry.yarnpkg.com/@vuepress/types/-/types-1.9.9.tgz#7c21e4c91c13e58e2ff303ded9ad7425805cb07d" - integrity sha512-ukGW49ILzLhIc7CltHMr+BeIjWKloJNN1mrvbDz3beycp9b9kgH+DXNdRIK9QCKr4fJsy7x08vNMwZr9Nq/PTQ== - dependencies: - "@types/markdown-it" "^10.0.0" - "@types/webpack-dev-server" "^3" - webpack-chain "^6.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== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -agentkeepalive@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef" - integrity sha512-TnB6ziK363p7lR8QpeLC8aMr8EGYBKZTpgzQLfqTs3bR0Oo5VbKdwKf8h0dSzsYrB7lSCgfJnMZKqShvlq5Oyg== - -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, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -algoliasearch@^3.24.5: - version "3.35.1" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.35.1.tgz#297d15f534a3507cab2f5dfb996019cac7568f0c" - integrity sha512-K4yKVhaHkXfJ/xcUnil04xiSrB8B8yHZoFEhWNpXg23eiCnqvTZw1tn/SqvdsANlYHLJlKl0qi3I/Q2Sqo7LwQ== - dependencies: - agentkeepalive "^2.2.0" - debug "^2.6.9" - envify "^4.0.0" - es6-promise "^4.1.0" - events "^1.1.0" - foreach "^2.0.5" - global "^4.3.2" - inherits "^2.0.1" - isarray "^2.0.1" - load-script "^1.0.0" - object-keys "^1.0.11" - querystring-es3 "^0.2.1" - reduce "^1.0.1" - semver "^5.1.0" - tunnel-agent "^0.6.0" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ== - -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-escapes@^4.1.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-html-community@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.0, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -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 sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -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 sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^1.0.1, array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -array.prototype.reduce@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" - integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -arraybuffer.prototype.slice@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" - integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -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 sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - -async-each@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77" - integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autocomplete.js@0.36.0: - version "0.36.0" - resolved "https://registry.yarnpkg.com/autocomplete.js/-/autocomplete.js-0.36.0.tgz#94fe775fe64b6cd42e622d076dc7fd26bedd837b" - integrity sha512-jEwUXnVMeCHHutUt10i/8ZiRaCb0Wo+ZyKxeGsYwBDtw6EJHqEeDrq4UwZRD8YBSvp3g6klP678il2eeiVXN2Q== - dependencies: - immediate "^3.2.3" - -autoprefixer@^9.5.1: - version "9.8.8" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" - integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - picocolors "^0.2.1" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== - -babel-loader@^8.0.4: - version "8.3.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" - integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^2.0.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" - integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.31.0" - -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bluebird@^3.1.1, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg== - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - -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" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.21.9: - version "4.21.10" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - -buffer-json@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23" - integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== - -bundle-require@2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-2.1.8.tgz#28f6de9d4468a6b7b76fb5c9bf52e70f5091245d" - integrity sha512-oOEg3A0hy/YzvNWNowtKD0pmhZKseOFweCbgyMqTIih4gRY1nJWsvrOCT27L9NbIyL5jMjTFrAUpGxxpW68Puw== - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cac@^6.5.6: - version "6.7.14" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - -cacache@^12.0.2, cacache@^12.0.3: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cache-loader@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-3.0.1.tgz#cee6cf4b3cdc7c610905b26bad6c2fc439c821af" - integrity sha512-HzJIvGiGqYsFUrMjAJNDbVZoG7qQA+vy9AIoKs7s9DscNfki0I589mf2w6/tW+kkFH3zyiknoWV5Jdynu6b/zw== - dependencies: - buffer-json "^2.0.0" - find-cache-dir "^2.1.0" - loader-utils "^1.2.3" - mkdirp "^0.5.1" - neo-async "^2.6.1" - schema-utils "^1.0.0" - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-me-maybe@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" - integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase@^5.0.0, camelcase@^5.2.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001517: - version "1.0.30001519" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz#3e7b8b8a7077e78b0eb054d69e6edf5c7df35601" - integrity sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^2.0.3, chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.4.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.1.1: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -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" - -clean-css@4.2.x: - version "4.2.4" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" - integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== - dependencies: - source-map "~0.6.0" - -cli-boxes@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -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" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.3: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.6.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@2.17.x: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -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" - -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - -connect-history-api-fallback@^1.5.0, connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -consola@^2.6.0: - version "2.15.3" - resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" - integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -consolidate@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" - integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== - dependencies: - bluebird "^3.1.1" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -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 sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -copy-webpack-plugin@^5.0.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz#8a889e1dcafa6c91c6cd4be1ad158f1d3823bae2" - integrity sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ== - dependencies: - cacache "^12.0.3" - find-cache-dir "^2.1.0" - glob-parent "^3.1.0" - globby "^7.1.1" - is-glob "^4.0.1" - loader-utils "^1.2.3" - minimatch "^3.0.4" - normalize-path "^3.0.0" - p-limit "^2.2.1" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - webpack-log "^2.0.0" - -core-js-compat@^3.31.0, core-js-compat@^3.6.5: - version "3.32.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.0.tgz#f41574b6893ab15ddb0ac1693681bd56c8550a90" - integrity sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw== - dependencies: - browserslist "^4.21.9" - -core-js@^3.6.4, core-js@^3.6.5: - version "3.32.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.0.tgz#7643d353d899747ab1f8b03d2803b0312a0fb3b6" - integrity sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^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" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q== - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-loader@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea" - integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w== - dependencies: - camelcase "^5.2.0" - icss-utils "^4.1.0" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.14" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^2.0.6" - postcss-modules-scope "^2.1.0" - postcss-modules-values "^2.0.0" - postcss-value-parser "^3.3.0" - schema-utils "^1.0.0" - -css-parse@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" - integrity sha512-UNIFik2RgSbiTwIW1IsFwXWn6vs+bYdq83LKTSOsx7NJR7WII9dxewkHLltfTLVppoUApHV0118a4RZRI9FLwA== - dependencies: - css "^2.0.0" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - -css-what@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -css@^2.0.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== - dependencies: - inherits "^2.0.3" - source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" - integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.3" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw== - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw== - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.1.10: - version "4.1.11" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" - integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.8" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -csstype@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -cyclist@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.2.tgz#673b5f233bf34d8e602b949429f8171d9121bea3" - integrity sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-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== - -deepmerge@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" - integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== - -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== - dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" - -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - 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 sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - 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" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -des.js@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" - integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.0.0, dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - -dns-packet@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" - integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ== - dependencies: - buffer-indexof "^1.0.0" - -docsearch.js@^2.5.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/docsearch.js/-/docsearch.js-2.6.3.tgz#57cb4600d3b6553c677e7cbbe6a734593e38625d" - integrity sha512-GN+MBozuyz664ycpZY0ecdQE0ND/LSgJKhTLA0/v3arIS3S1Rpf2OJz6A35ReMsm91V5apcmzr5/kM84cvUg+A== - dependencies: - algoliasearch "^3.24.5" - autocomplete.js "0.36.0" - hogan.js "^3.0.2" - request "^2.87.0" - stack-utils "^1.0.1" - to-factory "^1.0.0" - zepto "^1.2.0" - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== - -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" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.477: - version "1.4.490" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz#d99286f6e915667fa18ea4554def1aa60eb4d5f1" - integrity sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A== - -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -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.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -envify@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e" - integrity sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw== - dependencies: - esprima "^4.0.0" - through "~2.3.4" - -envinfo@^7.2.0: - version "7.10.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" - integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== - -errno@^0.1.3, errno@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: - version "1.22.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" - integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.1" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.1" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - safe-array-concat "^1.0.0" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.10" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@^4.1.0: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -esbuild-android-arm64@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.7.tgz#8c78cbb617f9f216abfb5a84cca453b51421a1b6" - integrity sha512-9/Q1NC4JErvsXzJKti0NHt+vzKjZOgPIjX/e6kkuCzgfT/GcO3FVBcGIv4HeJG7oMznE6KyKhvLrFgt7CdU2/w== - -esbuild-darwin-64@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.7.tgz#7424bdb64c104556d36b7429af79ab51415ab8f4" - integrity sha512-Z9X+3TT/Xj+JiZTVlwHj2P+8GoiSmUnGVz0YZTSt8WTbW3UKw5Pw2ucuJ8VzbD2FPy0jbIKJkko/6CMTQchShQ== - -esbuild-darwin-arm64@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.7.tgz#6a243dc0132aeb11c1991f968a6a9e393f43c6bc" - integrity sha512-68e7COhmwIiLXBEyxUxZSSU0akgv8t3e50e2QOtKdBUE0F6KIRISzFntLe2rYlNqSsjGWsIO6CCc9tQxijjSkw== - -esbuild-freebsd-64@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.7.tgz#e7281e50522e724c4da502504dcd75be0db46c94" - integrity sha512-76zy5jAjPiXX/S3UvRgG85Bb0wy0zv/J2lel3KtHi4V7GUTBfhNUPt0E5bpSXJ6yMT7iThhnA5rOn+IJiUcslQ== - -esbuild-freebsd-arm64@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.7.tgz#31e513098efd181d76a3ba3ea285836d37f018a3" - integrity sha512-lSlYNLiqyzd7qCN5CEOmLxn7MhnGHPcu5KuUYOG1i+t5A6q7LgBmfYC9ZHJBoYyow3u4CNu79AWHbvVLpE/VQQ== - -esbuild-linux-32@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.7.tgz#82cf96accbf55d3007c3338dc3b3144efa9ae108" - integrity sha512-Vk28u409wVOXqTaT6ek0TnfQG4Ty1aWWfiysIaIRERkNLhzLhUf4i+qJBN8mMuGTYOkE40F0Wkbp6m+IidOp2A== - -esbuild-linux-64@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.7.tgz#67bdfe23a6ca918a0bb8e9558a3ee0fdf98c0bc0" - integrity sha512-+Lvz6x+8OkRk3K2RtZwO+0a92jy9si9cUea5Zoru4yJ/6EQm9ENX5seZE0X9DTwk1dxJbjmLsJsd3IoowyzgVg== - -esbuild-linux-arm64@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.7.tgz#f79c69ff0c176559c418de8e59aa3cf388fff992" - integrity sha512-kJd5beWSqteSAW086qzCEsH6uwpi7QRIpzYWHzEYwKKu9DiG1TwIBegQJmLpPsLp4v5RAFjea0JAmAtpGtRpqg== - -esbuild-linux-arm@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.7.tgz#3d665b35e1c27dbe1c9deb8bf956d7d1f191a21b" - integrity sha512-OzpXEBogbYdcBqE4uKynuSn5YSetCvK03Qv1HcOY1VN6HmReuatjJ21dCH+YPHSpMEF0afVCnNfffvsGEkxGJQ== - -esbuild-linux-mips64le@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.7.tgz#226114a0cc6649ba0ffd3428118a8f622872f16d" - integrity sha512-mFWpnDhZJmj/h7pxqn1GGDsKwRfqtV7fx6kTF5pr4PfXe8pIaTERpwcKkoCwZUkWAOmUEjMIUAvFM72A6hMZnA== - -esbuild-linux-ppc64le@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.7.tgz#5c67ae56517f2644d567b2ca5ecb97f9520cfc49" - integrity sha512-wM7f4M0bsQXfDL4JbbYD0wsr8cC8KaQ3RPWc/fV27KdErPW7YsqshZZSjDV0kbhzwpNNdhLItfbaRT8OE8OaKA== - -esbuild-netbsd-64@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.7.tgz#69dc0469ea089013956d8c6aa71c9e7fc25fc567" - integrity sha512-J/afS7woKyzGgAL5FlgvMyqgt5wQ597lgsT+xc2yJ9/7BIyezeXutXqfh05vszy2k3kSvhLesugsxIA71WsqBw== - -esbuild-openbsd-64@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.7.tgz#3a9d04ecf820708e2e5b7d26fa7332e3f19f6b6c" - integrity sha512-7CcxgdlCD+zAPyveKoznbgr3i0Wnh0L8BDGRCjE/5UGkm5P/NQko51tuIDaYof8zbmXjjl0OIt9lSo4W7I8mrw== - -esbuild-sunos-64@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.7.tgz#7c33a682f0fd9565cae7df165d0e8736b7b62623" - integrity sha512-GKCafP2j/KUljVC3nesw1wLFSZktb2FGCmoT1+730zIF5O6hNroo0bSEofm6ZK5mNPnLiSaiLyRB9YFgtkd5Xg== - -esbuild-windows-32@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.7.tgz#24ec706a5f25b4499048f56146bcff0ed3839dce" - integrity sha512-5I1GeL/gZoUUdTPA0ws54bpYdtyeA2t6MNISalsHpY269zK8Jia/AXB3ta/KcDHv2SvNwabpImeIPXC/k0YW6A== - -esbuild-windows-64@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.7.tgz#dd6d5b5bace93cd7a9174d31fbd727ba21885abf" - integrity sha512-CIGKCFpQOSlYsLMbxt8JjxxvVw9MlF1Rz2ABLVfFyHUF5OeqHD5fPhGrCVNaVrhO8Xrm+yFmtjcZudUGr5/WYQ== - -esbuild-windows-arm64@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.7.tgz#ecfd9ac289606f26760c4f737caaeeadfff3cfe3" - integrity sha512-eOs1eSivOqN7cFiRIukEruWhaCf75V0N8P0zP7dh44LIhLl8y6/z++vv9qQVbkBm5/D7M7LfCfCTmt1f1wHOCw== - -esbuild@0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.7.tgz#e85cead55b0e1001abf1b2ce4a11c1d4d709d13c" - integrity sha512-+u/msd6iu+HvfysUPkZ9VHm83LImmSNnecYPfFI01pQ7TTcsFR+V0BkybZX7mPtIaI7LCrse6YRj+v3eraJSgw== - optionalDependencies: - esbuild-android-arm64 "0.14.7" - esbuild-darwin-64 "0.14.7" - esbuild-darwin-arm64 "0.14.7" - esbuild-freebsd-64 "0.14.7" - esbuild-freebsd-arm64 "0.14.7" - esbuild-linux-32 "0.14.7" - esbuild-linux-64 "0.14.7" - esbuild-linux-arm "0.14.7" - esbuild-linux-arm64 "0.14.7" - esbuild-linux-mips64le "0.14.7" - esbuild-linux-ppc64le "0.14.7" - esbuild-netbsd-64 "0.14.7" - esbuild-openbsd-64 "0.14.7" - esbuild-sunos-64 "0.14.7" - esbuild-windows-32 "0.14.7" - esbuild-windows-64 "0.14.7" - esbuild-windows-arm64 "0.14.7" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - -escape-html@^1.0.3, escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -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 sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -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" - -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== - -esrecurse@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== - -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -eventsource@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-2.0.2.tgz#76dfcc02930fb2ff339520b6d290da573a9e8508" - integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA== - -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" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - 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" - -express@^4.17.1: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - 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 sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -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" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -faye-websocket@^0.11.3, faye-websocket@^0.11.4: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-loader@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" - integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== - dependencies: - loader-utils "^1.0.2" - schema-utils "^1.0.0" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.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-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -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.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - -foreach@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.6.tgz#87bcc8a1a0e74000ff2bf9802110708cfb02eb6e" - integrity sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg== - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== - 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 sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -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== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functions-have-names@^1.2.2, functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -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-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -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 sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig== - -glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" - integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== - dependencies: - ini "1.3.7" - -global@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -globals@^11.1.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== - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g== - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -gray-matter@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" - integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== - dependencies: - js-yaml "^3.13.1" - kind-of "^6.0.2" - section-matter "^1.0.0" - strip-bom-string "^1.0.0" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - 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 sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - 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 sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - -has@^1.0.0, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - integrity sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA== - -hash-sum@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" - integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.2.x, he@^1.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== - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - -highlight.js@^9.7.0: - version "9.18.5" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.5.tgz#d18a359867f378c138d6819edfc2a8acd5f29825" - integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hogan.js@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd" - integrity sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg== - dependencies: - mkdirp "0.3.0" - nopt "1.0.10" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A== - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA== - -html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== - -html-minifier@^3.2.3: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -html-tags@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" - integrity sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g== - -html-tags@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" - integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.5.1: - version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== - dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" - -http-proxy-middleware@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz#43700d6d9eecb7419bf086a128d0f7205d9eb665" - integrity sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg== - dependencies: - "@types/http-proxy" "^1.17.5" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.17.0, http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg== - -icss-utils@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" - -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== - -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^4.0.3: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg== - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w== - dependencies: - resolve-from "^3.0.0" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== - -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 sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA== - -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 sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -ini@1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== - -ip@^1.1.0, ip@^1.1.5: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" - integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== - -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg== - -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -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 sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^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-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA== - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - -is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - -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 sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.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-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== - -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 sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -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 sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -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 sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-cwd@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - -is-path-inside@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -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-regex@^1.0.4, is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -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 sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - -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 sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isarray@^2.0.1, isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - 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 sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -javascript-stringify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" - integrity sha512-fnjC0up+0SjEJtgmmG+teeel68kutkvzfctO/KxE3qJlbunkJYAshgH3boU++gSBHP8z5/r0ts0qRIrHf0RTQQ== - -javascript-stringify@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" - integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== - -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.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -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 sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== - -json5@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2, json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - 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 sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -last-call-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" - integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== - dependencies: - lodash "^4.17.5" - webpack-sources "^1.1.0" - -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - -linkify-it@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" - integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw== - dependencies: - uc.micro "^1.0.1" - -load-script@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" - integrity sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA== - -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug== - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: - version "1.4.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" - integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.kebabcase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.5: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loglevel@^1.6.8: - version "1.8.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" - integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^4.1.2: - 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: - 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" - -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.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 sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - -markdown-it-anchor@^5.0.2: - version "5.3.0" - resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz#d549acd64856a8ecd1bea58365ef385effbac744" - integrity sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA== - -markdown-it-chain@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/markdown-it-chain/-/markdown-it-chain-1.3.0.tgz#ccf6fe86c10266bafb4e547380dfd7f277cc17bc" - integrity sha512-XClV8I1TKy8L2qsT9iX3qiV+50ZtcInGXI80CA+DP62sMs7hXlyV/RM3hfwy5O3Ad0sJm9xIwQELgANfESo8mQ== - dependencies: - webpack-chain "^4.9.0" - -markdown-it-container@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/markdown-it-container/-/markdown-it-container-2.0.0.tgz#0019b43fd02eefece2f1960a2895fba81a404695" - integrity sha512-IxPOaq2LzrGuFGyYq80zaorXReh2ZHGFOB1/Hen429EJL1XkPI3FJTpx9TsJeua+j2qTru4h3W1TiCRdeivMmA== - -markdown-it-emoji@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz#9bee0e9a990a963ba96df6980c4fddb05dfb4dcc" - integrity sha512-QCz3Hkd+r5gDYtS2xsFXmBYrgw6KuWcJZLCEkdfAuwzZbShCmCfta+hwAMq4NX/4xPzkSHduMKgMkkPUJxSXNg== - -markdown-it-table-of-contents@^0.4.0: - version "0.4.4" - resolved "https://registry.yarnpkg.com/markdown-it-table-of-contents/-/markdown-it-table-of-contents-0.4.4.tgz#3dc7ce8b8fc17e5981c77cc398d1782319f37fbc" - integrity sha512-TAIHTHPwa9+ltKvKPWulm/beozQU41Ab+FIefRaQV1NRnpzwcV9QOe6wXQS5WLivm5Q/nlo0rl6laGkMDZE7Gw== - -markdown-it@^8.4.1: - version "8.4.2" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" - integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ== - dependencies: - argparse "^1.0.7" - entities "~1.1.1" - linkify-it "^2.0.0" - mdurl "^1.0.1" - uc.micro "^1.0.5" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -mdurl@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - dependencies: - source-map "^0.6.1" - -merge2@^1.2.3: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -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" - -micromatch@^4.0.2: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -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== - -mime@^2.0.3, mime@^2.4.4: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - -mini-css-extract-plugin@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.6.0.tgz#a3f13372d6fcde912f3ee4cd039665704801e3b9" - integrity sha512-79q5P7YGI6rdnVyIAV4NXpBQJFWdkzJxCim3Kog4078fM0piAaFlwocqbejdWtLW1cEzCexPrh6EdyFsPgVdAw== - dependencies: - loader-utils "^1.1.0" - normalize-url "^2.0.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -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.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" - integrity sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew== - -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.6, mkdirp@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== - 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 sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ== - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -nan@^2.12.1: - version "2.17.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" - integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -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" - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== - -node-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-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -nopt@1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -normalize-url@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" - integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== - dependencies: - prepend-http "^2.0.0" - query-string "^5.0.1" - sort-keys "^2.0.0" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - -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 sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -nprogress@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" - integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== - -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.0.11, object-keys@^1.1.0, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0, object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.6" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz#5e5c384dd209fa4efffead39e3a0512770ccc312" - integrity sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ== - dependencies: - array.prototype.reduce "^1.0.5" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.21.2" - safe-array-concat "^1.0.0" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -opencollective-postinstall@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" - integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== - -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - -optimize-css-assets-webpack-plugin@^5.0.1: - version "5.0.8" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.8.tgz#cbccdcf5a6ef61d4f8cc78cf083a67446e5f402a" - integrity sha512-mgFS1JdOtEGzD8l+EuISqL57cKO+We9GcoiQEmdCWRqqck+FGNmYJtx9qfAPzEz+lRrlThWMuGDaRkI/yWNx/Q== - dependencies: - cssnano "^4.1.10" - last-call-webpack-plugin "^3.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 sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== - dependencies: - retry "^0.12.0" - -p-try@^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== - -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== - dependencies: - no-case "^2.2.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -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 sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -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 sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== - -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 sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - 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" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -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 sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - 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 sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== - -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-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -portfinder@^1.0.13, portfinder@^1.0.26: - version "1.0.32" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" - integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== - dependencies: - async "^2.6.4" - debug "^3.2.7" - mkdirp "^0.5.6" - -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 sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== - dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" - -postcss-load-config@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" - integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== - dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" - -postcss-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== - dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" - -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== - dependencies: - postcss "^7.0.5" - -postcss-modules-local-by-default@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63" - integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - postcss-value-parser "^3.3.1" - -postcss-modules-scope@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - -postcss-modules-values@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64" - integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w== - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^7.0.6" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-safe-parser@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" - integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== - dependencies: - postcss "^7.0.26" - -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== - dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" - integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -postcss@^8.4.14: - version "8.4.27" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057" - integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - -"prettier@^1.18.2 || ^2.0.0": - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-error@^2.0.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== - dependencies: - lodash "^4.17.20" - renderkid "^2.0.4" - -pretty-time@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" - integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== - -prismjs@^1.13.0: - version "1.29.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" - integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== - -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 sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== - -psl@^1.1.28: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - 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.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -pupa@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@^6.11.0: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0, querystring-es3@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@1.2.8, rc@^1.2.8: - 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.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.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -reduce@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce/-/reduce-1.0.2.tgz#0cd680ad3ffe0b060e57a5c68bdfce37168d361b" - integrity sha512-xX7Fxke/oHO5IfZSk77lvPa/7bjMh9BuCk4OOoX5XTXrM7s0Z+MkPfSDfz0q7r91BhhGSs8gii/VEN/7zhCPpQ== - dependencies: - object-keys "^1.1.0" - -regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -registry-auth-token@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" - integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== - dependencies: - rc "1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -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 sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -renderkid@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" - integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^3.0.1" - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -request@^2.87.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -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 sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg== - dependencies: - resolve-from "^3.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 sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - -resolve@^1.14.2, resolve@^1.22.0: - version "1.22.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== - dependencies: - lowercase-keys "^1.0.0" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w== - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg== - -rimraf@^2.5.4, 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-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 sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== - dependencies: - aproba "^1.1.1" - -safe-array-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" - integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -section-matter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" - integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== - dependencies: - extend-shallow "^2.0.1" - kind-of "^6.0.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - -selfsigned@^1.10.8: - version "1.10.14" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.14.tgz#ee51d84d9dcecc61e07e4aba34f229ab525c1574" - integrity sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA== - dependencies: - node-forge "^0.10.0" - -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -semver@^5.1.0, semver@^5.5.0, semver@^5.6.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.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 sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -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 sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -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 sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - 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 sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg== - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -smoothscroll-polyfill@^0.4.3: - version "0.4.4" - resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz#3a259131dc6930e6ca80003e1cb03b603b69abf8" - integrity sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg== - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@^1.5.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.6.1.tgz#350b8eda42d6d52ddc030c39943364c11dcad806" - integrity sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw== - dependencies: - debug "^3.2.7" - eventsource "^2.0.2" - faye-websocket "^0.11.4" - inherits "^2.0.4" - url-parse "^1.5.10" - -sockjs@^0.3.21: - version "0.3.24" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@~0.5.12: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stack-utils@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" - integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== - dependencies: - escape-string-regexp "^2.0.0" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -std-env@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-2.3.1.tgz#d42271908819c243f8defc77a140fc1fcee336a1" - integrity sha512-eOsoKTWnr6C8aWrqJJ2KAReXoa7Vn5Ywyw6uCXgA/xDhxPoaIsBa5aNJmISY04dLwXPBnDHW4diGM7Sn5K4R/g== - dependencies: - ci-info "^3.1.1" - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0, string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -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 sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -stylus-loader@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-3.0.2.tgz#27a706420b05a38e038e7cacb153578d450513c6" - integrity sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA== - dependencies: - loader-utils "^1.0.2" - lodash.clonedeep "^4.5.0" - when "~3.6.x" - -stylus@^0.54.8: - version "0.54.8" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147" - integrity sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg== - dependencies: - css-parse "~2.0.0" - debug "~3.1.0" - glob "^7.1.6" - mkdirp "~1.0.4" - safer-buffer "^2.1.2" - sax "~1.2.4" - semver "^6.3.0" - source-map "^0.7.3" - -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" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== - -svgo@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -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== - -term-size@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2: - version "4.8.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" - integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== - 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 sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -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.4: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== - -to-factory@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-factory/-/to-factory-1.0.0.tgz#8738af8bd97120ad1d4047972ada5563bf9479b1" - integrity sha512-JVYrY42wMG7ddf+wBUQR/uHGbjUHZbLisJ8N62AMm0iTZ0p8YTcZLzdtomU0+H+wa99VbkyvQGB3zxB7NDzgIQ== - -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 sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -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 sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - -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 sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -toml@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" - integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== - -toposort@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" - integrity sha512-FclLrw8b9bMWf4QlCJuHBEVhSRsqDj6u3nIjAzPeJvgl//1hBlffdlk0MALceL14+koWEdU4ofRAXofbODxQzg== - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -uc.micro@^1.0.1, uc.micro@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" - integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== - -uglify-js@3.4.x: - version "3.4.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" - integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ== - -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" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.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== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -update-notifier@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" - integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - 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 sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -url-loader@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8" - integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg== - dependencies: - loader-utils "^1.1.0" - mime "^2.0.3" - schema-utils "^1.0.0" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - -url-parse@^1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.1.tgz#26f90f615427eca1b9f4d6a28288c147e2302a32" - integrity sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA== - dependencies: - punycode "^1.4.1" - qs "^6.11.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ== - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -vue-hot-reload-api@^2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" - integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== - -vue-loader@^15.7.1: - version "15.10.1" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.10.1.tgz#c451c4cd05a911aae7b5dbbbc09fb913fb3cca18" - integrity sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA== - dependencies: - "@vue/component-compiler-utils" "^3.1.0" - hash-sum "^1.0.2" - loader-utils "^1.1.0" - vue-hot-reload-api "^2.3.0" - vue-style-loader "^4.1.0" - -vue-router@^3.4.5: - version "3.6.5" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.6.5.tgz#95847d52b9a7e3f1361cb605c8e6441f202afad8" - integrity sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ== - -vue-server-renderer@^2.6.10: - version "2.7.14" - resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.7.14.tgz#986f3fdca63fbb38bb6834698f11e0d6a81f182f" - integrity sha512-NlGFn24tnUrj7Sqb8njhIhWREuCJcM3140aMunLNcx951BHG8j3XOrPP7psSCaFA8z6L4IWEjudztdwTp1CBVw== - dependencies: - chalk "^4.1.2" - hash-sum "^2.0.0" - he "^1.2.0" - lodash.template "^4.5.0" - lodash.uniq "^4.5.0" - resolve "^1.22.0" - serialize-javascript "^6.0.0" - source-map "0.5.6" - -vue-style-loader@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" - integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg== - dependencies: - hash-sum "^1.0.2" - loader-utils "^1.0.2" - -vue-template-compiler@^2.6.10: - version "2.7.14" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz#4545b7dfb88090744c1577ae5ac3f964e61634b1" - integrity sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ== - dependencies: - de-indent "^1.0.2" - he "^1.2.0" - -vue-template-es2015-compiler@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" - integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== - -vue@^2.6.10: - version "2.7.14" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.14.tgz#3743dcd248fd3a34d421ae456b864a0246bafb17" - integrity sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ== - dependencies: - "@vue/compiler-sfc" "2.7.14" - csstype "^3.1.0" - -vuepress-html-webpack-plugin@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/vuepress-html-webpack-plugin/-/vuepress-html-webpack-plugin-3.2.0.tgz#219be272ad510faa8750d2d4e70fd028bfd1c16e" - integrity sha512-BebAEl1BmWlro3+VyDhIOCY6Gef2MCBllEVAP3NUAtMguiyOwo/dClbwJ167WYmcxHJKLl7b0Chr9H7fpn1d0A== - dependencies: - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - tapable "^1.0.0" - toposort "^1.0.0" - util.promisify "1.0.0" - -vuepress-plugin-container@^2.0.2: - version "2.1.5" - resolved "https://registry.yarnpkg.com/vuepress-plugin-container/-/vuepress-plugin-container-2.1.5.tgz#37fff05662fedbd63ffd3a5463b2592c7a7f3133" - integrity sha512-TQrDX/v+WHOihj3jpilVnjXu9RcTm6m8tzljNJwYhxnJUW0WWQ0hFLcDTqTBwgKIFdEiSxVOmYE+bJX/sq46MA== - dependencies: - "@vuepress/shared-utils" "^1.2.0" - markdown-it-container "^2.0.0" - -vuepress-plugin-smooth-scroll@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/vuepress-plugin-smooth-scroll/-/vuepress-plugin-smooth-scroll-0.0.3.tgz#6eff2d4c186cca917cc9f7df2b0af7de7c8c6438" - integrity sha512-qsQkDftLVFLe8BiviIHaLV0Ea38YLZKKonDGsNQy1IE0wllFpFIEldWD8frWZtDFdx6b/O3KDMgVQ0qp5NjJCg== - dependencies: - smoothscroll-polyfill "^0.4.3" - -vuepress@^1.9.9: - version "1.9.9" - resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-1.9.9.tgz#75b313f48a21b2eeb435cad52333f26b3b8a7404" - integrity sha512-CU94W3EdWaCavGx2VSvQJMI/hyv+m/YMdrvJJw67EVfmmJJDb1iTGrilDgLd0qsyrXzBy0Ru9Qi6rkf4IwcOTg== - dependencies: - "@vuepress/core" "1.9.9" - "@vuepress/theme-default" "1.9.9" - "@vuepress/types" "1.9.9" - cac "^6.5.6" - envinfo "^7.2.0" - opencollective-postinstall "^2.0.2" - update-notifier "^4.0.0" - -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -webpack-chain@^4.9.0: - version "4.12.1" - resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-4.12.1.tgz#6c8439bbb2ab550952d60e1ea9319141906c02a6" - integrity sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ== - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^1.6.0" - -webpack-chain@^6.0.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.5.1.tgz#4f27284cbbb637e3c8fbdef43eef588d4d861206" - integrity sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA== - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^2.0.1" - -webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@^3.5.1: - version "3.11.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz#8c86b9d2812bf135d3c9bce6f07b718e30f7c3d3" - integrity sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA== - dependencies: - ansi-html-community "0.0.8" - bonjour "^3.5.0" - chokidar "^2.1.8" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.8" - semver "^6.3.0" - serve-index "^1.9.1" - sockjs "^0.3.21" - sockjs-client "^1.5.0" - spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-merge@^4.1.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== - dependencies: - lodash "^4.17.15" - -webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.8.1: - version "4.46.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" - integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" - -webpackbar@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-3.2.0.tgz#bdaad103fad11a4e612500e72aaae98b08ba493f" - integrity sha512-PC4o+1c8gWWileUfwabe0gqptlXUDJd5E0zbpr2xHP1VSOVlZVPBZ8j6NCR8zM5zbKdxPhctHXahgpNK1qFDPw== - dependencies: - ansi-escapes "^4.1.0" - chalk "^2.4.1" - consola "^2.6.0" - figures "^3.0.0" - pretty-time "^1.1.0" - std-env "^2.2.1" - text-table "^0.2.0" - wrap-ansi "^5.1.0" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -when@~3.6.x: - version "3.6.4" - resolved "https://registry.yarnpkg.com/when/-/when-3.6.4.tgz#473b517ec159e2b85005497a13983f095412e34e" - integrity sha512-d1VUP9F96w664lKINMGeElWdhhb5sC+thXM+ydZGU3ZnaE09Wv6FaS+mpM9570kcDs/xMfcXJBTLsMdHEFYY9Q== - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - -which-typed-array@^1.1.10, which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@^1.2.9: - 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" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -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 sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" - -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - -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.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -zepto@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/zepto/-/zepto-1.2.0.tgz#e127bd9e66fd846be5eab48c1394882f7c0e4f98" - integrity sha512-C1x6lfvBICFTQIMgbt3JqMOno3VOtkWat/xEakLTOurskYIHPmzJrzd1e8BnmtdDVJlGuk5D+FxyCA8MPmkIyA== From 7ce5e15e75f0bdc03c3cce09a31a0a702622a2ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B7=B3=E5=86=89?= <455274752@qq.com> Date: Tue, 10 Oct 2023 11:50:31 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E5=8F=8A=E6=96=87=E4=BB=B6=E5=A4=A7=E5=B0=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/guide/work/messagehandler.md | 58 ++++ docs/zh/guide/mp/advanced-interface.md | 27 ++ docs/zh/guide/mp/advanced.md | 11 + docs/zh/guide/mp/install.md | 73 +++++ docs/zh/guide/mp/menu.md | 72 +++++ docs/zh/guide/mp/register.md | 56 ++++ docs/zh/guide/mp/source-code.md | 15 + docs/zh/guide/work/advanced-interface.md | 68 +++++ docs/zh/guide/work/advanced.md | 11 + docs/zh/guide/work/install.md | 67 +++++ docs/zh/guide/work/jssdk-agent-config.md | 128 +++++++++ docs/zh/guide/work/jssdk-general.md | 91 ++++++ docs/zh/guide/work/menu.md | 79 +++++ docs/zh/guide/work/oauth2.0.md | 98 +++++++ docs/zh/guide/work/register.md | 64 +++++ docs/zh/guide/work/source-code.md | 15 + docs/zh/guide/wxopen/advanced-interface.md | 35 +++ docs/zh/guide/wxopen/advanced.md | 11 + docs/zh/guide/wxopen/client-development.md | 13 + docs/zh/guide/wxopen/get-phone-number.md | 89 ++++++ docs/zh/guide/wxopen/install.md | 69 +++++ docs/zh/guide/wxopen/login.md | 319 +++++++++++++++++++++ docs/zh/guide/wxopen/other.md | 19 ++ docs/zh/guide/wxopen/register.md | 57 ++++ docs/zh/guide/wxopen/request-service.md | 108 +++++++ docs/zh/guide/wxopen/source-code.md | 15 + 26 files changed, 1668 insertions(+) create mode 100644 docs/en/guide/work/messagehandler.md create mode 100644 docs/zh/guide/mp/advanced-interface.md create mode 100644 docs/zh/guide/mp/advanced.md create mode 100644 docs/zh/guide/mp/install.md create mode 100644 docs/zh/guide/mp/menu.md create mode 100644 docs/zh/guide/mp/register.md create mode 100644 docs/zh/guide/mp/source-code.md create mode 100644 docs/zh/guide/work/advanced-interface.md create mode 100644 docs/zh/guide/work/advanced.md create mode 100644 docs/zh/guide/work/install.md create mode 100644 docs/zh/guide/work/jssdk-agent-config.md create mode 100644 docs/zh/guide/work/jssdk-general.md create mode 100644 docs/zh/guide/work/menu.md create mode 100644 docs/zh/guide/work/oauth2.0.md create mode 100644 docs/zh/guide/work/register.md create mode 100644 docs/zh/guide/work/source-code.md create mode 100644 docs/zh/guide/wxopen/advanced-interface.md create mode 100644 docs/zh/guide/wxopen/advanced.md create mode 100644 docs/zh/guide/wxopen/client-development.md create mode 100644 docs/zh/guide/wxopen/get-phone-number.md create mode 100644 docs/zh/guide/wxopen/install.md create mode 100644 docs/zh/guide/wxopen/login.md create mode 100644 docs/zh/guide/wxopen/other.md create mode 100644 docs/zh/guide/wxopen/register.md create mode 100644 docs/zh/guide/wxopen/request-service.md create mode 100644 docs/zh/guide/wxopen/source-code.md diff --git a/docs/en/guide/work/messagehandler.md b/docs/en/guide/work/messagehandler.md new file mode 100644 index 0000000000..3484021832 --- /dev/null +++ b/docs/en/guide/work/messagehandler.md @@ -0,0 +1,58 @@ +# MessageHandler + +The `MessageHandler` is used to handle messages from the enterprise WeChat dialogue window. + +The SDK has all the basic functionality needed for the developer, the developer just needs to create a custom subclass to supplement the business logic that needs to be customised. + +## Custom MessageHandler + +In the current example, we named our custom MessageHandler `WorkCustomMessageHandler`. + +> WorkCustomMessageHandler.cs Reference file for this project: +> +> /MessageHandlers/ directory +> **_WorkCustomMessageHandler.cs_** MessageHandler main file, responsible for general message handling. +> **_WorkCustomMessageContext.cs_** Custom rewrite of DefaultMpMessageContext context (optional) + +Of all the demonstrated override methods in `WorkCustomMessageHandler.cs`, only the `DefaultResponseMessage()` method is required to be overridden, and all the other `OnXxxRequest()` methods are optional, so that when the user sends a message, and the corresponding override method cannot be found, then the message will be handled by the `DefaultMpMessageContext.cs`. When the user sends a message and can't find a corresponding overridden method, the `DefaultResponseMessage()` method will be called. + +The MessageHandler has two ways of carrying the message so that it can be accessed externally (by the WeChat server) via a URL. These are the **Middleware method** (recommended) and the **Controller method**. The `WorkCustomMessageHandler` used in both ways is common, so it can be switched and coexisted at any time. + +## Middleware approach to hosting MessageHandler + +The middleware approach is the recommended and most simplified way, there is no need to create any new files, just introduce the middleware in the `Program.cs` file underneath all the Senparc.Weixin registration code after it has been executed: + +```cs +app.UseMessageHandlerForWork("/WorkAsync", WorkCustomMessageHandler.GenerateMessageHandler, options => +{ + options.AccountSettingFunc = context => Senparc.Weixin.Config.SenparcWeixinSetting; +}); +``` + +Once done, the MessageHandler can be accessed via Url **`Domain/WorkAsync`**, set to the message URL of the public backend. + +[test /WorkAsync](https://sdk.weixin.senparc.com/WorkAsync) + +> Reference document for this project: +> +> /**_Program.cs_** + +[Test /Work](https://sdk.weixin.senparc.com/Work) + +For more middleware approaches, please refer to (the same way as public use): ["Using MessageHandler Middleware in .NET Core 2.0/3.0"](https://www.cnblogs.com/szw/p/Wechat-MessageHandler-Middleware.html) (also for .NET 6.0 and above). + +## Controller approach to hosting MessageHandler + +When the middleware approach is not enough, you can use a Controller to "expand" the execution process and control or intervene more precisely at each step. + +To use Controller, you need to create 2 Actions, which correspond to WeChat background authentication (Get request) and real message push (Post request). The project example is located in WorkController.cs. + +> WorkController.cs Reference file for this project: +> +> /Controllers/**_WorkController.cs_** + +Once done, you can access the MessageHandler via Url **`Domain/Work`**, set to the message URL of the public backend. + +[Test /Work](https://sdk.weixin.senparc.com/Work) + +For more Controller methods, please refer to [Understanding MessageHandler](https://www.cnblogs.com/szw/p/3414862.html) (recommended to use the full set of asynchronous methods). diff --git a/docs/zh/guide/mp/advanced-interface.md b/docs/zh/guide/mp/advanced-interface.md new file mode 100644 index 0000000000..d301a67975 --- /dev/null +++ b/docs/zh/guide/mp/advanced-interface.md @@ -0,0 +1,27 @@ +# 高级接口 + +完成 `Program.cs` 文件中的常规注册后,即可在程序的任意地方使用高级接口。 + +> 注意: +> 1、高级接口的配置和 `MessageHandler` 没有关联,两者可以独立或配合使用。 +> 2、SDK 内几乎所有高级接口的第一个参数同时支持传入 AppId 或 AccessToken,通常名称为 `appIdOrAccessToken`,SDK 会根据参数特征自动识别输入的是 AppId 还是 AccessToken,并做区分处理。 + +## 使用 AppId 调用接口(推荐) + +例如,我们可以在任意一个方法中调用一个高级接口: + +```cs +var appId = Senparc.Weixin.Config.SenparcWeixinSetting.AppId; +var result = await Senparc.Weixin.MP.AdvancedAPIs.UserApi.GetAsync(appId);//获取关注者 OpenId 信息 +``` + +> appId 参数,必须是已经经过注册的,这样即使 AccessToken 过期,SDK 也会全自动处理。如果是未经过注册的 appId,则需要先获取 AccessToken,然后调用接口。 + +## 使用 AccessToken 调用接口(不推荐) + +```cs +var accessToken = Senparc.Weixin.MP.CommonApi.GetTokenAsync(appId, appSecret);//获取 AccessToken +var result = await Senparc.Weixin.MP.AdvancedAPIs.UserApi.GetAsync(accessToken);//获取关注者 OpenId 信息 +``` + +> 注意:使用 AccessToken 方式调用接口,无法保证当前 AccessToken 的有效性,因此建议使用前进行有效性校验,并使用 `try-catch` 方式捕获 AccessToken 不可用的异常,然后进行重试。因此直接使用 AccessToken 调用接口的方式并不推荐在常规情况下使用。 diff --git a/docs/zh/guide/mp/advanced.md b/docs/zh/guide/mp/advanced.md new file mode 100644 index 0000000000..1b32c519b3 --- /dev/null +++ b/docs/zh/guide/mp/advanced.md @@ -0,0 +1,11 @@ +# 进阶 + +当前示例展示了最基本和常用的功能,如果您需要了解更多高级玩法,并且有扎实的编程功底,请参考完整示例。 + +> 完整示例解决方案文件: +> +> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7.sln](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/All/net7-mvc) + +> 务必阅读 readme 文件: +> +> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/readme.md](https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/All/net7-mvc/readme.md) diff --git a/docs/zh/guide/mp/install.md b/docs/zh/guide/mp/install.md new file mode 100644 index 0000000000..ec39b26fbf --- /dev/null +++ b/docs/zh/guide/mp/install.md @@ -0,0 +1,73 @@ +# 如何安装? + +您可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包,推荐),以方便随时获取官方的更新。注意:直接引用源码和引用 Nuget 包只能二选一。 + +## 引用源码 + +您可以在当前解决方案中,**Libraries** 目录下,将所需要引用的程序集引用(复制)到您开发环境的解决方案中,请注意需要同时引用被依赖的项目,如 `Senparc.Weixin` 项目是所有项目都需要依赖的。 + +当前示例项目默认就使用了直接引用源码的方式,可从 .csproj 文件中看到引用方式: + +```cs + + + + + +``` + +## 引用程序集(推荐) + +您可以通过 `Visual Studio`、`Visual Studio Code`、`dotnet 命令行` 等多种方式自动安装 Nuget 包。 + +### Visual Studio + +在开发项目【解决方案资源管理器】中,对需要添加 Senparc.Weixin.MP 的模块点击右键,点击【管理 Nuget 程序包】,在【浏览】标签中输入 **Senparc.Weixin.MP**,点击右侧【安装】按钮。如下图所示: + +![通过 Visual Studio 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-01.png) + +### Visual Studio Code + +首先,确认已经安装好 [VS Code](https://code.visualstudio.com/) 以及 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 + +然后,打开解决方案或项目所在目录,按 Ctrl+~,打开终端面板: + +![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-03.png) + +进入需要添加 Senparc.Weixin.MP 的模块的项目的目录,输入: + +> ```cs +> dotnet add package Senparc.Weixin.MP +> ``` + +安装 Senparc.Weixin.MP 模块 + +![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-04.png) + +安装完成后,可查看对应 .csproj 文件,被添加引用,如: + +```cs + + + +``` + +### dotnet 命令行 + +首先,确认已经安装好 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 + +进入需要添加 Senparc.Weixin.MP 的模块的项目的目录,输入: + +> ```cs +> dotnet add package Senparc.Weixin.MP +> ``` + +![通过 dotnet CLI 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-02.png) + +安装完成后,可查看对应 .csproj 文件,被添加引用,如: + +```cs + + + +``` diff --git a/docs/zh/guide/mp/menu.md b/docs/zh/guide/mp/menu.md new file mode 100644 index 0000000000..7bdfea2daa --- /dev/null +++ b/docs/zh/guide/mp/menu.md @@ -0,0 +1,72 @@ +# 菜单设置 + +公众号菜单是公众号界面的重要元素,菜单的使用分为 **设置** 和 **使用** 两个环节。 + +## 设置 + +方法一:使用微信公众号后台界面设置(不使用开发模式),此处略。 + +方法二(推荐):使用可视化编辑器(No Code):[点击查看介绍](https://sdk.weixin.senparc.com/Menu)。 + +方法三:使用代码进行设置(只需要执行一次,建议放在管理员后台,手动运行),如: + +```cs +public async Task CreateMenuAsync() +{ + ButtonGroup bg = new ButtonGroup(); + + //定义一级菜单 + var subButton = new SubButton() + { + name = "一级菜单" + }; + bg.button.Add(subButton); + + //下属二级菜单 + subButton.sub_button.Add(new SingleViewButton() + { + url = "https://book.weixin.senparc.com/book/link?code=SenparcRobotMenu", + name = "《微信开发深度解析》" + }); + subButton.sub_button.Add(new SingleClickButton() + { + key = "OneClick", + name = "单击测试" + }); + subButton.sub_button.Add(new SingleViewButton() + { + url = "https://weixin.senparc.com/", + name = "Url跳转" + }); + + //最多可添加 3 个一级自定义菜单,每个菜单下最多 5 个子菜单 + + var result = await CommonApi.CreateMenuAsync(appId, bg); +} +``` + +## 使用 + +设置完菜单后,当客户端点击菜单时,微信服务器会自动推送响应的回调信息到消息 URL(即已经设置好的 MessageHandler 内),只需在 CustomMessageHandler 中重写(`override`)对应的方法即可。如针对上述 **方法三** 已经设定生效的菜单,当用户点击【单击测试】按钮时,我们可以在 CustomMessageHandler 中进行接收和处理: + +```cs +public override async Task OnEvent_ClickRequestAsync(RequestMessageEvent_Click requestMessage) +{ + var reponseMessage = CreateResponseMessage(); + + if (requestMessage.EventKey == "OneClick") + { + reponseMessage.Content = "您点击了【单击测试】按钮"; + } + else + { + reponseMessage.Content = "您点击了其他事件按钮"; + } + + return reponseMessage; +} +``` + +> 本项目参考文件: +> +> /MessageHandlers/**_CustomMessageHandler_Events.cs_** diff --git a/docs/zh/guide/mp/register.md b/docs/zh/guide/mp/register.md new file mode 100644 index 0000000000..913c737837 --- /dev/null +++ b/docs/zh/guide/mp/register.md @@ -0,0 +1,56 @@ +# 注册 + +## 全局注册 + +所有的 Senparc.Weixin SDK 注册过程都是类似的。 + +首先,完成所有 Senparc.Weixin SDK 的整体注册代码。在 Program.cs 中加入以下代码: + +![注册 Senparc.Weixin](https://sdk.weixin.senparc.com/Docs/MP/images/home-dev-register-01.png) + +说明: + +1. `builder.Services.AddMemoryCache()` Senparc.Weixin 支持本机缓存、Redis、Memcached 等多种缓存策略,默认使用本机缓存,此时需要激活本地缓存。 +2. `builder.Services.AddSenparcWeixinServices(builder.Configuration)` 用于完成 Senparc.Weixin 的注册。 +3. `app.UseSenparcWeixin()` 方法用于配置和启用 Senparc.Weixin。 + +以上代码对于所有的 Senparc.Weixin 下级模块都是相同的,只需要 3 句代码。 + +> 本项目参考文件: +> +> /**_Program.cs_** + +## 公众号注册 + +在上述代码中的第 17 行委托方法中插入代码,即可完成默认公众号的注册: + +```cs +register.RegisterMpAccount(weixinSetting, "【盛派网络小助手】公众号"); +``` + +![注册微信公众号](https://sdk.weixin.senparc.com/Docs/MP/images/home-dev-register-02.png "注册微信公众号") + +其中,`weixinSetting` 的值默认来自于 `appsettings.json`: + +```json + "SenparcWeixinSetting": { + "IsDebug": true, + + "Token": "#{Token}#", + "EncodingAESKey": "#{EncodingAESKey}#", + "WeixinAppId": "#{WeixinAppId}#", + "WeixinAppSecret": "#{WeixinAppSecret}#" + } +``` + +![配置参数](https://sdk.weixin.senparc.com/Docs/MP/images/home-dev-register-03.png "配置参数") + +其中,`Token`、`EncodingAESKey`、`WeixinAppId` 和 `WeixinAppSecret` 对应了微信公众号后台的配置参数。 + +> 本项目参考文件: +> +> /**_appsettings.json_** + +配置完成。 + +> 提示:自动注册的信息可通过 `Senparc.Weixin.Config.SenparcWeixinSetting` 获取。 diff --git a/docs/zh/guide/mp/source-code.md b/docs/zh/guide/mp/source-code.md new file mode 100644 index 0000000000..1b4978d264 --- /dev/null +++ b/docs/zh/guide/mp/source-code.md @@ -0,0 +1,15 @@ +# 源码 + +## Senparc.Weixin SDK 源码 + +GitHub:[https://github.com/JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK)(更新更快) + +Gitee:[https://gitee.com/JeffreySu/WeiXinMPSDK](https://gitee.com/JeffreySu/WeiXinMPSDK)(从 GitHub 同步) + +## 打包代码 + +Nuget 包地址:[https://www.nuget.org/packages/Senparc.Weixin.MP](https://www.nuget.org/packages/Senparc.Weixin.MP) + +## 本地源码文件 + +Senparc.Weixin.MP 源码位置:[/src/Senparc.Weixin.MP](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.MP) diff --git a/docs/zh/guide/work/advanced-interface.md b/docs/zh/guide/work/advanced-interface.md new file mode 100644 index 0000000000..52cc4ac6ed --- /dev/null +++ b/docs/zh/guide/work/advanced-interface.md @@ -0,0 +1,68 @@ +# 高级接口 + +完成 `Program.cs` 文件中的常规注册后,即可在程序的任意地方使用高级接口。 + +> 注意: +> 1、高级接口的配置和 `MessageHandler` 没有关联,两者可以独立或配合使用。 +> 2、由于企业微信使用 CorpId + Secret 来定位(区别)每个应用的授权信息,因此,SDK 中将两者合并成一个唯一参数,命名为 **AppKey**,可通过 `AccessTokenContainer.BuildingKey(string corpId, string corpSecret)` 方法获取合成后的 **AppKey**。 +> 3、企业微信 SDK 内几乎所有高级接口的第一个参数同时支持传入 AppKey 或 AccessToken,通常名称为 `accessTokenOrAppKey`,SDK 会根据参数特征自动识别输入的是 AppKey 还是 AccessToken,并做区分处理。 + +## 使用 AppKey 调用接口(推荐) + +例如,我们可以在任意一个方法中调用一个高级接口: + +```cs +public async Task TryApiTryApiByAppKey() +{ + // 获取注册信息 + var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting; + // 获取 AppKey + var appKey = AccessTokenContainer.BuildingKey(workWeixinSetting); + //发送请求 + try + { + //发送文字提醒 + var result = await Senparc.Weixin.Work.AdvancedAPIs.MassApi.SendTextAsync(appKey, "001", "这是一条来企业微信的消息"); + return Content("OK"); + } + catch (ErrorJsonResultException ex) + { + return Content($"出错啦:{ex.Message}"); + } +} +``` + +> `workWeixinSetting` 参数,必须是已经经过注册的企业微信信息(内部包括 CorpId 和 Secret),这样即使 AccessToken 过期,SDK 也会全自动处理。如果是未经过注册的 CorpId 和 Secret,则需要先获取 AccessToken,然后调用接口。 + +> 本项目参考文件: +> +> /Controllers/**_AdvancedApiController.cs_** + +## 使用 AccessToken 调用接口(不推荐) + +```cs +public async Task TryApiByAccessToken() +{ + // 获取注册信息 + var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting; + // 获取 AccessToken + var accessToken = await AccessTokenContainer.GetTokenAsync(workWeixinSetting.WeixinCorpId, workWeixinSetting.WeixinCorpSecret); + //发送请求 + try + { + //发送文字提醒 + var result = await Senparc.Weixin.Work.AdvancedAPIs.MassApi.SendTextAsync(accessToken, "001", "这是一条来企业微信的消息"); + return Content("OK"); + } + catch (ErrorJsonResultException ex) + { + return Content($"出错啦:{ex.Message}"); + } +} +``` + +> 注意:使用 AccessToken 方式调用接口,无法保证当前 AccessToken 的有效性,因此建议使用前进行有效性校验,并使用 `try-catch` 方式捕获 AccessToken 不可用的异常,然后进行重试。因此直接使用 AccessToken 调用接口的方式并不推荐在常规情况下使用。 + +> 本项目参考文件: +> +> /Controllers/**_AdvancedApiController.cs_** diff --git a/docs/zh/guide/work/advanced.md b/docs/zh/guide/work/advanced.md new file mode 100644 index 0000000000..1b32c519b3 --- /dev/null +++ b/docs/zh/guide/work/advanced.md @@ -0,0 +1,11 @@ +# 进阶 + +当前示例展示了最基本和常用的功能,如果您需要了解更多高级玩法,并且有扎实的编程功底,请参考完整示例。 + +> 完整示例解决方案文件: +> +> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7.sln](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/All/net7-mvc) + +> 务必阅读 readme 文件: +> +> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/readme.md](https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/All/net7-mvc/readme.md) diff --git a/docs/zh/guide/work/install.md b/docs/zh/guide/work/install.md new file mode 100644 index 0000000000..44e9756d62 --- /dev/null +++ b/docs/zh/guide/work/install.md @@ -0,0 +1,67 @@ +# 如何安装? + +您可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包,推荐),以方便随时获取官方的更新。注意:直接引用源码和引用 Nuget 包只能二选一。 + +## 引用源码 + +您可以在当前解决方案中,**Libraries** 目录下,将所需要引用的程序集引用(复制)到您开发环境的解决方案中,请注意需要同时引用被依赖的项目,如 `Senparc.Weixin` 项目是所有项目都需要依赖的。 + +当前示例项目默认就使用了直接引用源码的方式,可从 .csproj 文件中看到引用方式: + +```cs + + + + + +``` + +## 引用程序集(推荐) + +您可以通过 `Visual Studio`、`Visual Studio Code`、`dotnet 命令行` 等多种方式自动安装 Nuget 包。 + +### Visual Studio + +在开发项目【解决方案资源管理器】中,对需要添加 Senparc.Weixin.Work 的模块点击右键,点击【管理 Nuget 程序包】,在【浏览】标签中输入 **Senparc.Weixin.Work**,点击右侧【安装】按钮。如下图所示: + +![通过 Visual Studio 安装](https://sdk.weixin.senparc.com/Docs/Work/images/home-install-01.png) + +## Visual Studio Code + +首先,确认已经安装好 [VS Code](https://code.visualstudio.com/) 以及 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 + +然后,打开解决方案或项目所在目录,按 Ctrl+~,打开终端面板,进入需要添加 Senparc.Weixin.Work 的模块的项目的目录,输入: + +> ```cs +> dotnet add package Senparc.Weixin.Work +> ``` + +![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/Work/images/home-install-03.png)安装 Senparc.Weixin.Work 模块 + +安装完成后,可查看对应 .csproj 文件,被添加引用,如: + +```cs + + + +``` + +## dotnet 命令行 + +首先,确认已经安装好 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 + +进入需要添加 Senparc.Weixin.Work 的模块的项目的目录,输入: + +> ```cs +> dotnet add package Senparc.Weixin.Work +> ``` + +![通过 dotnet CLI 安装](https://sdk.weixin.senparc.com/Docs/Work/images/home-install-02.png)通过 dotnet CLI 安装 + +安装完成后,可查看对应 .csproj 文件,被添加引用,如: + +```cs + + + +``` diff --git a/docs/zh/guide/work/jssdk-agent-config.md b/docs/zh/guide/work/jssdk-agent-config.md new file mode 100644 index 0000000000..fe30402c89 --- /dev/null +++ b/docs/zh/guide/work/jssdk-agent-config.md @@ -0,0 +1,128 @@ +# JSSDK(agentConfig) + +`wx.agentConfig()` 用于某些特定的接口(如审批流接口、剪切板接口等),但一般前提都需要先使用到常规的 JSSDK(参考【JSSDK(常规)】标签),因此这是一个增加项。 + +`wx.agentConfig()` 同样分为服务器端和客户端两部分。 + +## 服务端获取签名信息 + +后端除了后端通过 `JSSDKHelper.GetJsSdkUiPackageAsync()` 方法获取常规 JSSDK 运行所需参数以外,还需要使用同一个方法,传入不同参数来获取 `agetntConfig` 的对应参数: + +```JS +public async Task AgentConfig() +{ + //此处演示同时支持多个应用的注册,请参考 appsettings.json 文件 + var workSetting = Senparc.Weixin.Config.SenparcWeixinSetting["企业微信审批"] as ISenparcWeixinSettingForWork; + var url = "https://sdk.weixin.senparc.com/Work/Approval"; + + //获取 UI 信息包 + + /* 注意: + * 所有应用中,jsApiUiPackage 是必备的 + */ + var jsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, false); + var jsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, jsApiTicket, false); + ViewData["jsApiUiPackage"] = jsApiUiPackage; + + /* 注意: + * 1、这里需要使用 WeixinCorpAgentId,而不是 WeixinCorpId + * 2、agentJsApiUiPackage 是否需要提供,请参考官方文档,此处演示了最复杂的情况 + */ + ViewData["thirdNo"] = DateTime.Now.Ticks + Guid.NewGuid().ToString("n"); + ViewData["corpId"] = workSetting.WeixinCorpId; + ViewData["agentId"] = workSetting.WeixinCorpAgentId; + var agentConfigJsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, true); + var agentJsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, agentConfigJsApiTicket, true); + ViewData["agentJsApiUiPackage"] = agentJsApiUiPackage; + + return View(); +} +``` + +> 注意:上述方法中,使用了 +> +> `Senparc.Weixin.Config.SenparcWeixinSetting["企业微信审批"]` +> +> 来获取与之前不同的微信配置,请参考本项目中 +> +> `appsetting.json` +> +> 文件中的设置方法: +> +> ```JSON +> "Items": { +> //添加多个企业微信应用 +> "企业微信审批": { +> "WeixinCorpId": "#{WeixinCorpId2}#", +> "WeixinCorpAgentId": "#{WeixinCorpAgentId2}#", +> "WeixinCorpSecret": "#{WeixinCorpSecret2}#", +> "WeixinCorpToken": "#{WeixinCorpToken2}#", +> "WeixinCorpEncodingAESKey": "#{WeixinCorpEncodingAESKey2}#"} +> } +> ``` +> +> 此方法对所有其他模块也通用(如公众号、小程序、微信支付等)。 + +> 本项目参考文件: +> +> /Controllers/**_JSSDKnController.cs_** - AgentConfig() 方法 +> +> /**_appsettings.json_** + +## 网页端配置 JSSDK + +网页端除了进行常规的 JSSDK 配置以外,还需要在执行特定的 JsApi 方法之前,添加 `wx.agentConfig()` 的配置: + +```cs +function invoke(){ + wx.agentConfig({ + corpid: '@ViewData["corpId"]', // 必填,企业微信的corpid,必须与当前登录的企业一致 + agentid: '@ViewData["agentId"]', // 必填,企业微信的应用id (e.g. 1000247) + timestamp: @agentJsApiUiPackage.Timestamp, // 必填,生成签名的时间戳 + nonceStr: '@agentJsApiUiPackage.NonceStr', // 必填,生成签名的随机串 + signature: '@agentJsApiUiPackage.Signature',// 必填,签名,见附录-JS-SDK使用权限签名算法 + jsApiList: ['thirdPartyOpenPage'], //必填,传入需要使用的接口名称 + success: function(res) { + + // 回调 + wx.invoke('thirdPartyOpenPage', { + "oaType": "10001",// String + //"templateId": "C4NxepvGj51gbkeGXHQgYRArW96WrxRinNfyCxo7N",//SYS + "templateId":"247bcb886d0374a0a1f749c52794ba1a_622421053",// Open + "thirdNo": "",// String + "extData": { + 'fieldList': [{ + 'title': '审批类型', + 'type': 'text', + 'value': '文章审批', + }, + { + 'title': '预览', + 'type': 'link', + 'value': 'https://weixin.senparc.com', + }], + } + }, + function(res) { + // 输出接口的回调信息 + console.log(res); + alert('wx.invoke result:'+JSON.stringify(res)); + }); + }, + fail: function(res) { + if(res.errMsg.indexOf('function not exist') > -1){ + alert('版本过低请升级') + } + else{ + alert('wx.invoke fail:'+JSON.stringify(res)); + } + } + }); +} +``` + +HTML 页面进行触发:`点击唤起审批流程` + +> 本项目参考文件: +> +> /Views/**_JSSDK/Index.cshtml_** diff --git a/docs/zh/guide/work/jssdk-general.md b/docs/zh/guide/work/jssdk-general.md new file mode 100644 index 0000000000..0048751988 --- /dev/null +++ b/docs/zh/guide/work/jssdk-general.md @@ -0,0 +1,91 @@ +# JSSDK(常规) + +JSSDK 用于提供微信内置浏览器接口的能力,例如转发控制、调用摄像头权限(拍照、视频)、文件上传、关闭窗口、唤起扫码窗口,等等。 + +要在内置浏览器中只用 JSSDK,分为“服务端获取签名信息”和“网页端配置 JSSDK”两步。 + +企业微信的网页端 JSSDK 配置,和公众号类似,不过多了一个名为 `wx.agentConfig()` 的配置方法。这里介绍常规的方法,`wx.agentConfig()` 配套方法请见【JSSDK(agentConfig】标签。 + +## 服务端获取签名信息 + +后端通过 `JSSDKHelper.GetJsSdkUiPackageAsync()` 方法即可自动获取前端所需的所有 JSSDK 运行所需参数: + +```cs +public async Task Index() +{ + // 当前 URL + var url = "https://sdk.work.weixin.senparc.com/JSSDK/"; + // 获取企业微信配置 + var workSetting = Senparc.Weixin.Config.SenparcWeixinSetting.WorkSetting; + // 获取 JsApiTicket(保密信息,不可外传) + var jsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, false); + // 获取 UI 打包信息 + var jsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, jsApiTicket, false); + + ViewData["jsApiUiPackage"] = jsApiUiPackage; + return View(); +} +``` + +> 本项目参考文件: +> +> /Controllers/**_JSSDKnController.cs_** - Index() 方法 + +## 网页端配置 JSSDK + +后端配置完成的参数,直接在前端 JS 中使用 `wx.config` 进行设置,例如以下代码将完成从企业微信内转发网页到**个人微信**: + +```cs +$(function(){ + wx.config({ + beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题 + debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 + appId: '@jsApiUiPackage.AppId', // 必填,企业微信的corpID + timestamp: @jsApiUiPackage.Timestamp, // 必填,生成签名的时间戳 + nonceStr: '@jsApiUiPackage.NonceStr', // 必填,生成签名的随机串 + signature: '@jsApiUiPackage.Signature',// 必填,签名,见 附录-JS-SDK使用权限签名算法 + jsApiList: ['shareWechatMessage'] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来 + }); + + wx.checkJsApi({ + jsApiList: ['shareWechatMessage'], // 需要检测的JS接口列表,所有JS接口列表见附录2, + success: function(res) { + // 以键值对的形式返回,可用的api值true,不可用为false + // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"} + //alert("wx.config success:"+JSON.stringify(res)); + } + }); +}); + +wx.ready(function(){ + // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 +}); + +wx.error(function(res){ + // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 + console.log(res); + alert(res); +}); + +function invoke(){ + wx.invoke( + "shareWechatMessage", { + title: '企业微信JSSDK 演示-转发', // 分享标题 + desc: '来自 Senparc.Weixin.Work', // 分享描述 + link: 'https://sdk.work.weixin.senparc.com/JSSDK', // 分享链接 + imgUrl: '' // 分享封面 + }, function(res) { + if (res.err_msg == "shareWechatMessage:ok") { + } + } + ); +} +``` + +HTML 页面进行触发:`转发到微信` + +> 本项目参考文件: +> +> /Views/JSSDK/**_Index.cshtml_** + +更多设置详情请参考:[JS-SDK 说明文档](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html)。 diff --git a/docs/zh/guide/work/menu.md b/docs/zh/guide/work/menu.md new file mode 100644 index 0000000000..836b23df35 --- /dev/null +++ b/docs/zh/guide/work/menu.md @@ -0,0 +1,79 @@ +# 菜单设置 + +自定义菜单是企业微信应用界面的重要元素,菜单的使用分为 **设置** 和 **使用** 两个环节。 + +## 设置 + +方法一:在企业微信后台【应用管理】中,某个应用设置界面中,【功能】区域【自定义菜单】中设置(不使用开发模式),此处略。 + +方法二:使用代码进行设置(只需要执行一次,建议放在管理员后台,手动运行),如: + +```cs +public async Task CreateMenuTest() +{ + ButtonGroup bg = new ButtonGroup(); + + //单击 + bg.button.Add(new SingleClickButton() + { + name = "单击测试", + key = "OneClick", + type = MenuButtonType.click.ToString(),//默认已经设为此类型,这里只作为演示 + }); + + //二级菜单 + var subButton = new SubButton() + { + name = "二级菜单" + }; + subButton.sub_button.Add(new SingleClickButton() + { + key = "SubClickRoot_Text", + name = "返回文本" + }); + subButton.sub_button.Add(new SingleViewButton() + { + url = "https://weixin.senparc.com", + name = "Url跳转" + }); + bg.button.Add(subButton); + + var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting; + var appKey = AccessTokenContainer.BuildingKey(workWeixinSetting); + int agentId; + if (!int.TryParse(workWeixinSetting.WeixinCorpAgentId, out agentId)) + { + throw new WeixinException("WeixinCorpAgentId 必须为整数!"); + } + var result = await CommonApi.CreateMenuAsync(appKey, agentId, bg); + + Assert.IsNotNull(result); + Assert.AreEqual("ok", result.errmsg); +} +``` + +## 使用 + +设置完菜单后,当客户端点击菜单时,微信服务器会自动推送响应的回调信息到消息 URL(即已经设置好的 MessageHandler 内),只需在 WorkCustomMessageHandler 中重写(`override`)对应的方法即可。如针对上述 **方法二** 已经设定生效的菜单,当用户点击【单击测试】按钮时,我们可以在 WorkCustomMessageHandler 中进行接收和处理: + +```cs +public override IWorkResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage) +{ + var reponseMessage = CreateResponseMessage(); + + if (requestMessage.EventKey == "SubClickRoot_Text") + { + reponseMessage.Content = "您点击了【返回文本】按钮"; + } + else + { + reponseMessage.Content = "您点击了其他事件按钮"; + } + + return reponseMessage; +} +``` + +> 本项目参考文件: +> +> /MessageHandlers/**_WorkCustomMessageHandler.cs_** diff --git a/docs/zh/guide/work/oauth2.0.md b/docs/zh/guide/work/oauth2.0.md new file mode 100644 index 0000000000..5166357d15 --- /dev/null +++ b/docs/zh/guide/work/oauth2.0.md @@ -0,0 +1,98 @@ +# OAuth 2.0 + +当你需要在网页上获取用户的 UserId、头像、称呼等信息的时候,就需要使用 OAuth 2.0 的方式和微信服务器通讯。 + +更多信息请参考官方文档:[网页授权登录](https://developer.work.weixin.qq.com/document/path/91335)。 + +SDK 已经封装了所有相关的过程,您只需要参考示例进行简单的 3 步配置即可。 + +## 第一步:设置登录页面 + +登录页面中需要设置官方 OAuth 2.0 的请求 URL(称为 **AuthorizeUrl**),并带上登录成功后的 returnUrl。 + +由于微信授权具有两种方式:**snsapi_userinfo** 和 **snsapi_base**,企业自建应用使用 **snsapi_base**,因此本示例中使用此方式进行介绍 **snsapi_base**(默认)的 **AuthorizeUrl** 获取的方式(此方式也是所有场景下兼容的方式): + +```cs +public IActionResult Index(string returnUrl) +{ + // 设置自己的 URL + var url = "https://4424-222-93-135-159.ngrok.io"; + + //此页面引导用户点击授权 + var oauthUrl = + OAuth2Api.GetCode(_corpId, $"{url}/OAuth2/BaseCallback?returnUrl={returnUrl.UrlEncode()}", + null, null);//snsapi_base方式回调地址 + + ViewData["UrlBase"] = oauthUrl; + ViewData["returnUrl"] = returnUrl; + + return View(); +} +``` + +上述 `returnUrl` 参数一般为跳转到登陆页面之前的 URL,也可以是希望用户完成授权之后跳转到的 URL。 + +> 注意:上述的网址和路径需要在公众号后台匹配成你自己服务器的地址(参考文档:[网页授权登录](https://developer.work.weixin.qq.com/document/path/91335))。 + +> 本项目参考文件: +> +> /Controllers/OAuth2Controller.cs + +## 第二步:前端登录页面设置 + +登录页面最终的功能是引导用户打开 **AuthorizeUrl**,可以直接使用连接的方式: + +``` +点击这里测试snsapi_base +``` + +> 本项目参考文件: +> +> /Views/**_OAuth2/Index.cshtml_** + +## 第三步:配置登陆后回调页面 + +授权成功后,网页将自动跳转到第一步中设置的回调 URL(`$"{url}/OAuth2/BaseCallback?returnUrl={returnUrl.UrlEncode()}"`): + +```cs +public async Task BaseCallback(string code, string returnUrl) +{ + if (string.IsNullOrEmpty(code)) + { + return Content("您拒绝了授权!"); + } + + try + { + var appKey = AccessTokenContainer.BuildingKey(_workWeixinSetting); + var accessToken = await AccessTokenContainer.GetTokenAsync(_corpId, _corpSecret); + //获取用户信息 测试链接:https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=10019 + var oauthResult = await OAuth2Api.GetUserIdAsync(accessToken, code); + var userId = oauthResult.UserId; + GetMemberResult result = await MailListApi.GetMemberAsync(appKey, userId); + + if (result.errcode != ReturnCode_Work.请求成功) + { + return Content("错误:" + result.errmsg); + } + + ViewData["returnUrl"] = returnUrl; + + /* 注意: + * 实际适用场景,此处应该跳转到 returnUrl,不要停留在 Callback页面上。 + * 因为当用户刷新此页面 URL 时,实际 code 等参数已失效,用户会受到错误信息。 + */ + return View(result); + } + catch (Exception ex) + { + return Content("错误:" + ex.Message); + } +} +``` + +上述代码中,传入的 `returnUrl` 即第一步 `Index()` 方法中传入到 **AuthorizeUrl** 中的 `returnUrl`,当所有用户信息获取、保存等操作完成后,借助 `returnUrl` 跳转到登陆之前的页面,完成整个闭环的登录操作。 + +> 本项目参考文件: +> +> /Controllers/**_OAuth2Controller.cs_** diff --git a/docs/zh/guide/work/register.md b/docs/zh/guide/work/register.md new file mode 100644 index 0000000000..e658c1d6de --- /dev/null +++ b/docs/zh/guide/work/register.md @@ -0,0 +1,64 @@ +# 注册 + +## 全局注册 + +所有的 Senparc.Weixin SDK 注册过程都是类似的。 + +首先,完成所有 Senparc.Weixin SDK 的整体注册代码。在 Program.cs 中加入以下代码: + +![注册 Senparc.Weixin](https://sdk.weixin.senparc.com/Docs/Work/images/home-dev-register-01.png) + +说明: + +1. `builder.Services.AddMemoryCache()` Senparc.Weixin 支持本机缓存、Redis、Memcached 等多种缓存策略,默认使用本机缓存,此时需要激活本地缓存。 +2. `builder.Services.AddSenparcWeixinServices(builder.Configuration)` 用于完成 Senparc.Weixin 的注册。 +3. `app.UseSenparcWeixin()` 方法用于配置和启用 Senparc.Weixin。 + +以上代码对于所有的 Senparc.Weixin 下级模块都是相同的,只需要 3 句代码。 + +> 本项目参考文件: +> +> /**_Program.cs_** + +## 企业微信 + +在上述代码中的第 17 行委托方法中插入代码,即可完成默认公众号的注册: + +```cs +register.RegisterWorkAccount(weixinSetting, "【盛派网络】企业微信"); +``` + +![注册微信公众号](https://sdk.weixin.senparc.com/Docs/Work/images/home-dev-register-02.png) + +其中,`weixinSetting` 的值默认来自于 `appsettings.json`: + +```JSON +"SenparcWeixinSetting": { + //以下为 Senparc.Weixin 的 SenparcWeixinSetting 微信配置 + //注意:所有的字符串值都可能被用于字典索引,因此请勿留空字符串(但可以根据需要,删除对应的整条设置)! + + //微信全局 + "IsDebug": true, + + //以下不使用的参数可以删除,key 修改后将会失效 + + //企业微信 + "WeixinCorpId": "#{WeixinCorpId}#", + "WeixinCorpAgentId": "#{WeixinCorpAgentId}#", + "WeixinCorpSecret": "#{WeixinCorpSecret}#", + "WeixinCorpToken": "#{WeixinCorpToken}#", + "WeixinCorpEncodingAESKey": "#{WeixinCorpEncodingAESKey}#" + + //可以追加更多其他平台的配置信息 +} +``` + +其中,`WeixinCorpId` 是每个企业微信账号独有的 **corpId**,`WeixinCorpAgentId` 和 `WeixinCorpSecret` 对应每个不同应用的 **agentId** 和 **secret**, `WeixinCorpToken` 和 `WeixinCorpEncodingAESKey` 对应了当前应用消息接口的后台的配置参数。 + +> 本项目参考文件: +> +> /**_appsettings.json_** + +配置完成。 + +> 提示:自动注册的信息可通过 `Senparc.Weixin.Config.SenparcWeixinSetting` 获取。 diff --git a/docs/zh/guide/work/source-code.md b/docs/zh/guide/work/source-code.md new file mode 100644 index 0000000000..0641c2aed7 --- /dev/null +++ b/docs/zh/guide/work/source-code.md @@ -0,0 +1,15 @@ +# 源码 + +## Senparc.Weixin SDK 源码 + +GitHub:[github_WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK)(更新更快) + +Gitee:[gitee_WeiXinMPSDK](https://gitee.com/JeffreySu/WeiXinMPSDK) (从 GitHub 同步) + +## 打包代码 + +Nuget 包地址:[https://www.nuget.org/packages/Senparc.Weixin.Work](https://www.nuget.org/packages/Senparc.Weixin.Work) + +## 本地源码文件 + +Senparc.Weixin.Work 源码位置:[/src/Senparc.Weixin.Work](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.Work) diff --git a/docs/zh/guide/wxopen/advanced-interface.md b/docs/zh/guide/wxopen/advanced-interface.md new file mode 100644 index 0000000000..84933e46d1 --- /dev/null +++ b/docs/zh/guide/wxopen/advanced-interface.md @@ -0,0 +1,35 @@ +# 高级接口 + +完成 `Program.cs` 文件中的常规注册后,即可在程序的任意地方使用高级接口。 + +> 注意: +> 1、高级接口的配置和 `MessageHandler` 没有关联,两者可以独立或配合使用。 +> 2、SDK 内几乎所有高级接口的第一个参数同时支持传入 AppId 或 AccessToken,通常名称为 `appIdOrAccessToken`,SDK 会根据参数特征自动识别输入的是 AppId 还是 AccessToken,并做区分处理。 + +## 使用 AppId 调用接口(推荐) + +例如,我们可以在任意一个方法中调用一个高级接口: + +```cs +using Senparc.Weixin.WxOpen.AdvancedAPIs; + +var appId = Senparc.Weixin.Config.SenparcWeixinSetting.WxOpenAppId; +var openId = "xxx"; +var content = "这是一条客服消息"; +var result = await CustomApi.SendTextAsync(appId, openId, content);//发送客服消息 +``` + +> appId 参数,必须是已经经过注册的,这样即使 AccessToken 过期,SDK 也会全自动处理。如果是未经过注册的 appId,则需要先获取 AccessToken,然后调用接口。 + +## 使用 AccessToken 调用接口(不推荐) + +```cs +var accessToken = Senparc.Weixin.MP.CommonApi.GetTokenAsync(appId, appSecret);//获取 AccessToken +var openId = "xxx"; +var content = "这是一条客服消息"; +var result = await CustomApi.SendTextAsync(accessToken, openId, content);//发送客服消息 +``` + +> 注意: +> 1、使用 AccessToken 方式调用接口,无法保证当前 AccessToken 的有效性,因此建议使用前进行有效性校验,并使用 `try-catch` 方式捕获 AccessToken 不可用的异常,然后进行重试。因此直接使用 AccessToken 调用接口的方式并不推荐在常规情况下使用。 +> 2、小程序和公众号使用相同的 AccessToken 获取接口,因此,此处调用了 `Senparc.Weixin.MP` 类库中公众号的相同方法。因为 `Senparc.Weixin.WxOpen` 模块默认已经依赖了 `Senparc.Weixin.MP`,所以不必再手动安装 MP 模块。 diff --git a/docs/zh/guide/wxopen/advanced.md b/docs/zh/guide/wxopen/advanced.md new file mode 100644 index 0000000000..1b32c519b3 --- /dev/null +++ b/docs/zh/guide/wxopen/advanced.md @@ -0,0 +1,11 @@ +# 进阶 + +当前示例展示了最基本和常用的功能,如果您需要了解更多高级玩法,并且有扎实的编程功底,请参考完整示例。 + +> 完整示例解决方案文件: +> +> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7.sln](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/All/net7-mvc) + +> 务必阅读 readme 文件: +> +> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/readme.md](https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/All/net7-mvc/readme.md) diff --git a/docs/zh/guide/wxopen/client-development.md b/docs/zh/guide/wxopen/client-development.md new file mode 100644 index 0000000000..bfe847333e --- /dev/null +++ b/docs/zh/guide/wxopen/client-development.md @@ -0,0 +1,13 @@ +# 客户端开发 + +## 准备开发 + +开发小程序客户端(手机微信内展示的小程序界面),需要使用 [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html)。 + +> 微信小程序示例项目参考文件: +> +> Senparc.Weixin SDK 源文件根目录/**_Samples/WxOpen/Senparc.Weixin.WxOpen.AppDemo/_** + +上述示例项目打开后如下图所示: + +![小程序客户端](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-client-01.png) diff --git a/docs/zh/guide/wxopen/get-phone-number.md b/docs/zh/guide/wxopen/get-phone-number.md new file mode 100644 index 0000000000..9d0e90d990 --- /dev/null +++ b/docs/zh/guide/wxopen/get-phone-number.md @@ -0,0 +1,89 @@ +# 获取手机号 + +> 注意:小程序获取手机号的接口,进行过一次升级,先前在客户端直接获取手机号的方式已经被淘汰(示例中左侧【获取手机号】按钮),目前最新的接口是使用 code 到服务器端后台获取手机号(示例中右侧【获取手机号(Code)】按钮。 +> +> ![入口页面](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-phone-01.png)入口页面 +> +> 当用户点击后,系统进行授权提示: +> +> ![授权手机号](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-phone-02.png)授权手机号 +> +> 点击【允许】按钮,通过访问后端接口,获取到手机号: +> +> ![授权手机号](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-phone-03.png)授权手机号 + +## 客户端 + +在 Index.wxml 文件中放置按钮: + +```XML + +``` + +> 本项目参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.wxml_** + +上述代码中,`open-type="getPhoneNumber"` 指定了当前按钮获取手机号的用途,`bindgetphonenumber="getUserPhoneNumber"` 指定了处理方法为 `getUserPhoneNumber`(对应于 .js 文件中): + +```JS +getUserPhoneNumber:function(e){ + wx.request({ + url: wx.getStorageSync('domainName') + '/WxOpen/GetUserPhoneNumber?code=' + e.detail.code, + success: function (res) { + // success + var json = res.data; + + if(!json.success){ + wx.showModal({ + title: '解密过程发生异常', + content: json.msg, + showCancel: false + }); + return; + } + + //模组对话框 + var phoneNumberData = json.phoneInfo; + var msg = '手机号:' + phoneNumberData.phoneNumber+ + '\r\n手机号(不带区号):' + phoneNumberData.purePhoneNumber+ + '\r\n区号(国别号)' + phoneNumberData.countryCode+ + '\r\n水印信息:' + JSON.stringify(phoneNumberData.watermark); + + wx.showModal({ + title: '收到服务器端通过 code 获取的手机号信息', + content: msg, + showCancel: false + }); + } + }) + } +``` + +当用户点击按钮,并授权手机号后,就会触发上述方法,通过 `e` 参数提供的 `e.code`,将其提交给服务器后台 **/WxOpen/GetUserPhoneNumber** 地址,后台将使用 `code` 换取用户的手机号,然后进行储存或返回给前端。上述代码的模组对话框只是演示作用,实际项目中一般不需要再次弹出信息。 + +> 本项目参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_/pages/index/index.js_** + +## 后端代码 - GetUserPhoneNumber + +```cs +public async Task GetUserPhoneNumber(string code) +{ + try + { + var result = await BusinessApi.GetUserPhoneNumberAsync(WxOpenAppId, code); + return Json(new { success = true, phoneInfo = result.phone_info }); + } + catch (Exception ex) + { + return Json(new { success = false, msg = ex.Message }); + } +} +``` + +> 本项目参考文件: +> +> /Controllers/**_WxOpenController.cs_** diff --git a/docs/zh/guide/wxopen/install.md b/docs/zh/guide/wxopen/install.md new file mode 100644 index 0000000000..c6eb6815f0 --- /dev/null +++ b/docs/zh/guide/wxopen/install.md @@ -0,0 +1,69 @@ +# 如何安装? + +您可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包,推荐),以方便随时获取官方的更新。注意:直接引用源码和引用 Nuget 包只能二选一。 + +## 引用源码 + +您可以打开 **../All/net6-mvc/** 前解决方案(全量进阶示例),在 **Libraries** 目录下,将所需要引用的程序集引用(复制)到您开发环境的解决方案中,请注意需要同时引用被依赖的项目,如 `Senparc.Weixin` 项目是所有项目都需要依赖的。 + +当前示例项目默认就使用了直接引用源码的方式,可从 .csproj 文件中看到引用方式: + +```cs + + + +``` + +## 引用程序集(推荐) + +您可以通过 `Visual Studio`、`Visual Studio Code`、`dotnet 命令行` 等多种方式自动安装 Nuget 包。 + +### Visual Studio + +在开发项目【解决方案资源管理器】中,对需要添加 Senparc.Weixin.WxOpen 的模块点击右键,点击【管理 Nuget 程序包】,在【浏览】标签中输入 **Senparc.Weixin.TenPay**,点击右侧【安装】按钮。如下图所示: + +![通过 Visual Studio 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-01.png) + +### Visual Studio Code + +首先,确认已经安装好 [VS Code](https://code.visualstudio.com/) 以及 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 + +然后,打开解决方案或项目所在目录,按 Ctrl+~,打开终端面板: + +![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-03.png "打开 VS Code 终端面板") + +进入需要添加 Senparc.Weixin.WxOpen 的模块的项目的目录,输入: + +> ```cs +> dotnet add package Senparc.Weixin.WxOpen +> ``` + +![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-04.png "安装 Senparc.Weixin.WxOpen 模块") + +安装完成后,可查看对应 .csproj 文件,被添加引用,如: + +```cs + + + +``` + +### dotnet 命令行 + +首先,确认已经安装好 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 + +进入需要添加 Senparc.Weixin.WxOpen 的模块的项目的目录,输入: + +> ```cs +> dotnet add package Senparc.Weixin.WxOpen +> ``` + +![通过 dotnet CLI 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-02.png "通过 dotnet CLI 安装") + +安装完成后,可查看对应 .csproj 文件,被添加引用,如: + +```cs + + + +``` diff --git a/docs/zh/guide/wxopen/login.md b/docs/zh/guide/wxopen/login.md new file mode 100644 index 0000000000..00257b19e8 --- /dev/null +++ b/docs/zh/guide/wxopen/login.md @@ -0,0 +1,319 @@ +# 登录 + +## 简介 + +大部分的小程序都需要识别用的身份信息(OpenId)以及获取用户的头像、昵称等信息为用户提供身份识别、个性化信息展示的服务。此时就需要使用到小程序登录接口。 + +## 客户端 - 进入登录页 + +用户的登录是在小程序端发起的,一般而言可以做一个独立的页面用于放置说明及登录按钮。首先,在入口网页放置一个入口按钮: + +```HTML + +``` + +点击按钮后,触发 .js 文件中的 `getUserInfo()` 方法: + +```JS + getUserInfo: function(){ + wx.navigateTo({ + url: '../Login/Login', + }) + } +``` + +此按钮将引导页面跳转到独立的 Login 页面。 + +![跳转到登录页](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-01.png)跳转到登录页 + +> 本项目参考文件: Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.wxml_** Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.js_** + +## 客户端 - 登录页 + +登录页包含系统登录展示、隐私协议等内容,并包含一个触发最终小程序客户端登录事件的按钮: + +```XML + + + 您好,, + 当前小程序为 Senparc.Weixin SDK 的功能体验小程序,包括了订阅消息、获取用户授权信息、手机号、WebSocket、客服消息等演示内容,大部分内容需要授权后进行,点击【获取头像昵称】按钮进行授权,才能进入测试页面。 + 如果您不希望授权,请直接关闭此页面。 + + +``` + +![登录页面](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-02.png) + +> 本项目参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/Login/Login.wxml_** + +【获取头像昵称】按钮绑定了方法 `getUserInfo()`,在 **Login.js** 中添加: + +```JS +var app = getApp() +getUserInfo: function (e) { + var that = this; + app.getUserInfo(e, function(userInfo){ + app.globalData.userInfo = userInfo + that.setData({ + userInfo: userInfo, + hasUserInfo: true + }); + wx.navigateTo({ + url: '../index/index', + }) + }); + } +``` + +> 本项目参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/Login/Login.js_** + +上述代码中,使用 `var app = getApp()` 引入了全局方法(代码在根目录 **app.js**中),其中,`app.getUserInfo()` 方法代码如下(为了更加贴近实际使用场景,我们将 **登录** + **获取用户信息** 放在连贯的代码中展示): + +```JS +getUserInfo:function(cb,callback){ + var that = this + if(this.globalData.userInfo){ + typeof cb == "function" && cb(this.globalData.userInfo) + }else{ + //获取userInfo并校验 + console.log('准备调用 wx.getUserProfile'); + wx.getUserProfile({ + desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 + success: function (userInfoRes) { + console.log('get getUserProfile', userInfoRes); + that.globalData.userInfo = userInfoRes.userInfo + typeof cb == "function" && cb(that.globalData.userInfo) + typeof callback == "function" && callback(userInfoRes.userInfo) + + //调用登录接口 + wx.login({ + success: function (res) { + //换取openid & session_key + wx.request({ + url: wx.getStorageSync('domainName') + '/WxOpen/OnLogin', + method: 'POST', + header: { 'content-type': 'application/x-www-form-urlencoded' }, + data: { + code: res.code + }, + success:function(json){ + console.log('wx.login - request-/WxOpen/OnLogin Result:', json); + var result = json.data; + if(result.success) + { + wx.setStorageSync('sessionId', result.sessionId); + //校验 + wx.request({ + url: wx.getStorageSync('domainName') + '/WxOpen/CheckWxOpenSignature', + method: 'POST', + header: { 'content-type': 'application/x-www-form-urlencoded' }, + data: { + sessionId: result.sessionId,//wx.getStorageSync('sessionId'), + rawData:userInfoRes.rawData, + signature:userInfoRes.signature + }, + success:function(json){ + console.log(json.data); + if(!json.data.success){ + alert(json.data.msg); + } + } + }); + + //解密数据(建议放到校验success回调函数中,此处仅为演示) + wx.request({ + url: wx.getStorageSync('domainName') + '/WxOpen/DecodeEncryptedData', + method: 'POST', + header: { 'content-type': 'application/x-www-form-urlencoded' }, + data: { + 'type':"userInfo", + sessionId: result.sessionId,//wx.getStorageSync('sessionId'), + encryptedData: userInfoRes.encryptedData, + iv: userInfoRes.iv + }, + success:function(json){ + console.log('数据解密:', json.data); + } + }); + }else{ + console.log('储存session失败!',json); + } + } + }) + } + }) + } + }); + } + } +``` + +> 上述代码是整个微信登录客户端的核心代码。 + +其中: + +1. `wx.getUserProfile` 用于调起获取用户信息的接口,此接口本身和登录行为本身无直接联系,但是为了保证用户信息的正确性,后续需要在登录成功后的回调中使用到其中的加密信息来获取真实的用户信息,因此需要首先触发。 + +2. `wx.login` 是小程序客户端的登录接口,其中 `success` 为登录自后的回调函数。在回调函数中,我们使用 `wx.request` 向服务器端 **/WxOpen/OnLogin** 地址发送一条请求,带上 `success` 回调的参数 `res.code`,其中将使用 `code` 利用服务器端的 API 换取 `session_key`,并储存在服务器端,同时生成临时的用户身份标记 `SessionId` 并返回给客户端。 + 成功回调后,再使用 `wx.setStorageSync('sessionId', result.sessionId);` 将收到的 `SessionId` 储存在本地缓存中。 + +3. 虽然`userInfoRes.rawData` 已经提供了明文的用户信息,但并不能确保其是安全(未经篡改或完整)的,因此需要向服务器发送请求,验证其真实性。 + + 继续使用`wx.request`方法请求**/WxOpen/CheckWxOpenSignature**地址,发送`sessionId`以及第 1 步中获取到的`userInfoRes.rawData`以及`userInfoRes.signature`,校验信息的真实性。验证通过后,可以在客户端直接使用`rawData`。 + + > 注意:有的开发者会把经过验证后的 `rawData` 发送给服务器保存,认为此信息是有效的,**这是具有风险的做法,应当抛弃**,正确的做法是使用上述代码中后续的方式(**/WxOpen/DecodeEncryptedData**)发送 `userInfoRes.encryptedData` 给服务器解密。因为:第一,`rawData` 从被验证成功到明文发送给服务器的过程中无法确保是否被篡改;第二,明文传输用户的敏感信息容易被监听和窃取,这种做法本身不应该出现在整个项目的任何地方。 + +4. 真实性(签名)验证通过后,继续使用 `wx.request` 请求服务器 **/WxOpen/DecodeEncryptedData** 地址,发送 `sessionId`以及第 1 步中获取到的 `userInfoRes.encryptedData` 以及 `userInfoRes.iv`,服务器端将解密 `encryptedData` 获得用户信息,并储存。 + +> 本项目参考文件: +> +> Senparc.Weixin.**_WxOpen.AppDemo/app.js_** + +## 服务器端 - OnLogin + +服务器端 **/WxOpen/OnLogin** 代码如下: + +```cs +[HttpPost] +public ActionResult OnLogin(string code) +{ + try + { + var jsonResult = SnsApi.JsCode2Json(WxOpenAppId, WxOpenAppSecret, code); + if (jsonResult.errcode == ReturnCode.请求成功) + { + //Session["WxOpenUser"] = jsonResult;//使用Session保存登陆信息(不推荐) + //使用SessionContainer管理登录信息(推荐) + var unionId = ""; + var sessionBag = SessionContainer.UpdateSession(null, jsonResult.openid, jsonResult.session_key, unionId); + + //注意:生产环境下SessionKey属于敏感信息,不能进行传输! + return Json(new { success = true, msg = "OK", sessionId = sessionBag.Key, sessionKey = sessionBag.SessionKey/* 此参数千万不能暴露给客户端!处仅作演示! */ }); + } + else + { + return Json(new { success = false, msg = jsonResult.errmsg }); + } + } + catch (Exception ex) + { + return Json(new { success = false, msg = ex.Message }); + } +} +``` + +> 特别注意:`SessionKey` 是非常敏感的信息,上述代码只是做演示,向客户端证明已经生成,实际开发过程中不可传递到客户端! + +> 本项目参考文件: +> +> /Controllers/**_WxOpenController.cs_** + +## 服务器端 - CheckWxOpenSignature + +服务器端 **/WxOpen/CheckWxOpenSignature** 代码如下: + +```cs +[HttpPost] +public ActionResult CheckWxOpenSignature(string sessionId, string rawData, string signature) +{ + try + { + var checkSuccess = Senparc.Weixin.WxOpen.Helpers.EncryptHelper.CheckSignature(sessionId, rawData, signature); + return Json(new { success = checkSuccess, msg = checkSuccess ? "签名校验成功" : "签名校验失败" }); + } + catch (Exception ex) + { + return Json(new { success = false, msg = ex.Message }); + } +} +``` + +> 本项目参考文件: +> +> /Controllers/**_WxOpenController.cs_** + +## 服务器端 - DecodeEncryptedData + +服务器端 **/WxOpen/DecodeEncryptedData** 代码如下: + +```cs +public async Task DecodeEncryptedData(string type, string sessionId, string encryptedData, string iv) +{ + DecodeEntityBase decodedEntity = null; + + try + { + switch (type.ToUpper()) + { + case "USERINFO"://wx.getUserInfo() + decodedEntity = EncryptHelper.DecodeUserInfoBySessionId( + sessionId, + encryptedData, iv); + break; + default: + break; + } + } + catch (Exception ex) + { + WeixinTrace.SendCustomLog("EncryptHelper.DecodeUserInfoBySessionId 方法出错", + $@"sessionId: {sessionId} +encryptedData: {encryptedData} +iv: {iv} +sessionKey: { (await SessionContainer.CheckRegisteredAsync(sessionId) + ? (await SessionContainer.GetSessionAsync(sessionId)).SessionKey + : "未保存sessionId")} + +异常信息: +{ex.ToString()} +"); + } + + //检验水印 + var checkWatermark = false; + if (decodedEntity != null) + { + checkWatermark = decodedEntity.CheckWatermark(WxOpenAppId); + + //保存用户信息(可选) + if (checkWatermark && decodedEntity is DecodedUserInfo decodedUserInfo) + { + var sessionBag = await SessionContainer.GetSessionAsync(sessionId); + if (sessionBag != null) + { + await SessionContainer.AddDecodedUserInfoAsync(sessionBag, decodedUserInfo); + } + } + } + + //注意:此处仅为演示,敏感信息请勿传递到客户端! + return Json(new + { + success = checkWatermark, + //decodedEntity = decodedEntity, + msg = $"水印验证:{(checkWatermark ? "通过" : "不通过")}" + }); +} +``` + +> 本项目参考文件: +> +> /Controllers/**_WxOpenController.cs_** + +## 完成 + +完成代码后,运行服务器端程序和小程序客户端,在客户端中点击【获取头像昵称】按钮,进入登录页面,点击【获取头像昵称】按钮,即可看到弹出系统确认授权对话窗口: + +![授权界面](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-03.png) + +点击【允许】按钮,即可自动完成整个自动登录、用户信息抓取过程: + +![完成登录和用户信息获取](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-04.png) + +此时,再点击【获取数据】按钮,即可看到已经获取到的用户信息: + +![用户信息](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-05.png) diff --git a/docs/zh/guide/wxopen/other.md b/docs/zh/guide/wxopen/other.md new file mode 100644 index 0000000000..237821abd0 --- /dev/null +++ b/docs/zh/guide/wxopen/other.md @@ -0,0 +1,19 @@ +# 其他 + +更多接口用法,可参考【获取手机号】中的方法,参考客户端(.wxml、.js)以及后端(WxController.cs)文件,用法几乎都是一致的。 + +> 后端本项目参考文件: +> +> /Controllers/**_WxOpenController.cs_** +> +> 客户端参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_app.js_** - 全局方法 +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/index_** - 首页文件 +> +> Senparc.Weixin.WxOpen.AppDemo**_/pages/Login_** - 登录页文件 +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/QrCode_** - 获取二维码文件 +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/websocket_signalr_** - WebSocket 文件(进阶) diff --git a/docs/zh/guide/wxopen/register.md b/docs/zh/guide/wxopen/register.md new file mode 100644 index 0000000000..5963d9c563 --- /dev/null +++ b/docs/zh/guide/wxopen/register.md @@ -0,0 +1,57 @@ +# 注册 + +## 全局注册 + +所有的 Senparc.Weixin SDK 注册过程都是类似的。 + +首先,完成所有 Senparc.Weixin SDK 的整体注册代码。在 Program.cs 中加入以下代码: + +![注册 Senparc.Weixin](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-dev-register-01.png) + +说明: + +1. `builder.Services.AddMemoryCache()` Senparc.Weixin 支持本机缓存、Redis、Memcached 等多种缓存策略,默认使用本机缓存,此时需要激活本地缓存。 +2. `builder.Services.AddSenparcWeixinServices(builder.Configuration)` 用于完成 Senparc.Weixin 的注册。 +3. `app.UseSenparcWeixin()` 方法用于配置和启用 Senparc.Weixin。 + +以上代码对于所有的 Senparc.Weixin 下级模块都是相同的,只需要 3 句代码。 + +> 本项目参考文件: +> +> /**_Program.cs_** + +## 公众号注册 + +在上述代码中的第 17 行委托方法中插入代码,即可完成默认公众号的注册: + +```cs +register.RegisterWxOpenAccount(weixinSetting, "【盛派网络小助手】小程序"); +``` + +![注册微信公众号](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-dev-register-02.png) + +其中,`weixinSetting` 的值默认来自于 `appsettings.json`: + +```json + "SenparcWeixinSetting": { + "IsDebug": true, + + //小程序 + "WxOpenAppId": "#{WxOpenAppId}#", + "WxOpenAppSecret": "#{WxOpenAppSecret}#", + "WxOpenToken": "#{WxOpenToken}#", + "WxOpenEncodingAESKey": "#{WxOpenEncodingAESKey}#" + } +``` + +![配置参数](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-dev-register-03.png) + +其中,`WxOpenToken`、`WxOpenEncodingAESKey`、`WxOpenAppId` 和 `WxOpenAppSecret` 对应了微信公众号后台的配置参数。 + +> 本项目参考文件: +> +> /**_appsettings.json_** + +配置完成。 + +> 提示:自动注册的信息可通过 `Senparc.Weixin.Config.SenparcWeixinSetting` 获取。 diff --git a/docs/zh/guide/wxopen/request-service.md b/docs/zh/guide/wxopen/request-service.md new file mode 100644 index 0000000000..7798952fb4 --- /dev/null +++ b/docs/zh/guide/wxopen/request-service.md @@ -0,0 +1,108 @@ +# 小程序请求服务 + +小程序客户端可以使用类似 Ajax 的功能对服务器端发送请求,并且获取响应信息(一般为 JSON)。 + +## 放置触发请求的按钮 + +在完成【客户端开发】的基本准备工作后,在页面上(如 **/pages/index/index.wxml**),创建一个按钮,用于触发请求: + +```xml + +``` + +上述代码中,`type`、`class`、`hover-class` 分别设置了按钮的类型、常规样式、点击样式,`bindtap="doRequest"` 指定了点击之后,由 `doRequest()` 方法(function)进行处理。 + +> 本项目参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.wxml_** + +## 请求服务器方法 + +`doRequest() `方法写在 **index.js** 文件中: + +```js +//处理wx.request请求 +doRequest:function(){ + var that = this; + wx.request({ + url: wx.getStorageSync('domainName') + '/WxOpen/RequestData', + data: { nickName : that.data.userInfo.nickName}, + method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT + header: { 'content-type':'application/x-www-form-urlencoded'}, + success: function(res){ + // success + var json = res.data; + //模组对话框 + wx.showModal({ + title: '收到消息', + content: json.msg, + showCancel:false, + success: function(res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + }, + fail: function() { + // fail + }, + complete: function() { + // complete + } + }) +}, +``` + +上述代码中: + +1. `wx.request(...)` 方法用于向服务器端发起请求,类似其他 JS 框架中的 **axios.get() / .post()** 或 **$.ajax()** 等。 +2. `url` 用于指定需要发送到的 API 地址。其中,`wx.getStorageSync('domainName')` 用于灵活指定开发环境或生产环境的域名(见本目录 **app.js** 文件。 +3. `data` 用于存放需要提交的数据,此处我们从本地数据中心取 `userInfo.nickName`,当用户登陆后,即可取到**微信昵称**,否则为 **undefined**。 +4. `method` 为请求的方法名称,当前使用 POST 方式提交。 +5. `header` 用于指定当前请求 Header 中的参数,通常也可以在 JWT 模式中提供用于用户身份验证的 Token。 +6. `success` 为当前请求成功响应(200)后的回调,示例中的代码展示了当收到成功信息后,弹出一个模组对话框,显示返回的内容,并在点击【确定】按钮后,在控制台输出相关日志。 +7. `fail` 和 `complete` 方法分别用于处理失败的请求,以及整个请求完成后的统一操作。 + +> 本项目参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.js_** + +## 服务器端接口 + +服务器端可以使用各类能够接受请求的方式,如页面、MVC 中的 Action、Web Api、中间件(Middleware),甚至 aspx、ashx 等。 + +上述请求地址在本地环境下为:**https://localhost:44367/WxOpen/RequestData**,我们在 WxOpenController 下面创建一个 RequestData 的 Action 用于接收请求: + +```cs +[HttpPost] +public ActionResult RequestData(string nickName) +{ + var data = new + { + msg = string.Format("服务器时间:{0},昵称:{1}", SystemTime.Now.LocalDateTime, nickName) + }; + return Json(data); +} +``` + +> 本项目参考文件: +> +> /Controllers/**_WxOpenController.cs_** + +## 测试 + +点击【获取数据】按钮: + +![发送请求](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-request-01.png) + +由于当前没有登录,所以昵称无法获取到,登陆后即可显示昵称。 + +> 提示:登录操作请见【登录】标签。 + +点击【确定】按钮: + +![点击确定按钮](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-request-02.png) diff --git a/docs/zh/guide/wxopen/source-code.md b/docs/zh/guide/wxopen/source-code.md new file mode 100644 index 0000000000..da6e48ed5e --- /dev/null +++ b/docs/zh/guide/wxopen/source-code.md @@ -0,0 +1,15 @@ +# 源码 + +## Senparc.Weixin SDK 源码 + +GitHub:[https://github.com/JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK)(更新更快) + +Gitee:[https://gitee.com/JeffreySu/WeiXinMPSDK](https://gitee.com/JeffreySu/WeiXinMPSDK) (从 GitHub 同步) + +## 打包代码 + +Nuget 包地址:[https://www.nuget.org/packages/Senparc.Weixin.WxOpen](https://www.nuget.org/packages/Senparc.Weixin.WxOpen) + +## 本地源码文件 + +Senparc.Weixin.WxOpen 源码位置:[/src/Senparc.Weixin.WxOpen](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.WxOpen) From bfe64b03dd6e0c682c9d89040b5bf4bc1f121482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B7=B3=E5=86=89?= <455274752@qq.com> Date: Tue, 10 Oct 2023 11:52:01 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=8D=E5=A4=A7=E5=B0=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/guide/work/oauth2.0.md | 101 +++++++++++++++++++++++++++++++++ docs/zh/guide/mp/jssdk.md | 87 ++++++++++++++++++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 docs/en/guide/work/oauth2.0.md create mode 100644 docs/zh/guide/mp/jssdk.md diff --git a/docs/en/guide/work/oauth2.0.md b/docs/en/guide/work/oauth2.0.md new file mode 100644 index 0000000000..79ced12781 --- /dev/null +++ b/docs/en/guide/work/oauth2.0.md @@ -0,0 +1,101 @@ +# OAuth 2.0 + +When you need to get the user's UserId, avatar, salutation and other information on the web page, you need to use OAuth 2.0 to communicate with WeChat server. + +For more information, please refer to the official document: [Web Authorisation Login](https://developer.work.weixin.qq.com/document/path/91335). + +The SDK has already encapsulated all the related processes, you just need to refer to the example for a simple 3-step configuration. + +## Step 1: Set up the login page + +In the login page, you need to set the official OAuth 2.0 request URL (called **AuthorizeUrl**) and bring the returnUrl after successful login. + +Since WeChat has two types of authorisation: **snsapi_userinfo** and **snsapi_base**, and enterprise self-built apps use **snsapi_base**, this is the method used in this example to introduce the way of obtaining **AuthorizeUrl** from **snsapi_base** (the default). This method is also compatible in all scenarios: + +```cs +public IActionResult Index(string returnUrl) +{ + // Set your own URL + var url = "https://4424-222-93-135-159.ngrok.io"; + + // This page directs the user to click on authorisation + var oauthUrl = + OAuth2Api.GetCode(_corpId, $"{url}/OAuth2/BaseCallback?returnUrl={returnUrl.UrlEncode()}", + null, null);//snsapi_base way callback address + + ViewData["UrlBase"] = oauthUrl; + ViewData["returnUrl"] = returnUrl; + + return View(); +} +``` + +The above `returnUrl` parameter is usually the URL before jumping to the login page, or it can be the URL you want the user to jump to after completing the authorisation. + +> Note: The above URL and path need to be matched to the address of your own server in the public backend (refer to the document: [Web Authorisation Login](https://developer.work.weixin.qq.com/document/path/91335)). + +> Reference document for this project: +> +> /Controllers/OAuth2Controller.cs + +## Step 2: Front-end login page setup + +The ultimate function of the login page is to direct the user to open the **AuthorizeUrl**, which can be done using a direct connection: + +```cs +Click here to test snsapi_base +``` + +> This item is a reference document: +> +> /Views/**_OAuth2/Index.cshtml_** + +## Step 3: Configure the post-login callback page + +After successful authorisation, the web page will automatically jump to the callback URL (`$"{url}/OAuth2/BaseCallback?returnUrl={returnUrl.UrlEncode()}"`) set in the first step: + +```cs +public async Task BaseCallback(string code, string returnUrl) +{ +​ if (string.IsNullOrEmpty(code)) + { +​ return Content("You have declined authorisation!") ; + } + +​try + { +​ var appKey = AccessTokenContainer.BuildingKey(_workWeixinSetting); +​ var accessToken = await AccessTokenContainer.GetTokenAsync(_corpId, _corpSecret); +​ // Get user information Test link: https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=10019 + +​ var oauthResult = await OAuth2Api.GetUserIdAsync(accessToken, code); +​ var userId = oauthResult.UserId; +​ GetMemberResult result = await MailListApi.GetMemberAsync(appKey, userId); + +​ If (result.errcode ! = ReturnCode_Work.Request successful) +​ { +​ return Content("Error: " + result.errmsg); +​ } + +​ ViewData["returnUrl"] = returnUrl; + +​ /* Caution: + +​ \* In the actual scenario, you should jump to returnUrl instead of staying on the Callback page. + +​ \* Because when the user refreshes the URL of this page, the actual code and other parameters are invalid, and the user will get an error message. + +​ */ +​ return View(result); +​ } +​ catch (Exception ex) + { +​ return Content("Error: " + ex.Message); + } +} +``` + +In the above code, the `returnUrl` is the `returnUrl` passed to **AuthorizeUrl** in the `Index()` method in the first step, when all the operations of obtaining and saving the user's information are completed, the `returnUrl` is used to jump to the page before the login, completing the whole closed-loop login operation. + +> Reference document for this project: +> /Controllers/\*\*\*\*OAuth2Controller.cs diff --git a/docs/zh/guide/mp/jssdk.md b/docs/zh/guide/mp/jssdk.md new file mode 100644 index 0000000000..01c6a5d703 --- /dev/null +++ b/docs/zh/guide/mp/jssdk.md @@ -0,0 +1,87 @@ +# JSSDK + +JSSDK 用于提供微信内置浏览器接口的能力,例如转发控制、调用摄像头权限(拍照、视频)、文件上传、关闭窗口、唤起扫码窗口,等等。 + +要在内置浏览器中只用 JSSDK,分为“服务端获取签名信息”和“网页端配置 JSSDK”两步。 + +## 服务端获取签名信息 + +后端通过 `JSSDKHelper.GetJsSdkUiPackageAsync()` 方法即可自动获取前端所需的所有 JSSDK 运行所需参数: + +```cs +public async Task Index() +{ + var jssdkUiPackage = await JSSDKHelper.GetJsSdkUiPackageAsync(appId, appSecret, Request.AbsoluteUri()); + return View(jssdkUiPackage); +} +``` + +> 本项目参考文件: +> +> /Controllers/**_WeixiJSSDKnController.cs_** + +## 网页端配置 JSSDK + +后端配置完成的参数,直接在前端 JS 中使用 `wx.config` 进行设置,例如以下代码将完成在转发网页时自定义转发消息的标题和图片: + +```js +wx.config({ + debug: false, // 开启调试模式 + appId: "@Model.AppId", // 必填,公众号的唯一标识 + timestamp: "@Model.Timestamp", // 必填,生成签名的时间戳 + nonceStr: "@Model.NonceStr", // 必填,生成签名的随机串 + signature: "@Model.Signature", // 必填,签名 + jsApiList: ["checkJsApi", "onMenuShareTimeline", "onMenuShareAppMessage"], +}); + +wx.error(function (res) { + console.log(res); + alert("验证失败"); +}); + +wx.ready(function () { + var url = "https://sdk.weixin.senparc.com"; + var link = url + ""; + var imgUrl = url + "/images/v2/ewm_01.png"; + + //转发到朋友圈 + wx.onMenuShareTimeline({ + title: "JSSDK朋友圈转发测试", + link: link, + imgUrl: imgUrl, + success: function () { + alert("转发成功!"); + }, + cancel: function () { + alert("转发失败!"); + }, + }); + //转发给朋友 + wx.onMenuShareAppMessage({ + title: "JSSDK朋友圈转发测试", + desc: "转发给朋友", + link: link, + imgUrl: imgUrl, + type: "link", + dataUrl: "", + success: function () { + alert("转发成功!"); + }, + cancel: function () { + alert("转发失败!"); + }, + }); +}); +``` + +> 提示:在 MVC 中传递 ViewModel 需要在 .cshtml 文件顶部定义: +> +> ```cs +> @model Senparc.Weixin.MP.Helpers.JsSdkUiPackage +> ``` + +> 本项目参考文件: +> +> /Views/WeixinJSSDK/**_Index.cshtml_** + +更多设置详情请参考:[JS-SDK 说明文档](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html)。 From c2ae11a8c4a63fa299858165dc4b5728dd659499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B7=B3=E5=86=89?= <455274752@qq.com> Date: Tue, 10 Oct 2023 11:53:08 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E5=A4=A7=E5=B0=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/guide/mp/{Advanced.md => advanced.md} | 0 docs/en/guide/mp/{JSSDK.md => jssdk.md} | 0 .../{MessageHandler.md => messagehandler.md} | 0 docs/en/guide/mp/{OAuth2.0.md => oauth2.0.md} | 0 .../tenpayv2/{Advanced.md => advanced.md} | 0 .../tenpayv3/{Advanced.md => advanced.md} | 0 docs/en/guide/work/MessageHandler.md | 58 ---------- docs/en/guide/work/OAuth2.0.md | 101 ------------------ .../guide/work/{Advanced.md => advanced.md} | 0 .../guide/wxopen/{Advanced.md => advanced.md} | 0 .../{MessageHandler.md => messagehandler.md} | 0 docs/en/guide/wxopen/{Other.md => other.md} | 0 docs/zh/guide/MP/JSSDK.md | 87 --------------- docs/zh/guide/Work/OAuth2.0.md | 98 ----------------- .../messagehandler.md} | 0 .../guide/{MP/OAuth2.0.md => mp/oauth2.0.md} | 0 .../messagehandler.md} | 0 .../messagehandler.md} | 0 18 files changed, 344 deletions(-) rename docs/en/guide/mp/{Advanced.md => advanced.md} (100%) rename docs/en/guide/mp/{JSSDK.md => jssdk.md} (100%) rename docs/en/guide/mp/{MessageHandler.md => messagehandler.md} (100%) rename docs/en/guide/mp/{OAuth2.0.md => oauth2.0.md} (100%) rename docs/en/guide/tenpayv2/{Advanced.md => advanced.md} (100%) rename docs/en/guide/tenpayv3/{Advanced.md => advanced.md} (100%) delete mode 100644 docs/en/guide/work/MessageHandler.md delete mode 100644 docs/en/guide/work/OAuth2.0.md rename docs/en/guide/work/{Advanced.md => advanced.md} (100%) rename docs/en/guide/wxopen/{Advanced.md => advanced.md} (100%) rename docs/en/guide/wxopen/{MessageHandler.md => messagehandler.md} (100%) rename docs/en/guide/wxopen/{Other.md => other.md} (100%) delete mode 100644 docs/zh/guide/MP/JSSDK.md delete mode 100644 docs/zh/guide/Work/OAuth2.0.md rename docs/zh/guide/{MP/MessageHandler.md => mp/messagehandler.md} (100%) rename docs/zh/guide/{MP/OAuth2.0.md => mp/oauth2.0.md} (100%) rename docs/zh/guide/{Work/MessageHandler.md => work/messagehandler.md} (100%) rename docs/zh/guide/{WxOpen/MessageHandler.md => wxopen/messagehandler.md} (100%) diff --git a/docs/en/guide/mp/Advanced.md b/docs/en/guide/mp/advanced.md similarity index 100% rename from docs/en/guide/mp/Advanced.md rename to docs/en/guide/mp/advanced.md diff --git a/docs/en/guide/mp/JSSDK.md b/docs/en/guide/mp/jssdk.md similarity index 100% rename from docs/en/guide/mp/JSSDK.md rename to docs/en/guide/mp/jssdk.md diff --git a/docs/en/guide/mp/MessageHandler.md b/docs/en/guide/mp/messagehandler.md similarity index 100% rename from docs/en/guide/mp/MessageHandler.md rename to docs/en/guide/mp/messagehandler.md diff --git a/docs/en/guide/mp/OAuth2.0.md b/docs/en/guide/mp/oauth2.0.md similarity index 100% rename from docs/en/guide/mp/OAuth2.0.md rename to docs/en/guide/mp/oauth2.0.md diff --git a/docs/en/guide/tenpayv2/Advanced.md b/docs/en/guide/tenpayv2/advanced.md similarity index 100% rename from docs/en/guide/tenpayv2/Advanced.md rename to docs/en/guide/tenpayv2/advanced.md diff --git a/docs/en/guide/tenpayv3/Advanced.md b/docs/en/guide/tenpayv3/advanced.md similarity index 100% rename from docs/en/guide/tenpayv3/Advanced.md rename to docs/en/guide/tenpayv3/advanced.md diff --git a/docs/en/guide/work/MessageHandler.md b/docs/en/guide/work/MessageHandler.md deleted file mode 100644 index 3484021832..0000000000 --- a/docs/en/guide/work/MessageHandler.md +++ /dev/null @@ -1,58 +0,0 @@ -# MessageHandler - -The `MessageHandler` is used to handle messages from the enterprise WeChat dialogue window. - -The SDK has all the basic functionality needed for the developer, the developer just needs to create a custom subclass to supplement the business logic that needs to be customised. - -## Custom MessageHandler - -In the current example, we named our custom MessageHandler `WorkCustomMessageHandler`. - -> WorkCustomMessageHandler.cs Reference file for this project: -> -> /MessageHandlers/ directory -> **_WorkCustomMessageHandler.cs_** MessageHandler main file, responsible for general message handling. -> **_WorkCustomMessageContext.cs_** Custom rewrite of DefaultMpMessageContext context (optional) - -Of all the demonstrated override methods in `WorkCustomMessageHandler.cs`, only the `DefaultResponseMessage()` method is required to be overridden, and all the other `OnXxxRequest()` methods are optional, so that when the user sends a message, and the corresponding override method cannot be found, then the message will be handled by the `DefaultMpMessageContext.cs`. When the user sends a message and can't find a corresponding overridden method, the `DefaultResponseMessage()` method will be called. - -The MessageHandler has two ways of carrying the message so that it can be accessed externally (by the WeChat server) via a URL. These are the **Middleware method** (recommended) and the **Controller method**. The `WorkCustomMessageHandler` used in both ways is common, so it can be switched and coexisted at any time. - -## Middleware approach to hosting MessageHandler - -The middleware approach is the recommended and most simplified way, there is no need to create any new files, just introduce the middleware in the `Program.cs` file underneath all the Senparc.Weixin registration code after it has been executed: - -```cs -app.UseMessageHandlerForWork("/WorkAsync", WorkCustomMessageHandler.GenerateMessageHandler, options => -{ - options.AccountSettingFunc = context => Senparc.Weixin.Config.SenparcWeixinSetting; -}); -``` - -Once done, the MessageHandler can be accessed via Url **`Domain/WorkAsync`**, set to the message URL of the public backend. - -[test /WorkAsync](https://sdk.weixin.senparc.com/WorkAsync) - -> Reference document for this project: -> -> /**_Program.cs_** - -[Test /Work](https://sdk.weixin.senparc.com/Work) - -For more middleware approaches, please refer to (the same way as public use): ["Using MessageHandler Middleware in .NET Core 2.0/3.0"](https://www.cnblogs.com/szw/p/Wechat-MessageHandler-Middleware.html) (also for .NET 6.0 and above). - -## Controller approach to hosting MessageHandler - -When the middleware approach is not enough, you can use a Controller to "expand" the execution process and control or intervene more precisely at each step. - -To use Controller, you need to create 2 Actions, which correspond to WeChat background authentication (Get request) and real message push (Post request). The project example is located in WorkController.cs. - -> WorkController.cs Reference file for this project: -> -> /Controllers/**_WorkController.cs_** - -Once done, you can access the MessageHandler via Url **`Domain/Work`**, set to the message URL of the public backend. - -[Test /Work](https://sdk.weixin.senparc.com/Work) - -For more Controller methods, please refer to [Understanding MessageHandler](https://www.cnblogs.com/szw/p/3414862.html) (recommended to use the full set of asynchronous methods). diff --git a/docs/en/guide/work/OAuth2.0.md b/docs/en/guide/work/OAuth2.0.md deleted file mode 100644 index 79ced12781..0000000000 --- a/docs/en/guide/work/OAuth2.0.md +++ /dev/null @@ -1,101 +0,0 @@ -# OAuth 2.0 - -When you need to get the user's UserId, avatar, salutation and other information on the web page, you need to use OAuth 2.0 to communicate with WeChat server. - -For more information, please refer to the official document: [Web Authorisation Login](https://developer.work.weixin.qq.com/document/path/91335). - -The SDK has already encapsulated all the related processes, you just need to refer to the example for a simple 3-step configuration. - -## Step 1: Set up the login page - -In the login page, you need to set the official OAuth 2.0 request URL (called **AuthorizeUrl**) and bring the returnUrl after successful login. - -Since WeChat has two types of authorisation: **snsapi_userinfo** and **snsapi_base**, and enterprise self-built apps use **snsapi_base**, this is the method used in this example to introduce the way of obtaining **AuthorizeUrl** from **snsapi_base** (the default). This method is also compatible in all scenarios: - -```cs -public IActionResult Index(string returnUrl) -{ - // Set your own URL - var url = "https://4424-222-93-135-159.ngrok.io"; - - // This page directs the user to click on authorisation - var oauthUrl = - OAuth2Api.GetCode(_corpId, $"{url}/OAuth2/BaseCallback?returnUrl={returnUrl.UrlEncode()}", - null, null);//snsapi_base way callback address - - ViewData["UrlBase"] = oauthUrl; - ViewData["returnUrl"] = returnUrl; - - return View(); -} -``` - -The above `returnUrl` parameter is usually the URL before jumping to the login page, or it can be the URL you want the user to jump to after completing the authorisation. - -> Note: The above URL and path need to be matched to the address of your own server in the public backend (refer to the document: [Web Authorisation Login](https://developer.work.weixin.qq.com/document/path/91335)). - -> Reference document for this project: -> -> /Controllers/OAuth2Controller.cs - -## Step 2: Front-end login page setup - -The ultimate function of the login page is to direct the user to open the **AuthorizeUrl**, which can be done using a direct connection: - -```cs -Click here to test snsapi_base -``` - -> This item is a reference document: -> -> /Views/**_OAuth2/Index.cshtml_** - -## Step 3: Configure the post-login callback page - -After successful authorisation, the web page will automatically jump to the callback URL (`$"{url}/OAuth2/BaseCallback?returnUrl={returnUrl.UrlEncode()}"`) set in the first step: - -```cs -public async Task BaseCallback(string code, string returnUrl) -{ -​ if (string.IsNullOrEmpty(code)) - { -​ return Content("You have declined authorisation!") ; - } - -​try - { -​ var appKey = AccessTokenContainer.BuildingKey(_workWeixinSetting); -​ var accessToken = await AccessTokenContainer.GetTokenAsync(_corpId, _corpSecret); -​ // Get user information Test link: https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=10019 - -​ var oauthResult = await OAuth2Api.GetUserIdAsync(accessToken, code); -​ var userId = oauthResult.UserId; -​ GetMemberResult result = await MailListApi.GetMemberAsync(appKey, userId); - -​ If (result.errcode ! = ReturnCode_Work.Request successful) -​ { -​ return Content("Error: " + result.errmsg); -​ } - -​ ViewData["returnUrl"] = returnUrl; - -​ /* Caution: - -​ \* In the actual scenario, you should jump to returnUrl instead of staying on the Callback page. - -​ \* Because when the user refreshes the URL of this page, the actual code and other parameters are invalid, and the user will get an error message. - -​ */ -​ return View(result); -​ } -​ catch (Exception ex) - { -​ return Content("Error: " + ex.Message); - } -} -``` - -In the above code, the `returnUrl` is the `returnUrl` passed to **AuthorizeUrl** in the `Index()` method in the first step, when all the operations of obtaining and saving the user's information are completed, the `returnUrl` is used to jump to the page before the login, completing the whole closed-loop login operation. - -> Reference document for this project: -> /Controllers/\*\*\*\*OAuth2Controller.cs diff --git a/docs/en/guide/work/Advanced.md b/docs/en/guide/work/advanced.md similarity index 100% rename from docs/en/guide/work/Advanced.md rename to docs/en/guide/work/advanced.md diff --git a/docs/en/guide/wxopen/Advanced.md b/docs/en/guide/wxopen/advanced.md similarity index 100% rename from docs/en/guide/wxopen/Advanced.md rename to docs/en/guide/wxopen/advanced.md diff --git a/docs/en/guide/wxopen/MessageHandler.md b/docs/en/guide/wxopen/messagehandler.md similarity index 100% rename from docs/en/guide/wxopen/MessageHandler.md rename to docs/en/guide/wxopen/messagehandler.md diff --git a/docs/en/guide/wxopen/Other.md b/docs/en/guide/wxopen/other.md similarity index 100% rename from docs/en/guide/wxopen/Other.md rename to docs/en/guide/wxopen/other.md diff --git a/docs/zh/guide/MP/JSSDK.md b/docs/zh/guide/MP/JSSDK.md deleted file mode 100644 index 01c6a5d703..0000000000 --- a/docs/zh/guide/MP/JSSDK.md +++ /dev/null @@ -1,87 +0,0 @@ -# JSSDK - -JSSDK 用于提供微信内置浏览器接口的能力,例如转发控制、调用摄像头权限(拍照、视频)、文件上传、关闭窗口、唤起扫码窗口,等等。 - -要在内置浏览器中只用 JSSDK,分为“服务端获取签名信息”和“网页端配置 JSSDK”两步。 - -## 服务端获取签名信息 - -后端通过 `JSSDKHelper.GetJsSdkUiPackageAsync()` 方法即可自动获取前端所需的所有 JSSDK 运行所需参数: - -```cs -public async Task Index() -{ - var jssdkUiPackage = await JSSDKHelper.GetJsSdkUiPackageAsync(appId, appSecret, Request.AbsoluteUri()); - return View(jssdkUiPackage); -} -``` - -> 本项目参考文件: -> -> /Controllers/**_WeixiJSSDKnController.cs_** - -## 网页端配置 JSSDK - -后端配置完成的参数,直接在前端 JS 中使用 `wx.config` 进行设置,例如以下代码将完成在转发网页时自定义转发消息的标题和图片: - -```js -wx.config({ - debug: false, // 开启调试模式 - appId: "@Model.AppId", // 必填,公众号的唯一标识 - timestamp: "@Model.Timestamp", // 必填,生成签名的时间戳 - nonceStr: "@Model.NonceStr", // 必填,生成签名的随机串 - signature: "@Model.Signature", // 必填,签名 - jsApiList: ["checkJsApi", "onMenuShareTimeline", "onMenuShareAppMessage"], -}); - -wx.error(function (res) { - console.log(res); - alert("验证失败"); -}); - -wx.ready(function () { - var url = "https://sdk.weixin.senparc.com"; - var link = url + ""; - var imgUrl = url + "/images/v2/ewm_01.png"; - - //转发到朋友圈 - wx.onMenuShareTimeline({ - title: "JSSDK朋友圈转发测试", - link: link, - imgUrl: imgUrl, - success: function () { - alert("转发成功!"); - }, - cancel: function () { - alert("转发失败!"); - }, - }); - //转发给朋友 - wx.onMenuShareAppMessage({ - title: "JSSDK朋友圈转发测试", - desc: "转发给朋友", - link: link, - imgUrl: imgUrl, - type: "link", - dataUrl: "", - success: function () { - alert("转发成功!"); - }, - cancel: function () { - alert("转发失败!"); - }, - }); -}); -``` - -> 提示:在 MVC 中传递 ViewModel 需要在 .cshtml 文件顶部定义: -> -> ```cs -> @model Senparc.Weixin.MP.Helpers.JsSdkUiPackage -> ``` - -> 本项目参考文件: -> -> /Views/WeixinJSSDK/**_Index.cshtml_** - -更多设置详情请参考:[JS-SDK 说明文档](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html)。 diff --git a/docs/zh/guide/Work/OAuth2.0.md b/docs/zh/guide/Work/OAuth2.0.md deleted file mode 100644 index 5166357d15..0000000000 --- a/docs/zh/guide/Work/OAuth2.0.md +++ /dev/null @@ -1,98 +0,0 @@ -# OAuth 2.0 - -当你需要在网页上获取用户的 UserId、头像、称呼等信息的时候,就需要使用 OAuth 2.0 的方式和微信服务器通讯。 - -更多信息请参考官方文档:[网页授权登录](https://developer.work.weixin.qq.com/document/path/91335)。 - -SDK 已经封装了所有相关的过程,您只需要参考示例进行简单的 3 步配置即可。 - -## 第一步:设置登录页面 - -登录页面中需要设置官方 OAuth 2.0 的请求 URL(称为 **AuthorizeUrl**),并带上登录成功后的 returnUrl。 - -由于微信授权具有两种方式:**snsapi_userinfo** 和 **snsapi_base**,企业自建应用使用 **snsapi_base**,因此本示例中使用此方式进行介绍 **snsapi_base**(默认)的 **AuthorizeUrl** 获取的方式(此方式也是所有场景下兼容的方式): - -```cs -public IActionResult Index(string returnUrl) -{ - // 设置自己的 URL - var url = "https://4424-222-93-135-159.ngrok.io"; - - //此页面引导用户点击授权 - var oauthUrl = - OAuth2Api.GetCode(_corpId, $"{url}/OAuth2/BaseCallback?returnUrl={returnUrl.UrlEncode()}", - null, null);//snsapi_base方式回调地址 - - ViewData["UrlBase"] = oauthUrl; - ViewData["returnUrl"] = returnUrl; - - return View(); -} -``` - -上述 `returnUrl` 参数一般为跳转到登陆页面之前的 URL,也可以是希望用户完成授权之后跳转到的 URL。 - -> 注意:上述的网址和路径需要在公众号后台匹配成你自己服务器的地址(参考文档:[网页授权登录](https://developer.work.weixin.qq.com/document/path/91335))。 - -> 本项目参考文件: -> -> /Controllers/OAuth2Controller.cs - -## 第二步:前端登录页面设置 - -登录页面最终的功能是引导用户打开 **AuthorizeUrl**,可以直接使用连接的方式: - -``` -点击这里测试snsapi_base -``` - -> 本项目参考文件: -> -> /Views/**_OAuth2/Index.cshtml_** - -## 第三步:配置登陆后回调页面 - -授权成功后,网页将自动跳转到第一步中设置的回调 URL(`$"{url}/OAuth2/BaseCallback?returnUrl={returnUrl.UrlEncode()}"`): - -```cs -public async Task BaseCallback(string code, string returnUrl) -{ - if (string.IsNullOrEmpty(code)) - { - return Content("您拒绝了授权!"); - } - - try - { - var appKey = AccessTokenContainer.BuildingKey(_workWeixinSetting); - var accessToken = await AccessTokenContainer.GetTokenAsync(_corpId, _corpSecret); - //获取用户信息 测试链接:https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=10019 - var oauthResult = await OAuth2Api.GetUserIdAsync(accessToken, code); - var userId = oauthResult.UserId; - GetMemberResult result = await MailListApi.GetMemberAsync(appKey, userId); - - if (result.errcode != ReturnCode_Work.请求成功) - { - return Content("错误:" + result.errmsg); - } - - ViewData["returnUrl"] = returnUrl; - - /* 注意: - * 实际适用场景,此处应该跳转到 returnUrl,不要停留在 Callback页面上。 - * 因为当用户刷新此页面 URL 时,实际 code 等参数已失效,用户会受到错误信息。 - */ - return View(result); - } - catch (Exception ex) - { - return Content("错误:" + ex.Message); - } -} -``` - -上述代码中,传入的 `returnUrl` 即第一步 `Index()` 方法中传入到 **AuthorizeUrl** 中的 `returnUrl`,当所有用户信息获取、保存等操作完成后,借助 `returnUrl` 跳转到登陆之前的页面,完成整个闭环的登录操作。 - -> 本项目参考文件: -> -> /Controllers/**_OAuth2Controller.cs_** diff --git a/docs/zh/guide/MP/MessageHandler.md b/docs/zh/guide/mp/messagehandler.md similarity index 100% rename from docs/zh/guide/MP/MessageHandler.md rename to docs/zh/guide/mp/messagehandler.md diff --git a/docs/zh/guide/MP/OAuth2.0.md b/docs/zh/guide/mp/oauth2.0.md similarity index 100% rename from docs/zh/guide/MP/OAuth2.0.md rename to docs/zh/guide/mp/oauth2.0.md diff --git a/docs/zh/guide/Work/MessageHandler.md b/docs/zh/guide/work/messagehandler.md similarity index 100% rename from docs/zh/guide/Work/MessageHandler.md rename to docs/zh/guide/work/messagehandler.md diff --git a/docs/zh/guide/WxOpen/MessageHandler.md b/docs/zh/guide/wxopen/messagehandler.md similarity index 100% rename from docs/zh/guide/WxOpen/MessageHandler.md rename to docs/zh/guide/wxopen/messagehandler.md From 8c91d47920a81269625f0a2f7deb4aedaba7c8a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B7=B3=E5=86=89?= <455274752@qq.com> Date: Tue, 10 Oct 2023 12:03:08 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E5=A4=A7=E5=B0=8F=E5=86=991-=E7=A7=BB=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/guide/MP/advanced-interface.md | 27 -- docs/zh/guide/MP/advanced.md | 11 - docs/zh/guide/MP/install.md | 73 ----- docs/zh/guide/MP/menu.md | 72 ----- docs/zh/guide/MP/register.md | 56 ---- docs/zh/guide/MP/source-code.md | 15 - docs/zh/guide/Work/advanced-interface.md | 68 ----- docs/zh/guide/Work/advanced.md | 11 - docs/zh/guide/Work/install.md | 67 ----- docs/zh/guide/Work/jssdk-agent-config.md | 128 --------- docs/zh/guide/Work/jssdk-general.md | 91 ------ docs/zh/guide/Work/menu.md | 79 ----- docs/zh/guide/Work/register.md | 64 ----- docs/zh/guide/Work/source-code.md | 15 - docs/zh/guide/WxOpen/advanced-interface.md | 35 --- docs/zh/guide/WxOpen/advanced.md | 11 - docs/zh/guide/WxOpen/client-development.md | 13 - docs/zh/guide/WxOpen/get-phone-number.md | 89 ------ docs/zh/guide/WxOpen/install.md | 69 ----- docs/zh/guide/WxOpen/login.md | 319 --------------------- docs/zh/guide/WxOpen/other.md | 19 -- docs/zh/guide/WxOpen/register.md | 57 ---- docs/zh/guide/WxOpen/request-service.md | 108 ------- docs/zh/guide/WxOpen/source-code.md | 15 - docs/zh/guide/mp/advanced-interface.md | 27 -- docs/zh/guide/mp/advanced.md | 11 - docs/zh/guide/mp/install.md | 73 ----- docs/zh/guide/mp/jssdk.md | 87 ------ docs/zh/guide/mp/menu.md | 72 ----- docs/zh/guide/mp/messagehandler.md | 58 ---- docs/zh/guide/mp/oauth2.0.md | 113 -------- docs/zh/guide/mp/register.md | 56 ---- docs/zh/guide/mp/source-code.md | 15 - docs/zh/guide/work/advanced-interface.md | 68 ----- docs/zh/guide/work/advanced.md | 11 - docs/zh/guide/work/install.md | 67 ----- docs/zh/guide/work/jssdk-agent-config.md | 128 --------- docs/zh/guide/work/jssdk-general.md | 91 ------ docs/zh/guide/work/menu.md | 79 ----- docs/zh/guide/work/messagehandler.md | 58 ---- docs/zh/guide/work/oauth2.0.md | 98 ------- docs/zh/guide/work/register.md | 64 ----- docs/zh/guide/work/source-code.md | 15 - docs/zh/guide/wxopen/advanced-interface.md | 35 --- docs/zh/guide/wxopen/advanced.md | 11 - docs/zh/guide/wxopen/client-development.md | 13 - docs/zh/guide/wxopen/get-phone-number.md | 89 ------ docs/zh/guide/wxopen/install.md | 69 ----- docs/zh/guide/wxopen/login.md | 319 --------------------- docs/zh/guide/wxopen/messagehandler.md | 57 ---- docs/zh/guide/wxopen/other.md | 19 -- docs/zh/guide/wxopen/register.md | 57 ---- docs/zh/guide/wxopen/request-service.md | 108 ------- docs/zh/guide/wxopen/source-code.md | 15 - 54 files changed, 3495 deletions(-) delete mode 100644 docs/zh/guide/MP/advanced-interface.md delete mode 100644 docs/zh/guide/MP/advanced.md delete mode 100644 docs/zh/guide/MP/install.md delete mode 100644 docs/zh/guide/MP/menu.md delete mode 100644 docs/zh/guide/MP/register.md delete mode 100644 docs/zh/guide/MP/source-code.md delete mode 100644 docs/zh/guide/Work/advanced-interface.md delete mode 100644 docs/zh/guide/Work/advanced.md delete mode 100644 docs/zh/guide/Work/install.md delete mode 100644 docs/zh/guide/Work/jssdk-agent-config.md delete mode 100644 docs/zh/guide/Work/jssdk-general.md delete mode 100644 docs/zh/guide/Work/menu.md delete mode 100644 docs/zh/guide/Work/register.md delete mode 100644 docs/zh/guide/Work/source-code.md delete mode 100644 docs/zh/guide/WxOpen/advanced-interface.md delete mode 100644 docs/zh/guide/WxOpen/advanced.md delete mode 100644 docs/zh/guide/WxOpen/client-development.md delete mode 100644 docs/zh/guide/WxOpen/get-phone-number.md delete mode 100644 docs/zh/guide/WxOpen/install.md delete mode 100644 docs/zh/guide/WxOpen/login.md delete mode 100644 docs/zh/guide/WxOpen/other.md delete mode 100644 docs/zh/guide/WxOpen/register.md delete mode 100644 docs/zh/guide/WxOpen/request-service.md delete mode 100644 docs/zh/guide/WxOpen/source-code.md delete mode 100644 docs/zh/guide/mp/advanced-interface.md delete mode 100644 docs/zh/guide/mp/advanced.md delete mode 100644 docs/zh/guide/mp/install.md delete mode 100644 docs/zh/guide/mp/jssdk.md delete mode 100644 docs/zh/guide/mp/menu.md delete mode 100644 docs/zh/guide/mp/messagehandler.md delete mode 100644 docs/zh/guide/mp/oauth2.0.md delete mode 100644 docs/zh/guide/mp/register.md delete mode 100644 docs/zh/guide/mp/source-code.md delete mode 100644 docs/zh/guide/work/advanced-interface.md delete mode 100644 docs/zh/guide/work/advanced.md delete mode 100644 docs/zh/guide/work/install.md delete mode 100644 docs/zh/guide/work/jssdk-agent-config.md delete mode 100644 docs/zh/guide/work/jssdk-general.md delete mode 100644 docs/zh/guide/work/menu.md delete mode 100644 docs/zh/guide/work/messagehandler.md delete mode 100644 docs/zh/guide/work/oauth2.0.md delete mode 100644 docs/zh/guide/work/register.md delete mode 100644 docs/zh/guide/work/source-code.md delete mode 100644 docs/zh/guide/wxopen/advanced-interface.md delete mode 100644 docs/zh/guide/wxopen/advanced.md delete mode 100644 docs/zh/guide/wxopen/client-development.md delete mode 100644 docs/zh/guide/wxopen/get-phone-number.md delete mode 100644 docs/zh/guide/wxopen/install.md delete mode 100644 docs/zh/guide/wxopen/login.md delete mode 100644 docs/zh/guide/wxopen/messagehandler.md delete mode 100644 docs/zh/guide/wxopen/other.md delete mode 100644 docs/zh/guide/wxopen/register.md delete mode 100644 docs/zh/guide/wxopen/request-service.md delete mode 100644 docs/zh/guide/wxopen/source-code.md diff --git a/docs/zh/guide/MP/advanced-interface.md b/docs/zh/guide/MP/advanced-interface.md deleted file mode 100644 index d301a67975..0000000000 --- a/docs/zh/guide/MP/advanced-interface.md +++ /dev/null @@ -1,27 +0,0 @@ -# 高级接口 - -完成 `Program.cs` 文件中的常规注册后,即可在程序的任意地方使用高级接口。 - -> 注意: -> 1、高级接口的配置和 `MessageHandler` 没有关联,两者可以独立或配合使用。 -> 2、SDK 内几乎所有高级接口的第一个参数同时支持传入 AppId 或 AccessToken,通常名称为 `appIdOrAccessToken`,SDK 会根据参数特征自动识别输入的是 AppId 还是 AccessToken,并做区分处理。 - -## 使用 AppId 调用接口(推荐) - -例如,我们可以在任意一个方法中调用一个高级接口: - -```cs -var appId = Senparc.Weixin.Config.SenparcWeixinSetting.AppId; -var result = await Senparc.Weixin.MP.AdvancedAPIs.UserApi.GetAsync(appId);//获取关注者 OpenId 信息 -``` - -> appId 参数,必须是已经经过注册的,这样即使 AccessToken 过期,SDK 也会全自动处理。如果是未经过注册的 appId,则需要先获取 AccessToken,然后调用接口。 - -## 使用 AccessToken 调用接口(不推荐) - -```cs -var accessToken = Senparc.Weixin.MP.CommonApi.GetTokenAsync(appId, appSecret);//获取 AccessToken -var result = await Senparc.Weixin.MP.AdvancedAPIs.UserApi.GetAsync(accessToken);//获取关注者 OpenId 信息 -``` - -> 注意:使用 AccessToken 方式调用接口,无法保证当前 AccessToken 的有效性,因此建议使用前进行有效性校验,并使用 `try-catch` 方式捕获 AccessToken 不可用的异常,然后进行重试。因此直接使用 AccessToken 调用接口的方式并不推荐在常规情况下使用。 diff --git a/docs/zh/guide/MP/advanced.md b/docs/zh/guide/MP/advanced.md deleted file mode 100644 index 1b32c519b3..0000000000 --- a/docs/zh/guide/MP/advanced.md +++ /dev/null @@ -1,11 +0,0 @@ -# 进阶 - -当前示例展示了最基本和常用的功能,如果您需要了解更多高级玩法,并且有扎实的编程功底,请参考完整示例。 - -> 完整示例解决方案文件: -> -> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7.sln](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/All/net7-mvc) - -> 务必阅读 readme 文件: -> -> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/readme.md](https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/All/net7-mvc/readme.md) diff --git a/docs/zh/guide/MP/install.md b/docs/zh/guide/MP/install.md deleted file mode 100644 index ec39b26fbf..0000000000 --- a/docs/zh/guide/MP/install.md +++ /dev/null @@ -1,73 +0,0 @@ -# 如何安装? - -您可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包,推荐),以方便随时获取官方的更新。注意:直接引用源码和引用 Nuget 包只能二选一。 - -## 引用源码 - -您可以在当前解决方案中,**Libraries** 目录下,将所需要引用的程序集引用(复制)到您开发环境的解决方案中,请注意需要同时引用被依赖的项目,如 `Senparc.Weixin` 项目是所有项目都需要依赖的。 - -当前示例项目默认就使用了直接引用源码的方式,可从 .csproj 文件中看到引用方式: - -```cs - - - - - -``` - -## 引用程序集(推荐) - -您可以通过 `Visual Studio`、`Visual Studio Code`、`dotnet 命令行` 等多种方式自动安装 Nuget 包。 - -### Visual Studio - -在开发项目【解决方案资源管理器】中,对需要添加 Senparc.Weixin.MP 的模块点击右键,点击【管理 Nuget 程序包】,在【浏览】标签中输入 **Senparc.Weixin.MP**,点击右侧【安装】按钮。如下图所示: - -![通过 Visual Studio 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-01.png) - -### Visual Studio Code - -首先,确认已经安装好 [VS Code](https://code.visualstudio.com/) 以及 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 - -然后,打开解决方案或项目所在目录,按 Ctrl+~,打开终端面板: - -![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-03.png) - -进入需要添加 Senparc.Weixin.MP 的模块的项目的目录,输入: - -> ```cs -> dotnet add package Senparc.Weixin.MP -> ``` - -安装 Senparc.Weixin.MP 模块 - -![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-04.png) - -安装完成后,可查看对应 .csproj 文件,被添加引用,如: - -```cs - - - -``` - -### dotnet 命令行 - -首先,确认已经安装好 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 - -进入需要添加 Senparc.Weixin.MP 的模块的项目的目录,输入: - -> ```cs -> dotnet add package Senparc.Weixin.MP -> ``` - -![通过 dotnet CLI 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-02.png) - -安装完成后,可查看对应 .csproj 文件,被添加引用,如: - -```cs - - - -``` diff --git a/docs/zh/guide/MP/menu.md b/docs/zh/guide/MP/menu.md deleted file mode 100644 index 7bdfea2daa..0000000000 --- a/docs/zh/guide/MP/menu.md +++ /dev/null @@ -1,72 +0,0 @@ -# 菜单设置 - -公众号菜单是公众号界面的重要元素,菜单的使用分为 **设置** 和 **使用** 两个环节。 - -## 设置 - -方法一:使用微信公众号后台界面设置(不使用开发模式),此处略。 - -方法二(推荐):使用可视化编辑器(No Code):[点击查看介绍](https://sdk.weixin.senparc.com/Menu)。 - -方法三:使用代码进行设置(只需要执行一次,建议放在管理员后台,手动运行),如: - -```cs -public async Task CreateMenuAsync() -{ - ButtonGroup bg = new ButtonGroup(); - - //定义一级菜单 - var subButton = new SubButton() - { - name = "一级菜单" - }; - bg.button.Add(subButton); - - //下属二级菜单 - subButton.sub_button.Add(new SingleViewButton() - { - url = "https://book.weixin.senparc.com/book/link?code=SenparcRobotMenu", - name = "《微信开发深度解析》" - }); - subButton.sub_button.Add(new SingleClickButton() - { - key = "OneClick", - name = "单击测试" - }); - subButton.sub_button.Add(new SingleViewButton() - { - url = "https://weixin.senparc.com/", - name = "Url跳转" - }); - - //最多可添加 3 个一级自定义菜单,每个菜单下最多 5 个子菜单 - - var result = await CommonApi.CreateMenuAsync(appId, bg); -} -``` - -## 使用 - -设置完菜单后,当客户端点击菜单时,微信服务器会自动推送响应的回调信息到消息 URL(即已经设置好的 MessageHandler 内),只需在 CustomMessageHandler 中重写(`override`)对应的方法即可。如针对上述 **方法三** 已经设定生效的菜单,当用户点击【单击测试】按钮时,我们可以在 CustomMessageHandler 中进行接收和处理: - -```cs -public override async Task OnEvent_ClickRequestAsync(RequestMessageEvent_Click requestMessage) -{ - var reponseMessage = CreateResponseMessage(); - - if (requestMessage.EventKey == "OneClick") - { - reponseMessage.Content = "您点击了【单击测试】按钮"; - } - else - { - reponseMessage.Content = "您点击了其他事件按钮"; - } - - return reponseMessage; -} -``` - -> 本项目参考文件: -> -> /MessageHandlers/**_CustomMessageHandler_Events.cs_** diff --git a/docs/zh/guide/MP/register.md b/docs/zh/guide/MP/register.md deleted file mode 100644 index 913c737837..0000000000 --- a/docs/zh/guide/MP/register.md +++ /dev/null @@ -1,56 +0,0 @@ -# 注册 - -## 全局注册 - -所有的 Senparc.Weixin SDK 注册过程都是类似的。 - -首先,完成所有 Senparc.Weixin SDK 的整体注册代码。在 Program.cs 中加入以下代码: - -![注册 Senparc.Weixin](https://sdk.weixin.senparc.com/Docs/MP/images/home-dev-register-01.png) - -说明: - -1. `builder.Services.AddMemoryCache()` Senparc.Weixin 支持本机缓存、Redis、Memcached 等多种缓存策略,默认使用本机缓存,此时需要激活本地缓存。 -2. `builder.Services.AddSenparcWeixinServices(builder.Configuration)` 用于完成 Senparc.Weixin 的注册。 -3. `app.UseSenparcWeixin()` 方法用于配置和启用 Senparc.Weixin。 - -以上代码对于所有的 Senparc.Weixin 下级模块都是相同的,只需要 3 句代码。 - -> 本项目参考文件: -> -> /**_Program.cs_** - -## 公众号注册 - -在上述代码中的第 17 行委托方法中插入代码,即可完成默认公众号的注册: - -```cs -register.RegisterMpAccount(weixinSetting, "【盛派网络小助手】公众号"); -``` - -![注册微信公众号](https://sdk.weixin.senparc.com/Docs/MP/images/home-dev-register-02.png "注册微信公众号") - -其中,`weixinSetting` 的值默认来自于 `appsettings.json`: - -```json - "SenparcWeixinSetting": { - "IsDebug": true, - - "Token": "#{Token}#", - "EncodingAESKey": "#{EncodingAESKey}#", - "WeixinAppId": "#{WeixinAppId}#", - "WeixinAppSecret": "#{WeixinAppSecret}#" - } -``` - -![配置参数](https://sdk.weixin.senparc.com/Docs/MP/images/home-dev-register-03.png "配置参数") - -其中,`Token`、`EncodingAESKey`、`WeixinAppId` 和 `WeixinAppSecret` 对应了微信公众号后台的配置参数。 - -> 本项目参考文件: -> -> /**_appsettings.json_** - -配置完成。 - -> 提示:自动注册的信息可通过 `Senparc.Weixin.Config.SenparcWeixinSetting` 获取。 diff --git a/docs/zh/guide/MP/source-code.md b/docs/zh/guide/MP/source-code.md deleted file mode 100644 index 1b4978d264..0000000000 --- a/docs/zh/guide/MP/source-code.md +++ /dev/null @@ -1,15 +0,0 @@ -# 源码 - -## Senparc.Weixin SDK 源码 - -GitHub:[https://github.com/JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK)(更新更快) - -Gitee:[https://gitee.com/JeffreySu/WeiXinMPSDK](https://gitee.com/JeffreySu/WeiXinMPSDK)(从 GitHub 同步) - -## 打包代码 - -Nuget 包地址:[https://www.nuget.org/packages/Senparc.Weixin.MP](https://www.nuget.org/packages/Senparc.Weixin.MP) - -## 本地源码文件 - -Senparc.Weixin.MP 源码位置:[/src/Senparc.Weixin.MP](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.MP) diff --git a/docs/zh/guide/Work/advanced-interface.md b/docs/zh/guide/Work/advanced-interface.md deleted file mode 100644 index 52cc4ac6ed..0000000000 --- a/docs/zh/guide/Work/advanced-interface.md +++ /dev/null @@ -1,68 +0,0 @@ -# 高级接口 - -完成 `Program.cs` 文件中的常规注册后,即可在程序的任意地方使用高级接口。 - -> 注意: -> 1、高级接口的配置和 `MessageHandler` 没有关联,两者可以独立或配合使用。 -> 2、由于企业微信使用 CorpId + Secret 来定位(区别)每个应用的授权信息,因此,SDK 中将两者合并成一个唯一参数,命名为 **AppKey**,可通过 `AccessTokenContainer.BuildingKey(string corpId, string corpSecret)` 方法获取合成后的 **AppKey**。 -> 3、企业微信 SDK 内几乎所有高级接口的第一个参数同时支持传入 AppKey 或 AccessToken,通常名称为 `accessTokenOrAppKey`,SDK 会根据参数特征自动识别输入的是 AppKey 还是 AccessToken,并做区分处理。 - -## 使用 AppKey 调用接口(推荐) - -例如,我们可以在任意一个方法中调用一个高级接口: - -```cs -public async Task TryApiTryApiByAppKey() -{ - // 获取注册信息 - var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting; - // 获取 AppKey - var appKey = AccessTokenContainer.BuildingKey(workWeixinSetting); - //发送请求 - try - { - //发送文字提醒 - var result = await Senparc.Weixin.Work.AdvancedAPIs.MassApi.SendTextAsync(appKey, "001", "这是一条来企业微信的消息"); - return Content("OK"); - } - catch (ErrorJsonResultException ex) - { - return Content($"出错啦:{ex.Message}"); - } -} -``` - -> `workWeixinSetting` 参数,必须是已经经过注册的企业微信信息(内部包括 CorpId 和 Secret),这样即使 AccessToken 过期,SDK 也会全自动处理。如果是未经过注册的 CorpId 和 Secret,则需要先获取 AccessToken,然后调用接口。 - -> 本项目参考文件: -> -> /Controllers/**_AdvancedApiController.cs_** - -## 使用 AccessToken 调用接口(不推荐) - -```cs -public async Task TryApiByAccessToken() -{ - // 获取注册信息 - var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting; - // 获取 AccessToken - var accessToken = await AccessTokenContainer.GetTokenAsync(workWeixinSetting.WeixinCorpId, workWeixinSetting.WeixinCorpSecret); - //发送请求 - try - { - //发送文字提醒 - var result = await Senparc.Weixin.Work.AdvancedAPIs.MassApi.SendTextAsync(accessToken, "001", "这是一条来企业微信的消息"); - return Content("OK"); - } - catch (ErrorJsonResultException ex) - { - return Content($"出错啦:{ex.Message}"); - } -} -``` - -> 注意:使用 AccessToken 方式调用接口,无法保证当前 AccessToken 的有效性,因此建议使用前进行有效性校验,并使用 `try-catch` 方式捕获 AccessToken 不可用的异常,然后进行重试。因此直接使用 AccessToken 调用接口的方式并不推荐在常规情况下使用。 - -> 本项目参考文件: -> -> /Controllers/**_AdvancedApiController.cs_** diff --git a/docs/zh/guide/Work/advanced.md b/docs/zh/guide/Work/advanced.md deleted file mode 100644 index 1b32c519b3..0000000000 --- a/docs/zh/guide/Work/advanced.md +++ /dev/null @@ -1,11 +0,0 @@ -# 进阶 - -当前示例展示了最基本和常用的功能,如果您需要了解更多高级玩法,并且有扎实的编程功底,请参考完整示例。 - -> 完整示例解决方案文件: -> -> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7.sln](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/All/net7-mvc) - -> 务必阅读 readme 文件: -> -> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/readme.md](https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/All/net7-mvc/readme.md) diff --git a/docs/zh/guide/Work/install.md b/docs/zh/guide/Work/install.md deleted file mode 100644 index 44e9756d62..0000000000 --- a/docs/zh/guide/Work/install.md +++ /dev/null @@ -1,67 +0,0 @@ -# 如何安装? - -您可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包,推荐),以方便随时获取官方的更新。注意:直接引用源码和引用 Nuget 包只能二选一。 - -## 引用源码 - -您可以在当前解决方案中,**Libraries** 目录下,将所需要引用的程序集引用(复制)到您开发环境的解决方案中,请注意需要同时引用被依赖的项目,如 `Senparc.Weixin` 项目是所有项目都需要依赖的。 - -当前示例项目默认就使用了直接引用源码的方式,可从 .csproj 文件中看到引用方式: - -```cs - - - - - -``` - -## 引用程序集(推荐) - -您可以通过 `Visual Studio`、`Visual Studio Code`、`dotnet 命令行` 等多种方式自动安装 Nuget 包。 - -### Visual Studio - -在开发项目【解决方案资源管理器】中,对需要添加 Senparc.Weixin.Work 的模块点击右键,点击【管理 Nuget 程序包】,在【浏览】标签中输入 **Senparc.Weixin.Work**,点击右侧【安装】按钮。如下图所示: - -![通过 Visual Studio 安装](https://sdk.weixin.senparc.com/Docs/Work/images/home-install-01.png) - -## Visual Studio Code - -首先,确认已经安装好 [VS Code](https://code.visualstudio.com/) 以及 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 - -然后,打开解决方案或项目所在目录,按 Ctrl+~,打开终端面板,进入需要添加 Senparc.Weixin.Work 的模块的项目的目录,输入: - -> ```cs -> dotnet add package Senparc.Weixin.Work -> ``` - -![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/Work/images/home-install-03.png)安装 Senparc.Weixin.Work 模块 - -安装完成后,可查看对应 .csproj 文件,被添加引用,如: - -```cs - - - -``` - -## dotnet 命令行 - -首先,确认已经安装好 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 - -进入需要添加 Senparc.Weixin.Work 的模块的项目的目录,输入: - -> ```cs -> dotnet add package Senparc.Weixin.Work -> ``` - -![通过 dotnet CLI 安装](https://sdk.weixin.senparc.com/Docs/Work/images/home-install-02.png)通过 dotnet CLI 安装 - -安装完成后,可查看对应 .csproj 文件,被添加引用,如: - -```cs - - - -``` diff --git a/docs/zh/guide/Work/jssdk-agent-config.md b/docs/zh/guide/Work/jssdk-agent-config.md deleted file mode 100644 index fe30402c89..0000000000 --- a/docs/zh/guide/Work/jssdk-agent-config.md +++ /dev/null @@ -1,128 +0,0 @@ -# JSSDK(agentConfig) - -`wx.agentConfig()` 用于某些特定的接口(如审批流接口、剪切板接口等),但一般前提都需要先使用到常规的 JSSDK(参考【JSSDK(常规)】标签),因此这是一个增加项。 - -`wx.agentConfig()` 同样分为服务器端和客户端两部分。 - -## 服务端获取签名信息 - -后端除了后端通过 `JSSDKHelper.GetJsSdkUiPackageAsync()` 方法获取常规 JSSDK 运行所需参数以外,还需要使用同一个方法,传入不同参数来获取 `agetntConfig` 的对应参数: - -```JS -public async Task AgentConfig() -{ - //此处演示同时支持多个应用的注册,请参考 appsettings.json 文件 - var workSetting = Senparc.Weixin.Config.SenparcWeixinSetting["企业微信审批"] as ISenparcWeixinSettingForWork; - var url = "https://sdk.weixin.senparc.com/Work/Approval"; - - //获取 UI 信息包 - - /* 注意: - * 所有应用中,jsApiUiPackage 是必备的 - */ - var jsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, false); - var jsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, jsApiTicket, false); - ViewData["jsApiUiPackage"] = jsApiUiPackage; - - /* 注意: - * 1、这里需要使用 WeixinCorpAgentId,而不是 WeixinCorpId - * 2、agentJsApiUiPackage 是否需要提供,请参考官方文档,此处演示了最复杂的情况 - */ - ViewData["thirdNo"] = DateTime.Now.Ticks + Guid.NewGuid().ToString("n"); - ViewData["corpId"] = workSetting.WeixinCorpId; - ViewData["agentId"] = workSetting.WeixinCorpAgentId; - var agentConfigJsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, true); - var agentJsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, agentConfigJsApiTicket, true); - ViewData["agentJsApiUiPackage"] = agentJsApiUiPackage; - - return View(); -} -``` - -> 注意:上述方法中,使用了 -> -> `Senparc.Weixin.Config.SenparcWeixinSetting["企业微信审批"]` -> -> 来获取与之前不同的微信配置,请参考本项目中 -> -> `appsetting.json` -> -> 文件中的设置方法: -> -> ```JSON -> "Items": { -> //添加多个企业微信应用 -> "企业微信审批": { -> "WeixinCorpId": "#{WeixinCorpId2}#", -> "WeixinCorpAgentId": "#{WeixinCorpAgentId2}#", -> "WeixinCorpSecret": "#{WeixinCorpSecret2}#", -> "WeixinCorpToken": "#{WeixinCorpToken2}#", -> "WeixinCorpEncodingAESKey": "#{WeixinCorpEncodingAESKey2}#"} -> } -> ``` -> -> 此方法对所有其他模块也通用(如公众号、小程序、微信支付等)。 - -> 本项目参考文件: -> -> /Controllers/**_JSSDKnController.cs_** - AgentConfig() 方法 -> -> /**_appsettings.json_** - -## 网页端配置 JSSDK - -网页端除了进行常规的 JSSDK 配置以外,还需要在执行特定的 JsApi 方法之前,添加 `wx.agentConfig()` 的配置: - -```cs -function invoke(){ - wx.agentConfig({ - corpid: '@ViewData["corpId"]', // 必填,企业微信的corpid,必须与当前登录的企业一致 - agentid: '@ViewData["agentId"]', // 必填,企业微信的应用id (e.g. 1000247) - timestamp: @agentJsApiUiPackage.Timestamp, // 必填,生成签名的时间戳 - nonceStr: '@agentJsApiUiPackage.NonceStr', // 必填,生成签名的随机串 - signature: '@agentJsApiUiPackage.Signature',// 必填,签名,见附录-JS-SDK使用权限签名算法 - jsApiList: ['thirdPartyOpenPage'], //必填,传入需要使用的接口名称 - success: function(res) { - - // 回调 - wx.invoke('thirdPartyOpenPage', { - "oaType": "10001",// String - //"templateId": "C4NxepvGj51gbkeGXHQgYRArW96WrxRinNfyCxo7N",//SYS - "templateId":"247bcb886d0374a0a1f749c52794ba1a_622421053",// Open - "thirdNo": "",// String - "extData": { - 'fieldList': [{ - 'title': '审批类型', - 'type': 'text', - 'value': '文章审批', - }, - { - 'title': '预览', - 'type': 'link', - 'value': 'https://weixin.senparc.com', - }], - } - }, - function(res) { - // 输出接口的回调信息 - console.log(res); - alert('wx.invoke result:'+JSON.stringify(res)); - }); - }, - fail: function(res) { - if(res.errMsg.indexOf('function not exist') > -1){ - alert('版本过低请升级') - } - else{ - alert('wx.invoke fail:'+JSON.stringify(res)); - } - } - }); -} -``` - -HTML 页面进行触发:`点击唤起审批流程` - -> 本项目参考文件: -> -> /Views/**_JSSDK/Index.cshtml_** diff --git a/docs/zh/guide/Work/jssdk-general.md b/docs/zh/guide/Work/jssdk-general.md deleted file mode 100644 index 0048751988..0000000000 --- a/docs/zh/guide/Work/jssdk-general.md +++ /dev/null @@ -1,91 +0,0 @@ -# JSSDK(常规) - -JSSDK 用于提供微信内置浏览器接口的能力,例如转发控制、调用摄像头权限(拍照、视频)、文件上传、关闭窗口、唤起扫码窗口,等等。 - -要在内置浏览器中只用 JSSDK,分为“服务端获取签名信息”和“网页端配置 JSSDK”两步。 - -企业微信的网页端 JSSDK 配置,和公众号类似,不过多了一个名为 `wx.agentConfig()` 的配置方法。这里介绍常规的方法,`wx.agentConfig()` 配套方法请见【JSSDK(agentConfig】标签。 - -## 服务端获取签名信息 - -后端通过 `JSSDKHelper.GetJsSdkUiPackageAsync()` 方法即可自动获取前端所需的所有 JSSDK 运行所需参数: - -```cs -public async Task Index() -{ - // 当前 URL - var url = "https://sdk.work.weixin.senparc.com/JSSDK/"; - // 获取企业微信配置 - var workSetting = Senparc.Weixin.Config.SenparcWeixinSetting.WorkSetting; - // 获取 JsApiTicket(保密信息,不可外传) - var jsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, false); - // 获取 UI 打包信息 - var jsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, jsApiTicket, false); - - ViewData["jsApiUiPackage"] = jsApiUiPackage; - return View(); -} -``` - -> 本项目参考文件: -> -> /Controllers/**_JSSDKnController.cs_** - Index() 方法 - -## 网页端配置 JSSDK - -后端配置完成的参数,直接在前端 JS 中使用 `wx.config` 进行设置,例如以下代码将完成从企业微信内转发网页到**个人微信**: - -```cs -$(function(){ - wx.config({ - beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题 - debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 - appId: '@jsApiUiPackage.AppId', // 必填,企业微信的corpID - timestamp: @jsApiUiPackage.Timestamp, // 必填,生成签名的时间戳 - nonceStr: '@jsApiUiPackage.NonceStr', // 必填,生成签名的随机串 - signature: '@jsApiUiPackage.Signature',// 必填,签名,见 附录-JS-SDK使用权限签名算法 - jsApiList: ['shareWechatMessage'] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来 - }); - - wx.checkJsApi({ - jsApiList: ['shareWechatMessage'], // 需要检测的JS接口列表,所有JS接口列表见附录2, - success: function(res) { - // 以键值对的形式返回,可用的api值true,不可用为false - // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"} - //alert("wx.config success:"+JSON.stringify(res)); - } - }); -}); - -wx.ready(function(){ - // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 -}); - -wx.error(function(res){ - // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 - console.log(res); - alert(res); -}); - -function invoke(){ - wx.invoke( - "shareWechatMessage", { - title: '企业微信JSSDK 演示-转发', // 分享标题 - desc: '来自 Senparc.Weixin.Work', // 分享描述 - link: 'https://sdk.work.weixin.senparc.com/JSSDK', // 分享链接 - imgUrl: '' // 分享封面 - }, function(res) { - if (res.err_msg == "shareWechatMessage:ok") { - } - } - ); -} -``` - -HTML 页面进行触发:`转发到微信` - -> 本项目参考文件: -> -> /Views/JSSDK/**_Index.cshtml_** - -更多设置详情请参考:[JS-SDK 说明文档](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html)。 diff --git a/docs/zh/guide/Work/menu.md b/docs/zh/guide/Work/menu.md deleted file mode 100644 index 836b23df35..0000000000 --- a/docs/zh/guide/Work/menu.md +++ /dev/null @@ -1,79 +0,0 @@ -# 菜单设置 - -自定义菜单是企业微信应用界面的重要元素,菜单的使用分为 **设置** 和 **使用** 两个环节。 - -## 设置 - -方法一:在企业微信后台【应用管理】中,某个应用设置界面中,【功能】区域【自定义菜单】中设置(不使用开发模式),此处略。 - -方法二:使用代码进行设置(只需要执行一次,建议放在管理员后台,手动运行),如: - -```cs -public async Task CreateMenuTest() -{ - ButtonGroup bg = new ButtonGroup(); - - //单击 - bg.button.Add(new SingleClickButton() - { - name = "单击测试", - key = "OneClick", - type = MenuButtonType.click.ToString(),//默认已经设为此类型,这里只作为演示 - }); - - //二级菜单 - var subButton = new SubButton() - { - name = "二级菜单" - }; - subButton.sub_button.Add(new SingleClickButton() - { - key = "SubClickRoot_Text", - name = "返回文本" - }); - subButton.sub_button.Add(new SingleViewButton() - { - url = "https://weixin.senparc.com", - name = "Url跳转" - }); - bg.button.Add(subButton); - - var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting; - var appKey = AccessTokenContainer.BuildingKey(workWeixinSetting); - int agentId; - if (!int.TryParse(workWeixinSetting.WeixinCorpAgentId, out agentId)) - { - throw new WeixinException("WeixinCorpAgentId 必须为整数!"); - } - var result = await CommonApi.CreateMenuAsync(appKey, agentId, bg); - - Assert.IsNotNull(result); - Assert.AreEqual("ok", result.errmsg); -} -``` - -## 使用 - -设置完菜单后,当客户端点击菜单时,微信服务器会自动推送响应的回调信息到消息 URL(即已经设置好的 MessageHandler 内),只需在 WorkCustomMessageHandler 中重写(`override`)对应的方法即可。如针对上述 **方法二** 已经设定生效的菜单,当用户点击【单击测试】按钮时,我们可以在 WorkCustomMessageHandler 中进行接收和处理: - -```cs -public override IWorkResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage) -{ - var reponseMessage = CreateResponseMessage(); - - if (requestMessage.EventKey == "SubClickRoot_Text") - { - reponseMessage.Content = "您点击了【返回文本】按钮"; - } - else - { - reponseMessage.Content = "您点击了其他事件按钮"; - } - - return reponseMessage; -} -``` - -> 本项目参考文件: -> -> /MessageHandlers/**_WorkCustomMessageHandler.cs_** diff --git a/docs/zh/guide/Work/register.md b/docs/zh/guide/Work/register.md deleted file mode 100644 index e658c1d6de..0000000000 --- a/docs/zh/guide/Work/register.md +++ /dev/null @@ -1,64 +0,0 @@ -# 注册 - -## 全局注册 - -所有的 Senparc.Weixin SDK 注册过程都是类似的。 - -首先,完成所有 Senparc.Weixin SDK 的整体注册代码。在 Program.cs 中加入以下代码: - -![注册 Senparc.Weixin](https://sdk.weixin.senparc.com/Docs/Work/images/home-dev-register-01.png) - -说明: - -1. `builder.Services.AddMemoryCache()` Senparc.Weixin 支持本机缓存、Redis、Memcached 等多种缓存策略,默认使用本机缓存,此时需要激活本地缓存。 -2. `builder.Services.AddSenparcWeixinServices(builder.Configuration)` 用于完成 Senparc.Weixin 的注册。 -3. `app.UseSenparcWeixin()` 方法用于配置和启用 Senparc.Weixin。 - -以上代码对于所有的 Senparc.Weixin 下级模块都是相同的,只需要 3 句代码。 - -> 本项目参考文件: -> -> /**_Program.cs_** - -## 企业微信 - -在上述代码中的第 17 行委托方法中插入代码,即可完成默认公众号的注册: - -```cs -register.RegisterWorkAccount(weixinSetting, "【盛派网络】企业微信"); -``` - -![注册微信公众号](https://sdk.weixin.senparc.com/Docs/Work/images/home-dev-register-02.png) - -其中,`weixinSetting` 的值默认来自于 `appsettings.json`: - -```JSON -"SenparcWeixinSetting": { - //以下为 Senparc.Weixin 的 SenparcWeixinSetting 微信配置 - //注意:所有的字符串值都可能被用于字典索引,因此请勿留空字符串(但可以根据需要,删除对应的整条设置)! - - //微信全局 - "IsDebug": true, - - //以下不使用的参数可以删除,key 修改后将会失效 - - //企业微信 - "WeixinCorpId": "#{WeixinCorpId}#", - "WeixinCorpAgentId": "#{WeixinCorpAgentId}#", - "WeixinCorpSecret": "#{WeixinCorpSecret}#", - "WeixinCorpToken": "#{WeixinCorpToken}#", - "WeixinCorpEncodingAESKey": "#{WeixinCorpEncodingAESKey}#" - - //可以追加更多其他平台的配置信息 -} -``` - -其中,`WeixinCorpId` 是每个企业微信账号独有的 **corpId**,`WeixinCorpAgentId` 和 `WeixinCorpSecret` 对应每个不同应用的 **agentId** 和 **secret**, `WeixinCorpToken` 和 `WeixinCorpEncodingAESKey` 对应了当前应用消息接口的后台的配置参数。 - -> 本项目参考文件: -> -> /**_appsettings.json_** - -配置完成。 - -> 提示:自动注册的信息可通过 `Senparc.Weixin.Config.SenparcWeixinSetting` 获取。 diff --git a/docs/zh/guide/Work/source-code.md b/docs/zh/guide/Work/source-code.md deleted file mode 100644 index 0641c2aed7..0000000000 --- a/docs/zh/guide/Work/source-code.md +++ /dev/null @@ -1,15 +0,0 @@ -# 源码 - -## Senparc.Weixin SDK 源码 - -GitHub:[github_WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK)(更新更快) - -Gitee:[gitee_WeiXinMPSDK](https://gitee.com/JeffreySu/WeiXinMPSDK) (从 GitHub 同步) - -## 打包代码 - -Nuget 包地址:[https://www.nuget.org/packages/Senparc.Weixin.Work](https://www.nuget.org/packages/Senparc.Weixin.Work) - -## 本地源码文件 - -Senparc.Weixin.Work 源码位置:[/src/Senparc.Weixin.Work](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.Work) diff --git a/docs/zh/guide/WxOpen/advanced-interface.md b/docs/zh/guide/WxOpen/advanced-interface.md deleted file mode 100644 index 84933e46d1..0000000000 --- a/docs/zh/guide/WxOpen/advanced-interface.md +++ /dev/null @@ -1,35 +0,0 @@ -# 高级接口 - -完成 `Program.cs` 文件中的常规注册后,即可在程序的任意地方使用高级接口。 - -> 注意: -> 1、高级接口的配置和 `MessageHandler` 没有关联,两者可以独立或配合使用。 -> 2、SDK 内几乎所有高级接口的第一个参数同时支持传入 AppId 或 AccessToken,通常名称为 `appIdOrAccessToken`,SDK 会根据参数特征自动识别输入的是 AppId 还是 AccessToken,并做区分处理。 - -## 使用 AppId 调用接口(推荐) - -例如,我们可以在任意一个方法中调用一个高级接口: - -```cs -using Senparc.Weixin.WxOpen.AdvancedAPIs; - -var appId = Senparc.Weixin.Config.SenparcWeixinSetting.WxOpenAppId; -var openId = "xxx"; -var content = "这是一条客服消息"; -var result = await CustomApi.SendTextAsync(appId, openId, content);//发送客服消息 -``` - -> appId 参数,必须是已经经过注册的,这样即使 AccessToken 过期,SDK 也会全自动处理。如果是未经过注册的 appId,则需要先获取 AccessToken,然后调用接口。 - -## 使用 AccessToken 调用接口(不推荐) - -```cs -var accessToken = Senparc.Weixin.MP.CommonApi.GetTokenAsync(appId, appSecret);//获取 AccessToken -var openId = "xxx"; -var content = "这是一条客服消息"; -var result = await CustomApi.SendTextAsync(accessToken, openId, content);//发送客服消息 -``` - -> 注意: -> 1、使用 AccessToken 方式调用接口,无法保证当前 AccessToken 的有效性,因此建议使用前进行有效性校验,并使用 `try-catch` 方式捕获 AccessToken 不可用的异常,然后进行重试。因此直接使用 AccessToken 调用接口的方式并不推荐在常规情况下使用。 -> 2、小程序和公众号使用相同的 AccessToken 获取接口,因此,此处调用了 `Senparc.Weixin.MP` 类库中公众号的相同方法。因为 `Senparc.Weixin.WxOpen` 模块默认已经依赖了 `Senparc.Weixin.MP`,所以不必再手动安装 MP 模块。 diff --git a/docs/zh/guide/WxOpen/advanced.md b/docs/zh/guide/WxOpen/advanced.md deleted file mode 100644 index 1b32c519b3..0000000000 --- a/docs/zh/guide/WxOpen/advanced.md +++ /dev/null @@ -1,11 +0,0 @@ -# 进阶 - -当前示例展示了最基本和常用的功能,如果您需要了解更多高级玩法,并且有扎实的编程功底,请参考完整示例。 - -> 完整示例解决方案文件: -> -> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7.sln](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/All/net7-mvc) - -> 务必阅读 readme 文件: -> -> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/readme.md](https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/All/net7-mvc/readme.md) diff --git a/docs/zh/guide/WxOpen/client-development.md b/docs/zh/guide/WxOpen/client-development.md deleted file mode 100644 index bfe847333e..0000000000 --- a/docs/zh/guide/WxOpen/client-development.md +++ /dev/null @@ -1,13 +0,0 @@ -# 客户端开发 - -## 准备开发 - -开发小程序客户端(手机微信内展示的小程序界面),需要使用 [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html)。 - -> 微信小程序示例项目参考文件: -> -> Senparc.Weixin SDK 源文件根目录/**_Samples/WxOpen/Senparc.Weixin.WxOpen.AppDemo/_** - -上述示例项目打开后如下图所示: - -![小程序客户端](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-client-01.png) diff --git a/docs/zh/guide/WxOpen/get-phone-number.md b/docs/zh/guide/WxOpen/get-phone-number.md deleted file mode 100644 index 9d0e90d990..0000000000 --- a/docs/zh/guide/WxOpen/get-phone-number.md +++ /dev/null @@ -1,89 +0,0 @@ -# 获取手机号 - -> 注意:小程序获取手机号的接口,进行过一次升级,先前在客户端直接获取手机号的方式已经被淘汰(示例中左侧【获取手机号】按钮),目前最新的接口是使用 code 到服务器端后台获取手机号(示例中右侧【获取手机号(Code)】按钮。 -> -> ![入口页面](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-phone-01.png)入口页面 -> -> 当用户点击后,系统进行授权提示: -> -> ![授权手机号](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-phone-02.png)授权手机号 -> -> 点击【允许】按钮,通过访问后端接口,获取到手机号: -> -> ![授权手机号](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-phone-03.png)授权手机号 - -## 客户端 - -在 Index.wxml 文件中放置按钮: - -```XML - -``` - -> 本项目参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.wxml_** - -上述代码中,`open-type="getPhoneNumber"` 指定了当前按钮获取手机号的用途,`bindgetphonenumber="getUserPhoneNumber"` 指定了处理方法为 `getUserPhoneNumber`(对应于 .js 文件中): - -```JS -getUserPhoneNumber:function(e){ - wx.request({ - url: wx.getStorageSync('domainName') + '/WxOpen/GetUserPhoneNumber?code=' + e.detail.code, - success: function (res) { - // success - var json = res.data; - - if(!json.success){ - wx.showModal({ - title: '解密过程发生异常', - content: json.msg, - showCancel: false - }); - return; - } - - //模组对话框 - var phoneNumberData = json.phoneInfo; - var msg = '手机号:' + phoneNumberData.phoneNumber+ - '\r\n手机号(不带区号):' + phoneNumberData.purePhoneNumber+ - '\r\n区号(国别号)' + phoneNumberData.countryCode+ - '\r\n水印信息:' + JSON.stringify(phoneNumberData.watermark); - - wx.showModal({ - title: '收到服务器端通过 code 获取的手机号信息', - content: msg, - showCancel: false - }); - } - }) - } -``` - -当用户点击按钮,并授权手机号后,就会触发上述方法,通过 `e` 参数提供的 `e.code`,将其提交给服务器后台 **/WxOpen/GetUserPhoneNumber** 地址,后台将使用 `code` 换取用户的手机号,然后进行储存或返回给前端。上述代码的模组对话框只是演示作用,实际项目中一般不需要再次弹出信息。 - -> 本项目参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_/pages/index/index.js_** - -## 后端代码 - GetUserPhoneNumber - -```cs -public async Task GetUserPhoneNumber(string code) -{ - try - { - var result = await BusinessApi.GetUserPhoneNumberAsync(WxOpenAppId, code); - return Json(new { success = true, phoneInfo = result.phone_info }); - } - catch (Exception ex) - { - return Json(new { success = false, msg = ex.Message }); - } -} -``` - -> 本项目参考文件: -> -> /Controllers/**_WxOpenController.cs_** diff --git a/docs/zh/guide/WxOpen/install.md b/docs/zh/guide/WxOpen/install.md deleted file mode 100644 index c6eb6815f0..0000000000 --- a/docs/zh/guide/WxOpen/install.md +++ /dev/null @@ -1,69 +0,0 @@ -# 如何安装? - -您可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包,推荐),以方便随时获取官方的更新。注意:直接引用源码和引用 Nuget 包只能二选一。 - -## 引用源码 - -您可以打开 **../All/net6-mvc/** 前解决方案(全量进阶示例),在 **Libraries** 目录下,将所需要引用的程序集引用(复制)到您开发环境的解决方案中,请注意需要同时引用被依赖的项目,如 `Senparc.Weixin` 项目是所有项目都需要依赖的。 - -当前示例项目默认就使用了直接引用源码的方式,可从 .csproj 文件中看到引用方式: - -```cs - - - -``` - -## 引用程序集(推荐) - -您可以通过 `Visual Studio`、`Visual Studio Code`、`dotnet 命令行` 等多种方式自动安装 Nuget 包。 - -### Visual Studio - -在开发项目【解决方案资源管理器】中,对需要添加 Senparc.Weixin.WxOpen 的模块点击右键,点击【管理 Nuget 程序包】,在【浏览】标签中输入 **Senparc.Weixin.TenPay**,点击右侧【安装】按钮。如下图所示: - -![通过 Visual Studio 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-01.png) - -### Visual Studio Code - -首先,确认已经安装好 [VS Code](https://code.visualstudio.com/) 以及 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 - -然后,打开解决方案或项目所在目录,按 Ctrl+~,打开终端面板: - -![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-03.png "打开 VS Code 终端面板") - -进入需要添加 Senparc.Weixin.WxOpen 的模块的项目的目录,输入: - -> ```cs -> dotnet add package Senparc.Weixin.WxOpen -> ``` - -![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-04.png "安装 Senparc.Weixin.WxOpen 模块") - -安装完成后,可查看对应 .csproj 文件,被添加引用,如: - -```cs - - - -``` - -### dotnet 命令行 - -首先,确认已经安装好 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 - -进入需要添加 Senparc.Weixin.WxOpen 的模块的项目的目录,输入: - -> ```cs -> dotnet add package Senparc.Weixin.WxOpen -> ``` - -![通过 dotnet CLI 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-02.png "通过 dotnet CLI 安装") - -安装完成后,可查看对应 .csproj 文件,被添加引用,如: - -```cs - - - -``` diff --git a/docs/zh/guide/WxOpen/login.md b/docs/zh/guide/WxOpen/login.md deleted file mode 100644 index 00257b19e8..0000000000 --- a/docs/zh/guide/WxOpen/login.md +++ /dev/null @@ -1,319 +0,0 @@ -# 登录 - -## 简介 - -大部分的小程序都需要识别用的身份信息(OpenId)以及获取用户的头像、昵称等信息为用户提供身份识别、个性化信息展示的服务。此时就需要使用到小程序登录接口。 - -## 客户端 - 进入登录页 - -用户的登录是在小程序端发起的,一般而言可以做一个独立的页面用于放置说明及登录按钮。首先,在入口网页放置一个入口按钮: - -```HTML - -``` - -点击按钮后,触发 .js 文件中的 `getUserInfo()` 方法: - -```JS - getUserInfo: function(){ - wx.navigateTo({ - url: '../Login/Login', - }) - } -``` - -此按钮将引导页面跳转到独立的 Login 页面。 - -![跳转到登录页](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-01.png)跳转到登录页 - -> 本项目参考文件: Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.wxml_** Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.js_** - -## 客户端 - 登录页 - -登录页包含系统登录展示、隐私协议等内容,并包含一个触发最终小程序客户端登录事件的按钮: - -```XML - - - 您好,, - 当前小程序为 Senparc.Weixin SDK 的功能体验小程序,包括了订阅消息、获取用户授权信息、手机号、WebSocket、客服消息等演示内容,大部分内容需要授权后进行,点击【获取头像昵称】按钮进行授权,才能进入测试页面。 - 如果您不希望授权,请直接关闭此页面。 - - -``` - -![登录页面](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-02.png) - -> 本项目参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/Login/Login.wxml_** - -【获取头像昵称】按钮绑定了方法 `getUserInfo()`,在 **Login.js** 中添加: - -```JS -var app = getApp() -getUserInfo: function (e) { - var that = this; - app.getUserInfo(e, function(userInfo){ - app.globalData.userInfo = userInfo - that.setData({ - userInfo: userInfo, - hasUserInfo: true - }); - wx.navigateTo({ - url: '../index/index', - }) - }); - } -``` - -> 本项目参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/Login/Login.js_** - -上述代码中,使用 `var app = getApp()` 引入了全局方法(代码在根目录 **app.js**中),其中,`app.getUserInfo()` 方法代码如下(为了更加贴近实际使用场景,我们将 **登录** + **获取用户信息** 放在连贯的代码中展示): - -```JS -getUserInfo:function(cb,callback){ - var that = this - if(this.globalData.userInfo){ - typeof cb == "function" && cb(this.globalData.userInfo) - }else{ - //获取userInfo并校验 - console.log('准备调用 wx.getUserProfile'); - wx.getUserProfile({ - desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 - success: function (userInfoRes) { - console.log('get getUserProfile', userInfoRes); - that.globalData.userInfo = userInfoRes.userInfo - typeof cb == "function" && cb(that.globalData.userInfo) - typeof callback == "function" && callback(userInfoRes.userInfo) - - //调用登录接口 - wx.login({ - success: function (res) { - //换取openid & session_key - wx.request({ - url: wx.getStorageSync('domainName') + '/WxOpen/OnLogin', - method: 'POST', - header: { 'content-type': 'application/x-www-form-urlencoded' }, - data: { - code: res.code - }, - success:function(json){ - console.log('wx.login - request-/WxOpen/OnLogin Result:', json); - var result = json.data; - if(result.success) - { - wx.setStorageSync('sessionId', result.sessionId); - //校验 - wx.request({ - url: wx.getStorageSync('domainName') + '/WxOpen/CheckWxOpenSignature', - method: 'POST', - header: { 'content-type': 'application/x-www-form-urlencoded' }, - data: { - sessionId: result.sessionId,//wx.getStorageSync('sessionId'), - rawData:userInfoRes.rawData, - signature:userInfoRes.signature - }, - success:function(json){ - console.log(json.data); - if(!json.data.success){ - alert(json.data.msg); - } - } - }); - - //解密数据(建议放到校验success回调函数中,此处仅为演示) - wx.request({ - url: wx.getStorageSync('domainName') + '/WxOpen/DecodeEncryptedData', - method: 'POST', - header: { 'content-type': 'application/x-www-form-urlencoded' }, - data: { - 'type':"userInfo", - sessionId: result.sessionId,//wx.getStorageSync('sessionId'), - encryptedData: userInfoRes.encryptedData, - iv: userInfoRes.iv - }, - success:function(json){ - console.log('数据解密:', json.data); - } - }); - }else{ - console.log('储存session失败!',json); - } - } - }) - } - }) - } - }); - } - } -``` - -> 上述代码是整个微信登录客户端的核心代码。 - -其中: - -1. `wx.getUserProfile` 用于调起获取用户信息的接口,此接口本身和登录行为本身无直接联系,但是为了保证用户信息的正确性,后续需要在登录成功后的回调中使用到其中的加密信息来获取真实的用户信息,因此需要首先触发。 - -2. `wx.login` 是小程序客户端的登录接口,其中 `success` 为登录自后的回调函数。在回调函数中,我们使用 `wx.request` 向服务器端 **/WxOpen/OnLogin** 地址发送一条请求,带上 `success` 回调的参数 `res.code`,其中将使用 `code` 利用服务器端的 API 换取 `session_key`,并储存在服务器端,同时生成临时的用户身份标记 `SessionId` 并返回给客户端。 - 成功回调后,再使用 `wx.setStorageSync('sessionId', result.sessionId);` 将收到的 `SessionId` 储存在本地缓存中。 - -3. 虽然`userInfoRes.rawData` 已经提供了明文的用户信息,但并不能确保其是安全(未经篡改或完整)的,因此需要向服务器发送请求,验证其真实性。 - - 继续使用`wx.request`方法请求**/WxOpen/CheckWxOpenSignature**地址,发送`sessionId`以及第 1 步中获取到的`userInfoRes.rawData`以及`userInfoRes.signature`,校验信息的真实性。验证通过后,可以在客户端直接使用`rawData`。 - - > 注意:有的开发者会把经过验证后的 `rawData` 发送给服务器保存,认为此信息是有效的,**这是具有风险的做法,应当抛弃**,正确的做法是使用上述代码中后续的方式(**/WxOpen/DecodeEncryptedData**)发送 `userInfoRes.encryptedData` 给服务器解密。因为:第一,`rawData` 从被验证成功到明文发送给服务器的过程中无法确保是否被篡改;第二,明文传输用户的敏感信息容易被监听和窃取,这种做法本身不应该出现在整个项目的任何地方。 - -4. 真实性(签名)验证通过后,继续使用 `wx.request` 请求服务器 **/WxOpen/DecodeEncryptedData** 地址,发送 `sessionId`以及第 1 步中获取到的 `userInfoRes.encryptedData` 以及 `userInfoRes.iv`,服务器端将解密 `encryptedData` 获得用户信息,并储存。 - -> 本项目参考文件: -> -> Senparc.Weixin.**_WxOpen.AppDemo/app.js_** - -## 服务器端 - OnLogin - -服务器端 **/WxOpen/OnLogin** 代码如下: - -```cs -[HttpPost] -public ActionResult OnLogin(string code) -{ - try - { - var jsonResult = SnsApi.JsCode2Json(WxOpenAppId, WxOpenAppSecret, code); - if (jsonResult.errcode == ReturnCode.请求成功) - { - //Session["WxOpenUser"] = jsonResult;//使用Session保存登陆信息(不推荐) - //使用SessionContainer管理登录信息(推荐) - var unionId = ""; - var sessionBag = SessionContainer.UpdateSession(null, jsonResult.openid, jsonResult.session_key, unionId); - - //注意:生产环境下SessionKey属于敏感信息,不能进行传输! - return Json(new { success = true, msg = "OK", sessionId = sessionBag.Key, sessionKey = sessionBag.SessionKey/* 此参数千万不能暴露给客户端!处仅作演示! */ }); - } - else - { - return Json(new { success = false, msg = jsonResult.errmsg }); - } - } - catch (Exception ex) - { - return Json(new { success = false, msg = ex.Message }); - } -} -``` - -> 特别注意:`SessionKey` 是非常敏感的信息,上述代码只是做演示,向客户端证明已经生成,实际开发过程中不可传递到客户端! - -> 本项目参考文件: -> -> /Controllers/**_WxOpenController.cs_** - -## 服务器端 - CheckWxOpenSignature - -服务器端 **/WxOpen/CheckWxOpenSignature** 代码如下: - -```cs -[HttpPost] -public ActionResult CheckWxOpenSignature(string sessionId, string rawData, string signature) -{ - try - { - var checkSuccess = Senparc.Weixin.WxOpen.Helpers.EncryptHelper.CheckSignature(sessionId, rawData, signature); - return Json(new { success = checkSuccess, msg = checkSuccess ? "签名校验成功" : "签名校验失败" }); - } - catch (Exception ex) - { - return Json(new { success = false, msg = ex.Message }); - } -} -``` - -> 本项目参考文件: -> -> /Controllers/**_WxOpenController.cs_** - -## 服务器端 - DecodeEncryptedData - -服务器端 **/WxOpen/DecodeEncryptedData** 代码如下: - -```cs -public async Task DecodeEncryptedData(string type, string sessionId, string encryptedData, string iv) -{ - DecodeEntityBase decodedEntity = null; - - try - { - switch (type.ToUpper()) - { - case "USERINFO"://wx.getUserInfo() - decodedEntity = EncryptHelper.DecodeUserInfoBySessionId( - sessionId, - encryptedData, iv); - break; - default: - break; - } - } - catch (Exception ex) - { - WeixinTrace.SendCustomLog("EncryptHelper.DecodeUserInfoBySessionId 方法出错", - $@"sessionId: {sessionId} -encryptedData: {encryptedData} -iv: {iv} -sessionKey: { (await SessionContainer.CheckRegisteredAsync(sessionId) - ? (await SessionContainer.GetSessionAsync(sessionId)).SessionKey - : "未保存sessionId")} - -异常信息: -{ex.ToString()} -"); - } - - //检验水印 - var checkWatermark = false; - if (decodedEntity != null) - { - checkWatermark = decodedEntity.CheckWatermark(WxOpenAppId); - - //保存用户信息(可选) - if (checkWatermark && decodedEntity is DecodedUserInfo decodedUserInfo) - { - var sessionBag = await SessionContainer.GetSessionAsync(sessionId); - if (sessionBag != null) - { - await SessionContainer.AddDecodedUserInfoAsync(sessionBag, decodedUserInfo); - } - } - } - - //注意:此处仅为演示,敏感信息请勿传递到客户端! - return Json(new - { - success = checkWatermark, - //decodedEntity = decodedEntity, - msg = $"水印验证:{(checkWatermark ? "通过" : "不通过")}" - }); -} -``` - -> 本项目参考文件: -> -> /Controllers/**_WxOpenController.cs_** - -## 完成 - -完成代码后,运行服务器端程序和小程序客户端,在客户端中点击【获取头像昵称】按钮,进入登录页面,点击【获取头像昵称】按钮,即可看到弹出系统确认授权对话窗口: - -![授权界面](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-03.png) - -点击【允许】按钮,即可自动完成整个自动登录、用户信息抓取过程: - -![完成登录和用户信息获取](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-04.png) - -此时,再点击【获取数据】按钮,即可看到已经获取到的用户信息: - -![用户信息](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-05.png) diff --git a/docs/zh/guide/WxOpen/other.md b/docs/zh/guide/WxOpen/other.md deleted file mode 100644 index 237821abd0..0000000000 --- a/docs/zh/guide/WxOpen/other.md +++ /dev/null @@ -1,19 +0,0 @@ -# 其他 - -更多接口用法,可参考【获取手机号】中的方法,参考客户端(.wxml、.js)以及后端(WxController.cs)文件,用法几乎都是一致的。 - -> 后端本项目参考文件: -> -> /Controllers/**_WxOpenController.cs_** -> -> 客户端参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_app.js_** - 全局方法 -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/index_** - 首页文件 -> -> Senparc.Weixin.WxOpen.AppDemo**_/pages/Login_** - 登录页文件 -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/QrCode_** - 获取二维码文件 -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/websocket_signalr_** - WebSocket 文件(进阶) diff --git a/docs/zh/guide/WxOpen/register.md b/docs/zh/guide/WxOpen/register.md deleted file mode 100644 index 5963d9c563..0000000000 --- a/docs/zh/guide/WxOpen/register.md +++ /dev/null @@ -1,57 +0,0 @@ -# 注册 - -## 全局注册 - -所有的 Senparc.Weixin SDK 注册过程都是类似的。 - -首先,完成所有 Senparc.Weixin SDK 的整体注册代码。在 Program.cs 中加入以下代码: - -![注册 Senparc.Weixin](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-dev-register-01.png) - -说明: - -1. `builder.Services.AddMemoryCache()` Senparc.Weixin 支持本机缓存、Redis、Memcached 等多种缓存策略,默认使用本机缓存,此时需要激活本地缓存。 -2. `builder.Services.AddSenparcWeixinServices(builder.Configuration)` 用于完成 Senparc.Weixin 的注册。 -3. `app.UseSenparcWeixin()` 方法用于配置和启用 Senparc.Weixin。 - -以上代码对于所有的 Senparc.Weixin 下级模块都是相同的,只需要 3 句代码。 - -> 本项目参考文件: -> -> /**_Program.cs_** - -## 公众号注册 - -在上述代码中的第 17 行委托方法中插入代码,即可完成默认公众号的注册: - -```cs -register.RegisterWxOpenAccount(weixinSetting, "【盛派网络小助手】小程序"); -``` - -![注册微信公众号](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-dev-register-02.png) - -其中,`weixinSetting` 的值默认来自于 `appsettings.json`: - -```json - "SenparcWeixinSetting": { - "IsDebug": true, - - //小程序 - "WxOpenAppId": "#{WxOpenAppId}#", - "WxOpenAppSecret": "#{WxOpenAppSecret}#", - "WxOpenToken": "#{WxOpenToken}#", - "WxOpenEncodingAESKey": "#{WxOpenEncodingAESKey}#" - } -``` - -![配置参数](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-dev-register-03.png) - -其中,`WxOpenToken`、`WxOpenEncodingAESKey`、`WxOpenAppId` 和 `WxOpenAppSecret` 对应了微信公众号后台的配置参数。 - -> 本项目参考文件: -> -> /**_appsettings.json_** - -配置完成。 - -> 提示:自动注册的信息可通过 `Senparc.Weixin.Config.SenparcWeixinSetting` 获取。 diff --git a/docs/zh/guide/WxOpen/request-service.md b/docs/zh/guide/WxOpen/request-service.md deleted file mode 100644 index 7798952fb4..0000000000 --- a/docs/zh/guide/WxOpen/request-service.md +++ /dev/null @@ -1,108 +0,0 @@ -# 小程序请求服务 - -小程序客户端可以使用类似 Ajax 的功能对服务器端发送请求,并且获取响应信息(一般为 JSON)。 - -## 放置触发请求的按钮 - -在完成【客户端开发】的基本准备工作后,在页面上(如 **/pages/index/index.wxml**),创建一个按钮,用于触发请求: - -```xml - -``` - -上述代码中,`type`、`class`、`hover-class` 分别设置了按钮的类型、常规样式、点击样式,`bindtap="doRequest"` 指定了点击之后,由 `doRequest()` 方法(function)进行处理。 - -> 本项目参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.wxml_** - -## 请求服务器方法 - -`doRequest() `方法写在 **index.js** 文件中: - -```js -//处理wx.request请求 -doRequest:function(){ - var that = this; - wx.request({ - url: wx.getStorageSync('domainName') + '/WxOpen/RequestData', - data: { nickName : that.data.userInfo.nickName}, - method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT - header: { 'content-type':'application/x-www-form-urlencoded'}, - success: function(res){ - // success - var json = res.data; - //模组对话框 - wx.showModal({ - title: '收到消息', - content: json.msg, - showCancel:false, - success: function(res) { - if (res.confirm) { - console.log('用户点击确定') - } - } - }); - }, - fail: function() { - // fail - }, - complete: function() { - // complete - } - }) -}, -``` - -上述代码中: - -1. `wx.request(...)` 方法用于向服务器端发起请求,类似其他 JS 框架中的 **axios.get() / .post()** 或 **$.ajax()** 等。 -2. `url` 用于指定需要发送到的 API 地址。其中,`wx.getStorageSync('domainName')` 用于灵活指定开发环境或生产环境的域名(见本目录 **app.js** 文件。 -3. `data` 用于存放需要提交的数据,此处我们从本地数据中心取 `userInfo.nickName`,当用户登陆后,即可取到**微信昵称**,否则为 **undefined**。 -4. `method` 为请求的方法名称,当前使用 POST 方式提交。 -5. `header` 用于指定当前请求 Header 中的参数,通常也可以在 JWT 模式中提供用于用户身份验证的 Token。 -6. `success` 为当前请求成功响应(200)后的回调,示例中的代码展示了当收到成功信息后,弹出一个模组对话框,显示返回的内容,并在点击【确定】按钮后,在控制台输出相关日志。 -7. `fail` 和 `complete` 方法分别用于处理失败的请求,以及整个请求完成后的统一操作。 - -> 本项目参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.js_** - -## 服务器端接口 - -服务器端可以使用各类能够接受请求的方式,如页面、MVC 中的 Action、Web Api、中间件(Middleware),甚至 aspx、ashx 等。 - -上述请求地址在本地环境下为:**https://localhost:44367/WxOpen/RequestData**,我们在 WxOpenController 下面创建一个 RequestData 的 Action 用于接收请求: - -```cs -[HttpPost] -public ActionResult RequestData(string nickName) -{ - var data = new - { - msg = string.Format("服务器时间:{0},昵称:{1}", SystemTime.Now.LocalDateTime, nickName) - }; - return Json(data); -} -``` - -> 本项目参考文件: -> -> /Controllers/**_WxOpenController.cs_** - -## 测试 - -点击【获取数据】按钮: - -![发送请求](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-request-01.png) - -由于当前没有登录,所以昵称无法获取到,登陆后即可显示昵称。 - -> 提示:登录操作请见【登录】标签。 - -点击【确定】按钮: - -![点击确定按钮](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-request-02.png) diff --git a/docs/zh/guide/WxOpen/source-code.md b/docs/zh/guide/WxOpen/source-code.md deleted file mode 100644 index da6e48ed5e..0000000000 --- a/docs/zh/guide/WxOpen/source-code.md +++ /dev/null @@ -1,15 +0,0 @@ -# 源码 - -## Senparc.Weixin SDK 源码 - -GitHub:[https://github.com/JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK)(更新更快) - -Gitee:[https://gitee.com/JeffreySu/WeiXinMPSDK](https://gitee.com/JeffreySu/WeiXinMPSDK) (从 GitHub 同步) - -## 打包代码 - -Nuget 包地址:[https://www.nuget.org/packages/Senparc.Weixin.WxOpen](https://www.nuget.org/packages/Senparc.Weixin.WxOpen) - -## 本地源码文件 - -Senparc.Weixin.WxOpen 源码位置:[/src/Senparc.Weixin.WxOpen](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.WxOpen) diff --git a/docs/zh/guide/mp/advanced-interface.md b/docs/zh/guide/mp/advanced-interface.md deleted file mode 100644 index d301a67975..0000000000 --- a/docs/zh/guide/mp/advanced-interface.md +++ /dev/null @@ -1,27 +0,0 @@ -# 高级接口 - -完成 `Program.cs` 文件中的常规注册后,即可在程序的任意地方使用高级接口。 - -> 注意: -> 1、高级接口的配置和 `MessageHandler` 没有关联,两者可以独立或配合使用。 -> 2、SDK 内几乎所有高级接口的第一个参数同时支持传入 AppId 或 AccessToken,通常名称为 `appIdOrAccessToken`,SDK 会根据参数特征自动识别输入的是 AppId 还是 AccessToken,并做区分处理。 - -## 使用 AppId 调用接口(推荐) - -例如,我们可以在任意一个方法中调用一个高级接口: - -```cs -var appId = Senparc.Weixin.Config.SenparcWeixinSetting.AppId; -var result = await Senparc.Weixin.MP.AdvancedAPIs.UserApi.GetAsync(appId);//获取关注者 OpenId 信息 -``` - -> appId 参数,必须是已经经过注册的,这样即使 AccessToken 过期,SDK 也会全自动处理。如果是未经过注册的 appId,则需要先获取 AccessToken,然后调用接口。 - -## 使用 AccessToken 调用接口(不推荐) - -```cs -var accessToken = Senparc.Weixin.MP.CommonApi.GetTokenAsync(appId, appSecret);//获取 AccessToken -var result = await Senparc.Weixin.MP.AdvancedAPIs.UserApi.GetAsync(accessToken);//获取关注者 OpenId 信息 -``` - -> 注意:使用 AccessToken 方式调用接口,无法保证当前 AccessToken 的有效性,因此建议使用前进行有效性校验,并使用 `try-catch` 方式捕获 AccessToken 不可用的异常,然后进行重试。因此直接使用 AccessToken 调用接口的方式并不推荐在常规情况下使用。 diff --git a/docs/zh/guide/mp/advanced.md b/docs/zh/guide/mp/advanced.md deleted file mode 100644 index 1b32c519b3..0000000000 --- a/docs/zh/guide/mp/advanced.md +++ /dev/null @@ -1,11 +0,0 @@ -# 进阶 - -当前示例展示了最基本和常用的功能,如果您需要了解更多高级玩法,并且有扎实的编程功底,请参考完整示例。 - -> 完整示例解决方案文件: -> -> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7.sln](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/All/net7-mvc) - -> 务必阅读 readme 文件: -> -> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/readme.md](https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/All/net7-mvc/readme.md) diff --git a/docs/zh/guide/mp/install.md b/docs/zh/guide/mp/install.md deleted file mode 100644 index ec39b26fbf..0000000000 --- a/docs/zh/guide/mp/install.md +++ /dev/null @@ -1,73 +0,0 @@ -# 如何安装? - -您可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包,推荐),以方便随时获取官方的更新。注意:直接引用源码和引用 Nuget 包只能二选一。 - -## 引用源码 - -您可以在当前解决方案中,**Libraries** 目录下,将所需要引用的程序集引用(复制)到您开发环境的解决方案中,请注意需要同时引用被依赖的项目,如 `Senparc.Weixin` 项目是所有项目都需要依赖的。 - -当前示例项目默认就使用了直接引用源码的方式,可从 .csproj 文件中看到引用方式: - -```cs - - - - - -``` - -## 引用程序集(推荐) - -您可以通过 `Visual Studio`、`Visual Studio Code`、`dotnet 命令行` 等多种方式自动安装 Nuget 包。 - -### Visual Studio - -在开发项目【解决方案资源管理器】中,对需要添加 Senparc.Weixin.MP 的模块点击右键,点击【管理 Nuget 程序包】,在【浏览】标签中输入 **Senparc.Weixin.MP**,点击右侧【安装】按钮。如下图所示: - -![通过 Visual Studio 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-01.png) - -### Visual Studio Code - -首先,确认已经安装好 [VS Code](https://code.visualstudio.com/) 以及 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 - -然后,打开解决方案或项目所在目录,按 Ctrl+~,打开终端面板: - -![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-03.png) - -进入需要添加 Senparc.Weixin.MP 的模块的项目的目录,输入: - -> ```cs -> dotnet add package Senparc.Weixin.MP -> ``` - -安装 Senparc.Weixin.MP 模块 - -![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-04.png) - -安装完成后,可查看对应 .csproj 文件,被添加引用,如: - -```cs - - - -``` - -### dotnet 命令行 - -首先,确认已经安装好 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 - -进入需要添加 Senparc.Weixin.MP 的模块的项目的目录,输入: - -> ```cs -> dotnet add package Senparc.Weixin.MP -> ``` - -![通过 dotnet CLI 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-02.png) - -安装完成后,可查看对应 .csproj 文件,被添加引用,如: - -```cs - - - -``` diff --git a/docs/zh/guide/mp/jssdk.md b/docs/zh/guide/mp/jssdk.md deleted file mode 100644 index 01c6a5d703..0000000000 --- a/docs/zh/guide/mp/jssdk.md +++ /dev/null @@ -1,87 +0,0 @@ -# JSSDK - -JSSDK 用于提供微信内置浏览器接口的能力,例如转发控制、调用摄像头权限(拍照、视频)、文件上传、关闭窗口、唤起扫码窗口,等等。 - -要在内置浏览器中只用 JSSDK,分为“服务端获取签名信息”和“网页端配置 JSSDK”两步。 - -## 服务端获取签名信息 - -后端通过 `JSSDKHelper.GetJsSdkUiPackageAsync()` 方法即可自动获取前端所需的所有 JSSDK 运行所需参数: - -```cs -public async Task Index() -{ - var jssdkUiPackage = await JSSDKHelper.GetJsSdkUiPackageAsync(appId, appSecret, Request.AbsoluteUri()); - return View(jssdkUiPackage); -} -``` - -> 本项目参考文件: -> -> /Controllers/**_WeixiJSSDKnController.cs_** - -## 网页端配置 JSSDK - -后端配置完成的参数,直接在前端 JS 中使用 `wx.config` 进行设置,例如以下代码将完成在转发网页时自定义转发消息的标题和图片: - -```js -wx.config({ - debug: false, // 开启调试模式 - appId: "@Model.AppId", // 必填,公众号的唯一标识 - timestamp: "@Model.Timestamp", // 必填,生成签名的时间戳 - nonceStr: "@Model.NonceStr", // 必填,生成签名的随机串 - signature: "@Model.Signature", // 必填,签名 - jsApiList: ["checkJsApi", "onMenuShareTimeline", "onMenuShareAppMessage"], -}); - -wx.error(function (res) { - console.log(res); - alert("验证失败"); -}); - -wx.ready(function () { - var url = "https://sdk.weixin.senparc.com"; - var link = url + ""; - var imgUrl = url + "/images/v2/ewm_01.png"; - - //转发到朋友圈 - wx.onMenuShareTimeline({ - title: "JSSDK朋友圈转发测试", - link: link, - imgUrl: imgUrl, - success: function () { - alert("转发成功!"); - }, - cancel: function () { - alert("转发失败!"); - }, - }); - //转发给朋友 - wx.onMenuShareAppMessage({ - title: "JSSDK朋友圈转发测试", - desc: "转发给朋友", - link: link, - imgUrl: imgUrl, - type: "link", - dataUrl: "", - success: function () { - alert("转发成功!"); - }, - cancel: function () { - alert("转发失败!"); - }, - }); -}); -``` - -> 提示:在 MVC 中传递 ViewModel 需要在 .cshtml 文件顶部定义: -> -> ```cs -> @model Senparc.Weixin.MP.Helpers.JsSdkUiPackage -> ``` - -> 本项目参考文件: -> -> /Views/WeixinJSSDK/**_Index.cshtml_** - -更多设置详情请参考:[JS-SDK 说明文档](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html)。 diff --git a/docs/zh/guide/mp/menu.md b/docs/zh/guide/mp/menu.md deleted file mode 100644 index 7bdfea2daa..0000000000 --- a/docs/zh/guide/mp/menu.md +++ /dev/null @@ -1,72 +0,0 @@ -# 菜单设置 - -公众号菜单是公众号界面的重要元素,菜单的使用分为 **设置** 和 **使用** 两个环节。 - -## 设置 - -方法一:使用微信公众号后台界面设置(不使用开发模式),此处略。 - -方法二(推荐):使用可视化编辑器(No Code):[点击查看介绍](https://sdk.weixin.senparc.com/Menu)。 - -方法三:使用代码进行设置(只需要执行一次,建议放在管理员后台,手动运行),如: - -```cs -public async Task CreateMenuAsync() -{ - ButtonGroup bg = new ButtonGroup(); - - //定义一级菜单 - var subButton = new SubButton() - { - name = "一级菜单" - }; - bg.button.Add(subButton); - - //下属二级菜单 - subButton.sub_button.Add(new SingleViewButton() - { - url = "https://book.weixin.senparc.com/book/link?code=SenparcRobotMenu", - name = "《微信开发深度解析》" - }); - subButton.sub_button.Add(new SingleClickButton() - { - key = "OneClick", - name = "单击测试" - }); - subButton.sub_button.Add(new SingleViewButton() - { - url = "https://weixin.senparc.com/", - name = "Url跳转" - }); - - //最多可添加 3 个一级自定义菜单,每个菜单下最多 5 个子菜单 - - var result = await CommonApi.CreateMenuAsync(appId, bg); -} -``` - -## 使用 - -设置完菜单后,当客户端点击菜单时,微信服务器会自动推送响应的回调信息到消息 URL(即已经设置好的 MessageHandler 内),只需在 CustomMessageHandler 中重写(`override`)对应的方法即可。如针对上述 **方法三** 已经设定生效的菜单,当用户点击【单击测试】按钮时,我们可以在 CustomMessageHandler 中进行接收和处理: - -```cs -public override async Task OnEvent_ClickRequestAsync(RequestMessageEvent_Click requestMessage) -{ - var reponseMessage = CreateResponseMessage(); - - if (requestMessage.EventKey == "OneClick") - { - reponseMessage.Content = "您点击了【单击测试】按钮"; - } - else - { - reponseMessage.Content = "您点击了其他事件按钮"; - } - - return reponseMessage; -} -``` - -> 本项目参考文件: -> -> /MessageHandlers/**_CustomMessageHandler_Events.cs_** diff --git a/docs/zh/guide/mp/messagehandler.md b/docs/zh/guide/mp/messagehandler.md deleted file mode 100644 index b4bdbe9bb9..0000000000 --- a/docs/zh/guide/mp/messagehandler.md +++ /dev/null @@ -1,58 +0,0 @@ -# MessageHandler - -`MessageHandler` 用于处理微信公众号对话窗口的消息。 - -SDK 已经为开发者准备好了所有需要的基础功能,开发者只需要创建一个自定义的子类,补充需要自定义的业务逻辑。 - -## 自定义 MessageHandler - -当前示例中,我们给自定义的 MessageHandler 取名 `CustomMessageHandler`。 - -> **CustomMessageHandler.cs 本项目参考文件:** -> -> /MessageHandlers/ 目录 -> **_CustomMessageHandler.cs_** MessageHandler 主文件 + 普通消息处理 -> **_CustomMessageHandler_Events.cs_** MessageHandler 事件消息处理 -> **_CustomMessageContext.cs_** 自定义重写 DefaultMpMessageContext 上下文(可选) - -`CustomMessageHandler*.cs` 中所有演示的重写(`override`)方法中,只有 `DefaultResponseMessage()` 方法是必须重写的,其他所有 `OnXxxRequest()` 方法都为可选,当用户发送的消息,找不到对应重写方法时,则调用 `DefaultResponseMessage()` 方法。 - -MessageHandler 有两种承载方式,使其可以被外部(微信服务器)通过 URL 访问到。分别是**中间件方式**(推荐)和 **Controller 方式**。两种方式所使用的 `CustomMessageHandler` 是通用的,因此可以随时切换和共存。 - -## 中间件方式承载 MessageHandler - -中间件方式是推荐的方式,也是最简化的方式,无需创建任何新文件,只需在 `Program.cs` 文件所有 Senparc.Weixin 注册代码执行后的下方,引入中间件: - -```cs -app.UseMessageHandlerForMp("/WeixinAsync", CustomMessageHandler.GenerateMessageHandler, options => -{ - options.AccountSettingFunc = context => Senparc.Weixin.Config.SenparcWeixinSetting; -}); - -``` - -完成后,即可通过 Url **`域名/WeixinAsync`** 访问 MessageHandler,设置为公众号后台的消息 URL。 - -[测试 /WeixinAsync](https://sdk.weixin.senparc.com/WeixinAsync) - -> 本项目参考文件: -> -> /**_Program.cs_** - -更多中间件方式请参考:[《在 .NET Core 2.0/3.0 中使用 MessageHandler 中间件》](https://www.cnblogs.com/szw/p/Wechat-MessageHandler-Middleware.html)(同样适用于 .NET 6.0 及以上)。 - -## Controller 方式承载 MessageHandler - -当中间件的方式满足不了需求时,可以使用 Controller 将执行过程“展开”,对每一步执行进行更加精确的控制或干预。 - -使用 Controller 方式,需要创建 2 个 Action,分别对应微信后台验证(Get 请求),以及真实消息推送(Post 请求)。本项目示例位于 `WeixinController.cs`中。 - -> WeixinController.cs 本项目参考文件: -> -> /**_Controllers/WeixinController.cs_** - -完成后,即可通过 Url **`域名/Weixin`** 访问 MessageHandler,设置为公众号后台的消息 URL。 - -[测试 /Weixin](https://sdk.weixin.senparc.com/Weixin) - -更多 Controller 方式请参考:[《了解 MessageHandler》](https://www.cnblogs.com/szw/p/3414862.html)(推荐使用全套异步方法) diff --git a/docs/zh/guide/mp/oauth2.0.md b/docs/zh/guide/mp/oauth2.0.md deleted file mode 100644 index 8f525bbb26..0000000000 --- a/docs/zh/guide/mp/oauth2.0.md +++ /dev/null @@ -1,113 +0,0 @@ -# OAuth 2.0 - -当你需要在网页上获取用户的 OpenId、头像、昵称等信息的时候,就需要使用 OAuth 2.0 的方式和微信服务器通讯。 - -更多信息请参考官方文档:[网页授权](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html#4)。 - -SDK 已经封装了所有相关的过程,您只需要参考示例进行简单的 3 步配置即可。 - -## 第一步:设置登录页面 - -登录页面中需要设置官方 OAuth 2.0 的请求 URL(称为 **AuthorizeUrl**),并带上登录成功后的 returnUrl。 - -由于微信授权具有两种方式(**snsapi_userinfo** 和 **snsapi_base**,下方代码直接提供了两种获取 **AuthorizeUrl** 的方式: - -```cs -public ActionResult Index(string returnUrl) -{ - ViewData["returnUrl"] = returnUrl; - - //此页面引导用户点击授权 - ViewData["UrlUserInfo"] = - OAuthApi.GetAuthorizeUrl(appId, - "http://sdk.weixin.senparc.com/oauth2/UserInfoCallback?returnUrl=" + returnUrl.UrlEncode(), - null, OAuthScope.snsapi_userinfo);//snsapi_userinfo方式回调地址 - - ViewData["UrlBase"] = - OAuthApi.GetAuthorizeUrl(appId, - "http://sdk.weixin.senparc.com/oauth2/BaseCallback?returnUrl=" + returnUrl.UrlEncode(), - null, OAuthScope.snsapi_base);//snsapi_base方式回调地址 - return View(); -} -``` - -上述 `returnUrl` 参数一般为跳转到登陆页面之前的 URL,也可以是希望用户完成授权之后跳转到的 URL。 - -> 注意:上述的网址和路径需要在公众号后台匹配成你自己服务器的地址(参考文档:[网页授权](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html#4))。 - -> 本项目参考文件: -> -> /Controllers/**_OAuth2Controller.cs_** - -## 第二步:前端登录页面设置 - -登录页面最终的功能是引导用户打开 **AuthorizeUrl**,可以直接使用连接的方式: - -```cs - -点击这里测试snsapi_userinfo - - -点击这里测试snsapi_userinfo -``` - -> 本项目参考文件: -> -> /Views/OAuth2/**_Index.cshtml_** - -## 第三步:配置登陆后回调页面 - -授权成功后,网页将自动跳转到第一步中设置的回调 URL(`"http://sdk.weixin.senparc.com/oauth2/UserInfoCallback?returnUrl=" + returnUrl.UrlEncode()`),以 **UserInfoCallback** 为例: - -```cs -public ActionResult UserInfoCallback(string code, string returnUrl) -{ - if (string.IsNullOrEmpty(code)) - { - return Content("您拒绝了授权!"); - } - - OAuthAccessTokenResult result = null; - - //通过,用code换取access_token - try - { - result = OAuthApi.GetAccessToken(appId, appSecret, code); - } - catch (Exception ex) - { - return Content(ex.Message); - } - if (result.errcode != ReturnCode.请求成功) - { - return Content("错误:" + result.errmsg); - } - - //下面2个数据也可以自己封装成一个类,储存在数据库中(建议结合缓存) - //如果可以确保安全,可以将access_token存入用户的cookie中,每一个人的access_token是不一样的 - HttpContext.Session.SetString("OAuthAccessTokenStartTime", SystemTime.Now.ToString()); - HttpContext.Session.SetString("OAuthAccessToken", result.ToJson()); - - //因为第一步选择的是OAuthScope.snsapi_userinfo,这里可以进一步获取用户详细信息 - try - { - if (!string.IsNullOrEmpty(returnUrl)) - { - return Redirect(returnUrl); - } - - OAuthUserInfo userInfo = OAuthApi.GetUserInfo(result.access_token, result.openid); - return View(userInfo); - } - catch (ErrorJsonResultException ex) - { - return Content(ex.Message); - } -} -``` - -上述代码中,传入的 `returnUrl` 即第一步 `Index()` 方法中传入到 **AuthorizeUrl** 中的 `returnUrl`,当所有用户信息获取、保存等操作完成后,借助 `returnUrl` 跳转到登陆之前的页面,完成整个闭环的登录操作。 - -> 本项目参考文件: -> -> /Controllers/**_OAuth2Controller.cs_** diff --git a/docs/zh/guide/mp/register.md b/docs/zh/guide/mp/register.md deleted file mode 100644 index 913c737837..0000000000 --- a/docs/zh/guide/mp/register.md +++ /dev/null @@ -1,56 +0,0 @@ -# 注册 - -## 全局注册 - -所有的 Senparc.Weixin SDK 注册过程都是类似的。 - -首先,完成所有 Senparc.Weixin SDK 的整体注册代码。在 Program.cs 中加入以下代码: - -![注册 Senparc.Weixin](https://sdk.weixin.senparc.com/Docs/MP/images/home-dev-register-01.png) - -说明: - -1. `builder.Services.AddMemoryCache()` Senparc.Weixin 支持本机缓存、Redis、Memcached 等多种缓存策略,默认使用本机缓存,此时需要激活本地缓存。 -2. `builder.Services.AddSenparcWeixinServices(builder.Configuration)` 用于完成 Senparc.Weixin 的注册。 -3. `app.UseSenparcWeixin()` 方法用于配置和启用 Senparc.Weixin。 - -以上代码对于所有的 Senparc.Weixin 下级模块都是相同的,只需要 3 句代码。 - -> 本项目参考文件: -> -> /**_Program.cs_** - -## 公众号注册 - -在上述代码中的第 17 行委托方法中插入代码,即可完成默认公众号的注册: - -```cs -register.RegisterMpAccount(weixinSetting, "【盛派网络小助手】公众号"); -``` - -![注册微信公众号](https://sdk.weixin.senparc.com/Docs/MP/images/home-dev-register-02.png "注册微信公众号") - -其中,`weixinSetting` 的值默认来自于 `appsettings.json`: - -```json - "SenparcWeixinSetting": { - "IsDebug": true, - - "Token": "#{Token}#", - "EncodingAESKey": "#{EncodingAESKey}#", - "WeixinAppId": "#{WeixinAppId}#", - "WeixinAppSecret": "#{WeixinAppSecret}#" - } -``` - -![配置参数](https://sdk.weixin.senparc.com/Docs/MP/images/home-dev-register-03.png "配置参数") - -其中,`Token`、`EncodingAESKey`、`WeixinAppId` 和 `WeixinAppSecret` 对应了微信公众号后台的配置参数。 - -> 本项目参考文件: -> -> /**_appsettings.json_** - -配置完成。 - -> 提示:自动注册的信息可通过 `Senparc.Weixin.Config.SenparcWeixinSetting` 获取。 diff --git a/docs/zh/guide/mp/source-code.md b/docs/zh/guide/mp/source-code.md deleted file mode 100644 index 1b4978d264..0000000000 --- a/docs/zh/guide/mp/source-code.md +++ /dev/null @@ -1,15 +0,0 @@ -# 源码 - -## Senparc.Weixin SDK 源码 - -GitHub:[https://github.com/JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK)(更新更快) - -Gitee:[https://gitee.com/JeffreySu/WeiXinMPSDK](https://gitee.com/JeffreySu/WeiXinMPSDK)(从 GitHub 同步) - -## 打包代码 - -Nuget 包地址:[https://www.nuget.org/packages/Senparc.Weixin.MP](https://www.nuget.org/packages/Senparc.Weixin.MP) - -## 本地源码文件 - -Senparc.Weixin.MP 源码位置:[/src/Senparc.Weixin.MP](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.MP) diff --git a/docs/zh/guide/work/advanced-interface.md b/docs/zh/guide/work/advanced-interface.md deleted file mode 100644 index 52cc4ac6ed..0000000000 --- a/docs/zh/guide/work/advanced-interface.md +++ /dev/null @@ -1,68 +0,0 @@ -# 高级接口 - -完成 `Program.cs` 文件中的常规注册后,即可在程序的任意地方使用高级接口。 - -> 注意: -> 1、高级接口的配置和 `MessageHandler` 没有关联,两者可以独立或配合使用。 -> 2、由于企业微信使用 CorpId + Secret 来定位(区别)每个应用的授权信息,因此,SDK 中将两者合并成一个唯一参数,命名为 **AppKey**,可通过 `AccessTokenContainer.BuildingKey(string corpId, string corpSecret)` 方法获取合成后的 **AppKey**。 -> 3、企业微信 SDK 内几乎所有高级接口的第一个参数同时支持传入 AppKey 或 AccessToken,通常名称为 `accessTokenOrAppKey`,SDK 会根据参数特征自动识别输入的是 AppKey 还是 AccessToken,并做区分处理。 - -## 使用 AppKey 调用接口(推荐) - -例如,我们可以在任意一个方法中调用一个高级接口: - -```cs -public async Task TryApiTryApiByAppKey() -{ - // 获取注册信息 - var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting; - // 获取 AppKey - var appKey = AccessTokenContainer.BuildingKey(workWeixinSetting); - //发送请求 - try - { - //发送文字提醒 - var result = await Senparc.Weixin.Work.AdvancedAPIs.MassApi.SendTextAsync(appKey, "001", "这是一条来企业微信的消息"); - return Content("OK"); - } - catch (ErrorJsonResultException ex) - { - return Content($"出错啦:{ex.Message}"); - } -} -``` - -> `workWeixinSetting` 参数,必须是已经经过注册的企业微信信息(内部包括 CorpId 和 Secret),这样即使 AccessToken 过期,SDK 也会全自动处理。如果是未经过注册的 CorpId 和 Secret,则需要先获取 AccessToken,然后调用接口。 - -> 本项目参考文件: -> -> /Controllers/**_AdvancedApiController.cs_** - -## 使用 AccessToken 调用接口(不推荐) - -```cs -public async Task TryApiByAccessToken() -{ - // 获取注册信息 - var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting; - // 获取 AccessToken - var accessToken = await AccessTokenContainer.GetTokenAsync(workWeixinSetting.WeixinCorpId, workWeixinSetting.WeixinCorpSecret); - //发送请求 - try - { - //发送文字提醒 - var result = await Senparc.Weixin.Work.AdvancedAPIs.MassApi.SendTextAsync(accessToken, "001", "这是一条来企业微信的消息"); - return Content("OK"); - } - catch (ErrorJsonResultException ex) - { - return Content($"出错啦:{ex.Message}"); - } -} -``` - -> 注意:使用 AccessToken 方式调用接口,无法保证当前 AccessToken 的有效性,因此建议使用前进行有效性校验,并使用 `try-catch` 方式捕获 AccessToken 不可用的异常,然后进行重试。因此直接使用 AccessToken 调用接口的方式并不推荐在常规情况下使用。 - -> 本项目参考文件: -> -> /Controllers/**_AdvancedApiController.cs_** diff --git a/docs/zh/guide/work/advanced.md b/docs/zh/guide/work/advanced.md deleted file mode 100644 index 1b32c519b3..0000000000 --- a/docs/zh/guide/work/advanced.md +++ /dev/null @@ -1,11 +0,0 @@ -# 进阶 - -当前示例展示了最基本和常用的功能,如果您需要了解更多高级玩法,并且有扎实的编程功底,请参考完整示例。 - -> 完整示例解决方案文件: -> -> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7.sln](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/All/net7-mvc) - -> 务必阅读 readme 文件: -> -> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/readme.md](https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/All/net7-mvc/readme.md) diff --git a/docs/zh/guide/work/install.md b/docs/zh/guide/work/install.md deleted file mode 100644 index 44e9756d62..0000000000 --- a/docs/zh/guide/work/install.md +++ /dev/null @@ -1,67 +0,0 @@ -# 如何安装? - -您可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包,推荐),以方便随时获取官方的更新。注意:直接引用源码和引用 Nuget 包只能二选一。 - -## 引用源码 - -您可以在当前解决方案中,**Libraries** 目录下,将所需要引用的程序集引用(复制)到您开发环境的解决方案中,请注意需要同时引用被依赖的项目,如 `Senparc.Weixin` 项目是所有项目都需要依赖的。 - -当前示例项目默认就使用了直接引用源码的方式,可从 .csproj 文件中看到引用方式: - -```cs - - - - - -``` - -## 引用程序集(推荐) - -您可以通过 `Visual Studio`、`Visual Studio Code`、`dotnet 命令行` 等多种方式自动安装 Nuget 包。 - -### Visual Studio - -在开发项目【解决方案资源管理器】中,对需要添加 Senparc.Weixin.Work 的模块点击右键,点击【管理 Nuget 程序包】,在【浏览】标签中输入 **Senparc.Weixin.Work**,点击右侧【安装】按钮。如下图所示: - -![通过 Visual Studio 安装](https://sdk.weixin.senparc.com/Docs/Work/images/home-install-01.png) - -## Visual Studio Code - -首先,确认已经安装好 [VS Code](https://code.visualstudio.com/) 以及 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 - -然后,打开解决方案或项目所在目录,按 Ctrl+~,打开终端面板,进入需要添加 Senparc.Weixin.Work 的模块的项目的目录,输入: - -> ```cs -> dotnet add package Senparc.Weixin.Work -> ``` - -![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/Work/images/home-install-03.png)安装 Senparc.Weixin.Work 模块 - -安装完成后,可查看对应 .csproj 文件,被添加引用,如: - -```cs - - - -``` - -## dotnet 命令行 - -首先,确认已经安装好 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 - -进入需要添加 Senparc.Weixin.Work 的模块的项目的目录,输入: - -> ```cs -> dotnet add package Senparc.Weixin.Work -> ``` - -![通过 dotnet CLI 安装](https://sdk.weixin.senparc.com/Docs/Work/images/home-install-02.png)通过 dotnet CLI 安装 - -安装完成后,可查看对应 .csproj 文件,被添加引用,如: - -```cs - - - -``` diff --git a/docs/zh/guide/work/jssdk-agent-config.md b/docs/zh/guide/work/jssdk-agent-config.md deleted file mode 100644 index fe30402c89..0000000000 --- a/docs/zh/guide/work/jssdk-agent-config.md +++ /dev/null @@ -1,128 +0,0 @@ -# JSSDK(agentConfig) - -`wx.agentConfig()` 用于某些特定的接口(如审批流接口、剪切板接口等),但一般前提都需要先使用到常规的 JSSDK(参考【JSSDK(常规)】标签),因此这是一个增加项。 - -`wx.agentConfig()` 同样分为服务器端和客户端两部分。 - -## 服务端获取签名信息 - -后端除了后端通过 `JSSDKHelper.GetJsSdkUiPackageAsync()` 方法获取常规 JSSDK 运行所需参数以外,还需要使用同一个方法,传入不同参数来获取 `agetntConfig` 的对应参数: - -```JS -public async Task AgentConfig() -{ - //此处演示同时支持多个应用的注册,请参考 appsettings.json 文件 - var workSetting = Senparc.Weixin.Config.SenparcWeixinSetting["企业微信审批"] as ISenparcWeixinSettingForWork; - var url = "https://sdk.weixin.senparc.com/Work/Approval"; - - //获取 UI 信息包 - - /* 注意: - * 所有应用中,jsApiUiPackage 是必备的 - */ - var jsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, false); - var jsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, jsApiTicket, false); - ViewData["jsApiUiPackage"] = jsApiUiPackage; - - /* 注意: - * 1、这里需要使用 WeixinCorpAgentId,而不是 WeixinCorpId - * 2、agentJsApiUiPackage 是否需要提供,请参考官方文档,此处演示了最复杂的情况 - */ - ViewData["thirdNo"] = DateTime.Now.Ticks + Guid.NewGuid().ToString("n"); - ViewData["corpId"] = workSetting.WeixinCorpId; - ViewData["agentId"] = workSetting.WeixinCorpAgentId; - var agentConfigJsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, true); - var agentJsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, agentConfigJsApiTicket, true); - ViewData["agentJsApiUiPackage"] = agentJsApiUiPackage; - - return View(); -} -``` - -> 注意:上述方法中,使用了 -> -> `Senparc.Weixin.Config.SenparcWeixinSetting["企业微信审批"]` -> -> 来获取与之前不同的微信配置,请参考本项目中 -> -> `appsetting.json` -> -> 文件中的设置方法: -> -> ```JSON -> "Items": { -> //添加多个企业微信应用 -> "企业微信审批": { -> "WeixinCorpId": "#{WeixinCorpId2}#", -> "WeixinCorpAgentId": "#{WeixinCorpAgentId2}#", -> "WeixinCorpSecret": "#{WeixinCorpSecret2}#", -> "WeixinCorpToken": "#{WeixinCorpToken2}#", -> "WeixinCorpEncodingAESKey": "#{WeixinCorpEncodingAESKey2}#"} -> } -> ``` -> -> 此方法对所有其他模块也通用(如公众号、小程序、微信支付等)。 - -> 本项目参考文件: -> -> /Controllers/**_JSSDKnController.cs_** - AgentConfig() 方法 -> -> /**_appsettings.json_** - -## 网页端配置 JSSDK - -网页端除了进行常规的 JSSDK 配置以外,还需要在执行特定的 JsApi 方法之前,添加 `wx.agentConfig()` 的配置: - -```cs -function invoke(){ - wx.agentConfig({ - corpid: '@ViewData["corpId"]', // 必填,企业微信的corpid,必须与当前登录的企业一致 - agentid: '@ViewData["agentId"]', // 必填,企业微信的应用id (e.g. 1000247) - timestamp: @agentJsApiUiPackage.Timestamp, // 必填,生成签名的时间戳 - nonceStr: '@agentJsApiUiPackage.NonceStr', // 必填,生成签名的随机串 - signature: '@agentJsApiUiPackage.Signature',// 必填,签名,见附录-JS-SDK使用权限签名算法 - jsApiList: ['thirdPartyOpenPage'], //必填,传入需要使用的接口名称 - success: function(res) { - - // 回调 - wx.invoke('thirdPartyOpenPage', { - "oaType": "10001",// String - //"templateId": "C4NxepvGj51gbkeGXHQgYRArW96WrxRinNfyCxo7N",//SYS - "templateId":"247bcb886d0374a0a1f749c52794ba1a_622421053",// Open - "thirdNo": "",// String - "extData": { - 'fieldList': [{ - 'title': '审批类型', - 'type': 'text', - 'value': '文章审批', - }, - { - 'title': '预览', - 'type': 'link', - 'value': 'https://weixin.senparc.com', - }], - } - }, - function(res) { - // 输出接口的回调信息 - console.log(res); - alert('wx.invoke result:'+JSON.stringify(res)); - }); - }, - fail: function(res) { - if(res.errMsg.indexOf('function not exist') > -1){ - alert('版本过低请升级') - } - else{ - alert('wx.invoke fail:'+JSON.stringify(res)); - } - } - }); -} -``` - -HTML 页面进行触发:`点击唤起审批流程` - -> 本项目参考文件: -> -> /Views/**_JSSDK/Index.cshtml_** diff --git a/docs/zh/guide/work/jssdk-general.md b/docs/zh/guide/work/jssdk-general.md deleted file mode 100644 index 0048751988..0000000000 --- a/docs/zh/guide/work/jssdk-general.md +++ /dev/null @@ -1,91 +0,0 @@ -# JSSDK(常规) - -JSSDK 用于提供微信内置浏览器接口的能力,例如转发控制、调用摄像头权限(拍照、视频)、文件上传、关闭窗口、唤起扫码窗口,等等。 - -要在内置浏览器中只用 JSSDK,分为“服务端获取签名信息”和“网页端配置 JSSDK”两步。 - -企业微信的网页端 JSSDK 配置,和公众号类似,不过多了一个名为 `wx.agentConfig()` 的配置方法。这里介绍常规的方法,`wx.agentConfig()` 配套方法请见【JSSDK(agentConfig】标签。 - -## 服务端获取签名信息 - -后端通过 `JSSDKHelper.GetJsSdkUiPackageAsync()` 方法即可自动获取前端所需的所有 JSSDK 运行所需参数: - -```cs -public async Task Index() -{ - // 当前 URL - var url = "https://sdk.work.weixin.senparc.com/JSSDK/"; - // 获取企业微信配置 - var workSetting = Senparc.Weixin.Config.SenparcWeixinSetting.WorkSetting; - // 获取 JsApiTicket(保密信息,不可外传) - var jsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, false); - // 获取 UI 打包信息 - var jsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, jsApiTicket, false); - - ViewData["jsApiUiPackage"] = jsApiUiPackage; - return View(); -} -``` - -> 本项目参考文件: -> -> /Controllers/**_JSSDKnController.cs_** - Index() 方法 - -## 网页端配置 JSSDK - -后端配置完成的参数,直接在前端 JS 中使用 `wx.config` 进行设置,例如以下代码将完成从企业微信内转发网页到**个人微信**: - -```cs -$(function(){ - wx.config({ - beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题 - debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 - appId: '@jsApiUiPackage.AppId', // 必填,企业微信的corpID - timestamp: @jsApiUiPackage.Timestamp, // 必填,生成签名的时间戳 - nonceStr: '@jsApiUiPackage.NonceStr', // 必填,生成签名的随机串 - signature: '@jsApiUiPackage.Signature',// 必填,签名,见 附录-JS-SDK使用权限签名算法 - jsApiList: ['shareWechatMessage'] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来 - }); - - wx.checkJsApi({ - jsApiList: ['shareWechatMessage'], // 需要检测的JS接口列表,所有JS接口列表见附录2, - success: function(res) { - // 以键值对的形式返回,可用的api值true,不可用为false - // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"} - //alert("wx.config success:"+JSON.stringify(res)); - } - }); -}); - -wx.ready(function(){ - // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 -}); - -wx.error(function(res){ - // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 - console.log(res); - alert(res); -}); - -function invoke(){ - wx.invoke( - "shareWechatMessage", { - title: '企业微信JSSDK 演示-转发', // 分享标题 - desc: '来自 Senparc.Weixin.Work', // 分享描述 - link: 'https://sdk.work.weixin.senparc.com/JSSDK', // 分享链接 - imgUrl: '' // 分享封面 - }, function(res) { - if (res.err_msg == "shareWechatMessage:ok") { - } - } - ); -} -``` - -HTML 页面进行触发:`转发到微信` - -> 本项目参考文件: -> -> /Views/JSSDK/**_Index.cshtml_** - -更多设置详情请参考:[JS-SDK 说明文档](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html)。 diff --git a/docs/zh/guide/work/menu.md b/docs/zh/guide/work/menu.md deleted file mode 100644 index 836b23df35..0000000000 --- a/docs/zh/guide/work/menu.md +++ /dev/null @@ -1,79 +0,0 @@ -# 菜单设置 - -自定义菜单是企业微信应用界面的重要元素,菜单的使用分为 **设置** 和 **使用** 两个环节。 - -## 设置 - -方法一:在企业微信后台【应用管理】中,某个应用设置界面中,【功能】区域【自定义菜单】中设置(不使用开发模式),此处略。 - -方法二:使用代码进行设置(只需要执行一次,建议放在管理员后台,手动运行),如: - -```cs -public async Task CreateMenuTest() -{ - ButtonGroup bg = new ButtonGroup(); - - //单击 - bg.button.Add(new SingleClickButton() - { - name = "单击测试", - key = "OneClick", - type = MenuButtonType.click.ToString(),//默认已经设为此类型,这里只作为演示 - }); - - //二级菜单 - var subButton = new SubButton() - { - name = "二级菜单" - }; - subButton.sub_button.Add(new SingleClickButton() - { - key = "SubClickRoot_Text", - name = "返回文本" - }); - subButton.sub_button.Add(new SingleViewButton() - { - url = "https://weixin.senparc.com", - name = "Url跳转" - }); - bg.button.Add(subButton); - - var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting; - var appKey = AccessTokenContainer.BuildingKey(workWeixinSetting); - int agentId; - if (!int.TryParse(workWeixinSetting.WeixinCorpAgentId, out agentId)) - { - throw new WeixinException("WeixinCorpAgentId 必须为整数!"); - } - var result = await CommonApi.CreateMenuAsync(appKey, agentId, bg); - - Assert.IsNotNull(result); - Assert.AreEqual("ok", result.errmsg); -} -``` - -## 使用 - -设置完菜单后,当客户端点击菜单时,微信服务器会自动推送响应的回调信息到消息 URL(即已经设置好的 MessageHandler 内),只需在 WorkCustomMessageHandler 中重写(`override`)对应的方法即可。如针对上述 **方法二** 已经设定生效的菜单,当用户点击【单击测试】按钮时,我们可以在 WorkCustomMessageHandler 中进行接收和处理: - -```cs -public override IWorkResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage) -{ - var reponseMessage = CreateResponseMessage(); - - if (requestMessage.EventKey == "SubClickRoot_Text") - { - reponseMessage.Content = "您点击了【返回文本】按钮"; - } - else - { - reponseMessage.Content = "您点击了其他事件按钮"; - } - - return reponseMessage; -} -``` - -> 本项目参考文件: -> -> /MessageHandlers/**_WorkCustomMessageHandler.cs_** diff --git a/docs/zh/guide/work/messagehandler.md b/docs/zh/guide/work/messagehandler.md deleted file mode 100644 index bb2835540d..0000000000 --- a/docs/zh/guide/work/messagehandler.md +++ /dev/null @@ -1,58 +0,0 @@ -# MessageHandler - -`MessageHandler` 用于处理企业微信对话窗口的消息。 - -SDK 已经为开发者准备好了所有需要的基础功能,开发者只需要创建一个自定义的子类,补充需要自定义的业务逻辑。 - -## 自定义 MessageHandler - -当前示例中,我们给自定义的 MessageHandler 取名 `WorkCustomMessageHandler`。 - -> WorkCustomMessageHandler.cs 本项目参考文件: -> -> /MessageHandlers/ 目录 -> **_WorkCustomMessageHandler.cs_** MessageHandler 主文件,负责普通消息处理 -> **_WorkCustomMessageContext.cs_** 自定义重写 DefaultMpMessageContext 上下文(可选) - -`WorkCustomMessageHandler.cs` 中所有演示的重写(`override`)方法中,只有 `DefaultResponseMessage()` 方法是必须重写的,其他所有 `OnXxxRequest()` 方法都为可选,当用户发送的消息,找不到对应重写方法时,则调用 `DefaultResponseMessage()` 方法。 - -MessageHandler 有两种承载方式,使其可以被外部(微信服务器)通过 URL 访问到。分别是**中间件方式**(推荐)和 **Controller 方式**。两种方式所使用的 `WorkCustomMessageHandler` 是通用的,因此可以随时切换和共存。 - -## 中间件方式承载 MessageHandler - -中间件方式是推荐的方式,也是最简化的方式,无需创建任何新文件,只需在 `Program.cs` 文件所有 Senparc.Weixin 注册代码执行后的下方,引入中间件: - -```cs -app.UseMessageHandlerForWork("/WorkAsync", WorkCustomMessageHandler.GenerateMessageHandler, options => -{ - options.AccountSettingFunc = context => Senparc.Weixin.Config.SenparcWeixinSetting; -}); -``` - -完成后,即可通过 Url **`域名/WorkAsync`** 访问 MessageHandler,设置为公众号后台的消息 URL。 - -[测试 /WorkAsync](https://sdk.weixin.senparc.com/WorkAsync) - -> 本项目参考文件: -> -> /**_Program.cs_** - -[测试 /Work](https://sdk.weixin.senparc.com/Work) - -更多中间件方式请参考(和公众号使用方法相同):[《在 .NET Core 2.0/3.0 中使用 MessageHandler 中间件》](https://www.cnblogs.com/szw/p/Wechat-MessageHandler-Middleware.html)(同样适用于 .NET 6.0 及以上)。 - -## Controller 方式承载 MessageHandler - -当中间件的方式满足不了需求时,可以使用 Controller 将执行过程“展开”,对每一步执行进行更加精确的控制或干预。 - -使用 Controller 方式,需要创建 2 个 Action,分别对应微信后台验证(Get 请求),以及真实消息推送(Post 请求)。本项目示例位于 WorkController.cs 中。 - -> WorkController.cs 本项目参考文件: -> -> /Controllers/**_WorkController.cs_** - -完成后,即可通过 Url **`域名/Work`** 访问 MessageHandler,设置为公众号后台的消息 URL。 - -[测试 /Work](https://sdk.weixin.senparc.com/Work) - -更多 Controller 方式请参考(和公众号使用方法相同):[《了解 MessageHandler》](https://www.cnblogs.com/szw/p/3414862.html)(推荐使用全套异步方法) diff --git a/docs/zh/guide/work/oauth2.0.md b/docs/zh/guide/work/oauth2.0.md deleted file mode 100644 index 5166357d15..0000000000 --- a/docs/zh/guide/work/oauth2.0.md +++ /dev/null @@ -1,98 +0,0 @@ -# OAuth 2.0 - -当你需要在网页上获取用户的 UserId、头像、称呼等信息的时候,就需要使用 OAuth 2.0 的方式和微信服务器通讯。 - -更多信息请参考官方文档:[网页授权登录](https://developer.work.weixin.qq.com/document/path/91335)。 - -SDK 已经封装了所有相关的过程,您只需要参考示例进行简单的 3 步配置即可。 - -## 第一步:设置登录页面 - -登录页面中需要设置官方 OAuth 2.0 的请求 URL(称为 **AuthorizeUrl**),并带上登录成功后的 returnUrl。 - -由于微信授权具有两种方式:**snsapi_userinfo** 和 **snsapi_base**,企业自建应用使用 **snsapi_base**,因此本示例中使用此方式进行介绍 **snsapi_base**(默认)的 **AuthorizeUrl** 获取的方式(此方式也是所有场景下兼容的方式): - -```cs -public IActionResult Index(string returnUrl) -{ - // 设置自己的 URL - var url = "https://4424-222-93-135-159.ngrok.io"; - - //此页面引导用户点击授权 - var oauthUrl = - OAuth2Api.GetCode(_corpId, $"{url}/OAuth2/BaseCallback?returnUrl={returnUrl.UrlEncode()}", - null, null);//snsapi_base方式回调地址 - - ViewData["UrlBase"] = oauthUrl; - ViewData["returnUrl"] = returnUrl; - - return View(); -} -``` - -上述 `returnUrl` 参数一般为跳转到登陆页面之前的 URL,也可以是希望用户完成授权之后跳转到的 URL。 - -> 注意:上述的网址和路径需要在公众号后台匹配成你自己服务器的地址(参考文档:[网页授权登录](https://developer.work.weixin.qq.com/document/path/91335))。 - -> 本项目参考文件: -> -> /Controllers/OAuth2Controller.cs - -## 第二步:前端登录页面设置 - -登录页面最终的功能是引导用户打开 **AuthorizeUrl**,可以直接使用连接的方式: - -``` -点击这里测试snsapi_base -``` - -> 本项目参考文件: -> -> /Views/**_OAuth2/Index.cshtml_** - -## 第三步:配置登陆后回调页面 - -授权成功后,网页将自动跳转到第一步中设置的回调 URL(`$"{url}/OAuth2/BaseCallback?returnUrl={returnUrl.UrlEncode()}"`): - -```cs -public async Task BaseCallback(string code, string returnUrl) -{ - if (string.IsNullOrEmpty(code)) - { - return Content("您拒绝了授权!"); - } - - try - { - var appKey = AccessTokenContainer.BuildingKey(_workWeixinSetting); - var accessToken = await AccessTokenContainer.GetTokenAsync(_corpId, _corpSecret); - //获取用户信息 测试链接:https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=10019 - var oauthResult = await OAuth2Api.GetUserIdAsync(accessToken, code); - var userId = oauthResult.UserId; - GetMemberResult result = await MailListApi.GetMemberAsync(appKey, userId); - - if (result.errcode != ReturnCode_Work.请求成功) - { - return Content("错误:" + result.errmsg); - } - - ViewData["returnUrl"] = returnUrl; - - /* 注意: - * 实际适用场景,此处应该跳转到 returnUrl,不要停留在 Callback页面上。 - * 因为当用户刷新此页面 URL 时,实际 code 等参数已失效,用户会受到错误信息。 - */ - return View(result); - } - catch (Exception ex) - { - return Content("错误:" + ex.Message); - } -} -``` - -上述代码中,传入的 `returnUrl` 即第一步 `Index()` 方法中传入到 **AuthorizeUrl** 中的 `returnUrl`,当所有用户信息获取、保存等操作完成后,借助 `returnUrl` 跳转到登陆之前的页面,完成整个闭环的登录操作。 - -> 本项目参考文件: -> -> /Controllers/**_OAuth2Controller.cs_** diff --git a/docs/zh/guide/work/register.md b/docs/zh/guide/work/register.md deleted file mode 100644 index e658c1d6de..0000000000 --- a/docs/zh/guide/work/register.md +++ /dev/null @@ -1,64 +0,0 @@ -# 注册 - -## 全局注册 - -所有的 Senparc.Weixin SDK 注册过程都是类似的。 - -首先,完成所有 Senparc.Weixin SDK 的整体注册代码。在 Program.cs 中加入以下代码: - -![注册 Senparc.Weixin](https://sdk.weixin.senparc.com/Docs/Work/images/home-dev-register-01.png) - -说明: - -1. `builder.Services.AddMemoryCache()` Senparc.Weixin 支持本机缓存、Redis、Memcached 等多种缓存策略,默认使用本机缓存,此时需要激活本地缓存。 -2. `builder.Services.AddSenparcWeixinServices(builder.Configuration)` 用于完成 Senparc.Weixin 的注册。 -3. `app.UseSenparcWeixin()` 方法用于配置和启用 Senparc.Weixin。 - -以上代码对于所有的 Senparc.Weixin 下级模块都是相同的,只需要 3 句代码。 - -> 本项目参考文件: -> -> /**_Program.cs_** - -## 企业微信 - -在上述代码中的第 17 行委托方法中插入代码,即可完成默认公众号的注册: - -```cs -register.RegisterWorkAccount(weixinSetting, "【盛派网络】企业微信"); -``` - -![注册微信公众号](https://sdk.weixin.senparc.com/Docs/Work/images/home-dev-register-02.png) - -其中,`weixinSetting` 的值默认来自于 `appsettings.json`: - -```JSON -"SenparcWeixinSetting": { - //以下为 Senparc.Weixin 的 SenparcWeixinSetting 微信配置 - //注意:所有的字符串值都可能被用于字典索引,因此请勿留空字符串(但可以根据需要,删除对应的整条设置)! - - //微信全局 - "IsDebug": true, - - //以下不使用的参数可以删除,key 修改后将会失效 - - //企业微信 - "WeixinCorpId": "#{WeixinCorpId}#", - "WeixinCorpAgentId": "#{WeixinCorpAgentId}#", - "WeixinCorpSecret": "#{WeixinCorpSecret}#", - "WeixinCorpToken": "#{WeixinCorpToken}#", - "WeixinCorpEncodingAESKey": "#{WeixinCorpEncodingAESKey}#" - - //可以追加更多其他平台的配置信息 -} -``` - -其中,`WeixinCorpId` 是每个企业微信账号独有的 **corpId**,`WeixinCorpAgentId` 和 `WeixinCorpSecret` 对应每个不同应用的 **agentId** 和 **secret**, `WeixinCorpToken` 和 `WeixinCorpEncodingAESKey` 对应了当前应用消息接口的后台的配置参数。 - -> 本项目参考文件: -> -> /**_appsettings.json_** - -配置完成。 - -> 提示:自动注册的信息可通过 `Senparc.Weixin.Config.SenparcWeixinSetting` 获取。 diff --git a/docs/zh/guide/work/source-code.md b/docs/zh/guide/work/source-code.md deleted file mode 100644 index 0641c2aed7..0000000000 --- a/docs/zh/guide/work/source-code.md +++ /dev/null @@ -1,15 +0,0 @@ -# 源码 - -## Senparc.Weixin SDK 源码 - -GitHub:[github_WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK)(更新更快) - -Gitee:[gitee_WeiXinMPSDK](https://gitee.com/JeffreySu/WeiXinMPSDK) (从 GitHub 同步) - -## 打包代码 - -Nuget 包地址:[https://www.nuget.org/packages/Senparc.Weixin.Work](https://www.nuget.org/packages/Senparc.Weixin.Work) - -## 本地源码文件 - -Senparc.Weixin.Work 源码位置:[/src/Senparc.Weixin.Work](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.Work) diff --git a/docs/zh/guide/wxopen/advanced-interface.md b/docs/zh/guide/wxopen/advanced-interface.md deleted file mode 100644 index 84933e46d1..0000000000 --- a/docs/zh/guide/wxopen/advanced-interface.md +++ /dev/null @@ -1,35 +0,0 @@ -# 高级接口 - -完成 `Program.cs` 文件中的常规注册后,即可在程序的任意地方使用高级接口。 - -> 注意: -> 1、高级接口的配置和 `MessageHandler` 没有关联,两者可以独立或配合使用。 -> 2、SDK 内几乎所有高级接口的第一个参数同时支持传入 AppId 或 AccessToken,通常名称为 `appIdOrAccessToken`,SDK 会根据参数特征自动识别输入的是 AppId 还是 AccessToken,并做区分处理。 - -## 使用 AppId 调用接口(推荐) - -例如,我们可以在任意一个方法中调用一个高级接口: - -```cs -using Senparc.Weixin.WxOpen.AdvancedAPIs; - -var appId = Senparc.Weixin.Config.SenparcWeixinSetting.WxOpenAppId; -var openId = "xxx"; -var content = "这是一条客服消息"; -var result = await CustomApi.SendTextAsync(appId, openId, content);//发送客服消息 -``` - -> appId 参数,必须是已经经过注册的,这样即使 AccessToken 过期,SDK 也会全自动处理。如果是未经过注册的 appId,则需要先获取 AccessToken,然后调用接口。 - -## 使用 AccessToken 调用接口(不推荐) - -```cs -var accessToken = Senparc.Weixin.MP.CommonApi.GetTokenAsync(appId, appSecret);//获取 AccessToken -var openId = "xxx"; -var content = "这是一条客服消息"; -var result = await CustomApi.SendTextAsync(accessToken, openId, content);//发送客服消息 -``` - -> 注意: -> 1、使用 AccessToken 方式调用接口,无法保证当前 AccessToken 的有效性,因此建议使用前进行有效性校验,并使用 `try-catch` 方式捕获 AccessToken 不可用的异常,然后进行重试。因此直接使用 AccessToken 调用接口的方式并不推荐在常规情况下使用。 -> 2、小程序和公众号使用相同的 AccessToken 获取接口,因此,此处调用了 `Senparc.Weixin.MP` 类库中公众号的相同方法。因为 `Senparc.Weixin.WxOpen` 模块默认已经依赖了 `Senparc.Weixin.MP`,所以不必再手动安装 MP 模块。 diff --git a/docs/zh/guide/wxopen/advanced.md b/docs/zh/guide/wxopen/advanced.md deleted file mode 100644 index 1b32c519b3..0000000000 --- a/docs/zh/guide/wxopen/advanced.md +++ /dev/null @@ -1,11 +0,0 @@ -# 进阶 - -当前示例展示了最基本和常用的功能,如果您需要了解更多高级玩法,并且有扎实的编程功底,请参考完整示例。 - -> 完整示例解决方案文件: -> -> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7.sln](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/All/net7-mvc) - -> 务必阅读 readme 文件: -> -> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/readme.md](https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/All/net7-mvc/readme.md) diff --git a/docs/zh/guide/wxopen/client-development.md b/docs/zh/guide/wxopen/client-development.md deleted file mode 100644 index bfe847333e..0000000000 --- a/docs/zh/guide/wxopen/client-development.md +++ /dev/null @@ -1,13 +0,0 @@ -# 客户端开发 - -## 准备开发 - -开发小程序客户端(手机微信内展示的小程序界面),需要使用 [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html)。 - -> 微信小程序示例项目参考文件: -> -> Senparc.Weixin SDK 源文件根目录/**_Samples/WxOpen/Senparc.Weixin.WxOpen.AppDemo/_** - -上述示例项目打开后如下图所示: - -![小程序客户端](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-client-01.png) diff --git a/docs/zh/guide/wxopen/get-phone-number.md b/docs/zh/guide/wxopen/get-phone-number.md deleted file mode 100644 index 9d0e90d990..0000000000 --- a/docs/zh/guide/wxopen/get-phone-number.md +++ /dev/null @@ -1,89 +0,0 @@ -# 获取手机号 - -> 注意:小程序获取手机号的接口,进行过一次升级,先前在客户端直接获取手机号的方式已经被淘汰(示例中左侧【获取手机号】按钮),目前最新的接口是使用 code 到服务器端后台获取手机号(示例中右侧【获取手机号(Code)】按钮。 -> -> ![入口页面](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-phone-01.png)入口页面 -> -> 当用户点击后,系统进行授权提示: -> -> ![授权手机号](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-phone-02.png)授权手机号 -> -> 点击【允许】按钮,通过访问后端接口,获取到手机号: -> -> ![授权手机号](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-phone-03.png)授权手机号 - -## 客户端 - -在 Index.wxml 文件中放置按钮: - -```XML - -``` - -> 本项目参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.wxml_** - -上述代码中,`open-type="getPhoneNumber"` 指定了当前按钮获取手机号的用途,`bindgetphonenumber="getUserPhoneNumber"` 指定了处理方法为 `getUserPhoneNumber`(对应于 .js 文件中): - -```JS -getUserPhoneNumber:function(e){ - wx.request({ - url: wx.getStorageSync('domainName') + '/WxOpen/GetUserPhoneNumber?code=' + e.detail.code, - success: function (res) { - // success - var json = res.data; - - if(!json.success){ - wx.showModal({ - title: '解密过程发生异常', - content: json.msg, - showCancel: false - }); - return; - } - - //模组对话框 - var phoneNumberData = json.phoneInfo; - var msg = '手机号:' + phoneNumberData.phoneNumber+ - '\r\n手机号(不带区号):' + phoneNumberData.purePhoneNumber+ - '\r\n区号(国别号)' + phoneNumberData.countryCode+ - '\r\n水印信息:' + JSON.stringify(phoneNumberData.watermark); - - wx.showModal({ - title: '收到服务器端通过 code 获取的手机号信息', - content: msg, - showCancel: false - }); - } - }) - } -``` - -当用户点击按钮,并授权手机号后,就会触发上述方法,通过 `e` 参数提供的 `e.code`,将其提交给服务器后台 **/WxOpen/GetUserPhoneNumber** 地址,后台将使用 `code` 换取用户的手机号,然后进行储存或返回给前端。上述代码的模组对话框只是演示作用,实际项目中一般不需要再次弹出信息。 - -> 本项目参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_/pages/index/index.js_** - -## 后端代码 - GetUserPhoneNumber - -```cs -public async Task GetUserPhoneNumber(string code) -{ - try - { - var result = await BusinessApi.GetUserPhoneNumberAsync(WxOpenAppId, code); - return Json(new { success = true, phoneInfo = result.phone_info }); - } - catch (Exception ex) - { - return Json(new { success = false, msg = ex.Message }); - } -} -``` - -> 本项目参考文件: -> -> /Controllers/**_WxOpenController.cs_** diff --git a/docs/zh/guide/wxopen/install.md b/docs/zh/guide/wxopen/install.md deleted file mode 100644 index c6eb6815f0..0000000000 --- a/docs/zh/guide/wxopen/install.md +++ /dev/null @@ -1,69 +0,0 @@ -# 如何安装? - -您可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包,推荐),以方便随时获取官方的更新。注意:直接引用源码和引用 Nuget 包只能二选一。 - -## 引用源码 - -您可以打开 **../All/net6-mvc/** 前解决方案(全量进阶示例),在 **Libraries** 目录下,将所需要引用的程序集引用(复制)到您开发环境的解决方案中,请注意需要同时引用被依赖的项目,如 `Senparc.Weixin` 项目是所有项目都需要依赖的。 - -当前示例项目默认就使用了直接引用源码的方式,可从 .csproj 文件中看到引用方式: - -```cs - - - -``` - -## 引用程序集(推荐) - -您可以通过 `Visual Studio`、`Visual Studio Code`、`dotnet 命令行` 等多种方式自动安装 Nuget 包。 - -### Visual Studio - -在开发项目【解决方案资源管理器】中,对需要添加 Senparc.Weixin.WxOpen 的模块点击右键,点击【管理 Nuget 程序包】,在【浏览】标签中输入 **Senparc.Weixin.TenPay**,点击右侧【安装】按钮。如下图所示: - -![通过 Visual Studio 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-01.png) - -### Visual Studio Code - -首先,确认已经安装好 [VS Code](https://code.visualstudio.com/) 以及 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 - -然后,打开解决方案或项目所在目录,按 Ctrl+~,打开终端面板: - -![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-03.png "打开 VS Code 终端面板") - -进入需要添加 Senparc.Weixin.WxOpen 的模块的项目的目录,输入: - -> ```cs -> dotnet add package Senparc.Weixin.WxOpen -> ``` - -![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-04.png "安装 Senparc.Weixin.WxOpen 模块") - -安装完成后,可查看对应 .csproj 文件,被添加引用,如: - -```cs - - - -``` - -### dotnet 命令行 - -首先,确认已经安装好 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 - -进入需要添加 Senparc.Weixin.WxOpen 的模块的项目的目录,输入: - -> ```cs -> dotnet add package Senparc.Weixin.WxOpen -> ``` - -![通过 dotnet CLI 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-02.png "通过 dotnet CLI 安装") - -安装完成后,可查看对应 .csproj 文件,被添加引用,如: - -```cs - - - -``` diff --git a/docs/zh/guide/wxopen/login.md b/docs/zh/guide/wxopen/login.md deleted file mode 100644 index 00257b19e8..0000000000 --- a/docs/zh/guide/wxopen/login.md +++ /dev/null @@ -1,319 +0,0 @@ -# 登录 - -## 简介 - -大部分的小程序都需要识别用的身份信息(OpenId)以及获取用户的头像、昵称等信息为用户提供身份识别、个性化信息展示的服务。此时就需要使用到小程序登录接口。 - -## 客户端 - 进入登录页 - -用户的登录是在小程序端发起的,一般而言可以做一个独立的页面用于放置说明及登录按钮。首先,在入口网页放置一个入口按钮: - -```HTML - -``` - -点击按钮后,触发 .js 文件中的 `getUserInfo()` 方法: - -```JS - getUserInfo: function(){ - wx.navigateTo({ - url: '../Login/Login', - }) - } -``` - -此按钮将引导页面跳转到独立的 Login 页面。 - -![跳转到登录页](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-01.png)跳转到登录页 - -> 本项目参考文件: Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.wxml_** Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.js_** - -## 客户端 - 登录页 - -登录页包含系统登录展示、隐私协议等内容,并包含一个触发最终小程序客户端登录事件的按钮: - -```XML - - - 您好,, - 当前小程序为 Senparc.Weixin SDK 的功能体验小程序,包括了订阅消息、获取用户授权信息、手机号、WebSocket、客服消息等演示内容,大部分内容需要授权后进行,点击【获取头像昵称】按钮进行授权,才能进入测试页面。 - 如果您不希望授权,请直接关闭此页面。 - - -``` - -![登录页面](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-02.png) - -> 本项目参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/Login/Login.wxml_** - -【获取头像昵称】按钮绑定了方法 `getUserInfo()`,在 **Login.js** 中添加: - -```JS -var app = getApp() -getUserInfo: function (e) { - var that = this; - app.getUserInfo(e, function(userInfo){ - app.globalData.userInfo = userInfo - that.setData({ - userInfo: userInfo, - hasUserInfo: true - }); - wx.navigateTo({ - url: '../index/index', - }) - }); - } -``` - -> 本项目参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/Login/Login.js_** - -上述代码中,使用 `var app = getApp()` 引入了全局方法(代码在根目录 **app.js**中),其中,`app.getUserInfo()` 方法代码如下(为了更加贴近实际使用场景,我们将 **登录** + **获取用户信息** 放在连贯的代码中展示): - -```JS -getUserInfo:function(cb,callback){ - var that = this - if(this.globalData.userInfo){ - typeof cb == "function" && cb(this.globalData.userInfo) - }else{ - //获取userInfo并校验 - console.log('准备调用 wx.getUserProfile'); - wx.getUserProfile({ - desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 - success: function (userInfoRes) { - console.log('get getUserProfile', userInfoRes); - that.globalData.userInfo = userInfoRes.userInfo - typeof cb == "function" && cb(that.globalData.userInfo) - typeof callback == "function" && callback(userInfoRes.userInfo) - - //调用登录接口 - wx.login({ - success: function (res) { - //换取openid & session_key - wx.request({ - url: wx.getStorageSync('domainName') + '/WxOpen/OnLogin', - method: 'POST', - header: { 'content-type': 'application/x-www-form-urlencoded' }, - data: { - code: res.code - }, - success:function(json){ - console.log('wx.login - request-/WxOpen/OnLogin Result:', json); - var result = json.data; - if(result.success) - { - wx.setStorageSync('sessionId', result.sessionId); - //校验 - wx.request({ - url: wx.getStorageSync('domainName') + '/WxOpen/CheckWxOpenSignature', - method: 'POST', - header: { 'content-type': 'application/x-www-form-urlencoded' }, - data: { - sessionId: result.sessionId,//wx.getStorageSync('sessionId'), - rawData:userInfoRes.rawData, - signature:userInfoRes.signature - }, - success:function(json){ - console.log(json.data); - if(!json.data.success){ - alert(json.data.msg); - } - } - }); - - //解密数据(建议放到校验success回调函数中,此处仅为演示) - wx.request({ - url: wx.getStorageSync('domainName') + '/WxOpen/DecodeEncryptedData', - method: 'POST', - header: { 'content-type': 'application/x-www-form-urlencoded' }, - data: { - 'type':"userInfo", - sessionId: result.sessionId,//wx.getStorageSync('sessionId'), - encryptedData: userInfoRes.encryptedData, - iv: userInfoRes.iv - }, - success:function(json){ - console.log('数据解密:', json.data); - } - }); - }else{ - console.log('储存session失败!',json); - } - } - }) - } - }) - } - }); - } - } -``` - -> 上述代码是整个微信登录客户端的核心代码。 - -其中: - -1. `wx.getUserProfile` 用于调起获取用户信息的接口,此接口本身和登录行为本身无直接联系,但是为了保证用户信息的正确性,后续需要在登录成功后的回调中使用到其中的加密信息来获取真实的用户信息,因此需要首先触发。 - -2. `wx.login` 是小程序客户端的登录接口,其中 `success` 为登录自后的回调函数。在回调函数中,我们使用 `wx.request` 向服务器端 **/WxOpen/OnLogin** 地址发送一条请求,带上 `success` 回调的参数 `res.code`,其中将使用 `code` 利用服务器端的 API 换取 `session_key`,并储存在服务器端,同时生成临时的用户身份标记 `SessionId` 并返回给客户端。 - 成功回调后,再使用 `wx.setStorageSync('sessionId', result.sessionId);` 将收到的 `SessionId` 储存在本地缓存中。 - -3. 虽然`userInfoRes.rawData` 已经提供了明文的用户信息,但并不能确保其是安全(未经篡改或完整)的,因此需要向服务器发送请求,验证其真实性。 - - 继续使用`wx.request`方法请求**/WxOpen/CheckWxOpenSignature**地址,发送`sessionId`以及第 1 步中获取到的`userInfoRes.rawData`以及`userInfoRes.signature`,校验信息的真实性。验证通过后,可以在客户端直接使用`rawData`。 - - > 注意:有的开发者会把经过验证后的 `rawData` 发送给服务器保存,认为此信息是有效的,**这是具有风险的做法,应当抛弃**,正确的做法是使用上述代码中后续的方式(**/WxOpen/DecodeEncryptedData**)发送 `userInfoRes.encryptedData` 给服务器解密。因为:第一,`rawData` 从被验证成功到明文发送给服务器的过程中无法确保是否被篡改;第二,明文传输用户的敏感信息容易被监听和窃取,这种做法本身不应该出现在整个项目的任何地方。 - -4. 真实性(签名)验证通过后,继续使用 `wx.request` 请求服务器 **/WxOpen/DecodeEncryptedData** 地址,发送 `sessionId`以及第 1 步中获取到的 `userInfoRes.encryptedData` 以及 `userInfoRes.iv`,服务器端将解密 `encryptedData` 获得用户信息,并储存。 - -> 本项目参考文件: -> -> Senparc.Weixin.**_WxOpen.AppDemo/app.js_** - -## 服务器端 - OnLogin - -服务器端 **/WxOpen/OnLogin** 代码如下: - -```cs -[HttpPost] -public ActionResult OnLogin(string code) -{ - try - { - var jsonResult = SnsApi.JsCode2Json(WxOpenAppId, WxOpenAppSecret, code); - if (jsonResult.errcode == ReturnCode.请求成功) - { - //Session["WxOpenUser"] = jsonResult;//使用Session保存登陆信息(不推荐) - //使用SessionContainer管理登录信息(推荐) - var unionId = ""; - var sessionBag = SessionContainer.UpdateSession(null, jsonResult.openid, jsonResult.session_key, unionId); - - //注意:生产环境下SessionKey属于敏感信息,不能进行传输! - return Json(new { success = true, msg = "OK", sessionId = sessionBag.Key, sessionKey = sessionBag.SessionKey/* 此参数千万不能暴露给客户端!处仅作演示! */ }); - } - else - { - return Json(new { success = false, msg = jsonResult.errmsg }); - } - } - catch (Exception ex) - { - return Json(new { success = false, msg = ex.Message }); - } -} -``` - -> 特别注意:`SessionKey` 是非常敏感的信息,上述代码只是做演示,向客户端证明已经生成,实际开发过程中不可传递到客户端! - -> 本项目参考文件: -> -> /Controllers/**_WxOpenController.cs_** - -## 服务器端 - CheckWxOpenSignature - -服务器端 **/WxOpen/CheckWxOpenSignature** 代码如下: - -```cs -[HttpPost] -public ActionResult CheckWxOpenSignature(string sessionId, string rawData, string signature) -{ - try - { - var checkSuccess = Senparc.Weixin.WxOpen.Helpers.EncryptHelper.CheckSignature(sessionId, rawData, signature); - return Json(new { success = checkSuccess, msg = checkSuccess ? "签名校验成功" : "签名校验失败" }); - } - catch (Exception ex) - { - return Json(new { success = false, msg = ex.Message }); - } -} -``` - -> 本项目参考文件: -> -> /Controllers/**_WxOpenController.cs_** - -## 服务器端 - DecodeEncryptedData - -服务器端 **/WxOpen/DecodeEncryptedData** 代码如下: - -```cs -public async Task DecodeEncryptedData(string type, string sessionId, string encryptedData, string iv) -{ - DecodeEntityBase decodedEntity = null; - - try - { - switch (type.ToUpper()) - { - case "USERINFO"://wx.getUserInfo() - decodedEntity = EncryptHelper.DecodeUserInfoBySessionId( - sessionId, - encryptedData, iv); - break; - default: - break; - } - } - catch (Exception ex) - { - WeixinTrace.SendCustomLog("EncryptHelper.DecodeUserInfoBySessionId 方法出错", - $@"sessionId: {sessionId} -encryptedData: {encryptedData} -iv: {iv} -sessionKey: { (await SessionContainer.CheckRegisteredAsync(sessionId) - ? (await SessionContainer.GetSessionAsync(sessionId)).SessionKey - : "未保存sessionId")} - -异常信息: -{ex.ToString()} -"); - } - - //检验水印 - var checkWatermark = false; - if (decodedEntity != null) - { - checkWatermark = decodedEntity.CheckWatermark(WxOpenAppId); - - //保存用户信息(可选) - if (checkWatermark && decodedEntity is DecodedUserInfo decodedUserInfo) - { - var sessionBag = await SessionContainer.GetSessionAsync(sessionId); - if (sessionBag != null) - { - await SessionContainer.AddDecodedUserInfoAsync(sessionBag, decodedUserInfo); - } - } - } - - //注意:此处仅为演示,敏感信息请勿传递到客户端! - return Json(new - { - success = checkWatermark, - //decodedEntity = decodedEntity, - msg = $"水印验证:{(checkWatermark ? "通过" : "不通过")}" - }); -} -``` - -> 本项目参考文件: -> -> /Controllers/**_WxOpenController.cs_** - -## 完成 - -完成代码后,运行服务器端程序和小程序客户端,在客户端中点击【获取头像昵称】按钮,进入登录页面,点击【获取头像昵称】按钮,即可看到弹出系统确认授权对话窗口: - -![授权界面](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-03.png) - -点击【允许】按钮,即可自动完成整个自动登录、用户信息抓取过程: - -![完成登录和用户信息获取](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-04.png) - -此时,再点击【获取数据】按钮,即可看到已经获取到的用户信息: - -![用户信息](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-05.png) diff --git a/docs/zh/guide/wxopen/messagehandler.md b/docs/zh/guide/wxopen/messagehandler.md deleted file mode 100644 index 06514169d3..0000000000 --- a/docs/zh/guide/wxopen/messagehandler.md +++ /dev/null @@ -1,57 +0,0 @@ -# MessageHandler - -`MessageHandler` 用于处理小程序客服对话窗口的消息以及其他微信服务器的推送信息。 - -SDK 已经为开发者准备好了所有需要的基础功能,开发者只需要创建一个自定义的子类,补充需要自定义的业务逻辑。 - -## 自定义 MessageHandler - -当前示例中,我们给自定义的 MessageHandler 取名 `CustomWxOpenMessageHandler`。 - -> CustomWxOpenMessageHandler.cs 本项目参考文件: -> -> /MessageHandlers/ 目录 -> **_CustomWxOpenMessageHandler.cs_** MessageHandler 消息处理 -> **_CustomWxOpenMessageContext.cs_** 自定义重写 DefaultMpMessageContext 上下文(可选) - -`CustomWxOpenMessageHandler.cs` 中所有演示的重写(`override`)方法中,只有 `DefaultResponseMessageAsync()` 方法是必须重写的,其他所有 `OnXxxRequestAsync()` 方法都为可选,当用户发送的消息,找不到对应重写方法时,则调用 `DefaultResponseMessageAsync()` 方法。 - -MessageHandler 有两种承载方式,使其可以被外部(微信服务器)通过 URL 访问到。分别是**中间件方式**(推荐)和 **Controller 方式**。两种方式所使用的 `CustomWxOpenMessageHandler` 是通用的,因此可以随时切换和共存。 - -## 中间件方式承载 MessageHandler - -中间件方式是推荐的方式,也是最简化的方式,无需创建任何新文件,只需在 `Program.cs` 文件所有 Senparc.Weixin 注册代码执行后的下方,引入中间件: - -```cs -app.UseMessageHandlerForWxOpen("/WxOpenAsync", CustomWxOpenMessageHandler.GenerateMessageHandler, options => -{ - options.AccountSettingFunc = context => Senparc.Weixin.Config.SenparcWeixinSetting; -}); - -``` - -完成后,即可通过 Url **`域名/WxOpenAsync`** 访问 MessageHandler,设置为公众号后台的消息 URL。 - -[测试 /WxOpenAsync](https://sdk.weixin.senparc.com/WxOpenAsync) - -> 本项目参考文件: -> -> /**_Program.cs_** - -更多中间件方式请参考:[《在 .NET Core 2.0/3.0 中使用 MessageHandler 中间件》](https://www.cnblogs.com/szw/p/Wechat-MessageHandler-Middleware.html)(同样适用于 .NET 6.0 及以上,用法和公众号相同)。 - -## Controller 方式承载 MessageHandler - -当中间件的方式满足不了需求时,可以使用 Controller 将执行过程“展开”,对每一步执行进行更加精确的控制或干预。 - -使用 Controller 方式,需要创建 2 个 Action(ActionName 都为 `Index`),分别对应微信后台验证(Get 请求),以及真实消息推送(Post 请求)。本项目示例位于 WxOpenController.cs 中。 - -> WxOpenController.cs 本项目参考文件: -> -> /**_Controllers/WxOpenController.cs_** - -完成后,即可通过 Url **`域名/WxOpen`** 访问 MessageHandler,设置为公众号后台的消息 URL。 - -[测试 /WxOpen](https://sdk.weixin.senparc.com/WxOpen) - -更多 Controller 方式请参考:[《了解 MessageHandler》](https://www.cnblogs.com/szw/p/3414862.html)(推荐使用全套异步方法,基本用法和公众号相同) diff --git a/docs/zh/guide/wxopen/other.md b/docs/zh/guide/wxopen/other.md deleted file mode 100644 index 237821abd0..0000000000 --- a/docs/zh/guide/wxopen/other.md +++ /dev/null @@ -1,19 +0,0 @@ -# 其他 - -更多接口用法,可参考【获取手机号】中的方法,参考客户端(.wxml、.js)以及后端(WxController.cs)文件,用法几乎都是一致的。 - -> 后端本项目参考文件: -> -> /Controllers/**_WxOpenController.cs_** -> -> 客户端参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_app.js_** - 全局方法 -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/index_** - 首页文件 -> -> Senparc.Weixin.WxOpen.AppDemo**_/pages/Login_** - 登录页文件 -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/QrCode_** - 获取二维码文件 -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/websocket_signalr_** - WebSocket 文件(进阶) diff --git a/docs/zh/guide/wxopen/register.md b/docs/zh/guide/wxopen/register.md deleted file mode 100644 index 5963d9c563..0000000000 --- a/docs/zh/guide/wxopen/register.md +++ /dev/null @@ -1,57 +0,0 @@ -# 注册 - -## 全局注册 - -所有的 Senparc.Weixin SDK 注册过程都是类似的。 - -首先,完成所有 Senparc.Weixin SDK 的整体注册代码。在 Program.cs 中加入以下代码: - -![注册 Senparc.Weixin](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-dev-register-01.png) - -说明: - -1. `builder.Services.AddMemoryCache()` Senparc.Weixin 支持本机缓存、Redis、Memcached 等多种缓存策略,默认使用本机缓存,此时需要激活本地缓存。 -2. `builder.Services.AddSenparcWeixinServices(builder.Configuration)` 用于完成 Senparc.Weixin 的注册。 -3. `app.UseSenparcWeixin()` 方法用于配置和启用 Senparc.Weixin。 - -以上代码对于所有的 Senparc.Weixin 下级模块都是相同的,只需要 3 句代码。 - -> 本项目参考文件: -> -> /**_Program.cs_** - -## 公众号注册 - -在上述代码中的第 17 行委托方法中插入代码,即可完成默认公众号的注册: - -```cs -register.RegisterWxOpenAccount(weixinSetting, "【盛派网络小助手】小程序"); -``` - -![注册微信公众号](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-dev-register-02.png) - -其中,`weixinSetting` 的值默认来自于 `appsettings.json`: - -```json - "SenparcWeixinSetting": { - "IsDebug": true, - - //小程序 - "WxOpenAppId": "#{WxOpenAppId}#", - "WxOpenAppSecret": "#{WxOpenAppSecret}#", - "WxOpenToken": "#{WxOpenToken}#", - "WxOpenEncodingAESKey": "#{WxOpenEncodingAESKey}#" - } -``` - -![配置参数](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-dev-register-03.png) - -其中,`WxOpenToken`、`WxOpenEncodingAESKey`、`WxOpenAppId` 和 `WxOpenAppSecret` 对应了微信公众号后台的配置参数。 - -> 本项目参考文件: -> -> /**_appsettings.json_** - -配置完成。 - -> 提示:自动注册的信息可通过 `Senparc.Weixin.Config.SenparcWeixinSetting` 获取。 diff --git a/docs/zh/guide/wxopen/request-service.md b/docs/zh/guide/wxopen/request-service.md deleted file mode 100644 index 7798952fb4..0000000000 --- a/docs/zh/guide/wxopen/request-service.md +++ /dev/null @@ -1,108 +0,0 @@ -# 小程序请求服务 - -小程序客户端可以使用类似 Ajax 的功能对服务器端发送请求,并且获取响应信息(一般为 JSON)。 - -## 放置触发请求的按钮 - -在完成【客户端开发】的基本准备工作后,在页面上(如 **/pages/index/index.wxml**),创建一个按钮,用于触发请求: - -```xml - -``` - -上述代码中,`type`、`class`、`hover-class` 分别设置了按钮的类型、常规样式、点击样式,`bindtap="doRequest"` 指定了点击之后,由 `doRequest()` 方法(function)进行处理。 - -> 本项目参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.wxml_** - -## 请求服务器方法 - -`doRequest() `方法写在 **index.js** 文件中: - -```js -//处理wx.request请求 -doRequest:function(){ - var that = this; - wx.request({ - url: wx.getStorageSync('domainName') + '/WxOpen/RequestData', - data: { nickName : that.data.userInfo.nickName}, - method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT - header: { 'content-type':'application/x-www-form-urlencoded'}, - success: function(res){ - // success - var json = res.data; - //模组对话框 - wx.showModal({ - title: '收到消息', - content: json.msg, - showCancel:false, - success: function(res) { - if (res.confirm) { - console.log('用户点击确定') - } - } - }); - }, - fail: function() { - // fail - }, - complete: function() { - // complete - } - }) -}, -``` - -上述代码中: - -1. `wx.request(...)` 方法用于向服务器端发起请求,类似其他 JS 框架中的 **axios.get() / .post()** 或 **$.ajax()** 等。 -2. `url` 用于指定需要发送到的 API 地址。其中,`wx.getStorageSync('domainName')` 用于灵活指定开发环境或生产环境的域名(见本目录 **app.js** 文件。 -3. `data` 用于存放需要提交的数据,此处我们从本地数据中心取 `userInfo.nickName`,当用户登陆后,即可取到**微信昵称**,否则为 **undefined**。 -4. `method` 为请求的方法名称,当前使用 POST 方式提交。 -5. `header` 用于指定当前请求 Header 中的参数,通常也可以在 JWT 模式中提供用于用户身份验证的 Token。 -6. `success` 为当前请求成功响应(200)后的回调,示例中的代码展示了当收到成功信息后,弹出一个模组对话框,显示返回的内容,并在点击【确定】按钮后,在控制台输出相关日志。 -7. `fail` 和 `complete` 方法分别用于处理失败的请求,以及整个请求完成后的统一操作。 - -> 本项目参考文件: -> -> Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.js_** - -## 服务器端接口 - -服务器端可以使用各类能够接受请求的方式,如页面、MVC 中的 Action、Web Api、中间件(Middleware),甚至 aspx、ashx 等。 - -上述请求地址在本地环境下为:**https://localhost:44367/WxOpen/RequestData**,我们在 WxOpenController 下面创建一个 RequestData 的 Action 用于接收请求: - -```cs -[HttpPost] -public ActionResult RequestData(string nickName) -{ - var data = new - { - msg = string.Format("服务器时间:{0},昵称:{1}", SystemTime.Now.LocalDateTime, nickName) - }; - return Json(data); -} -``` - -> 本项目参考文件: -> -> /Controllers/**_WxOpenController.cs_** - -## 测试 - -点击【获取数据】按钮: - -![发送请求](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-request-01.png) - -由于当前没有登录,所以昵称无法获取到,登陆后即可显示昵称。 - -> 提示:登录操作请见【登录】标签。 - -点击【确定】按钮: - -![点击确定按钮](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-request-02.png) diff --git a/docs/zh/guide/wxopen/source-code.md b/docs/zh/guide/wxopen/source-code.md deleted file mode 100644 index da6e48ed5e..0000000000 --- a/docs/zh/guide/wxopen/source-code.md +++ /dev/null @@ -1,15 +0,0 @@ -# 源码 - -## Senparc.Weixin SDK 源码 - -GitHub:[https://github.com/JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK)(更新更快) - -Gitee:[https://gitee.com/JeffreySu/WeiXinMPSDK](https://gitee.com/JeffreySu/WeiXinMPSDK) (从 GitHub 同步) - -## 打包代码 - -Nuget 包地址:[https://www.nuget.org/packages/Senparc.Weixin.WxOpen](https://www.nuget.org/packages/Senparc.Weixin.WxOpen) - -## 本地源码文件 - -Senparc.Weixin.WxOpen 源码位置:[/src/Senparc.Weixin.WxOpen](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.WxOpen) From c36e9ecb3aca469d38772593b55d925f43be9f51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B7=B3=E5=86=89?= <455274752@qq.com> Date: Tue, 10 Oct 2023 12:03:32 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E5=A4=A7=E5=B0=8F=E5=86=992-=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/guide/mp/advanced-interface.md | 27 ++ docs/zh/guide/mp/advanced.md | 11 + docs/zh/guide/mp/install.md | 73 +++++ docs/zh/guide/mp/jssdk.md | 87 ++++++ docs/zh/guide/mp/menu.md | 72 +++++ docs/zh/guide/mp/messagehandler.md | 58 ++++ docs/zh/guide/mp/oauth2.0.md | 113 ++++++++ docs/zh/guide/mp/register.md | 56 ++++ docs/zh/guide/mp/source-code.md | 15 + docs/zh/guide/work/advanced-interface.md | 68 +++++ docs/zh/guide/work/advanced.md | 11 + docs/zh/guide/work/install.md | 67 +++++ docs/zh/guide/work/jssdk-agent-config.md | 128 +++++++++ docs/zh/guide/work/jssdk-general.md | 91 ++++++ docs/zh/guide/work/menu.md | 79 +++++ docs/zh/guide/work/messagehandler.md | 58 ++++ docs/zh/guide/work/oauth2.0.md | 98 +++++++ docs/zh/guide/work/register.md | 64 +++++ docs/zh/guide/work/source-code.md | 15 + docs/zh/guide/wxopen/advanced-interface.md | 35 +++ docs/zh/guide/wxopen/advanced.md | 11 + docs/zh/guide/wxopen/client-development.md | 13 + docs/zh/guide/wxopen/get-phone-number.md | 89 ++++++ docs/zh/guide/wxopen/install.md | 69 +++++ docs/zh/guide/wxopen/login.md | 319 +++++++++++++++++++++ docs/zh/guide/wxopen/messagehandler.md | 57 ++++ docs/zh/guide/wxopen/other.md | 19 ++ docs/zh/guide/wxopen/register.md | 57 ++++ docs/zh/guide/wxopen/request-service.md | 108 +++++++ docs/zh/guide/wxopen/source-code.md | 15 + 30 files changed, 1983 insertions(+) create mode 100644 docs/zh/guide/mp/advanced-interface.md create mode 100644 docs/zh/guide/mp/advanced.md create mode 100644 docs/zh/guide/mp/install.md create mode 100644 docs/zh/guide/mp/jssdk.md create mode 100644 docs/zh/guide/mp/menu.md create mode 100644 docs/zh/guide/mp/messagehandler.md create mode 100644 docs/zh/guide/mp/oauth2.0.md create mode 100644 docs/zh/guide/mp/register.md create mode 100644 docs/zh/guide/mp/source-code.md create mode 100644 docs/zh/guide/work/advanced-interface.md create mode 100644 docs/zh/guide/work/advanced.md create mode 100644 docs/zh/guide/work/install.md create mode 100644 docs/zh/guide/work/jssdk-agent-config.md create mode 100644 docs/zh/guide/work/jssdk-general.md create mode 100644 docs/zh/guide/work/menu.md create mode 100644 docs/zh/guide/work/messagehandler.md create mode 100644 docs/zh/guide/work/oauth2.0.md create mode 100644 docs/zh/guide/work/register.md create mode 100644 docs/zh/guide/work/source-code.md create mode 100644 docs/zh/guide/wxopen/advanced-interface.md create mode 100644 docs/zh/guide/wxopen/advanced.md create mode 100644 docs/zh/guide/wxopen/client-development.md create mode 100644 docs/zh/guide/wxopen/get-phone-number.md create mode 100644 docs/zh/guide/wxopen/install.md create mode 100644 docs/zh/guide/wxopen/login.md create mode 100644 docs/zh/guide/wxopen/messagehandler.md create mode 100644 docs/zh/guide/wxopen/other.md create mode 100644 docs/zh/guide/wxopen/register.md create mode 100644 docs/zh/guide/wxopen/request-service.md create mode 100644 docs/zh/guide/wxopen/source-code.md diff --git a/docs/zh/guide/mp/advanced-interface.md b/docs/zh/guide/mp/advanced-interface.md new file mode 100644 index 0000000000..d301a67975 --- /dev/null +++ b/docs/zh/guide/mp/advanced-interface.md @@ -0,0 +1,27 @@ +# 高级接口 + +完成 `Program.cs` 文件中的常规注册后,即可在程序的任意地方使用高级接口。 + +> 注意: +> 1、高级接口的配置和 `MessageHandler` 没有关联,两者可以独立或配合使用。 +> 2、SDK 内几乎所有高级接口的第一个参数同时支持传入 AppId 或 AccessToken,通常名称为 `appIdOrAccessToken`,SDK 会根据参数特征自动识别输入的是 AppId 还是 AccessToken,并做区分处理。 + +## 使用 AppId 调用接口(推荐) + +例如,我们可以在任意一个方法中调用一个高级接口: + +```cs +var appId = Senparc.Weixin.Config.SenparcWeixinSetting.AppId; +var result = await Senparc.Weixin.MP.AdvancedAPIs.UserApi.GetAsync(appId);//获取关注者 OpenId 信息 +``` + +> appId 参数,必须是已经经过注册的,这样即使 AccessToken 过期,SDK 也会全自动处理。如果是未经过注册的 appId,则需要先获取 AccessToken,然后调用接口。 + +## 使用 AccessToken 调用接口(不推荐) + +```cs +var accessToken = Senparc.Weixin.MP.CommonApi.GetTokenAsync(appId, appSecret);//获取 AccessToken +var result = await Senparc.Weixin.MP.AdvancedAPIs.UserApi.GetAsync(accessToken);//获取关注者 OpenId 信息 +``` + +> 注意:使用 AccessToken 方式调用接口,无法保证当前 AccessToken 的有效性,因此建议使用前进行有效性校验,并使用 `try-catch` 方式捕获 AccessToken 不可用的异常,然后进行重试。因此直接使用 AccessToken 调用接口的方式并不推荐在常规情况下使用。 diff --git a/docs/zh/guide/mp/advanced.md b/docs/zh/guide/mp/advanced.md new file mode 100644 index 0000000000..1b32c519b3 --- /dev/null +++ b/docs/zh/guide/mp/advanced.md @@ -0,0 +1,11 @@ +# 进阶 + +当前示例展示了最基本和常用的功能,如果您需要了解更多高级玩法,并且有扎实的编程功底,请参考完整示例。 + +> 完整示例解决方案文件: +> +> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7.sln](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/All/net7-mvc) + +> 务必阅读 readme 文件: +> +> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/readme.md](https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/All/net7-mvc/readme.md) diff --git a/docs/zh/guide/mp/install.md b/docs/zh/guide/mp/install.md new file mode 100644 index 0000000000..ec39b26fbf --- /dev/null +++ b/docs/zh/guide/mp/install.md @@ -0,0 +1,73 @@ +# 如何安装? + +您可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包,推荐),以方便随时获取官方的更新。注意:直接引用源码和引用 Nuget 包只能二选一。 + +## 引用源码 + +您可以在当前解决方案中,**Libraries** 目录下,将所需要引用的程序集引用(复制)到您开发环境的解决方案中,请注意需要同时引用被依赖的项目,如 `Senparc.Weixin` 项目是所有项目都需要依赖的。 + +当前示例项目默认就使用了直接引用源码的方式,可从 .csproj 文件中看到引用方式: + +```cs + + + + + +``` + +## 引用程序集(推荐) + +您可以通过 `Visual Studio`、`Visual Studio Code`、`dotnet 命令行` 等多种方式自动安装 Nuget 包。 + +### Visual Studio + +在开发项目【解决方案资源管理器】中,对需要添加 Senparc.Weixin.MP 的模块点击右键,点击【管理 Nuget 程序包】,在【浏览】标签中输入 **Senparc.Weixin.MP**,点击右侧【安装】按钮。如下图所示: + +![通过 Visual Studio 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-01.png) + +### Visual Studio Code + +首先,确认已经安装好 [VS Code](https://code.visualstudio.com/) 以及 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 + +然后,打开解决方案或项目所在目录,按 Ctrl+~,打开终端面板: + +![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-03.png) + +进入需要添加 Senparc.Weixin.MP 的模块的项目的目录,输入: + +> ```cs +> dotnet add package Senparc.Weixin.MP +> ``` + +安装 Senparc.Weixin.MP 模块 + +![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-04.png) + +安装完成后,可查看对应 .csproj 文件,被添加引用,如: + +```cs + + + +``` + +### dotnet 命令行 + +首先,确认已经安装好 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 + +进入需要添加 Senparc.Weixin.MP 的模块的项目的目录,输入: + +> ```cs +> dotnet add package Senparc.Weixin.MP +> ``` + +![通过 dotnet CLI 安装](https://sdk.weixin.senparc.com/Docs/MP/images/home-install-02.png) + +安装完成后,可查看对应 .csproj 文件,被添加引用,如: + +```cs + + + +``` diff --git a/docs/zh/guide/mp/jssdk.md b/docs/zh/guide/mp/jssdk.md new file mode 100644 index 0000000000..01c6a5d703 --- /dev/null +++ b/docs/zh/guide/mp/jssdk.md @@ -0,0 +1,87 @@ +# JSSDK + +JSSDK 用于提供微信内置浏览器接口的能力,例如转发控制、调用摄像头权限(拍照、视频)、文件上传、关闭窗口、唤起扫码窗口,等等。 + +要在内置浏览器中只用 JSSDK,分为“服务端获取签名信息”和“网页端配置 JSSDK”两步。 + +## 服务端获取签名信息 + +后端通过 `JSSDKHelper.GetJsSdkUiPackageAsync()` 方法即可自动获取前端所需的所有 JSSDK 运行所需参数: + +```cs +public async Task Index() +{ + var jssdkUiPackage = await JSSDKHelper.GetJsSdkUiPackageAsync(appId, appSecret, Request.AbsoluteUri()); + return View(jssdkUiPackage); +} +``` + +> 本项目参考文件: +> +> /Controllers/**_WeixiJSSDKnController.cs_** + +## 网页端配置 JSSDK + +后端配置完成的参数,直接在前端 JS 中使用 `wx.config` 进行设置,例如以下代码将完成在转发网页时自定义转发消息的标题和图片: + +```js +wx.config({ + debug: false, // 开启调试模式 + appId: "@Model.AppId", // 必填,公众号的唯一标识 + timestamp: "@Model.Timestamp", // 必填,生成签名的时间戳 + nonceStr: "@Model.NonceStr", // 必填,生成签名的随机串 + signature: "@Model.Signature", // 必填,签名 + jsApiList: ["checkJsApi", "onMenuShareTimeline", "onMenuShareAppMessage"], +}); + +wx.error(function (res) { + console.log(res); + alert("验证失败"); +}); + +wx.ready(function () { + var url = "https://sdk.weixin.senparc.com"; + var link = url + ""; + var imgUrl = url + "/images/v2/ewm_01.png"; + + //转发到朋友圈 + wx.onMenuShareTimeline({ + title: "JSSDK朋友圈转发测试", + link: link, + imgUrl: imgUrl, + success: function () { + alert("转发成功!"); + }, + cancel: function () { + alert("转发失败!"); + }, + }); + //转发给朋友 + wx.onMenuShareAppMessage({ + title: "JSSDK朋友圈转发测试", + desc: "转发给朋友", + link: link, + imgUrl: imgUrl, + type: "link", + dataUrl: "", + success: function () { + alert("转发成功!"); + }, + cancel: function () { + alert("转发失败!"); + }, + }); +}); +``` + +> 提示:在 MVC 中传递 ViewModel 需要在 .cshtml 文件顶部定义: +> +> ```cs +> @model Senparc.Weixin.MP.Helpers.JsSdkUiPackage +> ``` + +> 本项目参考文件: +> +> /Views/WeixinJSSDK/**_Index.cshtml_** + +更多设置详情请参考:[JS-SDK 说明文档](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html)。 diff --git a/docs/zh/guide/mp/menu.md b/docs/zh/guide/mp/menu.md new file mode 100644 index 0000000000..7bdfea2daa --- /dev/null +++ b/docs/zh/guide/mp/menu.md @@ -0,0 +1,72 @@ +# 菜单设置 + +公众号菜单是公众号界面的重要元素,菜单的使用分为 **设置** 和 **使用** 两个环节。 + +## 设置 + +方法一:使用微信公众号后台界面设置(不使用开发模式),此处略。 + +方法二(推荐):使用可视化编辑器(No Code):[点击查看介绍](https://sdk.weixin.senparc.com/Menu)。 + +方法三:使用代码进行设置(只需要执行一次,建议放在管理员后台,手动运行),如: + +```cs +public async Task CreateMenuAsync() +{ + ButtonGroup bg = new ButtonGroup(); + + //定义一级菜单 + var subButton = new SubButton() + { + name = "一级菜单" + }; + bg.button.Add(subButton); + + //下属二级菜单 + subButton.sub_button.Add(new SingleViewButton() + { + url = "https://book.weixin.senparc.com/book/link?code=SenparcRobotMenu", + name = "《微信开发深度解析》" + }); + subButton.sub_button.Add(new SingleClickButton() + { + key = "OneClick", + name = "单击测试" + }); + subButton.sub_button.Add(new SingleViewButton() + { + url = "https://weixin.senparc.com/", + name = "Url跳转" + }); + + //最多可添加 3 个一级自定义菜单,每个菜单下最多 5 个子菜单 + + var result = await CommonApi.CreateMenuAsync(appId, bg); +} +``` + +## 使用 + +设置完菜单后,当客户端点击菜单时,微信服务器会自动推送响应的回调信息到消息 URL(即已经设置好的 MessageHandler 内),只需在 CustomMessageHandler 中重写(`override`)对应的方法即可。如针对上述 **方法三** 已经设定生效的菜单,当用户点击【单击测试】按钮时,我们可以在 CustomMessageHandler 中进行接收和处理: + +```cs +public override async Task OnEvent_ClickRequestAsync(RequestMessageEvent_Click requestMessage) +{ + var reponseMessage = CreateResponseMessage(); + + if (requestMessage.EventKey == "OneClick") + { + reponseMessage.Content = "您点击了【单击测试】按钮"; + } + else + { + reponseMessage.Content = "您点击了其他事件按钮"; + } + + return reponseMessage; +} +``` + +> 本项目参考文件: +> +> /MessageHandlers/**_CustomMessageHandler_Events.cs_** diff --git a/docs/zh/guide/mp/messagehandler.md b/docs/zh/guide/mp/messagehandler.md new file mode 100644 index 0000000000..b4bdbe9bb9 --- /dev/null +++ b/docs/zh/guide/mp/messagehandler.md @@ -0,0 +1,58 @@ +# MessageHandler + +`MessageHandler` 用于处理微信公众号对话窗口的消息。 + +SDK 已经为开发者准备好了所有需要的基础功能,开发者只需要创建一个自定义的子类,补充需要自定义的业务逻辑。 + +## 自定义 MessageHandler + +当前示例中,我们给自定义的 MessageHandler 取名 `CustomMessageHandler`。 + +> **CustomMessageHandler.cs 本项目参考文件:** +> +> /MessageHandlers/ 目录 +> **_CustomMessageHandler.cs_** MessageHandler 主文件 + 普通消息处理 +> **_CustomMessageHandler_Events.cs_** MessageHandler 事件消息处理 +> **_CustomMessageContext.cs_** 自定义重写 DefaultMpMessageContext 上下文(可选) + +`CustomMessageHandler*.cs` 中所有演示的重写(`override`)方法中,只有 `DefaultResponseMessage()` 方法是必须重写的,其他所有 `OnXxxRequest()` 方法都为可选,当用户发送的消息,找不到对应重写方法时,则调用 `DefaultResponseMessage()` 方法。 + +MessageHandler 有两种承载方式,使其可以被外部(微信服务器)通过 URL 访问到。分别是**中间件方式**(推荐)和 **Controller 方式**。两种方式所使用的 `CustomMessageHandler` 是通用的,因此可以随时切换和共存。 + +## 中间件方式承载 MessageHandler + +中间件方式是推荐的方式,也是最简化的方式,无需创建任何新文件,只需在 `Program.cs` 文件所有 Senparc.Weixin 注册代码执行后的下方,引入中间件: + +```cs +app.UseMessageHandlerForMp("/WeixinAsync", CustomMessageHandler.GenerateMessageHandler, options => +{ + options.AccountSettingFunc = context => Senparc.Weixin.Config.SenparcWeixinSetting; +}); + +``` + +完成后,即可通过 Url **`域名/WeixinAsync`** 访问 MessageHandler,设置为公众号后台的消息 URL。 + +[测试 /WeixinAsync](https://sdk.weixin.senparc.com/WeixinAsync) + +> 本项目参考文件: +> +> /**_Program.cs_** + +更多中间件方式请参考:[《在 .NET Core 2.0/3.0 中使用 MessageHandler 中间件》](https://www.cnblogs.com/szw/p/Wechat-MessageHandler-Middleware.html)(同样适用于 .NET 6.0 及以上)。 + +## Controller 方式承载 MessageHandler + +当中间件的方式满足不了需求时,可以使用 Controller 将执行过程“展开”,对每一步执行进行更加精确的控制或干预。 + +使用 Controller 方式,需要创建 2 个 Action,分别对应微信后台验证(Get 请求),以及真实消息推送(Post 请求)。本项目示例位于 `WeixinController.cs`中。 + +> WeixinController.cs 本项目参考文件: +> +> /**_Controllers/WeixinController.cs_** + +完成后,即可通过 Url **`域名/Weixin`** 访问 MessageHandler,设置为公众号后台的消息 URL。 + +[测试 /Weixin](https://sdk.weixin.senparc.com/Weixin) + +更多 Controller 方式请参考:[《了解 MessageHandler》](https://www.cnblogs.com/szw/p/3414862.html)(推荐使用全套异步方法) diff --git a/docs/zh/guide/mp/oauth2.0.md b/docs/zh/guide/mp/oauth2.0.md new file mode 100644 index 0000000000..8f525bbb26 --- /dev/null +++ b/docs/zh/guide/mp/oauth2.0.md @@ -0,0 +1,113 @@ +# OAuth 2.0 + +当你需要在网页上获取用户的 OpenId、头像、昵称等信息的时候,就需要使用 OAuth 2.0 的方式和微信服务器通讯。 + +更多信息请参考官方文档:[网页授权](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html#4)。 + +SDK 已经封装了所有相关的过程,您只需要参考示例进行简单的 3 步配置即可。 + +## 第一步:设置登录页面 + +登录页面中需要设置官方 OAuth 2.0 的请求 URL(称为 **AuthorizeUrl**),并带上登录成功后的 returnUrl。 + +由于微信授权具有两种方式(**snsapi_userinfo** 和 **snsapi_base**,下方代码直接提供了两种获取 **AuthorizeUrl** 的方式: + +```cs +public ActionResult Index(string returnUrl) +{ + ViewData["returnUrl"] = returnUrl; + + //此页面引导用户点击授权 + ViewData["UrlUserInfo"] = + OAuthApi.GetAuthorizeUrl(appId, + "http://sdk.weixin.senparc.com/oauth2/UserInfoCallback?returnUrl=" + returnUrl.UrlEncode(), + null, OAuthScope.snsapi_userinfo);//snsapi_userinfo方式回调地址 + + ViewData["UrlBase"] = + OAuthApi.GetAuthorizeUrl(appId, + "http://sdk.weixin.senparc.com/oauth2/BaseCallback?returnUrl=" + returnUrl.UrlEncode(), + null, OAuthScope.snsapi_base);//snsapi_base方式回调地址 + return View(); +} +``` + +上述 `returnUrl` 参数一般为跳转到登陆页面之前的 URL,也可以是希望用户完成授权之后跳转到的 URL。 + +> 注意:上述的网址和路径需要在公众号后台匹配成你自己服务器的地址(参考文档:[网页授权](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html#4))。 + +> 本项目参考文件: +> +> /Controllers/**_OAuth2Controller.cs_** + +## 第二步:前端登录页面设置 + +登录页面最终的功能是引导用户打开 **AuthorizeUrl**,可以直接使用连接的方式: + +```cs + +点击这里测试snsapi_userinfo + + +点击这里测试snsapi_userinfo +``` + +> 本项目参考文件: +> +> /Views/OAuth2/**_Index.cshtml_** + +## 第三步:配置登陆后回调页面 + +授权成功后,网页将自动跳转到第一步中设置的回调 URL(`"http://sdk.weixin.senparc.com/oauth2/UserInfoCallback?returnUrl=" + returnUrl.UrlEncode()`),以 **UserInfoCallback** 为例: + +```cs +public ActionResult UserInfoCallback(string code, string returnUrl) +{ + if (string.IsNullOrEmpty(code)) + { + return Content("您拒绝了授权!"); + } + + OAuthAccessTokenResult result = null; + + //通过,用code换取access_token + try + { + result = OAuthApi.GetAccessToken(appId, appSecret, code); + } + catch (Exception ex) + { + return Content(ex.Message); + } + if (result.errcode != ReturnCode.请求成功) + { + return Content("错误:" + result.errmsg); + } + + //下面2个数据也可以自己封装成一个类,储存在数据库中(建议结合缓存) + //如果可以确保安全,可以将access_token存入用户的cookie中,每一个人的access_token是不一样的 + HttpContext.Session.SetString("OAuthAccessTokenStartTime", SystemTime.Now.ToString()); + HttpContext.Session.SetString("OAuthAccessToken", result.ToJson()); + + //因为第一步选择的是OAuthScope.snsapi_userinfo,这里可以进一步获取用户详细信息 + try + { + if (!string.IsNullOrEmpty(returnUrl)) + { + return Redirect(returnUrl); + } + + OAuthUserInfo userInfo = OAuthApi.GetUserInfo(result.access_token, result.openid); + return View(userInfo); + } + catch (ErrorJsonResultException ex) + { + return Content(ex.Message); + } +} +``` + +上述代码中,传入的 `returnUrl` 即第一步 `Index()` 方法中传入到 **AuthorizeUrl** 中的 `returnUrl`,当所有用户信息获取、保存等操作完成后,借助 `returnUrl` 跳转到登陆之前的页面,完成整个闭环的登录操作。 + +> 本项目参考文件: +> +> /Controllers/**_OAuth2Controller.cs_** diff --git a/docs/zh/guide/mp/register.md b/docs/zh/guide/mp/register.md new file mode 100644 index 0000000000..913c737837 --- /dev/null +++ b/docs/zh/guide/mp/register.md @@ -0,0 +1,56 @@ +# 注册 + +## 全局注册 + +所有的 Senparc.Weixin SDK 注册过程都是类似的。 + +首先,完成所有 Senparc.Weixin SDK 的整体注册代码。在 Program.cs 中加入以下代码: + +![注册 Senparc.Weixin](https://sdk.weixin.senparc.com/Docs/MP/images/home-dev-register-01.png) + +说明: + +1. `builder.Services.AddMemoryCache()` Senparc.Weixin 支持本机缓存、Redis、Memcached 等多种缓存策略,默认使用本机缓存,此时需要激活本地缓存。 +2. `builder.Services.AddSenparcWeixinServices(builder.Configuration)` 用于完成 Senparc.Weixin 的注册。 +3. `app.UseSenparcWeixin()` 方法用于配置和启用 Senparc.Weixin。 + +以上代码对于所有的 Senparc.Weixin 下级模块都是相同的,只需要 3 句代码。 + +> 本项目参考文件: +> +> /**_Program.cs_** + +## 公众号注册 + +在上述代码中的第 17 行委托方法中插入代码,即可完成默认公众号的注册: + +```cs +register.RegisterMpAccount(weixinSetting, "【盛派网络小助手】公众号"); +``` + +![注册微信公众号](https://sdk.weixin.senparc.com/Docs/MP/images/home-dev-register-02.png "注册微信公众号") + +其中,`weixinSetting` 的值默认来自于 `appsettings.json`: + +```json + "SenparcWeixinSetting": { + "IsDebug": true, + + "Token": "#{Token}#", + "EncodingAESKey": "#{EncodingAESKey}#", + "WeixinAppId": "#{WeixinAppId}#", + "WeixinAppSecret": "#{WeixinAppSecret}#" + } +``` + +![配置参数](https://sdk.weixin.senparc.com/Docs/MP/images/home-dev-register-03.png "配置参数") + +其中,`Token`、`EncodingAESKey`、`WeixinAppId` 和 `WeixinAppSecret` 对应了微信公众号后台的配置参数。 + +> 本项目参考文件: +> +> /**_appsettings.json_** + +配置完成。 + +> 提示:自动注册的信息可通过 `Senparc.Weixin.Config.SenparcWeixinSetting` 获取。 diff --git a/docs/zh/guide/mp/source-code.md b/docs/zh/guide/mp/source-code.md new file mode 100644 index 0000000000..1b4978d264 --- /dev/null +++ b/docs/zh/guide/mp/source-code.md @@ -0,0 +1,15 @@ +# 源码 + +## Senparc.Weixin SDK 源码 + +GitHub:[https://github.com/JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK)(更新更快) + +Gitee:[https://gitee.com/JeffreySu/WeiXinMPSDK](https://gitee.com/JeffreySu/WeiXinMPSDK)(从 GitHub 同步) + +## 打包代码 + +Nuget 包地址:[https://www.nuget.org/packages/Senparc.Weixin.MP](https://www.nuget.org/packages/Senparc.Weixin.MP) + +## 本地源码文件 + +Senparc.Weixin.MP 源码位置:[/src/Senparc.Weixin.MP](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.MP) diff --git a/docs/zh/guide/work/advanced-interface.md b/docs/zh/guide/work/advanced-interface.md new file mode 100644 index 0000000000..52cc4ac6ed --- /dev/null +++ b/docs/zh/guide/work/advanced-interface.md @@ -0,0 +1,68 @@ +# 高级接口 + +完成 `Program.cs` 文件中的常规注册后,即可在程序的任意地方使用高级接口。 + +> 注意: +> 1、高级接口的配置和 `MessageHandler` 没有关联,两者可以独立或配合使用。 +> 2、由于企业微信使用 CorpId + Secret 来定位(区别)每个应用的授权信息,因此,SDK 中将两者合并成一个唯一参数,命名为 **AppKey**,可通过 `AccessTokenContainer.BuildingKey(string corpId, string corpSecret)` 方法获取合成后的 **AppKey**。 +> 3、企业微信 SDK 内几乎所有高级接口的第一个参数同时支持传入 AppKey 或 AccessToken,通常名称为 `accessTokenOrAppKey`,SDK 会根据参数特征自动识别输入的是 AppKey 还是 AccessToken,并做区分处理。 + +## 使用 AppKey 调用接口(推荐) + +例如,我们可以在任意一个方法中调用一个高级接口: + +```cs +public async Task TryApiTryApiByAppKey() +{ + // 获取注册信息 + var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting; + // 获取 AppKey + var appKey = AccessTokenContainer.BuildingKey(workWeixinSetting); + //发送请求 + try + { + //发送文字提醒 + var result = await Senparc.Weixin.Work.AdvancedAPIs.MassApi.SendTextAsync(appKey, "001", "这是一条来企业微信的消息"); + return Content("OK"); + } + catch (ErrorJsonResultException ex) + { + return Content($"出错啦:{ex.Message}"); + } +} +``` + +> `workWeixinSetting` 参数,必须是已经经过注册的企业微信信息(内部包括 CorpId 和 Secret),这样即使 AccessToken 过期,SDK 也会全自动处理。如果是未经过注册的 CorpId 和 Secret,则需要先获取 AccessToken,然后调用接口。 + +> 本项目参考文件: +> +> /Controllers/**_AdvancedApiController.cs_** + +## 使用 AccessToken 调用接口(不推荐) + +```cs +public async Task TryApiByAccessToken() +{ + // 获取注册信息 + var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting; + // 获取 AccessToken + var accessToken = await AccessTokenContainer.GetTokenAsync(workWeixinSetting.WeixinCorpId, workWeixinSetting.WeixinCorpSecret); + //发送请求 + try + { + //发送文字提醒 + var result = await Senparc.Weixin.Work.AdvancedAPIs.MassApi.SendTextAsync(accessToken, "001", "这是一条来企业微信的消息"); + return Content("OK"); + } + catch (ErrorJsonResultException ex) + { + return Content($"出错啦:{ex.Message}"); + } +} +``` + +> 注意:使用 AccessToken 方式调用接口,无法保证当前 AccessToken 的有效性,因此建议使用前进行有效性校验,并使用 `try-catch` 方式捕获 AccessToken 不可用的异常,然后进行重试。因此直接使用 AccessToken 调用接口的方式并不推荐在常规情况下使用。 + +> 本项目参考文件: +> +> /Controllers/**_AdvancedApiController.cs_** diff --git a/docs/zh/guide/work/advanced.md b/docs/zh/guide/work/advanced.md new file mode 100644 index 0000000000..1b32c519b3 --- /dev/null +++ b/docs/zh/guide/work/advanced.md @@ -0,0 +1,11 @@ +# 进阶 + +当前示例展示了最基本和常用的功能,如果您需要了解更多高级玩法,并且有扎实的编程功底,请参考完整示例。 + +> 完整示例解决方案文件: +> +> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7.sln](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/All/net7-mvc) + +> 务必阅读 readme 文件: +> +> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/readme.md](https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/All/net7-mvc/readme.md) diff --git a/docs/zh/guide/work/install.md b/docs/zh/guide/work/install.md new file mode 100644 index 0000000000..44e9756d62 --- /dev/null +++ b/docs/zh/guide/work/install.md @@ -0,0 +1,67 @@ +# 如何安装? + +您可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包,推荐),以方便随时获取官方的更新。注意:直接引用源码和引用 Nuget 包只能二选一。 + +## 引用源码 + +您可以在当前解决方案中,**Libraries** 目录下,将所需要引用的程序集引用(复制)到您开发环境的解决方案中,请注意需要同时引用被依赖的项目,如 `Senparc.Weixin` 项目是所有项目都需要依赖的。 + +当前示例项目默认就使用了直接引用源码的方式,可从 .csproj 文件中看到引用方式: + +```cs + + + + + +``` + +## 引用程序集(推荐) + +您可以通过 `Visual Studio`、`Visual Studio Code`、`dotnet 命令行` 等多种方式自动安装 Nuget 包。 + +### Visual Studio + +在开发项目【解决方案资源管理器】中,对需要添加 Senparc.Weixin.Work 的模块点击右键,点击【管理 Nuget 程序包】,在【浏览】标签中输入 **Senparc.Weixin.Work**,点击右侧【安装】按钮。如下图所示: + +![通过 Visual Studio 安装](https://sdk.weixin.senparc.com/Docs/Work/images/home-install-01.png) + +## Visual Studio Code + +首先,确认已经安装好 [VS Code](https://code.visualstudio.com/) 以及 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 + +然后,打开解决方案或项目所在目录,按 Ctrl+~,打开终端面板,进入需要添加 Senparc.Weixin.Work 的模块的项目的目录,输入: + +> ```cs +> dotnet add package Senparc.Weixin.Work +> ``` + +![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/Work/images/home-install-03.png)安装 Senparc.Weixin.Work 模块 + +安装完成后,可查看对应 .csproj 文件,被添加引用,如: + +```cs + + + +``` + +## dotnet 命令行 + +首先,确认已经安装好 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 + +进入需要添加 Senparc.Weixin.Work 的模块的项目的目录,输入: + +> ```cs +> dotnet add package Senparc.Weixin.Work +> ``` + +![通过 dotnet CLI 安装](https://sdk.weixin.senparc.com/Docs/Work/images/home-install-02.png)通过 dotnet CLI 安装 + +安装完成后,可查看对应 .csproj 文件,被添加引用,如: + +```cs + + + +``` diff --git a/docs/zh/guide/work/jssdk-agent-config.md b/docs/zh/guide/work/jssdk-agent-config.md new file mode 100644 index 0000000000..fe30402c89 --- /dev/null +++ b/docs/zh/guide/work/jssdk-agent-config.md @@ -0,0 +1,128 @@ +# JSSDK(agentConfig) + +`wx.agentConfig()` 用于某些特定的接口(如审批流接口、剪切板接口等),但一般前提都需要先使用到常规的 JSSDK(参考【JSSDK(常规)】标签),因此这是一个增加项。 + +`wx.agentConfig()` 同样分为服务器端和客户端两部分。 + +## 服务端获取签名信息 + +后端除了后端通过 `JSSDKHelper.GetJsSdkUiPackageAsync()` 方法获取常规 JSSDK 运行所需参数以外,还需要使用同一个方法,传入不同参数来获取 `agetntConfig` 的对应参数: + +```JS +public async Task AgentConfig() +{ + //此处演示同时支持多个应用的注册,请参考 appsettings.json 文件 + var workSetting = Senparc.Weixin.Config.SenparcWeixinSetting["企业微信审批"] as ISenparcWeixinSettingForWork; + var url = "https://sdk.weixin.senparc.com/Work/Approval"; + + //获取 UI 信息包 + + /* 注意: + * 所有应用中,jsApiUiPackage 是必备的 + */ + var jsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, false); + var jsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, jsApiTicket, false); + ViewData["jsApiUiPackage"] = jsApiUiPackage; + + /* 注意: + * 1、这里需要使用 WeixinCorpAgentId,而不是 WeixinCorpId + * 2、agentJsApiUiPackage 是否需要提供,请参考官方文档,此处演示了最复杂的情况 + */ + ViewData["thirdNo"] = DateTime.Now.Ticks + Guid.NewGuid().ToString("n"); + ViewData["corpId"] = workSetting.WeixinCorpId; + ViewData["agentId"] = workSetting.WeixinCorpAgentId; + var agentConfigJsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, true); + var agentJsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, agentConfigJsApiTicket, true); + ViewData["agentJsApiUiPackage"] = agentJsApiUiPackage; + + return View(); +} +``` + +> 注意:上述方法中,使用了 +> +> `Senparc.Weixin.Config.SenparcWeixinSetting["企业微信审批"]` +> +> 来获取与之前不同的微信配置,请参考本项目中 +> +> `appsetting.json` +> +> 文件中的设置方法: +> +> ```JSON +> "Items": { +> //添加多个企业微信应用 +> "企业微信审批": { +> "WeixinCorpId": "#{WeixinCorpId2}#", +> "WeixinCorpAgentId": "#{WeixinCorpAgentId2}#", +> "WeixinCorpSecret": "#{WeixinCorpSecret2}#", +> "WeixinCorpToken": "#{WeixinCorpToken2}#", +> "WeixinCorpEncodingAESKey": "#{WeixinCorpEncodingAESKey2}#"} +> } +> ``` +> +> 此方法对所有其他模块也通用(如公众号、小程序、微信支付等)。 + +> 本项目参考文件: +> +> /Controllers/**_JSSDKnController.cs_** - AgentConfig() 方法 +> +> /**_appsettings.json_** + +## 网页端配置 JSSDK + +网页端除了进行常规的 JSSDK 配置以外,还需要在执行特定的 JsApi 方法之前,添加 `wx.agentConfig()` 的配置: + +```cs +function invoke(){ + wx.agentConfig({ + corpid: '@ViewData["corpId"]', // 必填,企业微信的corpid,必须与当前登录的企业一致 + agentid: '@ViewData["agentId"]', // 必填,企业微信的应用id (e.g. 1000247) + timestamp: @agentJsApiUiPackage.Timestamp, // 必填,生成签名的时间戳 + nonceStr: '@agentJsApiUiPackage.NonceStr', // 必填,生成签名的随机串 + signature: '@agentJsApiUiPackage.Signature',// 必填,签名,见附录-JS-SDK使用权限签名算法 + jsApiList: ['thirdPartyOpenPage'], //必填,传入需要使用的接口名称 + success: function(res) { + + // 回调 + wx.invoke('thirdPartyOpenPage', { + "oaType": "10001",// String + //"templateId": "C4NxepvGj51gbkeGXHQgYRArW96WrxRinNfyCxo7N",//SYS + "templateId":"247bcb886d0374a0a1f749c52794ba1a_622421053",// Open + "thirdNo": "",// String + "extData": { + 'fieldList': [{ + 'title': '审批类型', + 'type': 'text', + 'value': '文章审批', + }, + { + 'title': '预览', + 'type': 'link', + 'value': 'https://weixin.senparc.com', + }], + } + }, + function(res) { + // 输出接口的回调信息 + console.log(res); + alert('wx.invoke result:'+JSON.stringify(res)); + }); + }, + fail: function(res) { + if(res.errMsg.indexOf('function not exist') > -1){ + alert('版本过低请升级') + } + else{ + alert('wx.invoke fail:'+JSON.stringify(res)); + } + } + }); +} +``` + +HTML 页面进行触发:`点击唤起审批流程` + +> 本项目参考文件: +> +> /Views/**_JSSDK/Index.cshtml_** diff --git a/docs/zh/guide/work/jssdk-general.md b/docs/zh/guide/work/jssdk-general.md new file mode 100644 index 0000000000..0048751988 --- /dev/null +++ b/docs/zh/guide/work/jssdk-general.md @@ -0,0 +1,91 @@ +# JSSDK(常规) + +JSSDK 用于提供微信内置浏览器接口的能力,例如转发控制、调用摄像头权限(拍照、视频)、文件上传、关闭窗口、唤起扫码窗口,等等。 + +要在内置浏览器中只用 JSSDK,分为“服务端获取签名信息”和“网页端配置 JSSDK”两步。 + +企业微信的网页端 JSSDK 配置,和公众号类似,不过多了一个名为 `wx.agentConfig()` 的配置方法。这里介绍常规的方法,`wx.agentConfig()` 配套方法请见【JSSDK(agentConfig】标签。 + +## 服务端获取签名信息 + +后端通过 `JSSDKHelper.GetJsSdkUiPackageAsync()` 方法即可自动获取前端所需的所有 JSSDK 运行所需参数: + +```cs +public async Task Index() +{ + // 当前 URL + var url = "https://sdk.work.weixin.senparc.com/JSSDK/"; + // 获取企业微信配置 + var workSetting = Senparc.Weixin.Config.SenparcWeixinSetting.WorkSetting; + // 获取 JsApiTicket(保密信息,不可外传) + var jsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, false); + // 获取 UI 打包信息 + var jsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, jsApiTicket, false); + + ViewData["jsApiUiPackage"] = jsApiUiPackage; + return View(); +} +``` + +> 本项目参考文件: +> +> /Controllers/**_JSSDKnController.cs_** - Index() 方法 + +## 网页端配置 JSSDK + +后端配置完成的参数,直接在前端 JS 中使用 `wx.config` 进行设置,例如以下代码将完成从企业微信内转发网页到**个人微信**: + +```cs +$(function(){ + wx.config({ + beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题 + debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 + appId: '@jsApiUiPackage.AppId', // 必填,企业微信的corpID + timestamp: @jsApiUiPackage.Timestamp, // 必填,生成签名的时间戳 + nonceStr: '@jsApiUiPackage.NonceStr', // 必填,生成签名的随机串 + signature: '@jsApiUiPackage.Signature',// 必填,签名,见 附录-JS-SDK使用权限签名算法 + jsApiList: ['shareWechatMessage'] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来 + }); + + wx.checkJsApi({ + jsApiList: ['shareWechatMessage'], // 需要检测的JS接口列表,所有JS接口列表见附录2, + success: function(res) { + // 以键值对的形式返回,可用的api值true,不可用为false + // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"} + //alert("wx.config success:"+JSON.stringify(res)); + } + }); +}); + +wx.ready(function(){ + // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 +}); + +wx.error(function(res){ + // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 + console.log(res); + alert(res); +}); + +function invoke(){ + wx.invoke( + "shareWechatMessage", { + title: '企业微信JSSDK 演示-转发', // 分享标题 + desc: '来自 Senparc.Weixin.Work', // 分享描述 + link: 'https://sdk.work.weixin.senparc.com/JSSDK', // 分享链接 + imgUrl: '' // 分享封面 + }, function(res) { + if (res.err_msg == "shareWechatMessage:ok") { + } + } + ); +} +``` + +HTML 页面进行触发:`转发到微信` + +> 本项目参考文件: +> +> /Views/JSSDK/**_Index.cshtml_** + +更多设置详情请参考:[JS-SDK 说明文档](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html)。 diff --git a/docs/zh/guide/work/menu.md b/docs/zh/guide/work/menu.md new file mode 100644 index 0000000000..836b23df35 --- /dev/null +++ b/docs/zh/guide/work/menu.md @@ -0,0 +1,79 @@ +# 菜单设置 + +自定义菜单是企业微信应用界面的重要元素,菜单的使用分为 **设置** 和 **使用** 两个环节。 + +## 设置 + +方法一:在企业微信后台【应用管理】中,某个应用设置界面中,【功能】区域【自定义菜单】中设置(不使用开发模式),此处略。 + +方法二:使用代码进行设置(只需要执行一次,建议放在管理员后台,手动运行),如: + +```cs +public async Task CreateMenuTest() +{ + ButtonGroup bg = new ButtonGroup(); + + //单击 + bg.button.Add(new SingleClickButton() + { + name = "单击测试", + key = "OneClick", + type = MenuButtonType.click.ToString(),//默认已经设为此类型,这里只作为演示 + }); + + //二级菜单 + var subButton = new SubButton() + { + name = "二级菜单" + }; + subButton.sub_button.Add(new SingleClickButton() + { + key = "SubClickRoot_Text", + name = "返回文本" + }); + subButton.sub_button.Add(new SingleViewButton() + { + url = "https://weixin.senparc.com", + name = "Url跳转" + }); + bg.button.Add(subButton); + + var workWeixinSetting = Config.SenparcWeixinSetting.WorkSetting; + var appKey = AccessTokenContainer.BuildingKey(workWeixinSetting); + int agentId; + if (!int.TryParse(workWeixinSetting.WeixinCorpAgentId, out agentId)) + { + throw new WeixinException("WeixinCorpAgentId 必须为整数!"); + } + var result = await CommonApi.CreateMenuAsync(appKey, agentId, bg); + + Assert.IsNotNull(result); + Assert.AreEqual("ok", result.errmsg); +} +``` + +## 使用 + +设置完菜单后,当客户端点击菜单时,微信服务器会自动推送响应的回调信息到消息 URL(即已经设置好的 MessageHandler 内),只需在 WorkCustomMessageHandler 中重写(`override`)对应的方法即可。如针对上述 **方法二** 已经设定生效的菜单,当用户点击【单击测试】按钮时,我们可以在 WorkCustomMessageHandler 中进行接收和处理: + +```cs +public override IWorkResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage) +{ + var reponseMessage = CreateResponseMessage(); + + if (requestMessage.EventKey == "SubClickRoot_Text") + { + reponseMessage.Content = "您点击了【返回文本】按钮"; + } + else + { + reponseMessage.Content = "您点击了其他事件按钮"; + } + + return reponseMessage; +} +``` + +> 本项目参考文件: +> +> /MessageHandlers/**_WorkCustomMessageHandler.cs_** diff --git a/docs/zh/guide/work/messagehandler.md b/docs/zh/guide/work/messagehandler.md new file mode 100644 index 0000000000..bb2835540d --- /dev/null +++ b/docs/zh/guide/work/messagehandler.md @@ -0,0 +1,58 @@ +# MessageHandler + +`MessageHandler` 用于处理企业微信对话窗口的消息。 + +SDK 已经为开发者准备好了所有需要的基础功能,开发者只需要创建一个自定义的子类,补充需要自定义的业务逻辑。 + +## 自定义 MessageHandler + +当前示例中,我们给自定义的 MessageHandler 取名 `WorkCustomMessageHandler`。 + +> WorkCustomMessageHandler.cs 本项目参考文件: +> +> /MessageHandlers/ 目录 +> **_WorkCustomMessageHandler.cs_** MessageHandler 主文件,负责普通消息处理 +> **_WorkCustomMessageContext.cs_** 自定义重写 DefaultMpMessageContext 上下文(可选) + +`WorkCustomMessageHandler.cs` 中所有演示的重写(`override`)方法中,只有 `DefaultResponseMessage()` 方法是必须重写的,其他所有 `OnXxxRequest()` 方法都为可选,当用户发送的消息,找不到对应重写方法时,则调用 `DefaultResponseMessage()` 方法。 + +MessageHandler 有两种承载方式,使其可以被外部(微信服务器)通过 URL 访问到。分别是**中间件方式**(推荐)和 **Controller 方式**。两种方式所使用的 `WorkCustomMessageHandler` 是通用的,因此可以随时切换和共存。 + +## 中间件方式承载 MessageHandler + +中间件方式是推荐的方式,也是最简化的方式,无需创建任何新文件,只需在 `Program.cs` 文件所有 Senparc.Weixin 注册代码执行后的下方,引入中间件: + +```cs +app.UseMessageHandlerForWork("/WorkAsync", WorkCustomMessageHandler.GenerateMessageHandler, options => +{ + options.AccountSettingFunc = context => Senparc.Weixin.Config.SenparcWeixinSetting; +}); +``` + +完成后,即可通过 Url **`域名/WorkAsync`** 访问 MessageHandler,设置为公众号后台的消息 URL。 + +[测试 /WorkAsync](https://sdk.weixin.senparc.com/WorkAsync) + +> 本项目参考文件: +> +> /**_Program.cs_** + +[测试 /Work](https://sdk.weixin.senparc.com/Work) + +更多中间件方式请参考(和公众号使用方法相同):[《在 .NET Core 2.0/3.0 中使用 MessageHandler 中间件》](https://www.cnblogs.com/szw/p/Wechat-MessageHandler-Middleware.html)(同样适用于 .NET 6.0 及以上)。 + +## Controller 方式承载 MessageHandler + +当中间件的方式满足不了需求时,可以使用 Controller 将执行过程“展开”,对每一步执行进行更加精确的控制或干预。 + +使用 Controller 方式,需要创建 2 个 Action,分别对应微信后台验证(Get 请求),以及真实消息推送(Post 请求)。本项目示例位于 WorkController.cs 中。 + +> WorkController.cs 本项目参考文件: +> +> /Controllers/**_WorkController.cs_** + +完成后,即可通过 Url **`域名/Work`** 访问 MessageHandler,设置为公众号后台的消息 URL。 + +[测试 /Work](https://sdk.weixin.senparc.com/Work) + +更多 Controller 方式请参考(和公众号使用方法相同):[《了解 MessageHandler》](https://www.cnblogs.com/szw/p/3414862.html)(推荐使用全套异步方法) diff --git a/docs/zh/guide/work/oauth2.0.md b/docs/zh/guide/work/oauth2.0.md new file mode 100644 index 0000000000..5166357d15 --- /dev/null +++ b/docs/zh/guide/work/oauth2.0.md @@ -0,0 +1,98 @@ +# OAuth 2.0 + +当你需要在网页上获取用户的 UserId、头像、称呼等信息的时候,就需要使用 OAuth 2.0 的方式和微信服务器通讯。 + +更多信息请参考官方文档:[网页授权登录](https://developer.work.weixin.qq.com/document/path/91335)。 + +SDK 已经封装了所有相关的过程,您只需要参考示例进行简单的 3 步配置即可。 + +## 第一步:设置登录页面 + +登录页面中需要设置官方 OAuth 2.0 的请求 URL(称为 **AuthorizeUrl**),并带上登录成功后的 returnUrl。 + +由于微信授权具有两种方式:**snsapi_userinfo** 和 **snsapi_base**,企业自建应用使用 **snsapi_base**,因此本示例中使用此方式进行介绍 **snsapi_base**(默认)的 **AuthorizeUrl** 获取的方式(此方式也是所有场景下兼容的方式): + +```cs +public IActionResult Index(string returnUrl) +{ + // 设置自己的 URL + var url = "https://4424-222-93-135-159.ngrok.io"; + + //此页面引导用户点击授权 + var oauthUrl = + OAuth2Api.GetCode(_corpId, $"{url}/OAuth2/BaseCallback?returnUrl={returnUrl.UrlEncode()}", + null, null);//snsapi_base方式回调地址 + + ViewData["UrlBase"] = oauthUrl; + ViewData["returnUrl"] = returnUrl; + + return View(); +} +``` + +上述 `returnUrl` 参数一般为跳转到登陆页面之前的 URL,也可以是希望用户完成授权之后跳转到的 URL。 + +> 注意:上述的网址和路径需要在公众号后台匹配成你自己服务器的地址(参考文档:[网页授权登录](https://developer.work.weixin.qq.com/document/path/91335))。 + +> 本项目参考文件: +> +> /Controllers/OAuth2Controller.cs + +## 第二步:前端登录页面设置 + +登录页面最终的功能是引导用户打开 **AuthorizeUrl**,可以直接使用连接的方式: + +``` +点击这里测试snsapi_base +``` + +> 本项目参考文件: +> +> /Views/**_OAuth2/Index.cshtml_** + +## 第三步:配置登陆后回调页面 + +授权成功后,网页将自动跳转到第一步中设置的回调 URL(`$"{url}/OAuth2/BaseCallback?returnUrl={returnUrl.UrlEncode()}"`): + +```cs +public async Task BaseCallback(string code, string returnUrl) +{ + if (string.IsNullOrEmpty(code)) + { + return Content("您拒绝了授权!"); + } + + try + { + var appKey = AccessTokenContainer.BuildingKey(_workWeixinSetting); + var accessToken = await AccessTokenContainer.GetTokenAsync(_corpId, _corpSecret); + //获取用户信息 测试链接:https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=10019 + var oauthResult = await OAuth2Api.GetUserIdAsync(accessToken, code); + var userId = oauthResult.UserId; + GetMemberResult result = await MailListApi.GetMemberAsync(appKey, userId); + + if (result.errcode != ReturnCode_Work.请求成功) + { + return Content("错误:" + result.errmsg); + } + + ViewData["returnUrl"] = returnUrl; + + /* 注意: + * 实际适用场景,此处应该跳转到 returnUrl,不要停留在 Callback页面上。 + * 因为当用户刷新此页面 URL 时,实际 code 等参数已失效,用户会受到错误信息。 + */ + return View(result); + } + catch (Exception ex) + { + return Content("错误:" + ex.Message); + } +} +``` + +上述代码中,传入的 `returnUrl` 即第一步 `Index()` 方法中传入到 **AuthorizeUrl** 中的 `returnUrl`,当所有用户信息获取、保存等操作完成后,借助 `returnUrl` 跳转到登陆之前的页面,完成整个闭环的登录操作。 + +> 本项目参考文件: +> +> /Controllers/**_OAuth2Controller.cs_** diff --git a/docs/zh/guide/work/register.md b/docs/zh/guide/work/register.md new file mode 100644 index 0000000000..e658c1d6de --- /dev/null +++ b/docs/zh/guide/work/register.md @@ -0,0 +1,64 @@ +# 注册 + +## 全局注册 + +所有的 Senparc.Weixin SDK 注册过程都是类似的。 + +首先,完成所有 Senparc.Weixin SDK 的整体注册代码。在 Program.cs 中加入以下代码: + +![注册 Senparc.Weixin](https://sdk.weixin.senparc.com/Docs/Work/images/home-dev-register-01.png) + +说明: + +1. `builder.Services.AddMemoryCache()` Senparc.Weixin 支持本机缓存、Redis、Memcached 等多种缓存策略,默认使用本机缓存,此时需要激活本地缓存。 +2. `builder.Services.AddSenparcWeixinServices(builder.Configuration)` 用于完成 Senparc.Weixin 的注册。 +3. `app.UseSenparcWeixin()` 方法用于配置和启用 Senparc.Weixin。 + +以上代码对于所有的 Senparc.Weixin 下级模块都是相同的,只需要 3 句代码。 + +> 本项目参考文件: +> +> /**_Program.cs_** + +## 企业微信 + +在上述代码中的第 17 行委托方法中插入代码,即可完成默认公众号的注册: + +```cs +register.RegisterWorkAccount(weixinSetting, "【盛派网络】企业微信"); +``` + +![注册微信公众号](https://sdk.weixin.senparc.com/Docs/Work/images/home-dev-register-02.png) + +其中,`weixinSetting` 的值默认来自于 `appsettings.json`: + +```JSON +"SenparcWeixinSetting": { + //以下为 Senparc.Weixin 的 SenparcWeixinSetting 微信配置 + //注意:所有的字符串值都可能被用于字典索引,因此请勿留空字符串(但可以根据需要,删除对应的整条设置)! + + //微信全局 + "IsDebug": true, + + //以下不使用的参数可以删除,key 修改后将会失效 + + //企业微信 + "WeixinCorpId": "#{WeixinCorpId}#", + "WeixinCorpAgentId": "#{WeixinCorpAgentId}#", + "WeixinCorpSecret": "#{WeixinCorpSecret}#", + "WeixinCorpToken": "#{WeixinCorpToken}#", + "WeixinCorpEncodingAESKey": "#{WeixinCorpEncodingAESKey}#" + + //可以追加更多其他平台的配置信息 +} +``` + +其中,`WeixinCorpId` 是每个企业微信账号独有的 **corpId**,`WeixinCorpAgentId` 和 `WeixinCorpSecret` 对应每个不同应用的 **agentId** 和 **secret**, `WeixinCorpToken` 和 `WeixinCorpEncodingAESKey` 对应了当前应用消息接口的后台的配置参数。 + +> 本项目参考文件: +> +> /**_appsettings.json_** + +配置完成。 + +> 提示:自动注册的信息可通过 `Senparc.Weixin.Config.SenparcWeixinSetting` 获取。 diff --git a/docs/zh/guide/work/source-code.md b/docs/zh/guide/work/source-code.md new file mode 100644 index 0000000000..0641c2aed7 --- /dev/null +++ b/docs/zh/guide/work/source-code.md @@ -0,0 +1,15 @@ +# 源码 + +## Senparc.Weixin SDK 源码 + +GitHub:[github_WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK)(更新更快) + +Gitee:[gitee_WeiXinMPSDK](https://gitee.com/JeffreySu/WeiXinMPSDK) (从 GitHub 同步) + +## 打包代码 + +Nuget 包地址:[https://www.nuget.org/packages/Senparc.Weixin.Work](https://www.nuget.org/packages/Senparc.Weixin.Work) + +## 本地源码文件 + +Senparc.Weixin.Work 源码位置:[/src/Senparc.Weixin.Work](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.Work) diff --git a/docs/zh/guide/wxopen/advanced-interface.md b/docs/zh/guide/wxopen/advanced-interface.md new file mode 100644 index 0000000000..84933e46d1 --- /dev/null +++ b/docs/zh/guide/wxopen/advanced-interface.md @@ -0,0 +1,35 @@ +# 高级接口 + +完成 `Program.cs` 文件中的常规注册后,即可在程序的任意地方使用高级接口。 + +> 注意: +> 1、高级接口的配置和 `MessageHandler` 没有关联,两者可以独立或配合使用。 +> 2、SDK 内几乎所有高级接口的第一个参数同时支持传入 AppId 或 AccessToken,通常名称为 `appIdOrAccessToken`,SDK 会根据参数特征自动识别输入的是 AppId 还是 AccessToken,并做区分处理。 + +## 使用 AppId 调用接口(推荐) + +例如,我们可以在任意一个方法中调用一个高级接口: + +```cs +using Senparc.Weixin.WxOpen.AdvancedAPIs; + +var appId = Senparc.Weixin.Config.SenparcWeixinSetting.WxOpenAppId; +var openId = "xxx"; +var content = "这是一条客服消息"; +var result = await CustomApi.SendTextAsync(appId, openId, content);//发送客服消息 +``` + +> appId 参数,必须是已经经过注册的,这样即使 AccessToken 过期,SDK 也会全自动处理。如果是未经过注册的 appId,则需要先获取 AccessToken,然后调用接口。 + +## 使用 AccessToken 调用接口(不推荐) + +```cs +var accessToken = Senparc.Weixin.MP.CommonApi.GetTokenAsync(appId, appSecret);//获取 AccessToken +var openId = "xxx"; +var content = "这是一条客服消息"; +var result = await CustomApi.SendTextAsync(accessToken, openId, content);//发送客服消息 +``` + +> 注意: +> 1、使用 AccessToken 方式调用接口,无法保证当前 AccessToken 的有效性,因此建议使用前进行有效性校验,并使用 `try-catch` 方式捕获 AccessToken 不可用的异常,然后进行重试。因此直接使用 AccessToken 调用接口的方式并不推荐在常规情况下使用。 +> 2、小程序和公众号使用相同的 AccessToken 获取接口,因此,此处调用了 `Senparc.Weixin.MP` 类库中公众号的相同方法。因为 `Senparc.Weixin.WxOpen` 模块默认已经依赖了 `Senparc.Weixin.MP`,所以不必再手动安装 MP 模块。 diff --git a/docs/zh/guide/wxopen/advanced.md b/docs/zh/guide/wxopen/advanced.md new file mode 100644 index 0000000000..1b32c519b3 --- /dev/null +++ b/docs/zh/guide/wxopen/advanced.md @@ -0,0 +1,11 @@ +# 进阶 + +当前示例展示了最基本和常用的功能,如果您需要了解更多高级玩法,并且有扎实的编程功底,请参考完整示例。 + +> 完整示例解决方案文件: +> +> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/Senparc.Weixin.Sample.Net7.sln](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/All/net7-mvc) + +> 务必阅读 readme 文件: +> +> Senparc.Weixin SDK 源文件根目录[/Samples/All/net7-mvc/readme.md](https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/All/net7-mvc/readme.md) diff --git a/docs/zh/guide/wxopen/client-development.md b/docs/zh/guide/wxopen/client-development.md new file mode 100644 index 0000000000..bfe847333e --- /dev/null +++ b/docs/zh/guide/wxopen/client-development.md @@ -0,0 +1,13 @@ +# 客户端开发 + +## 准备开发 + +开发小程序客户端(手机微信内展示的小程序界面),需要使用 [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html)。 + +> 微信小程序示例项目参考文件: +> +> Senparc.Weixin SDK 源文件根目录/**_Samples/WxOpen/Senparc.Weixin.WxOpen.AppDemo/_** + +上述示例项目打开后如下图所示: + +![小程序客户端](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-client-01.png) diff --git a/docs/zh/guide/wxopen/get-phone-number.md b/docs/zh/guide/wxopen/get-phone-number.md new file mode 100644 index 0000000000..9d0e90d990 --- /dev/null +++ b/docs/zh/guide/wxopen/get-phone-number.md @@ -0,0 +1,89 @@ +# 获取手机号 + +> 注意:小程序获取手机号的接口,进行过一次升级,先前在客户端直接获取手机号的方式已经被淘汰(示例中左侧【获取手机号】按钮),目前最新的接口是使用 code 到服务器端后台获取手机号(示例中右侧【获取手机号(Code)】按钮。 +> +> ![入口页面](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-phone-01.png)入口页面 +> +> 当用户点击后,系统进行授权提示: +> +> ![授权手机号](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-phone-02.png)授权手机号 +> +> 点击【允许】按钮,通过访问后端接口,获取到手机号: +> +> ![授权手机号](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-phone-03.png)授权手机号 + +## 客户端 + +在 Index.wxml 文件中放置按钮: + +```XML + +``` + +> 本项目参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.wxml_** + +上述代码中,`open-type="getPhoneNumber"` 指定了当前按钮获取手机号的用途,`bindgetphonenumber="getUserPhoneNumber"` 指定了处理方法为 `getUserPhoneNumber`(对应于 .js 文件中): + +```JS +getUserPhoneNumber:function(e){ + wx.request({ + url: wx.getStorageSync('domainName') + '/WxOpen/GetUserPhoneNumber?code=' + e.detail.code, + success: function (res) { + // success + var json = res.data; + + if(!json.success){ + wx.showModal({ + title: '解密过程发生异常', + content: json.msg, + showCancel: false + }); + return; + } + + //模组对话框 + var phoneNumberData = json.phoneInfo; + var msg = '手机号:' + phoneNumberData.phoneNumber+ + '\r\n手机号(不带区号):' + phoneNumberData.purePhoneNumber+ + '\r\n区号(国别号)' + phoneNumberData.countryCode+ + '\r\n水印信息:' + JSON.stringify(phoneNumberData.watermark); + + wx.showModal({ + title: '收到服务器端通过 code 获取的手机号信息', + content: msg, + showCancel: false + }); + } + }) + } +``` + +当用户点击按钮,并授权手机号后,就会触发上述方法,通过 `e` 参数提供的 `e.code`,将其提交给服务器后台 **/WxOpen/GetUserPhoneNumber** 地址,后台将使用 `code` 换取用户的手机号,然后进行储存或返回给前端。上述代码的模组对话框只是演示作用,实际项目中一般不需要再次弹出信息。 + +> 本项目参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_/pages/index/index.js_** + +## 后端代码 - GetUserPhoneNumber + +```cs +public async Task GetUserPhoneNumber(string code) +{ + try + { + var result = await BusinessApi.GetUserPhoneNumberAsync(WxOpenAppId, code); + return Json(new { success = true, phoneInfo = result.phone_info }); + } + catch (Exception ex) + { + return Json(new { success = false, msg = ex.Message }); + } +} +``` + +> 本项目参考文件: +> +> /Controllers/**_WxOpenController.cs_** diff --git a/docs/zh/guide/wxopen/install.md b/docs/zh/guide/wxopen/install.md new file mode 100644 index 0000000000..c6eb6815f0 --- /dev/null +++ b/docs/zh/guide/wxopen/install.md @@ -0,0 +1,69 @@ +# 如何安装? + +您可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包,推荐),以方便随时获取官方的更新。注意:直接引用源码和引用 Nuget 包只能二选一。 + +## 引用源码 + +您可以打开 **../All/net6-mvc/** 前解决方案(全量进阶示例),在 **Libraries** 目录下,将所需要引用的程序集引用(复制)到您开发环境的解决方案中,请注意需要同时引用被依赖的项目,如 `Senparc.Weixin` 项目是所有项目都需要依赖的。 + +当前示例项目默认就使用了直接引用源码的方式,可从 .csproj 文件中看到引用方式: + +```cs + + + +``` + +## 引用程序集(推荐) + +您可以通过 `Visual Studio`、`Visual Studio Code`、`dotnet 命令行` 等多种方式自动安装 Nuget 包。 + +### Visual Studio + +在开发项目【解决方案资源管理器】中,对需要添加 Senparc.Weixin.WxOpen 的模块点击右键,点击【管理 Nuget 程序包】,在【浏览】标签中输入 **Senparc.Weixin.TenPay**,点击右侧【安装】按钮。如下图所示: + +![通过 Visual Studio 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-01.png) + +### Visual Studio Code + +首先,确认已经安装好 [VS Code](https://code.visualstudio.com/) 以及 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 + +然后,打开解决方案或项目所在目录,按 Ctrl+~,打开终端面板: + +![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-03.png "打开 VS Code 终端面板") + +进入需要添加 Senparc.Weixin.WxOpen 的模块的项目的目录,输入: + +> ```cs +> dotnet add package Senparc.Weixin.WxOpen +> ``` + +![通过 VS Code 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-04.png "安装 Senparc.Weixin.WxOpen 模块") + +安装完成后,可查看对应 .csproj 文件,被添加引用,如: + +```cs + + + +``` + +### dotnet 命令行 + +首先,确认已经安装好 dotnet 命令行(安装 [.NET SDK](https://dotnet.microsoft.com/en-us/download) 后会自动安装)。 + +进入需要添加 Senparc.Weixin.WxOpen 的模块的项目的目录,输入: + +> ```cs +> dotnet add package Senparc.Weixin.WxOpen +> ``` + +![通过 dotnet CLI 安装](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-install-02.png "通过 dotnet CLI 安装") + +安装完成后,可查看对应 .csproj 文件,被添加引用,如: + +```cs + + + +``` diff --git a/docs/zh/guide/wxopen/login.md b/docs/zh/guide/wxopen/login.md new file mode 100644 index 0000000000..00257b19e8 --- /dev/null +++ b/docs/zh/guide/wxopen/login.md @@ -0,0 +1,319 @@ +# 登录 + +## 简介 + +大部分的小程序都需要识别用的身份信息(OpenId)以及获取用户的头像、昵称等信息为用户提供身份识别、个性化信息展示的服务。此时就需要使用到小程序登录接口。 + +## 客户端 - 进入登录页 + +用户的登录是在小程序端发起的,一般而言可以做一个独立的页面用于放置说明及登录按钮。首先,在入口网页放置一个入口按钮: + +```HTML + +``` + +点击按钮后,触发 .js 文件中的 `getUserInfo()` 方法: + +```JS + getUserInfo: function(){ + wx.navigateTo({ + url: '../Login/Login', + }) + } +``` + +此按钮将引导页面跳转到独立的 Login 页面。 + +![跳转到登录页](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-01.png)跳转到登录页 + +> 本项目参考文件: Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.wxml_** Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.js_** + +## 客户端 - 登录页 + +登录页包含系统登录展示、隐私协议等内容,并包含一个触发最终小程序客户端登录事件的按钮: + +```XML + + + 您好,, + 当前小程序为 Senparc.Weixin SDK 的功能体验小程序,包括了订阅消息、获取用户授权信息、手机号、WebSocket、客服消息等演示内容,大部分内容需要授权后进行,点击【获取头像昵称】按钮进行授权,才能进入测试页面。 + 如果您不希望授权,请直接关闭此页面。 + + +``` + +![登录页面](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-02.png) + +> 本项目参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/Login/Login.wxml_** + +【获取头像昵称】按钮绑定了方法 `getUserInfo()`,在 **Login.js** 中添加: + +```JS +var app = getApp() +getUserInfo: function (e) { + var that = this; + app.getUserInfo(e, function(userInfo){ + app.globalData.userInfo = userInfo + that.setData({ + userInfo: userInfo, + hasUserInfo: true + }); + wx.navigateTo({ + url: '../index/index', + }) + }); + } +``` + +> 本项目参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/Login/Login.js_** + +上述代码中,使用 `var app = getApp()` 引入了全局方法(代码在根目录 **app.js**中),其中,`app.getUserInfo()` 方法代码如下(为了更加贴近实际使用场景,我们将 **登录** + **获取用户信息** 放在连贯的代码中展示): + +```JS +getUserInfo:function(cb,callback){ + var that = this + if(this.globalData.userInfo){ + typeof cb == "function" && cb(this.globalData.userInfo) + }else{ + //获取userInfo并校验 + console.log('准备调用 wx.getUserProfile'); + wx.getUserProfile({ + desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 + success: function (userInfoRes) { + console.log('get getUserProfile', userInfoRes); + that.globalData.userInfo = userInfoRes.userInfo + typeof cb == "function" && cb(that.globalData.userInfo) + typeof callback == "function" && callback(userInfoRes.userInfo) + + //调用登录接口 + wx.login({ + success: function (res) { + //换取openid & session_key + wx.request({ + url: wx.getStorageSync('domainName') + '/WxOpen/OnLogin', + method: 'POST', + header: { 'content-type': 'application/x-www-form-urlencoded' }, + data: { + code: res.code + }, + success:function(json){ + console.log('wx.login - request-/WxOpen/OnLogin Result:', json); + var result = json.data; + if(result.success) + { + wx.setStorageSync('sessionId', result.sessionId); + //校验 + wx.request({ + url: wx.getStorageSync('domainName') + '/WxOpen/CheckWxOpenSignature', + method: 'POST', + header: { 'content-type': 'application/x-www-form-urlencoded' }, + data: { + sessionId: result.sessionId,//wx.getStorageSync('sessionId'), + rawData:userInfoRes.rawData, + signature:userInfoRes.signature + }, + success:function(json){ + console.log(json.data); + if(!json.data.success){ + alert(json.data.msg); + } + } + }); + + //解密数据(建议放到校验success回调函数中,此处仅为演示) + wx.request({ + url: wx.getStorageSync('domainName') + '/WxOpen/DecodeEncryptedData', + method: 'POST', + header: { 'content-type': 'application/x-www-form-urlencoded' }, + data: { + 'type':"userInfo", + sessionId: result.sessionId,//wx.getStorageSync('sessionId'), + encryptedData: userInfoRes.encryptedData, + iv: userInfoRes.iv + }, + success:function(json){ + console.log('数据解密:', json.data); + } + }); + }else{ + console.log('储存session失败!',json); + } + } + }) + } + }) + } + }); + } + } +``` + +> 上述代码是整个微信登录客户端的核心代码。 + +其中: + +1. `wx.getUserProfile` 用于调起获取用户信息的接口,此接口本身和登录行为本身无直接联系,但是为了保证用户信息的正确性,后续需要在登录成功后的回调中使用到其中的加密信息来获取真实的用户信息,因此需要首先触发。 + +2. `wx.login` 是小程序客户端的登录接口,其中 `success` 为登录自后的回调函数。在回调函数中,我们使用 `wx.request` 向服务器端 **/WxOpen/OnLogin** 地址发送一条请求,带上 `success` 回调的参数 `res.code`,其中将使用 `code` 利用服务器端的 API 换取 `session_key`,并储存在服务器端,同时生成临时的用户身份标记 `SessionId` 并返回给客户端。 + 成功回调后,再使用 `wx.setStorageSync('sessionId', result.sessionId);` 将收到的 `SessionId` 储存在本地缓存中。 + +3. 虽然`userInfoRes.rawData` 已经提供了明文的用户信息,但并不能确保其是安全(未经篡改或完整)的,因此需要向服务器发送请求,验证其真实性。 + + 继续使用`wx.request`方法请求**/WxOpen/CheckWxOpenSignature**地址,发送`sessionId`以及第 1 步中获取到的`userInfoRes.rawData`以及`userInfoRes.signature`,校验信息的真实性。验证通过后,可以在客户端直接使用`rawData`。 + + > 注意:有的开发者会把经过验证后的 `rawData` 发送给服务器保存,认为此信息是有效的,**这是具有风险的做法,应当抛弃**,正确的做法是使用上述代码中后续的方式(**/WxOpen/DecodeEncryptedData**)发送 `userInfoRes.encryptedData` 给服务器解密。因为:第一,`rawData` 从被验证成功到明文发送给服务器的过程中无法确保是否被篡改;第二,明文传输用户的敏感信息容易被监听和窃取,这种做法本身不应该出现在整个项目的任何地方。 + +4. 真实性(签名)验证通过后,继续使用 `wx.request` 请求服务器 **/WxOpen/DecodeEncryptedData** 地址,发送 `sessionId`以及第 1 步中获取到的 `userInfoRes.encryptedData` 以及 `userInfoRes.iv`,服务器端将解密 `encryptedData` 获得用户信息,并储存。 + +> 本项目参考文件: +> +> Senparc.Weixin.**_WxOpen.AppDemo/app.js_** + +## 服务器端 - OnLogin + +服务器端 **/WxOpen/OnLogin** 代码如下: + +```cs +[HttpPost] +public ActionResult OnLogin(string code) +{ + try + { + var jsonResult = SnsApi.JsCode2Json(WxOpenAppId, WxOpenAppSecret, code); + if (jsonResult.errcode == ReturnCode.请求成功) + { + //Session["WxOpenUser"] = jsonResult;//使用Session保存登陆信息(不推荐) + //使用SessionContainer管理登录信息(推荐) + var unionId = ""; + var sessionBag = SessionContainer.UpdateSession(null, jsonResult.openid, jsonResult.session_key, unionId); + + //注意:生产环境下SessionKey属于敏感信息,不能进行传输! + return Json(new { success = true, msg = "OK", sessionId = sessionBag.Key, sessionKey = sessionBag.SessionKey/* 此参数千万不能暴露给客户端!处仅作演示! */ }); + } + else + { + return Json(new { success = false, msg = jsonResult.errmsg }); + } + } + catch (Exception ex) + { + return Json(new { success = false, msg = ex.Message }); + } +} +``` + +> 特别注意:`SessionKey` 是非常敏感的信息,上述代码只是做演示,向客户端证明已经生成,实际开发过程中不可传递到客户端! + +> 本项目参考文件: +> +> /Controllers/**_WxOpenController.cs_** + +## 服务器端 - CheckWxOpenSignature + +服务器端 **/WxOpen/CheckWxOpenSignature** 代码如下: + +```cs +[HttpPost] +public ActionResult CheckWxOpenSignature(string sessionId, string rawData, string signature) +{ + try + { + var checkSuccess = Senparc.Weixin.WxOpen.Helpers.EncryptHelper.CheckSignature(sessionId, rawData, signature); + return Json(new { success = checkSuccess, msg = checkSuccess ? "签名校验成功" : "签名校验失败" }); + } + catch (Exception ex) + { + return Json(new { success = false, msg = ex.Message }); + } +} +``` + +> 本项目参考文件: +> +> /Controllers/**_WxOpenController.cs_** + +## 服务器端 - DecodeEncryptedData + +服务器端 **/WxOpen/DecodeEncryptedData** 代码如下: + +```cs +public async Task DecodeEncryptedData(string type, string sessionId, string encryptedData, string iv) +{ + DecodeEntityBase decodedEntity = null; + + try + { + switch (type.ToUpper()) + { + case "USERINFO"://wx.getUserInfo() + decodedEntity = EncryptHelper.DecodeUserInfoBySessionId( + sessionId, + encryptedData, iv); + break; + default: + break; + } + } + catch (Exception ex) + { + WeixinTrace.SendCustomLog("EncryptHelper.DecodeUserInfoBySessionId 方法出错", + $@"sessionId: {sessionId} +encryptedData: {encryptedData} +iv: {iv} +sessionKey: { (await SessionContainer.CheckRegisteredAsync(sessionId) + ? (await SessionContainer.GetSessionAsync(sessionId)).SessionKey + : "未保存sessionId")} + +异常信息: +{ex.ToString()} +"); + } + + //检验水印 + var checkWatermark = false; + if (decodedEntity != null) + { + checkWatermark = decodedEntity.CheckWatermark(WxOpenAppId); + + //保存用户信息(可选) + if (checkWatermark && decodedEntity is DecodedUserInfo decodedUserInfo) + { + var sessionBag = await SessionContainer.GetSessionAsync(sessionId); + if (sessionBag != null) + { + await SessionContainer.AddDecodedUserInfoAsync(sessionBag, decodedUserInfo); + } + } + } + + //注意:此处仅为演示,敏感信息请勿传递到客户端! + return Json(new + { + success = checkWatermark, + //decodedEntity = decodedEntity, + msg = $"水印验证:{(checkWatermark ? "通过" : "不通过")}" + }); +} +``` + +> 本项目参考文件: +> +> /Controllers/**_WxOpenController.cs_** + +## 完成 + +完成代码后,运行服务器端程序和小程序客户端,在客户端中点击【获取头像昵称】按钮,进入登录页面,点击【获取头像昵称】按钮,即可看到弹出系统确认授权对话窗口: + +![授权界面](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-03.png) + +点击【允许】按钮,即可自动完成整个自动登录、用户信息抓取过程: + +![完成登录和用户信息获取](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-04.png) + +此时,再点击【获取数据】按钮,即可看到已经获取到的用户信息: + +![用户信息](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-login-05.png) diff --git a/docs/zh/guide/wxopen/messagehandler.md b/docs/zh/guide/wxopen/messagehandler.md new file mode 100644 index 0000000000..06514169d3 --- /dev/null +++ b/docs/zh/guide/wxopen/messagehandler.md @@ -0,0 +1,57 @@ +# MessageHandler + +`MessageHandler` 用于处理小程序客服对话窗口的消息以及其他微信服务器的推送信息。 + +SDK 已经为开发者准备好了所有需要的基础功能,开发者只需要创建一个自定义的子类,补充需要自定义的业务逻辑。 + +## 自定义 MessageHandler + +当前示例中,我们给自定义的 MessageHandler 取名 `CustomWxOpenMessageHandler`。 + +> CustomWxOpenMessageHandler.cs 本项目参考文件: +> +> /MessageHandlers/ 目录 +> **_CustomWxOpenMessageHandler.cs_** MessageHandler 消息处理 +> **_CustomWxOpenMessageContext.cs_** 自定义重写 DefaultMpMessageContext 上下文(可选) + +`CustomWxOpenMessageHandler.cs` 中所有演示的重写(`override`)方法中,只有 `DefaultResponseMessageAsync()` 方法是必须重写的,其他所有 `OnXxxRequestAsync()` 方法都为可选,当用户发送的消息,找不到对应重写方法时,则调用 `DefaultResponseMessageAsync()` 方法。 + +MessageHandler 有两种承载方式,使其可以被外部(微信服务器)通过 URL 访问到。分别是**中间件方式**(推荐)和 **Controller 方式**。两种方式所使用的 `CustomWxOpenMessageHandler` 是通用的,因此可以随时切换和共存。 + +## 中间件方式承载 MessageHandler + +中间件方式是推荐的方式,也是最简化的方式,无需创建任何新文件,只需在 `Program.cs` 文件所有 Senparc.Weixin 注册代码执行后的下方,引入中间件: + +```cs +app.UseMessageHandlerForWxOpen("/WxOpenAsync", CustomWxOpenMessageHandler.GenerateMessageHandler, options => +{ + options.AccountSettingFunc = context => Senparc.Weixin.Config.SenparcWeixinSetting; +}); + +``` + +完成后,即可通过 Url **`域名/WxOpenAsync`** 访问 MessageHandler,设置为公众号后台的消息 URL。 + +[测试 /WxOpenAsync](https://sdk.weixin.senparc.com/WxOpenAsync) + +> 本项目参考文件: +> +> /**_Program.cs_** + +更多中间件方式请参考:[《在 .NET Core 2.0/3.0 中使用 MessageHandler 中间件》](https://www.cnblogs.com/szw/p/Wechat-MessageHandler-Middleware.html)(同样适用于 .NET 6.0 及以上,用法和公众号相同)。 + +## Controller 方式承载 MessageHandler + +当中间件的方式满足不了需求时,可以使用 Controller 将执行过程“展开”,对每一步执行进行更加精确的控制或干预。 + +使用 Controller 方式,需要创建 2 个 Action(ActionName 都为 `Index`),分别对应微信后台验证(Get 请求),以及真实消息推送(Post 请求)。本项目示例位于 WxOpenController.cs 中。 + +> WxOpenController.cs 本项目参考文件: +> +> /**_Controllers/WxOpenController.cs_** + +完成后,即可通过 Url **`域名/WxOpen`** 访问 MessageHandler,设置为公众号后台的消息 URL。 + +[测试 /WxOpen](https://sdk.weixin.senparc.com/WxOpen) + +更多 Controller 方式请参考:[《了解 MessageHandler》](https://www.cnblogs.com/szw/p/3414862.html)(推荐使用全套异步方法,基本用法和公众号相同) diff --git a/docs/zh/guide/wxopen/other.md b/docs/zh/guide/wxopen/other.md new file mode 100644 index 0000000000..237821abd0 --- /dev/null +++ b/docs/zh/guide/wxopen/other.md @@ -0,0 +1,19 @@ +# 其他 + +更多接口用法,可参考【获取手机号】中的方法,参考客户端(.wxml、.js)以及后端(WxController.cs)文件,用法几乎都是一致的。 + +> 后端本项目参考文件: +> +> /Controllers/**_WxOpenController.cs_** +> +> 客户端参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_app.js_** - 全局方法 +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/index_** - 首页文件 +> +> Senparc.Weixin.WxOpen.AppDemo**_/pages/Login_** - 登录页文件 +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/QrCode_** - 获取二维码文件 +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/websocket_signalr_** - WebSocket 文件(进阶) diff --git a/docs/zh/guide/wxopen/register.md b/docs/zh/guide/wxopen/register.md new file mode 100644 index 0000000000..5963d9c563 --- /dev/null +++ b/docs/zh/guide/wxopen/register.md @@ -0,0 +1,57 @@ +# 注册 + +## 全局注册 + +所有的 Senparc.Weixin SDK 注册过程都是类似的。 + +首先,完成所有 Senparc.Weixin SDK 的整体注册代码。在 Program.cs 中加入以下代码: + +![注册 Senparc.Weixin](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-dev-register-01.png) + +说明: + +1. `builder.Services.AddMemoryCache()` Senparc.Weixin 支持本机缓存、Redis、Memcached 等多种缓存策略,默认使用本机缓存,此时需要激活本地缓存。 +2. `builder.Services.AddSenparcWeixinServices(builder.Configuration)` 用于完成 Senparc.Weixin 的注册。 +3. `app.UseSenparcWeixin()` 方法用于配置和启用 Senparc.Weixin。 + +以上代码对于所有的 Senparc.Weixin 下级模块都是相同的,只需要 3 句代码。 + +> 本项目参考文件: +> +> /**_Program.cs_** + +## 公众号注册 + +在上述代码中的第 17 行委托方法中插入代码,即可完成默认公众号的注册: + +```cs +register.RegisterWxOpenAccount(weixinSetting, "【盛派网络小助手】小程序"); +``` + +![注册微信公众号](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-dev-register-02.png) + +其中,`weixinSetting` 的值默认来自于 `appsettings.json`: + +```json + "SenparcWeixinSetting": { + "IsDebug": true, + + //小程序 + "WxOpenAppId": "#{WxOpenAppId}#", + "WxOpenAppSecret": "#{WxOpenAppSecret}#", + "WxOpenToken": "#{WxOpenToken}#", + "WxOpenEncodingAESKey": "#{WxOpenEncodingAESKey}#" + } +``` + +![配置参数](https://sdk.weixin.senparc.com/Docs/WxOpen/images/home-dev-register-03.png) + +其中,`WxOpenToken`、`WxOpenEncodingAESKey`、`WxOpenAppId` 和 `WxOpenAppSecret` 对应了微信公众号后台的配置参数。 + +> 本项目参考文件: +> +> /**_appsettings.json_** + +配置完成。 + +> 提示:自动注册的信息可通过 `Senparc.Weixin.Config.SenparcWeixinSetting` 获取。 diff --git a/docs/zh/guide/wxopen/request-service.md b/docs/zh/guide/wxopen/request-service.md new file mode 100644 index 0000000000..7798952fb4 --- /dev/null +++ b/docs/zh/guide/wxopen/request-service.md @@ -0,0 +1,108 @@ +# 小程序请求服务 + +小程序客户端可以使用类似 Ajax 的功能对服务器端发送请求,并且获取响应信息(一般为 JSON)。 + +## 放置触发请求的按钮 + +在完成【客户端开发】的基本准备工作后,在页面上(如 **/pages/index/index.wxml**),创建一个按钮,用于触发请求: + +```xml + +``` + +上述代码中,`type`、`class`、`hover-class` 分别设置了按钮的类型、常规样式、点击样式,`bindtap="doRequest"` 指定了点击之后,由 `doRequest()` 方法(function)进行处理。 + +> 本项目参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.wxml_** + +## 请求服务器方法 + +`doRequest() `方法写在 **index.js** 文件中: + +```js +//处理wx.request请求 +doRequest:function(){ + var that = this; + wx.request({ + url: wx.getStorageSync('domainName') + '/WxOpen/RequestData', + data: { nickName : that.data.userInfo.nickName}, + method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT + header: { 'content-type':'application/x-www-form-urlencoded'}, + success: function(res){ + // success + var json = res.data; + //模组对话框 + wx.showModal({ + title: '收到消息', + content: json.msg, + showCancel:false, + success: function(res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + }, + fail: function() { + // fail + }, + complete: function() { + // complete + } + }) +}, +``` + +上述代码中: + +1. `wx.request(...)` 方法用于向服务器端发起请求,类似其他 JS 框架中的 **axios.get() / .post()** 或 **$.ajax()** 等。 +2. `url` 用于指定需要发送到的 API 地址。其中,`wx.getStorageSync('domainName')` 用于灵活指定开发环境或生产环境的域名(见本目录 **app.js** 文件。 +3. `data` 用于存放需要提交的数据,此处我们从本地数据中心取 `userInfo.nickName`,当用户登陆后,即可取到**微信昵称**,否则为 **undefined**。 +4. `method` 为请求的方法名称,当前使用 POST 方式提交。 +5. `header` 用于指定当前请求 Header 中的参数,通常也可以在 JWT 模式中提供用于用户身份验证的 Token。 +6. `success` 为当前请求成功响应(200)后的回调,示例中的代码展示了当收到成功信息后,弹出一个模组对话框,显示返回的内容,并在点击【确定】按钮后,在控制台输出相关日志。 +7. `fail` 和 `complete` 方法分别用于处理失败的请求,以及整个请求完成后的统一操作。 + +> 本项目参考文件: +> +> Senparc.Weixin.WxOpen.AppDemo/**_pages/index/index.js_** + +## 服务器端接口 + +服务器端可以使用各类能够接受请求的方式,如页面、MVC 中的 Action、Web Api、中间件(Middleware),甚至 aspx、ashx 等。 + +上述请求地址在本地环境下为:**https://localhost:44367/WxOpen/RequestData**,我们在 WxOpenController 下面创建一个 RequestData 的 Action 用于接收请求: + +```cs +[HttpPost] +public ActionResult RequestData(string nickName) +{ + var data = new + { + msg = string.Format("服务器时间:{0},昵称:{1}", SystemTime.Now.LocalDateTime, nickName) + }; + return Json(data); +} +``` + +> 本项目参考文件: +> +> /Controllers/**_WxOpenController.cs_** + +## 测试 + +点击【获取数据】按钮: + +![发送请求](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-request-01.png) + +由于当前没有登录,所以昵称无法获取到,登陆后即可显示昵称。 + +> 提示:登录操作请见【登录】标签。 + +点击【确定】按钮: + +![点击确定按钮](https://sdk.weixin.senparc.com/Docs/WxOpen/images/use-request-02.png) diff --git a/docs/zh/guide/wxopen/source-code.md b/docs/zh/guide/wxopen/source-code.md new file mode 100644 index 0000000000..da6e48ed5e --- /dev/null +++ b/docs/zh/guide/wxopen/source-code.md @@ -0,0 +1,15 @@ +# 源码 + +## Senparc.Weixin SDK 源码 + +GitHub:[https://github.com/JeffreySu/WeiXinMPSDK](https://github.com/JeffreySu/WeiXinMPSDK)(更新更快) + +Gitee:[https://gitee.com/JeffreySu/WeiXinMPSDK](https://gitee.com/JeffreySu/WeiXinMPSDK) (从 GitHub 同步) + +## 打包代码 + +Nuget 包地址:[https://www.nuget.org/packages/Senparc.Weixin.WxOpen](https://www.nuget.org/packages/Senparc.Weixin.WxOpen) + +## 本地源码文件 + +Senparc.Weixin.WxOpen 源码位置:[/src/Senparc.Weixin.WxOpen](https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.WxOpen)