diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/.gitignore b/LinZeXun-examples/CS.DEEP_SpringBoot/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..549e00a2a96fa9d7c5dbc9859664a78d980158c2 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/.mvn/wrapper/maven-wrapper.jar b/LinZeXun-examples/CS.DEEP_SpringBoot/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..bf82ff01c6cdae4a1bb754a6e062954d77ac5c11 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_SpringBoot/.mvn/wrapper/maven-wrapper.jar differ diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/.mvn/wrapper/maven-wrapper.properties b/LinZeXun-examples/CS.DEEP_SpringBoot/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..ca5ab4bab121c408ae246f6ef5fae23b58db2d65 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/README.md b/LinZeXun-examples/CS.DEEP_SpringBoot/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9785dd220b62954ca95b7d0c09429deb8c5151d2 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/README.md @@ -0,0 +1,16 @@ +## CS.DEEP论坛后端项目 + +### 技术栈 + +--- + +1. 基于springboot框架构建的论坛项目 +2. springsecurity + jwt(安全管理) +3. restTemplate(外部接口调用工具) +4. flask + pytorch(深度学习接口) +5. opengauss、mybatis、mybatis-plus(持久化框架) +6. redis、jedis(非关系型数据库) +7. minio(对象存储系统) +8. neo4j(图数据库) +9. rocketMQ(消息队列) +10. netty(websocket框架) diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/flask/app.py b/LinZeXun-examples/CS.DEEP_SpringBoot/flask/app.py new file mode 100644 index 0000000000000000000000000000000000000000..4b7d345508c891205298325974799e1c0b7fede0 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/flask/app.py @@ -0,0 +1,35 @@ +import torch +from transformers.models.bert import BertTokenizer, BertForSequenceClassification +from flask import Flask, request + +app = Flask(__name__) + +# 引入cold模型 +device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + +tokenizer = BertTokenizer.from_pretrained('./static/model/thu-coai/roberta-base-cold') +model = BertForSequenceClassification.from_pretrained('./static/model/thu-coai/roberta-base-cold') + +model.to(device) +model.eval() + + +# 恶评识别接口 +# 无恶意 - 0 +# 有恶意 - 1 +@app.route('/comment/classify', methods=['GET']) +def commentClassify(): # put application's code here + + texts = [request.args.get('content')] + + model_input = tokenizer(texts, return_tensors="pt", padding=True) + model_output = model(**model_input, return_dict=False) + + prediction = torch.argmax(model_output[0].cpu(), dim=-1) + prediction = [p.item() for p in prediction] + + return {'category': prediction[0]} + + +if __name__ == '__main__': + app.run() diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/flask/static/model/load_cold_model.py b/LinZeXun-examples/CS.DEEP_SpringBoot/flask/static/model/load_cold_model.py new file mode 100644 index 0000000000000000000000000000000000000000..589e626ad42d06a493787af50662ff1ae42a13f8 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/flask/static/model/load_cold_model.py @@ -0,0 +1,3 @@ +from huggingface_hub import snapshot_download + +snapshot_download(repo_id='thu-coai/roberta-base-cold') diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/flask/static/model/predict.py b/LinZeXun-examples/CS.DEEP_SpringBoot/flask/static/model/predict.py new file mode 100644 index 0000000000000000000000000000000000000000..f9312e3ac7d6d41bb19d2d85451263bef7839287 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/flask/static/model/predict.py @@ -0,0 +1,19 @@ +import torch +from transformers.models.bert import BertTokenizer, BertForSequenceClassification + +device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + +tokenizer = BertTokenizer.from_pretrained('thu-coai/roberta-base-cold') +model = BertForSequenceClassification.from_pretrained('thu-coai/roberta-base-cold') + +model.to(device) +model.eval() + +texts = ['傻逼吧', '牛啊!学到了!学到了!', '%%%%', '佬!'] + +model_input = tokenizer(texts, return_tensors="pt", padding=True) +model_output = model(**model_input, return_dict=False) + +prediction = torch.argmax(model_output[0].cpu(), dim=-1) +prediction = [p.item() for p in prediction] +print(prediction) # --> [1, 1, 0] (0 for Non-Offensive, 1 for Offenisve) diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/mvnw b/LinZeXun-examples/CS.DEEP_SpringBoot/mvnw new file mode 100644 index 0000000000000000000000000000000000000000..8a8fb2282df5b8f7263470a5a2dc0e196f35f35f --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/mvnw @@ -0,0 +1,316 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`\\unset -f command; \\command -v java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/mvnw.cmd b/LinZeXun-examples/CS.DEEP_SpringBoot/mvnw.cmd new file mode 100644 index 0000000000000000000000000000000000000000..1d8ab018eaf11d9b3a4a90e7818ace373dfbb380 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/mvnw.cmd @@ -0,0 +1,188 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/pom.xml b/LinZeXun-examples/CS.DEEP_SpringBoot/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..4787510389c50f174e698ae1d2254431338f8e9f --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/pom.xml @@ -0,0 +1,189 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.7.12 + + + com.deep + cs + 0.0.1-SNAPSHOT + cs + cs + + 1.8 + + + + org.springframework.boot + spring-boot-starter-web + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.boot + spring-boot-starter-security + + + + + org.springframework.boot + spring-boot-starter-jdbc + 2.7.6 + + + + org.postgresql + postgresql + 42.5.1 + + + + + com.baomidou + mybatis-plus-boot-starter + 3.5.2 + + + + + com.baomidou + mybatis-plus-generator + 3.5.3 + + + + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + runtime + + + + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + runtime + + + + + org.springframework.boot + spring-boot-starter-data-redis + 2.7.6 + + + + redis.clients + jedis + 3.9.0 + + + + io.springfox + springfox-swagger2 + 2.9.2 + + + + io.springfox + springfox-swagger-ui + 2.9.2 + + + + + com.github.xiaoymin + swagger-bootstrap-ui + 1.9.6 + + + + + org.apache.httpcomponents + httpclient + 4.5.7 + + + + + + com.alibaba.fastjson2 + fastjson2 + 2.0.24 + + + + + org.springframework.boot + spring-boot-starter-mail + 2.2.4.RELEASE + + + + + io.minio + minio + 8.4.0 + + + + + org.neo4j.driver + neo4j-java-driver + + + + org.springframework.boot + spring-boot-starter-data-neo4j + + + + + org.apache.commons + commons-text + 1.10.0 + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/CsApplication.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/CsApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..ecba97c77e327dfe8765c8310be6b9e2c1b653a5 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/CsApplication.java @@ -0,0 +1,21 @@ +package com.deep.cs; + +import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@SpringBootApplication +@MapperScan("com.deep.cs.mapper") +@EnableSwagger2 +@EnableSwaggerBootstrapUI +@EnableAsync +public class CsApplication { + + public static void main(String[] args) { + SpringApplication.run(CsApplication.class, args); + } + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/AsyncPoolConfig.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/AsyncPoolConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..a062febb7d6c71d44936a6475cc4368f0f334e6d --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/AsyncPoolConfig.java @@ -0,0 +1,31 @@ +package com.deep.cs.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 自定义线程池 + */ +@Configuration +public class AsyncPoolConfig { + + @Bean + public ThreadPoolTaskExecutor asyncThreadPoolTaskExecutor(){ + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(20); + executor.setMaxPoolSize(200); + executor.setQueueCapacity(25); + executor.setKeepAliveSeconds(200); + executor.setThreadNamePrefix("asyncThread"); + executor.setWaitForTasksToCompleteOnShutdown(true); + executor.setAwaitTerminationSeconds(60); + + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + + executor.initialize(); + return executor; + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/CorsConfig.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/CorsConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..f4f7d2fd9c8613f30caefeba5737835fb86776d0 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/CorsConfig.java @@ -0,0 +1,50 @@ +package com.deep.cs.config; + + +import org.springframework.context.annotation.Configuration; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * 解决前后端跨域问题的配置类 + * + * @author WA_automat + * @since 1.0 + */ +@Configuration +public class CorsConfig implements Filter { + @Override + public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { + HttpServletResponse response = (HttpServletResponse) res; + HttpServletRequest request = (HttpServletRequest) req; + + String origin = request.getHeader("Origin"); + if (origin != null) { + response.setHeader("Access-Control-Allow-Origin", origin); + } + + String headers = request.getHeader("Access-Control-Request-Headers"); + if (headers != null) { + response.setHeader("Access-Control-Allow-Headers", headers); + response.setHeader("Access-Control-Expose-Headers", headers); + } + + response.setHeader("Access-Control-Allow-Methods", "*"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + + chain.doFilter(request, response); + } + + @Override + public void init(FilterConfig filterConfig) { + + } + + @Override + public void destroy() { + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/MinioConfig.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/MinioConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..d3d787a583d139137d88aa5835f3c82beda8dc3a --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/MinioConfig.java @@ -0,0 +1,26 @@ +package com.deep.cs.config; + +import io.minio.MinioClient; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "minio") +public class MinioConfig { + + private String endpoint; + private String accessKey; + private String secretKey; + private String bucketName; + + @Bean + public MinioClient minioClient() { + return MinioClient.builder() + .endpoint(endpoint) + .credentials(accessKey, secretKey) + .build(); + } +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/MybatisPlusConfig.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/MybatisPlusConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..48d812e9dd8a04cd462a3fb60b9a35e6a1c69f58 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/MybatisPlusConfig.java @@ -0,0 +1,23 @@ +package com.deep.cs.config; + +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * mybatisplus配置 + */ +@Configuration +@EnableTransactionManagement +public class MybatisPlusConfig { + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + //1 创建MybatisPlusInterceptor拦截器对象 + MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor(); + //2 添加乐观锁拦截器 + mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); + return mpInterceptor; + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/RedisConfig.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/RedisConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..f1775abd9e14c6043b7d5113ff3692e35666d2f0 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/RedisConfig.java @@ -0,0 +1,71 @@ +package com.deep.cs.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +/** + * Redis配置类 + * 实现redis相关配置 + * 以及对bean的注入 + */ +@Configuration +public class RedisConfig { + + @Bean + public RedisConnectionFactory redisConnectionFactory() { + RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(); + // 2.0后的写法 + configuration.setHostName("10.102.132.150"); + configuration.setPort(6379); + configuration.setDatabase(0); + + return new JedisConnectionFactory(configuration); + } + + @Bean(name = "redisTemplate") + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(redisConnectionFactory); + + // String的序列化 + StringRedisSerializer stringSerializer = new StringRedisSerializer(); + // key采用String的序列化方式 + template.setKeySerializer(stringSerializer); + // hash的key采用String的序列化方式 + template.setHashKeySerializer(stringSerializer); + + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = jackson2JsonRedisSerializerConfig(); + //value采用jackson序列化方式 + template.setValueSerializer(jackson2JsonRedisSerializer); + //hash的value也采用jackson序列化方式 + template.setHashValueSerializer(jackson2JsonRedisSerializer); + + template.afterPropertiesSet(); + + + return template; + } + + private Jackson2JsonRedisSerializer jackson2JsonRedisSerializerConfig() { + // jackson序列化所有的类 + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + // jackson序列化的一些配置 + ObjectMapper om = new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance); + jackson2JsonRedisSerializer.setObjectMapper(om); + return jackson2JsonRedisSerializer; + } + + +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/RestTemplateConfig.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/RestTemplateConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..e4560713c612ef6905ea418fb5b10ec9a7a9982d --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/RestTemplateConfig.java @@ -0,0 +1,91 @@ +package com.deep.cs.config; + +import org.apache.http.client.HttpClient; +import org.apache.http.conn.HttpClientConnectionManager; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateConfig { + + /** + * http连接管理器 + * @return + */ + @Bean + public HttpClientConnectionManager poolingHttpClientConnectionManager() { + /*// 注册http和https请求 + Registry registry = RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", SSLConnectionSocketFactory.getSocketFactory()) + .build(); + PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(registry);*/ + + PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(); + // 最大连接数 + poolingHttpClientConnectionManager.setMaxTotal(500); + // 同路由并发数(每个主机的并发) + poolingHttpClientConnectionManager.setDefaultMaxPerRoute(100); + return poolingHttpClientConnectionManager; + } + + /** + * HttpClient + * @param poolingHttpClientConnectionManager + * @return + */ + @Bean + public HttpClient httpClient(HttpClientConnectionManager poolingHttpClientConnectionManager) { + HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); + // 设置http连接管理器 + httpClientBuilder.setConnectionManager(poolingHttpClientConnectionManager); + + /*// 设置重试次数 + httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(3, true));*/ + + // 设置默认请求头 + /*List
headers = new ArrayList<>(); + headers.add(new BasicHeader("Connection", "Keep-Alive")); + httpClientBuilder.setDefaultHeaders(headers);*/ + + return httpClientBuilder.build(); + } + + /** + * 请求连接池配置 + * @param httpClient + * @return + */ + @Bean + public ClientHttpRequestFactory clientHttpRequestFactory(HttpClient httpClient) { + HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(); + // httpClient创建器 + clientHttpRequestFactory.setHttpClient(httpClient); + // 连接超时时间/毫秒(连接上服务器(握手成功)的时间,超出抛出connect timeout) + clientHttpRequestFactory.setConnectTimeout(60 * 1000); + // 数据读取超时时间(socketTimeout)/毫秒(务器返回数据(response)的时间,超过抛出read timeout) + clientHttpRequestFactory.setReadTimeout(60 * 1000); + // 连接池获取请求连接的超时时间,不宜过长,必须设置/毫秒(超时间未拿到可用连接,会抛出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool) + clientHttpRequestFactory.setConnectionRequestTimeout(60 * 1000); + return clientHttpRequestFactory; + } + + /** + * rest模板 + * @return + */ + @Bean + public RestTemplate restTemplate(ClientHttpRequestFactory clientHttpRequestFactory) { + // boot中可使用RestTemplateBuilder.build创建 + RestTemplate restTemplate = new RestTemplate(); + // 配置请求工厂 + restTemplate.setRequestFactory(clientHttpRequestFactory); + return restTemplate; + } + +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/SecurityConfig.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/SecurityConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..516d1b35baf3e14e3cdb4a70d3b22dfb6ea98fe1 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/SecurityConfig.java @@ -0,0 +1,111 @@ +package com.deep.cs.config; + +import com.deep.cs.filter.JwtAuthenticationTokenFilter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +@Configuration +@EnableWebSecurity +@EnableGlobalMethodSecurity(jsr250Enabled = true, prePostEnabled = true, securedEnabled = true) +public class SecurityConfig { + + @Autowired + private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter; + + @Autowired + private AuthenticationEntryPoint authenticationEntryPoint; + + @Autowired + private AccessDeniedHandler accessDeniedHandler; + + /** + * 创建密码加密工具 + * + * @return BCryptPasswordEncoder + * @author WA_automat + * @since 1.0 + */ + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } + + /** + * 暴露AuthenticationManager + * + * @author WA_automat + * @since 1.0 + */ + @Bean + public AuthenticationManager authenticationManager( + AuthenticationConfiguration authenticationConfiguration + ) throws Exception { + return authenticationConfiguration.getAuthenticationManager(); + } + + /** + * HttpSecurity的配置 + * + * @param httpSecurity 参数 + * @return SecurityFilterChain 过滤链 + * @throws Exception 异常 + */ + @Bean + SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { + + // httpSecurity配置 + httpSecurity + .csrf().disable() + .authorizeRequests() + // OPTIONS放行 + .antMatchers(HttpMethod.OPTIONS,"/**").permitAll() + .and() + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) + .and() + .authorizeRequests() + //下边的路径放行 + .antMatchers("/v2/api-docs", "/swagger-resources/configuration/ui", + "/swagger-resources", "/swagger-resources/configuration/security", + "/swagger-ui.html", "/webjars/**", "/static/images/**").permitAll() + // 放行接口 + .antMatchers( + "/user/register", + "/user/login", + "/user/reset/password", + "/checkcode/register/code", + "/checkcode/reset/code", + "/article/get/all", + "/article/get/tag", + "/user/count" + ).anonymous() + .anyRequest().authenticated(); + + // 配置认证过滤器 + httpSecurity.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); + + // 配置异常处理器 + httpSecurity.exceptionHandling() + // 配置认证失败处理器 + .authenticationEntryPoint(authenticationEntryPoint) + // 配置授权失败处理器 + .accessDeniedHandler(accessDeniedHandler); + + // 返回过滤链 + return httpSecurity.build(); + } + +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/SwaggerConfig.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/SwaggerConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..63e3fccfde486456041a07f686aeefafbc8f1498 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/SwaggerConfig.java @@ -0,0 +1,52 @@ +package com.deep.cs.config; + + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; + +/** + * 关于Swagger的配置 + */ +@Configuration +@EnableSwagger2 +public class SwaggerConfig { + @Bean + public Docket docket(Environment environment) { + //指定在dev/test环境下使用swagger +// Profiles profiles = Profiles.of("dev", "test"); +// System.out.println(profiles); +// boolean flag = environment.acceptsProfiles(profiles); + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) +// .enable(flag)//关闭swagger,默认是true + .select() + //RequestHandlerSelectors:配置要扫描的方式,有basePackage("路径")、any():扫描全部,none():全部不扫描 + //RequestHandlerSelectors.withMethodAnnotation():扫描方法上的注解 + //.withClassAnnotation():扫描类上的注解 + .apis(RequestHandlerSelectors.basePackage("com.deep.cs.controller"))//指定扫描的包 + .build(); + } + + private ApiInfo apiInfo() { + Contact contact = new Contact("CS.DEEP", "https://cs-deep.github.io/DEEP-ui/", "cs_deep@163.com"); + return new ApiInfo( + "CS.DEEP Api", + "Api Documentation", + "v1.0", + "https://cs-deep.github.io/DEEP-ui/", + contact, + "Apache 2.0", + "http://www.apache.org/licenses/LICENSE-2.0", + new ArrayList<>() + ); + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/WebMvcConfigurerAdapter.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/WebMvcConfigurerAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..f7e77738acc4e4e78c64bd7bc155a12a3a3964c6 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/config/WebMvcConfigurerAdapter.java @@ -0,0 +1,29 @@ +package com.deep.cs.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; + +/** + * @author cf + * @Description: 静态资源配置 拦截器添加 + */ +@Configuration +public class WebMvcConfigurerAdapter extends WebMvcConfigurationSupport { + /** + * 配置静态资源 + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); + registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/"); + /*放行swagger-ui与bootstrap-ui静态页面*/ + registry.addResourceHandler("/swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/swagger-ui.html"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + registry.addResourceHandler("/doc.html") + .addResourceLocations("classpath:/META-INF/resources/doc.html"); + super.addResourceHandlers(registry); + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/article/ArticleController.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/article/ArticleController.java new file mode 100644 index 0000000000000000000000000000000000000000..070123dfeaa4bc5e1656add08ea0013783f48808 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/article/ArticleController.java @@ -0,0 +1,72 @@ +package com.deep.cs.controller.article; + +import com.deep.cs.service.article.ArticleService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.io.UnsupportedEncodingException; +import java.util.List; + +@RestController +@RequestMapping("/article") +public class ArticleController { + + @Autowired + private ArticleService articleService; + + @PostMapping("/create") + @PreAuthorize("hasAuthority('sys:create:article')") + public ResponseResult createArticle() { + return articleService.createArticle(); + } + + @PostMapping("/update") + @PreAuthorize("hasAuthority('sys:update:article')") + public ResponseResult updateArticle( + @RequestParam("articleId") Integer articleId, + @RequestParam("title") String title, + @RequestParam("content") String content, + @RequestParam("categoryId") Integer categoryId, + @RequestParam("tags") List tags + ) throws UnsupportedEncodingException { + return articleService.updateArticle( + articleId, title, content, categoryId, tags + ); + } + + @PostMapping("/delete") + @PreAuthorize("hasAuthority('sys:delete:article')") + public ResponseResult deleteArticle(@RequestParam("articleId") Integer articleId) { + return articleService.deleteArticle(articleId); + } + + @PostMapping("/publish") + @PreAuthorize("hasAuthority('sys:publish:article')") + public ResponseResult publishArticle( + @RequestParam("articleId") Integer articleId, + @RequestParam("title") String title, + @RequestParam("content") String content, + @RequestParam("categoryId") Integer categoryId, + @RequestParam("tags") List tags + ) throws UnsupportedEncodingException { + // 发布前需要更新数据 + ResponseResult responseResult = articleService.updateArticle( + articleId, title, content, categoryId, tags + ); + if (responseResult.getCode() != 200) { + return new ResponseResult<>(400, responseResult.getMessage(), null); + } + return articleService.publishArticle(articleId); + } + + @GetMapping("/get/info") + @PreAuthorize("hasAuthority('sys:get:article:info')") + public ResponseResult getArticleInfo( + @RequestParam("articleId") Integer articleId + ) { + return articleService.getArticleInfo(articleId); + } + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/article/ArticleShowController.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/article/ArticleShowController.java new file mode 100644 index 0000000000000000000000000000000000000000..cb31fc10dd1632a420c08a97c7743c9a680b91d8 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/article/ArticleShowController.java @@ -0,0 +1,47 @@ +package com.deep.cs.controller.article; + +import com.deep.cs.service.article.ArticleService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/article") +public class ArticleShowController { + + @Autowired + private ArticleService articleService; + + @GetMapping("/get/draft/list") + @PreAuthorize("hasAuthority('sys:get:draft:list')") + public ResponseResult getDraftList() { + return articleService.getDraftList(); + } + + @GetMapping("/get/publish/list") + @PreAuthorize("hasAuthority('sys:get:publish:list')") + public ResponseResult getPublishList( + @RequestParam("userId") Integer userId + ) { + return articleService.getPublishList(userId); + } + + @GetMapping("/get/all") + public ResponseResult getAllArticle( + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "pageSize", defaultValue = "12") Integer pageSize, + @RequestParam(name = "sortBy", defaultValue = "time") String sortBy + ) { + return articleService.getAllArticle(page, pageSize, sortBy); + } + + @GetMapping("/get/tag") + public ResponseResult getTagList() { + return articleService.getTagList(); + } + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/checkcode/CheckCodeController.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/checkcode/CheckCodeController.java new file mode 100644 index 0000000000000000000000000000000000000000..0692bb927347a825ce4796885c5f50b136bacc49 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/checkcode/CheckCodeController.java @@ -0,0 +1,45 @@ +package com.deep.cs.controller.checkcode; + +import com.deep.cs.service.checkcode.CheckCodeService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.AsyncResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +@RestController +@RequestMapping("/checkcode") +public class CheckCodeController { + + @Autowired + private CheckCodeService checkCodeService; + + @GetMapping("/register/code") + public ResponseResult sendRegisterCode( + @RequestParam("email") String email + ) { + try { + return checkCodeService.sendCheckCode("register", email).get(180, TimeUnit.SECONDS); + } catch (Exception e) { + return new ResponseResult<>(400, "验证码发送失败", null); + } + } + + @GetMapping("/reset/code") + public ResponseResult sendResetCode( + @RequestParam("email") String email + ) { + try { + return checkCodeService.sendCheckCode("reset", email).get(180, TimeUnit.SECONDS); + } catch (Exception e) { + return new ResponseResult<>(400, "验证码发送失败", null); + } + } + +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/collect/CollectController.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/collect/CollectController.java new file mode 100644 index 0000000000000000000000000000000000000000..011ef37590c8bd1687fd88a9484f54b0f364de41 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/collect/CollectController.java @@ -0,0 +1,46 @@ +package com.deep.cs.controller.collect; + +import com.deep.cs.service.collect.CollectService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/collect") +public class CollectController { + + @Autowired + private CollectService collectService; + + @PostMapping("/add") + public ResponseResult addArticleCollect( + @RequestParam("articleId") Integer articleId + ) { + return collectService.addArticleCollect(articleId); + } + + @PostMapping("/delete") + public ResponseResult deleteArticleCollect( + @RequestParam("articleId") Integer articleId + ) { + return collectService.deleteArticleCollect(articleId); + } + + @GetMapping("/count") + @PreAuthorize("hasAuthority('sys:count:collect')") + public ResponseResult countArticleCollect( + @RequestParam("articleId") Integer articleId + ) { + return collectService.countArticleCollect(articleId); + } + + @GetMapping("/check") + @PreAuthorize("hasAuthority('sys:check:collect')") + public ResponseResult checkArticleCollect( + @RequestParam("articleId") Integer articleId + ) { + return collectService.checkArticleCollect(articleId); + } + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/comment/CommentController.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/comment/CommentController.java new file mode 100644 index 0000000000000000000000000000000000000000..0317fdb5e485a980a7139d46b202afdece2034df --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/comment/CommentController.java @@ -0,0 +1,45 @@ +package com.deep.cs.controller.comment; + +import com.deep.cs.service.comment.CommentService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.io.UnsupportedEncodingException; + +@RestController +@RequestMapping("/comment") +public class CommentController { + + @Autowired + private CommentService commentService; + + @PostMapping("/add") + @PreAuthorize("hasAuthority('sys:add:comment')") + public ResponseResult addComment( + @RequestParam("articleId") Integer articleId, + @RequestParam("content") String content, + @RequestParam(name = "isReply", defaultValue = "0") Integer isReply, + @RequestParam(name = "replyId", defaultValue = "-1") Integer replyId + ) throws UnsupportedEncodingException { + return commentService.addComment(articleId, content, isReply, replyId); + } + + @PostMapping("/delete") + @PreAuthorize("hasAuthority('sys:delete:comment')") + public ResponseResult deleteComment( + @RequestParam("commentId") Integer commentId + ) { + return commentService.deleteComment(commentId); + } + + @GetMapping("/get/info") + @PreAuthorize("hasAuthority('sys:get:comment')") + public ResponseResult getCommentInfo( + @RequestParam("commentId") Integer commentId + ) throws UnsupportedEncodingException { + return commentService.getCommentInfo(commentId); + } + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/comment/CommentShowController.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/comment/CommentShowController.java new file mode 100644 index 0000000000000000000000000000000000000000..a727a256c0c6fec3a9770db5eec76c580eca685d --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/comment/CommentShowController.java @@ -0,0 +1,45 @@ +package com.deep.cs.controller.comment; + +import com.deep.cs.service.comment.CommentService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/comment") +public class CommentShowController { + + @Autowired + private CommentService commentService; + + @GetMapping("/get/normal") + @PreAuthorize("hasAuthority('sys:get:normal:comment')") + public ResponseResult getNormalComment( + @RequestParam("articleId") Integer articleId, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "pageSize", defaultValue = "12") Integer pageSize + ) { + return commentService.getNormalComment(articleId, page, pageSize); + } + + @GetMapping("/get/reply") + @PreAuthorize("hasAuthority('sys:get:reply:comment')") + public ResponseResult getReplyComment( + @RequestParam("commentId") Integer commentId + ) { + return commentService.getReplyComment(commentId); + } + + @GetMapping("/count") + @PreAuthorize("hasAuthority('sys:count:comment')") + public ResponseResult countComment( + @RequestParam("articleId") Integer articleId + ) { + return commentService.countComment(articleId); + } + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/file/FileUploadContoller.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/file/FileUploadContoller.java new file mode 100644 index 0000000000000000000000000000000000000000..61ebe7af4ceb38a766b374cc54fe12a277468549 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/file/FileUploadContoller.java @@ -0,0 +1,34 @@ +package com.deep.cs.controller.file; + +import com.deep.cs.service.file.FileUploadService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +@RestController +@RequestMapping("/upload") +public class FileUploadContoller { + + @Autowired + private FileUploadService fileUploadService; + + @PostMapping("/file") + @PreAuthorize("hasAuthority('sys:file:upload')") + public ResponseResult uploadFile( + @RequestParam("file") MultipartFile file + ) throws IOException { + try { + return fileUploadService.uploadFile(file); + } catch (Exception e) { + return new ResponseResult<>(400, "上传失败", null); + } + } + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/follow/FollowController.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/follow/FollowController.java new file mode 100644 index 0000000000000000000000000000000000000000..03c39d5c43783bc20932323214c4e09acbfb0f70 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/follow/FollowController.java @@ -0,0 +1,100 @@ +package com.deep.cs.controller.follow; + +import com.deep.cs.service.follow.FollowService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/user") +public class FollowController { + + @Autowired + private FollowService followService; + + @PostMapping("/add/follow") + @PreAuthorize("hasAuthority('sys:add:follow')") + public ResponseResult addFollow( + @RequestParam("userId") Integer userId + ) { + try { + return followService.addFollow(userId); + } catch (Exception e) { + return new ResponseResult(400, "关注失败", null); + } + } + + @PostMapping("/delete/follow") + @PreAuthorize("hasAuthority('sys:delete:follow')") + public ResponseResult deleteFollow( + @RequestParam("userId") Integer userId + ) { + try { + return followService.deleteFollow(userId); + } catch (Exception e) { + return new ResponseResult(400, "取消关注失败", null); + } + } + + @GetMapping("/following/count") + @PreAuthorize("hasAuthority('sys:count:following')") + public ResponseResult countFollowing( + @RequestParam("userId") Integer userId + ) { + try { + return followService.countFollowing(userId); + } catch (Exception e) { + return new ResponseResult(400, "获取失败", null); + } + } + + @GetMapping("/follower/count") + @PreAuthorize("hasAuthority('sys:count:follower')") + public ResponseResult countFollower( + @RequestParam("userId") Integer userId + ) { + try { + return followService.countFollower(userId); + } catch (Exception e) { + return new ResponseResult(400, "获取失败", null); + } + } + + @GetMapping("/following/list") + @PreAuthorize("hasAuthority('sys:following:list')") + public ResponseResult getFollowingList( + @RequestParam("userId") Integer userId + ) { + try { + return followService.getFollowingList(userId); + } catch (Exception e) { + return new ResponseResult(400, "获取失败", null); + } + } + + @GetMapping("/follower/list") + @PreAuthorize("hasAuthority('sys:follower:list')") + public ResponseResult getFollowerList( + @RequestParam("userId") Integer userId + ) { + try { + return followService.getFollowerList(userId); + } catch (Exception e) { + return new ResponseResult(400, "获取失败", null); + } + } + + @GetMapping("/check/follow") + @PreAuthorize("hasAuthority('sys:check:follow')") + public ResponseResult checkFollow( + @RequestParam("userId") Integer userId + ) { + try { + return followService.checkFollow(userId); + } catch (Exception e) { + return new ResponseResult(400, "获取失败", null); + } + } + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/like/LikeController.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/like/LikeController.java new file mode 100644 index 0000000000000000000000000000000000000000..9be34836b369f0bed2266cef072ca6593de5e77e --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/like/LikeController.java @@ -0,0 +1,48 @@ +package com.deep.cs.controller.like; + +import com.deep.cs.service.like.LikeService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/like") +public class LikeController { + + @Autowired + private LikeService likeService; + + @PostMapping("/add") + @PreAuthorize("hasAuthority('sys:add:like')") + public ResponseResult addArticleLike( + @RequestParam("articleId") Integer articleId + ) { + return likeService.addArticleLike(articleId); + } + + @PostMapping("/delete") + @PreAuthorize("hasAuthority('sys:delete:like')") + public ResponseResult deleteArticleLike( + @RequestParam("articleId") Integer articleId + ) { + return likeService.deleteArticleLike(articleId); + } + + @GetMapping("/count") + @PreAuthorize("hasAuthority('sys:count:like')") + public ResponseResult countArticleLike( + @RequestParam("articleId") Integer articleId + ) { + return likeService.countArticleLike(articleId); + } + + @GetMapping("/check") + @PreAuthorize("hasAuthority('sys:check:like')") + public ResponseResult checkArticleLike( + @RequestParam("articleId") Integer articleId + ) { + return likeService.checkArticleLike(articleId); + } + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/user/LoginController.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/user/LoginController.java new file mode 100644 index 0000000000000000000000000000000000000000..940ca854fcc56c64b507a217b0d91573dd5d59c8 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/user/LoginController.java @@ -0,0 +1,59 @@ +package com.deep.cs.controller.user; + +import com.deep.cs.service.login.LoginService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/user") +public class LoginController { + + @Autowired + private LoginService loginService; + + // 登录 + @PostMapping("/login") + public ResponseResult login( + @RequestParam("email") String email, + @RequestParam("password") String password + ) { + try { + return loginService.login(email, password); + } catch (Exception e) { + return new ResponseResult<>(400, "登录失败", null); + } + } + + // 注销(退出登录) + @PostMapping("/logout") + @PreAuthorize("hasAuthority('sys:user:logout')") + public ResponseResult logout() { + try { + return loginService.logout(); + } catch (Exception e) { + return new ResponseResult<>(400, "注销失败", null); + } + } + + // 重置密码 + @PostMapping("/reset/password") + public ResponseResult resetPassword( + @RequestParam("email") String email, + @RequestParam("checkCode") String checkCode, + @RequestParam("password") String password, + @RequestParam("confirmPwd") String confirmPwd + ) { + try { + return loginService.resetPassword( + email, checkCode, password, confirmPwd + ); + } catch (Exception e) { + return new ResponseResult<>(400, "重置密码失败", null); + } + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/user/RegisterController.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/user/RegisterController.java new file mode 100644 index 0000000000000000000000000000000000000000..a4d35574c2210a92c2414d56d449176133e6af26 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/user/RegisterController.java @@ -0,0 +1,36 @@ +package com.deep.cs.controller.user; + +import com.deep.cs.service.register.RegisterService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/user") +public class RegisterController { + + @Autowired + private RegisterService registerService; + + @PostMapping("/register") + public ResponseResult register( + @RequestParam("username") String username, + @RequestParam("email") String email, + @RequestParam("checkCode") String checkCode, + @RequestParam("password") String password, + @RequestParam("confirmPwd") String confirmPwd + ) { + try { + return registerService.register( + username, email, checkCode, + password, confirmPwd + ); + } catch (Exception e) { + return new ResponseResult<>(400, "注册失败", null); + } + } + +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/user/UserInfoController.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/user/UserInfoController.java new file mode 100644 index 0000000000000000000000000000000000000000..a977d78098d04762d38b24b348766edad17b2c02 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/controller/user/UserInfoController.java @@ -0,0 +1,50 @@ +package com.deep.cs.controller.user; + +import com.deep.cs.service.user.UserInfoService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +@RestController +@RequestMapping("/user") +public class UserInfoController { + + @Autowired + private UserInfoService userInfoService; + + @GetMapping("/get/info") + @PreAuthorize("hasAuthority('sys:get:user:info')") + public ResponseResult getUserInfo( + @RequestParam("userId") Integer userId + ) { + try { + return userInfoService.getUserInfo(userId); + } catch (Exception e) { + return new ResponseResult(400, "获取失败", null); + } + } + + @PostMapping("/upload/info") + @PreAuthorize("hasAuthority('sys:upload:owner:info')") + public ResponseResult uploadUserInfo( + @RequestParam("username") String username, + @RequestParam("gender") Integer gender, + @RequestParam("age") Integer age, + @RequestParam("avatar") MultipartFile avatar, + @RequestParam("description") String description + ) throws IOException { + return userInfoService.uploadUserInfo( + username, gender, age, avatar, description + ); + } + + @GetMapping("/count") + public ResponseResult userCount() { + return userInfoService.userCount(); + } + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/filter/JwtAuthenticationTokenFilter.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/filter/JwtAuthenticationTokenFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..dbd08c9465bc41b42a607e19de8af4d2b6f2f8dc --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/filter/JwtAuthenticationTokenFilter.java @@ -0,0 +1,84 @@ +package com.deep.cs.filter; + +import com.alibaba.fastjson2.JSON; +import com.deep.cs.pojo.user.LoginUser; +import com.deep.cs.utils.JwtUtil; +import io.jsonwebtoken.Claims; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.web.filter.OncePerRequestFilter; +import redis.clients.jedis.Jedis; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Objects; + +/** + * 一个Jwt认证过滤器 + * + * @author WA_automat + * @since 1.0 + */ +@Component +public class JwtAuthenticationTokenFilter extends OncePerRequestFilter { + + @Value("${spring.redis.host}") + private String host; + + @Value("${spring.redis.port}") + private Long port; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + + // 获取Token + String token = request.getHeader("token"); + + // 获取不到Token时 + if (!StringUtils.hasText(token)) { + // 放行 + filterChain.doFilter(request, response); + return; + } + + // 解析Token + String userid; + try { + Claims claims = JwtUtil.parseJWT(token); + userid = claims.getSubject(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("token 非法"); + } + + // 根据Token获取用户信息 + String redisKey = "login:" + userid; + + // 更换为Jedis + Jedis jedis = new Jedis(host, Math.toIntExact((port))); + jedis.connect(); + LoginUser loginUser = JSON.parseObject(jedis.get(redisKey), LoginUser.class); + if (Objects.isNull(loginUser)) { + throw new RuntimeException("用户未登录"); + } + + // 存入SecurityContextHolder + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken( + loginUser, + null, + loginUser.getAuthorities() + ); + + SecurityContextHolder.getContext().setAuthentication(authenticationToken); + + // 放行 + filterChain.doFilter(request, response); + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/filter/SqlInjectFilter.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/filter/SqlInjectFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..ddca90e7cafbeaf1d4e2181fdb93c644eabaafa7 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/filter/SqlInjectFilter.java @@ -0,0 +1,54 @@ +package com.deep.cs.filter; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import javax.servlet.annotation.WebInitParam; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Slf4j +@Component +@WebFilter(urlPatterns = "/*", filterName = "SQLInjection", initParams = { @WebInitParam(name = "regex", value = "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|" + + "(\\b(and|exec|execute|insert|select|delete|update|count|drop|%|chr|mid|master|truncate|char|declare|sitename|net user|xp_cmdshell|or|like'|and|exec|execute|insert|create|drop|table|from|grant|use|group_concat|column_name|information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|chr|mid|master|truncate|char|declare|or|--|like)\\b)") }) +public class SqlInjectFilter implements Filter { + private String regx; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + this.regx = filterConfig.getInitParameter("regex"); + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletRequest req = (HttpServletRequest) servletRequest; + Map parametersMap = servletRequest.getParameterMap(); + for (Map.Entry stringEntry : parametersMap.entrySet()) { + String[] value = (String[]) ((Map.Entry) stringEntry).getValue(); + for (String s : value) { + if (null != s && this.regx != null) { + Pattern p = Pattern.compile(this.regx); + Matcher m = p.matcher(s); + if (m.find()) { + log.error("您输入的参数有非法字符,请输入正确的参数!"); + servletRequest.setAttribute("err", "您输入的参数有非法字符,请输入正确的参数!"); + servletRequest.setAttribute("pageUrl", req.getRequestURI()); + servletRequest.getRequestDispatcher("/error").forward(servletRequest, servletResponse); + return; + } + } + } + } + filterChain.doFilter(servletRequest, servletResponse); + } + + @Override + public void destroy() { + + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/handler/AccessDeniedHandlerImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/handler/AccessDeniedHandlerImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..36fb5972b9667e74846cfa644428eca953da79bd --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/handler/AccessDeniedHandlerImpl.java @@ -0,0 +1,36 @@ +package com.deep.cs.handler; + +import com.alibaba.fastjson2.JSON; +import com.deep.cs.utils.ResponseResult; +import com.deep.cs.utils.WebUtil; +import org.springframework.http.HttpStatus; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.stereotype.Component; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * 权限异常实现类 + */ +@Component +public class AccessDeniedHandlerImpl implements AccessDeniedHandler { + @Override + public void handle( + HttpServletRequest request, + HttpServletResponse response, + AccessDeniedException accessDeniedException + ) throws IOException, ServletException { + // 处理异常 + Map map = new HashMap<>(); + map.put("state", "error"); + ResponseResult result = new ResponseResult(HttpStatus.FORBIDDEN.value(), "您的权限不足", map); + String json = JSON.toJSONString(result); + WebUtil.renderString(response, json); + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/handler/AuthenticationEntryPointImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/handler/AuthenticationEntryPointImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..efd3e01280ede281ecb0afe4b50b5b08664dac6a --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/handler/AuthenticationEntryPointImpl.java @@ -0,0 +1,37 @@ +package com.deep.cs.handler; + +import com.alibaba.fastjson2.JSON; +import com.deep.cs.utils.ResponseResult; +import com.deep.cs.utils.WebUtil; +import org.springframework.http.HttpStatus; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * 认证异常实现类 + */ +@Component +public class AuthenticationEntryPointImpl + implements AuthenticationEntryPoint { + @Override + public void commence( + HttpServletRequest request, + HttpServletResponse response, + AuthenticationException authException + ) throws IOException, ServletException { + // 处理异常 + Map map = new HashMap<>(); + map.put("state", "error"); + ResponseResult result = new ResponseResult(HttpStatus.UNAUTHORIZED.value(), "认证失败,请重新登录", map); + String json = JSON.toJSONString(result); + WebUtil.renderString(response, json); + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/mapper/ArticleMapper.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/mapper/ArticleMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..a193df8204fa717becc1fe787a88d61b0b5a40d2 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/mapper/ArticleMapper.java @@ -0,0 +1,28 @@ +package com.deep.cs.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.deep.cs.pojo.article.Article; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface ArticleMapper extends BaseMapper
{ + + void deleteArticleTag(Integer articleId); + + void insertArticleTag(Integer articleId, String tag); + + // 获取文章的tag信息 + List getArticleTag(Integer articleId); + + // 获取文章点赞数 + Integer countArticleLike(Integer articleId); + + // 获取文章收藏数 + Integer countArticleCollect(Integer articleId); + + // 获取文章评论数 + Integer countArticleComment(Integer articleId); + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/mapper/CommentMapper.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/mapper/CommentMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..a2abefd5ae8bda5cb044a18a00a6e9e2294f13ff --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/mapper/CommentMapper.java @@ -0,0 +1,9 @@ +package com.deep.cs.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.deep.cs.pojo.comment.Comment; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CommentMapper extends BaseMapper { +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/mapper/UserMapper.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/mapper/UserMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..85245cd2a3af05f87c04cb3444636126e98d0fb7 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/mapper/UserMapper.java @@ -0,0 +1,50 @@ +package com.deep.cs.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.deep.cs.pojo.user.User; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface UserMapper extends BaseMapper { + // 获取所有权限 + List selectMenuByUserId(Integer userId); + + // 添加用户角色 + void insertRoleByUserId(Integer userId, Integer roleId); + + // 关注用户 + void addFollow(Integer userId, Integer followedUserId); + + // 取消关注 + void deleteFollow(Integer userId, Integer followedUserId); + + // 获取关注数量 + int getFollowingCount(Integer userId); + + // 获取粉丝数量 + int getFollowersCount(Integer userId); + + // 添加关注 + void insertLike(Integer userId, Integer articleId); + + // 取消关注 + void deleteLike(Integer userId, Integer articleId); + + // 判断是否点过赞 + Integer isLike(Integer userId, Integer articleId); + + // 添加收藏 + void insertCollect(Integer userId, Integer articleId); + + // 取消收藏 + void deleteCollect(Integer userId, Integer articleId); + + // 判断是否收藏过 + Integer isCollect(Integer userId, Integer articleId); + + // 获取所有tag + List selectAllTag(); + +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/pojo/article/Article.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/pojo/article/Article.java new file mode 100644 index 0000000000000000000000000000000000000000..2884ccd4abead686d3e0daecb64160eea973fb6a --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/pojo/article/Article.java @@ -0,0 +1,75 @@ +package com.deep.cs.pojo.article; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import org.springframework.data.neo4j.core.schema.GeneratedValue; +import org.springframework.data.neo4j.core.schema.Id; +import org.springframework.data.neo4j.core.schema.Node; +import org.springframework.data.neo4j.core.schema.Property; + +import java.sql.Timestamp; + +/** + * 文章实体类 + * @author lzx + * @since 2023.7.15 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName("article") +@Node("Article") +public class Article { + + @Id + @GeneratedValue + @TableField("nodeId") + private Long nodeId; + + @Property + @TableId(type = IdType.AUTO) + private Integer id; + + @NonNull + @Property + @TableField("authorId") + private Integer authorId; + + @NonNull + @Property + @TableField("title") + private String title; + + @NonNull + @Property + @TableField("content") + private String content; + + @NonNull + @Property + @TableField("categoryId") + private Integer categoryId; + + @NonNull + @Property + @TableField("createTime") + private Timestamp createTime; + + @NonNull + @Property + @TableField("updateTime") + private Timestamp updateTime; + + // 标记此属性为version列对应的属性 + @Version + @TableField("version") + private Integer version; + + @Property + @TableField("draft") + private Integer draft; + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/pojo/comment/Comment.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/pojo/comment/Comment.java new file mode 100644 index 0000000000000000000000000000000000000000..547497fe32eef70c2609cf7fa8063e4c366d3e20 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/pojo/comment/Comment.java @@ -0,0 +1,57 @@ +package com.deep.cs.pojo.comment; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; + +import java.sql.Timestamp; + +/** + * 评论实体类 + * @author lzx + * @since 2023.7.30 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName("comment") +public class Comment { + + @TableId(type = IdType.AUTO) + private Integer id; + + @NonNull + @TableField("content") + private String content; + + @NonNull + @TableField("authorId") + private Integer authorId; + + @NonNull + @TableField("articleId") + private Integer articleId; + + @NonNull + @TableField("createTime") + private Timestamp createTime; + + @NonNull + @TableField("isReply") + private Integer isReply; + + @TableField("replyId") + private Integer replyId; + + @NonNull + @TableField("isNasty") + private Integer isNasty; + + // 标记此属性为version列对应的属性 + @Version + @TableField("version") + private Integer version; + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/pojo/user/LoginUser.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/pojo/user/LoginUser.java new file mode 100644 index 0000000000000000000000000000000000000000..5a661098825a9e859c0570f9b88486246d67c193 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/pojo/user/LoginUser.java @@ -0,0 +1,103 @@ +package com.deep.cs.pojo.user; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +/** + * LoginUser类 + * 实现UserDetails接口 + * + * @author WA_automat + * @Since 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class LoginUser implements UserDetails { + + // 私有成员User + private User user; + + // 封装权限的字符串列表permissions + private List permissions; + + // 权限信息 + @JSONField(serialize = false) + private List authorities; + + public LoginUser(User user, List permissions) { + this.user = user; + this.permissions = permissions; + } + + /** + * 获取权限集合 + * + * @return 权限集合 + */ + @Override + public Collection getAuthorities() { + if (authorities != null) { + return authorities; + } + + // 将permissions中的字符串封装成权限信息 + authorities = permissions.stream() + .map(SimpleGrantedAuthority::new) + .collect(Collectors.toList()); + return authorities; + } + + /** + * 获取用户密码 + * 调用User类的获取用户密码函数即可 + * + * @return 用户密码 + */ + @Override + public String getPassword() { + return user.getPassword(); + } + + /** + * 获取用户名 + * 调用User类的获取用户名函数即可 + * + * @return 用户名 + */ + @Override + public String getUsername() { + return user.getEmail(); + } + + // 下面是各种判断,改为返回true即可 + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/pojo/user/User.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/pojo/user/User.java new file mode 100644 index 0000000000000000000000000000000000000000..97ec5116da57f80ca0241e404d40e81b1937eb40 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/pojo/user/User.java @@ -0,0 +1,71 @@ +package com.deep.cs.pojo.user; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import org.springframework.data.neo4j.core.schema.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * 用户实体类 + * @author lzx + * @since 2023.7.1 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName("user") +@Node("User") +public class User { + + @Id + @GeneratedValue + @TableField("nodeId") + private Long nodeId; + + @Property + @TableId(type = IdType.AUTO) + private Integer id; + + @NonNull + @Property + @TableField("username") + private String username; + + @NonNull + @Property + @TableField("email") + private String email; + + @NonNull + @Property + @TableField("password") + private String password; + + @Property + @TableField("gender") + private Integer gender; + + @Property + @TableField("age") + private Integer age; + + @NonNull + @Property + @TableField("avatar") + private String avatar; + + @Property + @TableField("description") + private String description; + + // 标记此属性为version列对应的属性 + @Version + @TableField("version") + private Integer version; + +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/repository/article/ArticleRepository.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/repository/article/ArticleRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..fa4ba18a45779b39a0c1d7efa7da6fcd6af642f4 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/repository/article/ArticleRepository.java @@ -0,0 +1,9 @@ +package com.deep.cs.repository.article; + +import com.deep.cs.pojo.article.Article; +import org.springframework.data.neo4j.repository.Neo4jRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ArticleRepository extends Neo4jRepository { +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/repository/user/UserRepository.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/repository/user/UserRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..600645c39dd7b403de5416eb7864d977fc751d7c --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/repository/user/UserRepository.java @@ -0,0 +1,100 @@ +package com.deep.cs.repository.user; + +import com.deep.cs.pojo.article.Article; +import com.deep.cs.pojo.user.User; +import org.springframework.data.neo4j.repository.Neo4jRepository; +import org.springframework.data.neo4j.repository.query.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 用户 neo4j 映射类 + * @author lzx + * @since 2023.7.13 + */ +@Repository +public interface UserRepository extends Neo4jRepository { + + // 添加指定的关注 + @Query("MATCH (u:User), (f:User) WHERE id(u) = $nodeId AND id(f) = $followingNodeId CREATE (u)-[:following]->(f)") + void addFollowing(@Param("nodeId") Long nodeId, @Param("followingNodeId") Long followingNodeId); + + // 删除指定的关注 + @Query("MATCH (u:User)-[r:following]->(f:User) WHERE id(u) = $nodeId AND id(f) = $followingNodeId DELETE r") + void removeFollowing(@Param("nodeId") Long nodeId, @Param("followingNodeId") Long followingNodeId); + + // 查询是否已经关注了某用户 + @Query("MATCH (u:User)-[:following]->(f:User) WHERE id(u) = $nodeId AND id(f) = $followingNodeId RETURN COUNT(*) > 0") + boolean isFollowing(@Param("nodeId") Long nodeId, @Param("followingNodeId") Long followingNodeId); + + // 获取关注的所有用户 + @Query("MATCH (u:User)-[:following]->(f:User) WHERE id(u) = $nodeId RETURN f") + List getFollowing(@Param("nodeId") Long nodeId); + + // 获取用户的所有粉丝 + @Query("MATCH (u:User)<-[:following]-(f:User) WHERE id(u) = $nodeId RETURN f") + List getFollowers(@Param("nodeId") Long nodeId); + + // 用户发布文章 + @Query("MATCH (u:User), (a:Article) WHERE id(u) = $userNodeId AND id(a) = $articleNodeId CREATE (u)-[:publish]->(a)") + void userPublishArticle(@Param("userNodeId") Long userNodeId, @Param("articleNodeId") Long articleNodeId); + + // 用户删除文章 + @Query("MATCH (u:User)-[r:publish]->(a:Article) WHERE id(u) = $userNodeId AND id(a) = $articleNodeId DELETE r") + void userDeleteArticle(@Param("userNodeId") Long userNodeId, @Param("articleNodeId") Long articleNodeId); + + // 判断是否为发布关系 + @Query("MATCH (u:User)-[r:publish]->(a:Article) WHERE id(u) = $userNodeId AND id(a) = $articleNodeId RETURN COUNT(r) > 0") + boolean hasPublishRelationship(@Param("userNodeId") Long userNodeId, @Param("articleNodeId") Long articleNodeId); + + // 添加关注关系 + @Query("MATCH (u:User), (a:Article) WHERE id(u) = $userNodeId AND id(a) = $articleNodeId CREATE (u)-[:like]->(a)") + void userLikeArticle(@Param("userNodeId") Long userNodeId, @Param("articleNodeId") Long articleNodeId); + + // 取消关注关系 + @Query("MATCH (u:User)-[r:like]->(a:Article) WHERE id(u) = $userNodeId AND id(a) = $articleNodeId DELETE r") + void userUnlikeArticle(@Param("userNodeId") Long userNodeId, @Param("articleNodeId") Long articleNodeId); + + // 添加收藏关系 + @Query("MATCH (u:User), (a:Article) WHERE id(u) = $userNodeId AND id(a) = $articleNodeId CREATE (u)-[:collect]->(a)") + void userCollectArticle(@Param("userNodeId") Long userNodeId, @Param("articleNodeId") Long articleNodeId); + + // 取消收藏关系 + @Query("MATCH (u:User)-[r:collect]->(a:Article) WHERE id(u) = $userNodeId AND id(a) = $articleNodeId DELETE r") + void userUncollectedArticle(@Param("userNodeId") Long userNodeId, @Param("articleNodeId") Long articleNodeId); + + // 添加评论关系 + @Query("MATCH (u:User), (a:Article) WHERE id(u) = $userNodeId AND id(a) = $articleNodeId MERGE (u)-[:comment]->(a)") + void userCommentArticle(@Param("userNodeId") Long userNodeId, @Param("articleNodeId") Long articleNodeId); + + // 取消评论关系 + @Query("MATCH (u:User)-[r:comment]->(a:Article) WHERE id(u) = $userNodeId AND id(a) = $articleNodeId DELETE r") + void userUncommentArticle(@Param("userNodeId") Long userNodeId, @Param("articleNodeId") Long articleNodeId); + + // 推荐排序 + @Query("MATCH (u:User)-[:following]-(f:User)\n" + + "WHERE id(u) = $userNodeId\n" + + "WITH u, f\n" + + "MATCH (f)-[:publish]->(published:Article)\n" + + "OPTIONAL MATCH (f)-[:like]->(liked:Article)\n" + + "OPTIONAL MATCH (f)-[:collect]->(collected:Article)\n" + + "OPTIONAL MATCH (f)-[:comment]->(commented:Article)\n" + + "OPTIONAL MATCH (u)-[:publish|like|collect|comment]->(ca:Article)\n" + + "WITH COLLECT(published) AS published," + + " COLLECT(collected) AS collected, COLLECT(liked) AS liked," + + " COLLECT(commented) AS commented, COLLECT(ca) AS caList\n" + + "MATCH (a:Article)\n" + + "WITH a, REDUCE(s = 0, x IN CASE WHEN a IN published THEN [4] ELSE [] END + " + + "CASE WHEN a IN collected THEN [3] ELSE [] END + " + + "CASE WHEN a IN liked THEN [2] ELSE [] END + " + + "CASE WHEN a IN commented THEN [1] ELSE [] END + " + + "CASE WHEN a IN caList THEN [-5] ELSE [] END | s + x) AS weight, " + + "REDUCE(totalSimilarity = 0.0, caArticle IN caList | totalSimilarity + " + + "apoc.text.jaroWinklerDistance(a.content, caArticle.content)) AS similarity\n" + + "RETURN a\n" + + "ORDER BY weight + similarity DESC") + List
recommendArticleList(@Param("userNodeId") Long userNodeId); + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/article/ArticleServiceImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/article/ArticleServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..76540300e87d0f9cc5fa688549d2efd048468016 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/article/ArticleServiceImpl.java @@ -0,0 +1,370 @@ +package com.deep.cs.service.Impl.article; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.deep.cs.mapper.ArticleMapper; +import com.deep.cs.mapper.UserMapper; +import com.deep.cs.pojo.article.Article; +import com.deep.cs.pojo.user.LoginUser; +import com.deep.cs.pojo.user.User; +import com.deep.cs.repository.article.ArticleRepository; +import com.deep.cs.repository.user.UserRepository; +import com.deep.cs.service.article.ArticleService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; + +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.sql.Timestamp; +import java.util.*; + +/** + * 文章服务类 + * + * @author lzx + * @since 2023.7.16 + */ +@Service +public class ArticleServiceImpl implements ArticleService { + + @Autowired + private ArticleMapper articleMapper; + + @Autowired + private ArticleRepository articleRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private UserMapper userMapper; + + @Override + public ResponseResult createArticle() { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 获取现在的时间 + Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + + // 创建草稿文章 + Article article = new Article(null, null, user.getId(), + "草稿", "正文", -1, + timestamp, timestamp, + null, 1); + articleMapper.insert(article); + + // 构建返回值 + Map map = new HashMap<>(); + map.put("article", article); + + return new ResponseResult<>(200, "创建成功", map); + } + + @Override + public ResponseResult updateArticle( + Integer articleId, String title, + String content, Integer categoryId, + List tags + ) throws UnsupportedEncodingException { + + // 解码文章内容 + content = java.net.URLDecoder.decode(content, String.valueOf(StandardCharsets.UTF_8)); + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 获取文章 + Article article = articleMapper.selectById(articleId); + + // 判断文章的主人 + if (!article.getAuthorId().equals(user.getId())) { + return new ResponseResult<>(400, "文章不属于该用户", null); + } + + // 判断tag数量是否过多 + if (tags.size() > 3) { + return new ResponseResult<>(400, "一篇文章的tag不能超过三个", null); + } + + // 获取现在的时间 + Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + + // 更新文章 + article.setTitle(title); + article.setContent(content); + article.setCategoryId(categoryId); + article.setUpdateTime(timestamp); + articleMapper.updateById(article); + if (article.getDraft() == 0) { + articleRepository.save(article); + } + + // 更新文章tag + articleMapper.deleteArticleTag(articleId); + for (String tag : tags) { + articleMapper.insertArticleTag(articleId, tag); + } + + // 获取文章对应tag + List articleTag = articleMapper.getArticleTag(articleId); + + // 构建返回值 + Map map = new HashMap<>(); + map.put("article", article); + map.put("tag", articleTag); + + return new ResponseResult<>(200, "更新文章成功", map); + } + + @Override + public ResponseResult deleteArticle(Integer articleId) { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 获取文章 + Article article = articleMapper.selectById(articleId); + + // 判断文章的主人 + if (!article.getAuthorId().equals(user.getId())) { + return new ResponseResult<>(400, "文章不属于该用户", null); + } + + articleMapper.deleteArticleTag(articleId); + articleMapper.deleteById(articleId); + + // 若文章已经被发布过 + if (article.getDraft() == 0) { + // 删除关系 + userRepository.userDeleteArticle(user.getNodeId(), article.getNodeId()); + // 删除文章 + articleRepository.deleteById(article.getNodeId()); + } + + return new ResponseResult<>(200, "删除文章成功", null); + } + + @Override + public ResponseResult publishArticle(Integer articleId) { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 获取文章 + Article article = articleMapper.selectById(articleId); + + // 判断文章的主人 + if (!article.getAuthorId().equals(user.getId())) { + return new ResponseResult<>(400, "文章不属于该用户", null); + } + + // 非法情况 + if (article.getCategoryId() == -1) { + return new ResponseResult<>(400, "请选择文章分类", null); + } + + // 设置文章为正式文章 + article.setDraft(0); + articleRepository.save(article); + articleMapper.updateById(article); + + // 构建发布关系 + if (!userRepository.hasPublishRelationship(user.getNodeId(), article.getNodeId())) { + userRepository.userPublishArticle(user.getNodeId(), article.getNodeId()); + } + + // 获取文章对应tag + List articleTag = articleMapper.getArticleTag(articleId); + + // 构建返回值 + Map map = new HashMap<>(); + map.put("article", article); + map.put("tag", articleTag); + + return new ResponseResult<>(200, "发布文章成功", map); + } + + @Override + public ResponseResult getArticleInfo(Integer articleId) { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 获取文章 + Article article = articleMapper.selectById(articleId); + + // 获取文章对应tag + List articleTag = articleMapper.getArticleTag(articleId); + + Map map = new HashMap<>(); + map.put("article", article); + map.put("tag", articleTag); + + return new ResponseResult<>(200, "获取成功", map); + } + + @Override + public ResponseResult getDraftList() { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + LambdaQueryWrapper
lambdaQueryWrapper = + new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(Article::getAuthorId, user.getId()) + .eq(Article::getDraft, 1) + .orderByDesc(Article::getCreateTime); + List
draftArticleList = articleMapper.selectList(lambdaQueryWrapper); + + Map map = new HashMap<>(); + map.put("articleList", draftArticleList); + + return new ResponseResult<>(200, "获取成功", map); + } + + @Override + public ResponseResult getPublishList(Integer userId) { + + // 获取用户 + User user = userMapper.selectById(userId); + + LambdaQueryWrapper
lambdaQueryWrapper = + new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(Article::getAuthorId, user.getId()) + .eq(Article::getDraft, 0) + .orderByDesc(Article::getCreateTime); + List
publishArticleList = articleMapper.selectList(lambdaQueryWrapper); + + Map map = new HashMap<>(); + map.put("articleList", publishArticleList); + + return new ResponseResult<>(200, "获取成功", map); + } + + // 根据sortBy获取文章列表 + @Override + public ResponseResult getAllArticle(Integer page, Integer pageSize, String sortBy) { + + Map map = new HashMap<>(); + + if (Objects.equals(sortBy, "time")) { + // 按照发布时间排序 + LambdaQueryWrapper
lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper + .eq(Article::getDraft, 0) + // 从最新的文章到最旧的文章 + .orderByAsc(Article::getCreateTime); + List
articleList = articleMapper.selectList(lambdaQueryWrapper); + + int start = (page - 1) * pageSize; + int end = Math.min(start + pageSize, articleList.size()); + + map.put("articleCount", articleList.size()); + map.put("articleList", articleList.subList(start, end)); + } else if (Objects.equals(sortBy, "popularity")) { + // 热度排序:按照点赞、收藏、评论的数量进行排序 + LambdaQueryWrapper
lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper + .eq(Article::getDraft, 0); + List
articleList = articleMapper.selectList(lambdaQueryWrapper); + + // 定义排序 + articleList.sort((firstArticle, secondArticle) -> { + Integer firstArticleId = firstArticle.getId(); + Integer secondArticleId = secondArticle.getId(); + int firstScore = articleMapper.countArticleLike(firstArticleId) + + articleMapper.countArticleCollect(firstArticleId) + + articleMapper.countArticleComment(firstArticleId); + int secondScore = articleMapper.countArticleLike(secondArticleId) + + articleMapper.countArticleCollect(secondArticleId) + + articleMapper.countArticleComment(secondArticleId); + return secondScore - firstScore; + }); + + int start = (page - 1) * pageSize; + int end = Math.min(start + pageSize, articleList.size()); + + map.put("articleCount", articleList.size()); + map.put("articleList", articleList.subList(start, end)); + } else if (Objects.equals(sortBy, "recommend")) { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 推荐排序 + List
articleList = userRepository.recommendArticleList(user.getNodeId()); + int start = (page - 1) * pageSize; + int end = Math.min(start + pageSize, articleList.size()); + + map.put("articleCount", articleList.size()); + map.put("articleList", articleList.subList(start, end)); + } else { + throw new RuntimeException("未定义排序方法"); + } + + return new ResponseResult<>(200, "获取成功", map); + } + + // Fisher-Yates 洗牌算法 + // 用于获取列表中的随机元素 + private static List getRandomElements(List list, int count) { + + // 如果列表的大小小于或等于所需的数量,则直接返回原列表 + if (list.size() <= count) { + return list; + } + + Random rand = new Random(); + + // Fisher-Yates 洗牌算法 + for (int i = list.size() - 1; i >= list.size() - count; i--) { + int randomIndex = rand.nextInt(i + 1); + + // 交换当前位置和随机位置的元素 + String temp = list.get(i); + list.set(i, list.get(randomIndex)); + list.set(randomIndex, temp); + } + + return list.subList(list.size() - count, list.size()); + } + + @Override + public ResponseResult getTagList() { + + // 获取随机的12个tag + List tagList = userMapper.selectAllTag(); + tagList = getRandomElements(tagList, 12); + + // 构建返回值 + Map map = new HashMap<>(); + map.put("tagList", tagList); + return new ResponseResult<>(200, "获取成功", map); + } + +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/checkcode/CheckCodeServiceImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/checkcode/CheckCodeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..b1243984b044d8d020c2bf5caca92ebc3ceec0cd --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/checkcode/CheckCodeServiceImpl.java @@ -0,0 +1,119 @@ +package com.deep.cs.service.Impl.checkcode; + +import com.deep.cs.service.checkcode.CheckCodeService; +import com.deep.cs.utils.MailUtil; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.AsyncResult; +import org.springframework.stereotype.Service; +import redis.clients.jedis.Jedis; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Random; +import java.util.concurrent.Future; + +/** + * 验证码收发实现类 + * @author lzx + * @since 2023.7.8 + */ +@Service +public class CheckCodeServiceImpl implements CheckCodeService { + + @Autowired + private MailUtil mailUtil; + + @Value("${spring.redis.host}") + private String host; + + @Value("${spring.redis.port}") + private Long port; + + /** + * 用于发送验证码的方法 + * + * @param ops 发送验证码的字段(发送所为了的操作) + * @param to 送达的email字符串 + * @return 返回响应报文 + */ + @Override + @Async("asyncThreadPoolTaskExecutor") + public Future sendCheckCode(String ops, String to) { + + // 用于返回信息 + Map map = new HashMap<>(); + + try (Jedis jedis = new Jedis(host, Math.toIntExact((port)))) { + // 生成验证码 + Random helper = new Random(); + String yzm = "1234567890abcdefghijklmnopqrstuvwxwz"; + StringBuilder code = new StringBuilder(); + for (int i = 0; i < 6; i++) { + int j = helper.nextInt(yzm.length()); + code.append(yzm.charAt(j)); + } + + // 发送验证码 + String subject = "【CS.DEEP】验证信息"; + String text = "你正在进行" + ops + "验证操作,验证码:" + code + "\n" + "请勿将验证码泄漏给他人,本条验证码有效期1分钟 "; + + String flag = mailUtil.send(to, subject, text); + + // 将验证码存入redis,并设置过期时间为五分钟 + jedis.connect(); + + // 若redis中存在发送到这个邮箱的验证码 + // 则先删除它 + if (!Objects.isNull(jedis.get(ops + ":" + to))) { + jedis.del(ops + ":" + to); + } + + jedis.set(ops + ":" + to, code.toString()); + jedis.expire(ops + ":" + to, 5 * 60L); + + // 返回ResponseResult + map.put("state", "success"); + map.put("ops", ops); + map.put("email", to); + return AsyncResult.forValue(new ResponseResult(200, "验证码发送成功", map)); + + } catch (Exception e) { + + // 返回ResponseResult + map.put("state", "error"); + return AsyncResult.forValue(new ResponseResult(400, "验证码发送失败", map)); + + } + + } + + @Override + @Async("asyncThreadPoolTaskExecutor") + public Future checkCheckCode(String ops, String email, String code) { + + // 从redis中取出验证码 + Jedis jedis = new Jedis(host, Math.toIntExact((port))); + jedis.connect(); + + String checkCode = jedis.get(ops + ":" + email); + if (Objects.isNull(checkCode)) { + return AsyncResult.forValue(false); + } + + // 检查验证码是否正确 + if (!checkCode.equals(code)) { + return AsyncResult.forValue(false); + } + + // 若正确,需要从redis中删除验证码 + // 没删掉也没关系,我们已经设置验证码时间为5分钟 +// redisCache.deleteObject(ops + ":" + email); + jedis.del(ops + ":" + email); + + return AsyncResult.forValue(true); + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/collect/CollectServiceImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/collect/CollectServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..cf9df4b532ce86211e2dc3b5d6e6bcca78180836 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/collect/CollectServiceImpl.java @@ -0,0 +1,111 @@ +package com.deep.cs.service.Impl.collect; + +import com.deep.cs.mapper.ArticleMapper; +import com.deep.cs.mapper.UserMapper; +import com.deep.cs.pojo.article.Article; +import com.deep.cs.pojo.user.LoginUser; +import com.deep.cs.pojo.user.User; +import com.deep.cs.repository.user.UserRepository; +import com.deep.cs.service.collect.CollectService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service +public class CollectServiceImpl implements CollectService { + + @Autowired + private UserMapper userMapper; + + @Autowired + private UserRepository userRepository; + + @Autowired + private ArticleMapper articleMapper; + + @Override + public ResponseResult addArticleCollect(Integer articleId) { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 判断文章是否存在 + Article article = articleMapper.selectById(articleId); + if (article == null) { + return new ResponseResult<>(400, "文章不存在", null); + } + + // 判断是否点过赞 + if (userMapper.isCollect(user.getId(), articleId) > 0) { + return new ResponseResult<>(400, "已经收藏过啦!", null); + } + + userMapper.insertCollect(user.getId(), articleId); + userRepository.userCollectArticle(user.getNodeId(), article.getNodeId()); + + return new ResponseResult<>(200, "收藏成功", null); + + } + + @Override + public ResponseResult deleteArticleCollect(Integer articleId) { + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 判断文章是否存在 + Article article = articleMapper.selectById(articleId); + if (article == null) { + return new ResponseResult<>(400, "文章不存在", null); + } + + // 判断是否点过赞 + if (userMapper.isCollect(user.getId(), articleId) == 0) { + return new ResponseResult<>(400, "你还没收藏这篇文章噢!", null); + } + + userMapper.deleteCollect(user.getId(), articleId); + userRepository.userUncollectedArticle(user.getNodeId(), article.getNodeId()); + + return new ResponseResult<>(200, "取消收藏成功", null); + + } + + @Override + public ResponseResult countArticleCollect(Integer articleId) { + + // 获取收藏数 + Integer countCollect = articleMapper.countArticleCollect(articleId); + Map map = new HashMap<>(); + map.put("count", countCollect); + + return new ResponseResult<>(200, "获取成功", map); + } + + @Override + public ResponseResult checkArticleCollect(Integer articleId) { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + Integer isCollect = userMapper.isCollect(user.getId(), articleId); + + Map map = new HashMap<>(); + map.put("isCollect", isCollect); + + return new ResponseResult<>(200, "获取成功", map); + } +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/comment/CommentServiceImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/comment/CommentServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..f8b01e39d49d4a1bb48dfdcb4116b689865c9037 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/comment/CommentServiceImpl.java @@ -0,0 +1,292 @@ +package com.deep.cs.service.Impl.comment; + +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.deep.cs.mapper.ArticleMapper; +import com.deep.cs.mapper.CommentMapper; +import com.deep.cs.pojo.article.Article; +import com.deep.cs.pojo.comment.Comment; +import com.deep.cs.pojo.user.LoginUser; +import com.deep.cs.pojo.user.User; +import com.deep.cs.repository.user.UserRepository; +import com.deep.cs.service.comment.CommentService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.sql.Timestamp; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 评论服务类 + * + * @author lzx + * @since 2023.7.30 + */ +@Service +public class CommentServiceImpl implements CommentService { + + @Autowired + private RestTemplate restTemplate; + + @Autowired + private CommentMapper commentMapper; + + @Autowired + private UserRepository userRepository; + + @Autowired + private ArticleMapper articleMapper; + + // 添加新评论 + @Override + public ResponseResult addComment(Integer articleId, String content, Integer isReply, Integer replyId) throws UnsupportedEncodingException { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 获取对应文章 + Article article = articleMapper.selectById(articleId); + + // 返回值构建 + Map map = new HashMap<>(); + + // LLM实现恶评识别(调用flask微服务接口 + String url = "http://localhost:5000/comment/classify?content=" + content; + JSONObject jsonObject = restTemplate.getForEntity(url, JSONObject.class).getBody(); + assert jsonObject != null; + Integer category = (Integer) jsonObject.get("category"); + + // 获取现在的时间 + Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + + Comment comment; + // 判断是否为回复他人的评论 + if (isReply == 0) { + // 直属于文章的评论 + comment = new Comment( + null, content, user.getId(), articleId, + timestamp, 0, + null, category, null + ); + } else { + // 回复他人评论的评论 + comment = new Comment( + null, content, user.getId(), articleId, + timestamp, 1, + replyId, category, null + ); + } + + // 加密为URI + content = java.net.URLEncoder.encode(content, String.valueOf(StandardCharsets.UTF_8)); + comment.setContent(content); + + // 存入数据库并建立关系 + commentMapper.insert(comment); + userRepository.userCommentArticle(user.getNodeId(), article.getNodeId()); + + // 解码返回给前端 + comment.setContent( + java.net.URLDecoder.decode( + comment.getContent(), + String.valueOf(StandardCharsets.UTF_8) + )); + + map.put("comment", comment); + + return new ResponseResult<>(200, "评论成功", map); + } + + @Override + public ResponseResult deleteComment(Integer commentId) { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 获取评论 + Comment comment = commentMapper.selectById(commentId); + if (!comment.getAuthorId().equals(user.getId())) { + return new ResponseResult<>(400, "该评论不属于该用户", null); + } + + // 获取对应文章并删除评论 + Article article = articleMapper.selectById(comment.getArticleId()); + commentMapper.deleteById(commentId); + + // 查询是否有其他评论 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper + .eq(Comment::getArticleId, article.getId()) + .eq(Comment::getAuthorId, user.getId()); + List commentList = commentMapper.selectList(queryWrapper); + if (commentList.size() == 0) { + userRepository.userUncommentArticle(user.getNodeId(), article.getNodeId()); + } + + // 获取该评论的子评论并删除 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper + .eq(Comment::getIsReply,1) + .eq(Comment::getReplyId, commentId); + List selectList = commentMapper.selectList(lambdaQueryWrapper); + selectList.forEach(item -> { + deleteComment(item.getId()); + }); + + return new ResponseResult<>(200, "删除评论成功", null); + } + + @Override + public ResponseResult getCommentInfo(Integer commentId) throws UnsupportedEncodingException { + + // 获取评论信息 + Comment comment = commentMapper.selectById(commentId); + + // 判断评论是否存在 + if (comment == null) { + return new ResponseResult<>(400, "评论不存在", null); + } + + // 解码评论 + comment.setContent( + java.net.URLDecoder.decode( + comment.getContent(), + String.valueOf(StandardCharsets.UTF_8) + )); + Map map = new HashMap<>(); + map.put("comment", comment); + + return new ResponseResult<>(200, "获取成功", map); + } + + @Override + public ResponseResult getNormalComment( + Integer articleId, Integer page, Integer pageSize + ) { + + // 获取该文章所有评论 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper + // 当前文章的评论 + .eq(Comment::getArticleId, articleId) + // 该评论不是回复 + .eq(Comment::getIsReply, 0) + // 从时间最早到时间最晚 + .orderByDesc(Comment::getCreateTime); + List commentList = commentMapper.selectList(lambdaQueryWrapper); + + // 定义起止位置 + int start = (page - 1) * pageSize; + int end = Math.min(start + pageSize, commentList.size()); + + // 构建commentList + commentList = commentList + .subList(start, end) + .stream() + // 解码其中的每一个评论 + .peek(comment -> { + try { + comment.setContent( + URLDecoder.decode( + comment.getContent(), + String.valueOf(StandardCharsets.UTF_8) + )); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + }) + .collect(Collectors.toList()); + + // 获取每一条评论的回复个数 + List replySizeList = new ArrayList<>(); + commentList.forEach(comment -> { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Comment::getReplyId, comment.getId()); + int replySize = commentMapper.selectList(queryWrapper).size(); + replySizeList.add(replySize); + }); + + // 构建返回值 + Map map = new HashMap<>(); + map.put("commentList", commentList); + map.put("replySize", replySizeList); + + return new ResponseResult<>(200, "获取成功", map); + + } + + // 获取某评论的所有回复 + // dfs:(深度优先搜索) + @Override + public ResponseResult>> getReplyComment( + Integer commentId + ) { + + // 查询回复 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper + .eq(Comment::getIsReply, 1) + .eq(Comment::getReplyId, commentId); + + // 查找当前评论结点的子评论 + // 流编程实现递归 + List commentList = + commentMapper + .selectList(queryWrapper) + .stream() + // 递归拼接当前评论列表 + .flatMap(comment -> Stream.concat( + Stream.of(comment), + getReplyComment(comment.getId()) + .getData() + .get("commentList") + .stream() + )) + // 按照时间进行排序 + .sorted(Comparator.comparing(Comment::getCreateTime)) + // 解码其中的每一个评论 + .peek(comment -> { + try { + comment.setContent( + java.net.URLDecoder.decode( + comment.getContent(), + String.valueOf(StandardCharsets.UTF_8) + )); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + }) + .collect(Collectors.toList()); + + // 构造返回值 + Map> map = new HashMap<>(); + map.put("commentList", commentList); + + return new ResponseResult<>(200, "获取成功", map); + } + + @Override + public ResponseResult countComment(Integer articleId) { + + // 构建返回值 + Map map = new HashMap<>(); + map.put("count", articleMapper.countArticleComment(articleId)); + return new ResponseResult<>(200, "获取成功", map); + + } +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/file/FileUploadServiceImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/file/FileUploadServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..84e5b10f58640244561b2df38aea19de6edc7791 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/file/FileUploadServiceImpl.java @@ -0,0 +1,43 @@ +package com.deep.cs.service.Impl.file; + +import com.deep.cs.service.file.FileUploadService; +import com.deep.cs.utils.MinioUtil; +import com.deep.cs.utils.ResponseResult; +import com.deep.cs.utils.UUIDUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * 上传文件服务类 + * @author lzx + * @since 2023.7.15 + */ +@Service +public class FileUploadServiceImpl implements FileUploadService { + + @Autowired + private MinioUtil minioUtil; + + @Autowired + private UUIDUtil uuidUtil; + + // 上传文件 + @Override + public ResponseResult uploadFile(MultipartFile file) throws IOException { + + // 图片文件上传至minio并生成外链 + String objectName = uuidUtil.getUUID(); + minioUtil.putObject("csdeep", objectName, file.getInputStream(), file.getContentType()); + String url = minioUtil.getObjectURL("csdeep", objectName); + + // 构建返回值 + Map map = new HashMap<>(); + map.put("url", url); + return new ResponseResult<>(200, "获取成功", map); + } +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/follow/FollowServiceImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/follow/FollowServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..350f3dd5c4d25ed416ae356367f2bd531d6c1c4d --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/follow/FollowServiceImpl.java @@ -0,0 +1,181 @@ +package com.deep.cs.service.Impl.follow; + +import com.deep.cs.mapper.UserMapper; +import com.deep.cs.pojo.user.LoginUser; +import com.deep.cs.pojo.user.User; +import com.deep.cs.repository.user.UserRepository; +import com.deep.cs.service.follow.FollowService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 关注服务类 + * + * @author lzx + * @since 2023.7.13 + */ +@Service +public class FollowServiceImpl implements FollowService { + + @Autowired + private UserMapper userMapper; + + @Autowired + private UserRepository userRepository; + + // 添加关注 + @Override + public ResponseResult addFollow(Integer userId) { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 获取被关注者 + User followedUser = userMapper.selectById(userId); + if (followedUser == null) { + return new ResponseResult<>(400, "用户不存在", null); + } + + // 判断是否合法 + if (userRepository.isFollowing(user.getNodeId(), followedUser.getNodeId())) { + return new ResponseResult<>(400, "用户已经被关注过了", null); + } + + // 添加进图数据库 + userRepository.addFollowing(user.getNodeId(), followedUser.getNodeId()); + // 添加进关系型数据库 + userMapper.addFollow(user.getId(), userId); + + return new ResponseResult<>(200, "关注成功", null); + } + + // 取消关注 + @Override + public ResponseResult deleteFollow(Integer userId) { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 获取被关注者 + User followedUser = userMapper.selectById(userId); + if (followedUser == null) { + return new ResponseResult<>(400, "用户不存在", null); + } + + // 判断是否合法 + if (!userRepository.isFollowing(user.getNodeId(), followedUser.getNodeId())) { + return new ResponseResult<>(400, "该用户未被关注", null); + } + + // 在图数据库中删除结点 + userRepository.removeFollowing(user.getNodeId(), followedUser.getNodeId()); + + // 删除关系型数据库中的记录 + userMapper.deleteFollow(user.getId(), userId); + + return new ResponseResult<>(200, "取消关注成功", null); + } + + // 计算关注数 + @Override + public ResponseResult countFollowing(Integer userId) { + + if (userMapper.selectById(userId) == null) { + return new ResponseResult<>(400, "用户不存在", null); + } + + int followingCount = userMapper.getFollowingCount(userId); + + Map map = new HashMap<>(); + map.put("followingCount", followingCount); + + return new ResponseResult<>(200, "获取成功", map); + } + + // 计算粉丝数 + @Override + public ResponseResult countFollower(Integer userId) { + + if (userMapper.selectById(userId) == null) { + return new ResponseResult<>(400, "用户不存在", null); + } + + int followersCount = userMapper.getFollowersCount(userId); + + Map map = new HashMap<>(); + map.put("followerCount", followersCount); + + return new ResponseResult<>(200, "获取成功", map); + } + + // 获取关注列表 + @Override + public ResponseResult getFollowingList(Integer userId) { + + // 判断用户是否存在 + User user = userMapper.selectById(userId); + if (user == null) { + return new ResponseResult<>(400, "用户不存在", null); + } + + // 获取所有关注 + List following = userRepository.getFollowing(user.getNodeId()); + + // 返回列表 + Map map = new HashMap<>(); + map.put("following", following); + return new ResponseResult<>(200, "获取成功", map); + } + + // 获取粉丝列表 + @Override + public ResponseResult getFollowerList(Integer userId) { + + // 判断用户是否存在 + User user = userMapper.selectById(userId); + if (user == null) { + return new ResponseResult<>(400, "用户不存在", null); + } + + // 获取所有粉丝 + List followers = userRepository.getFollowers(user.getNodeId()); + + // 返回列表 + Map map = new HashMap<>(); + map.put("follower", followers); + return new ResponseResult<>(200, "获取成功", map); + } + + @Override + public ResponseResult checkFollow(Integer userId) { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 获取被关注者 + User followedUser = userMapper.selectById(userId); + + boolean isFollow = userRepository.isFollowing(user.getNodeId(), followedUser.getNodeId()); + + Map map = new HashMap<>(); + map.put("isFollow", isFollow); + + return new ResponseResult<>(200, "获取成功", map); + } +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/like/LikeServiceImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/like/LikeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..0048b22baed6f77288025446d1f0bfc8aa2eb224 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/like/LikeServiceImpl.java @@ -0,0 +1,110 @@ +package com.deep.cs.service.Impl.like; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.deep.cs.mapper.ArticleMapper; +import com.deep.cs.mapper.UserMapper; +import com.deep.cs.pojo.article.Article; +import com.deep.cs.pojo.user.LoginUser; +import com.deep.cs.pojo.user.User; +import com.deep.cs.repository.user.UserRepository; +import com.deep.cs.service.like.LikeService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service +public class LikeServiceImpl implements LikeService { + + @Autowired + private UserMapper userMapper; + + @Autowired + private UserRepository userRepository; + + @Autowired + private ArticleMapper articleMapper; + + @Override + public ResponseResult addArticleLike(Integer articleId) { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 判断文章是否存在 + Article article = articleMapper.selectById(articleId); + if (article == null) { + return new ResponseResult<>(400, "文章不存在", null); + } + + // 判断是否点过赞 + if (userMapper.isLike(user.getId(), articleId) > 0) { + return new ResponseResult<>(400, "已经点过赞啦!", null); + } + + userMapper.insertLike(user.getId(), articleId); + userRepository.userLikeArticle(user.getNodeId(), article.getNodeId()); + + return new ResponseResult<>(200, "点赞成功", null); + } + + @Override + public ResponseResult deleteArticleLike(Integer articleId) { + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 判断文章是否存在 + Article article = articleMapper.selectById(articleId); + if (article == null) { + return new ResponseResult<>(400, "文章不存在", null); + } + + // 判断是否点过赞 + if (userMapper.isLike(user.getId(), articleId) == 0) { + return new ResponseResult<>(400, "还没点过赞噢!", null); + } + + userMapper.deleteLike(user.getId(), articleId); + userRepository.userUnlikeArticle(user.getNodeId(), article.getNodeId()); + + return new ResponseResult<>(200, "取消点赞成功", null); + } + + @Override + public ResponseResult countArticleLike(Integer articleId) { + + // 获取点赞数 + Integer countLike = articleMapper.countArticleLike(articleId); + Map map = new HashMap<>(); + map.put("count", countLike); + + return new ResponseResult<>(200, "获取成功", map); + } + + @Override + public ResponseResult checkArticleLike(Integer articleId) { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + Integer isLike = userMapper.isLike(user.getId(), articleId); + + Map map = new HashMap<>(); + map.put("isLike", isLike); + + return new ResponseResult<>(200, "获取成功", map); + } +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/login/LoginServiceImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/login/LoginServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..b0d48a7dd91b4e74853bbf813ebac232b4540231 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/login/LoginServiceImpl.java @@ -0,0 +1,168 @@ +package com.deep.cs.service.Impl.login; + +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.deep.cs.mapper.UserMapper; +import com.deep.cs.pojo.user.LoginUser; +import com.deep.cs.pojo.user.User; +import com.deep.cs.service.checkcode.CheckCodeService; +import com.deep.cs.service.login.LoginService; +import com.deep.cs.utils.JwtUtil; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.AsyncResult; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import redis.clients.jedis.Jedis; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +/** + * 登录实现类 + * @author lzx + * @since 2023.7.8 + */ +@Service +public class LoginServiceImpl implements LoginService { + + @Autowired + private AuthenticationManager authenticationManager; + + @Autowired + private UserMapper userMapper; + + @Autowired + private CheckCodeService checkCodeService; + + @Autowired + private PasswordEncoder passwordEncoder; + + @Value("${spring.redis.host}") + private String host; + + @Value("${spring.redis.port}") + private Long port; + + @Override + public ResponseResult login(String email, String password) { + + // AuthenticationManager 进行用户认证 + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(email, password); + + Authentication authenticate = authenticationManager.authenticate(authenticationToken); + + // 如果认证没通过,给出对应提示 + if (Objects.isNull(authenticate)) { + throw new RuntimeException("登录失败"); + } + + // 如果认证通过,使用userid生成有一个jwt,jwt存入ResponseResult返回 + LoginUser loginUser = (LoginUser) authenticate.getPrincipal(); + User user = loginUser.getUser(); + String userid = user.getId().toString(); + String jwt = JwtUtil.createJWT(userid); + + // 将token响应给前端 + Map map = new HashMap<>(); + map.put("token", jwt); + + // 更换为Jedis + // 用户信息存入redis + Jedis jedis = new Jedis(host, Math.toIntExact((port))); + jedis.connect(); + jedis.set("login:" + userid, JSON.toJSONString(loginUser)); + // 登录有效期最长为30天(即30天后必须重新登录) + jedis.expire("login:" + userid, 30 * 24 * 60 * 60L); +// redisCache.setCacheObject("login:" + userid, loginUser); + + // 加入过期时间 + map.put("expirationTime", + LocalDateTime + .now().plusDays(30) // 当前时间后30天 + .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // 设置格式 + + // 获取用户名 + map.put("user", user); + + return new ResponseResult<>(200, "登录成功", map); + } + + @Override + public ResponseResult logout() { + // 获取SecurityContextHolder中的用户id + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + Integer userid = loginUser.getUser().getId(); + + // 删除redis中的值 + Jedis jedis = new Jedis(host, Math.toIntExact((port))); + jedis.connect(); + jedis.del("login:" + userid); + + return new ResponseResult(200, "注销成功", null); + } + + // 重置密码 + @Override + public ResponseResult resetPassword( + String email, + String checkCode, + String password, + String confirmPwd + ) throws ExecutionException, InterruptedException, TimeoutException { + + // 用于ResponseResult返回的状态 + Map map = new HashMap<>(); + + // 两次密码是否一致 + if (!Objects.equals(password, confirmPwd)) { + map.put("state", "error"); + return new ResponseResult(400, "两次密码不一致", map); + } + + // 密码长度检查 + if (password.length() < 6 || password.length() > 16) { + map.put("state", "error"); + return new ResponseResult(400, "密码应设置在6-16位之间", map); + } + + // 邮箱是否已经使用 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(User::getEmail, email); + User user = userMapper.selectOne(lambdaQueryWrapper); + if (Objects.isNull(user)) { + map.put("state", "error"); + return new ResponseResult(400, "请先完成注册", map); + } + + // 判断验证码是否一致 + if (!checkCodeService.checkCheckCode("reset", email, checkCode).get(60, TimeUnit.SECONDS)) { + map.put("state", "error"); + return new ResponseResult(400, "验证码错误", map); + } + + // 更新用户的密码 + user.setPassword(passwordEncoder.encode(password)); + userMapper.updateById(user); + + // 返回成功的ResponseResult + map.put("state", "success"); + return new ResponseResult(200, "重置密码成功", map); + } + +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/register/RegisterServiceImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/register/RegisterServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..29c2c52b7ced68adde3645d361127172ef201bc1 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/register/RegisterServiceImpl.java @@ -0,0 +1,114 @@ +package com.deep.cs.service.Impl.register; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.deep.cs.mapper.UserMapper; +import com.deep.cs.pojo.user.User; +import com.deep.cs.repository.user.UserRepository; +import com.deep.cs.service.checkcode.CheckCodeService; +import com.deep.cs.service.register.RegisterService; +import com.deep.cs.utils.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +/** + * 注册实现类 + * + * @author lzx + * @since 2023.7.8 + */ +@Service +public class RegisterServiceImpl implements RegisterService { + + @Autowired + private UserMapper userMapper; + + @Autowired + private PasswordEncoder passwordEncoder; + + @Autowired + private CheckCodeService checkCodeService; + + @Autowired + private UserRepository userRepository; + + @Override + public ResponseResult register( + String username, String email, String checkCode, + String password, String confirmPwd + ) throws ExecutionException, InterruptedException, TimeoutException { + + // 用于ResponseResult返回的状态 + Map map = new HashMap<>(); + + // 两次密码是否一致 + if (!Objects.equals(password, confirmPwd)) { + map.put("state", "error"); + return new ResponseResult(400, "两次密码不一致", map); + } + + // 用户名长度检查 + if (username.length() > 16) { + map.put("state", "error"); + return new ResponseResult(400, "用户名过长", map); + } + + // 密码长度检查 + if (password.length() < 6 || password.length() > 16) { + map.put("state", "error"); + return new ResponseResult(400, "密码应设置在6-16位之间", map); + } + + // 用户名是否被占用 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(User::getUsername, username); + User user1 = userMapper.selectOne(queryWrapper); + if (!Objects.isNull(user1)) { + map.put("state", "error"); + return new ResponseResult(400, "该用户名已被使用", map); + } + + // 邮箱是否已经使用 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(User::getEmail, email); + User user2 = userMapper.selectOne(lambdaQueryWrapper); + if (!Objects.isNull(user2)) { + map.put("state", "error"); + return new ResponseResult(400, "该邮箱已被使用", map); + } + + // 判断验证码是否一致 + if (!checkCodeService.checkCheckCode("register", email, checkCode).get(60, TimeUnit.SECONDS)) { + map.put("state", "error"); + return new ResponseResult(400, "验证码错误", map); + } + + // 成功后插入用户信息 + User user = new User( + null, null, username, email, passwordEncoder.encode(password), + null, null, + "http://localhost:3000/static/images/defaultAvatar.png", + "ta还没有自我介绍喔!", null + ); + + // 需要重新更新一次 nodeId + userMapper.insert(user); + userRepository.save(user); + userMapper.updateById(user); + + // 添加默认权限 + userMapper.insertRoleByUserId(user.getId(), 1); + + // 返回成功的ResponseResult + map.put("state", "success"); + return new ResponseResult(200, "注册成功", map); + } + +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/user/UserDetailsServiceImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/user/UserDetailsServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..ab40524a8b88932191a6da3ed41536f12de6d844 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/user/UserDetailsServiceImpl.java @@ -0,0 +1,43 @@ +package com.deep.cs.service.Impl.user; + + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.deep.cs.mapper.UserMapper; +import com.deep.cs.pojo.user.LoginUser; +import com.deep.cs.pojo.user.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; + +@Service +public class UserDetailsServiceImpl implements UserDetailsService { + + @Autowired + private UserMapper userMapper; + + @Override + public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { + // 使用UserMapper查询用户信息 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(User::getEmail, email); + User user = userMapper.selectOne(queryWrapper); + + // 判断获取的user是否为空 + // 如果为空则抛出异常 + if (Objects.isNull(user)) { + throw new RuntimeException("邮箱或密码错误"); + } + + // 查询用户的权限信息 + // List list = new ArrayList<>(Arrays.asList("test", "admin")); + List list = userMapper.selectMenuByUserId(user.getId()); + + // 把数据封装成UserDetails对象返回 + return new LoginUser(user, list); + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/user/UserInfoServiceImpl.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/user/UserInfoServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..63944248b5cbb94dbc923b3e9c7ffda34e5ade26 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/Impl/user/UserInfoServiceImpl.java @@ -0,0 +1,111 @@ +package com.deep.cs.service.Impl.user; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.deep.cs.mapper.UserMapper; +import com.deep.cs.pojo.user.LoginUser; +import com.deep.cs.pojo.user.User; +import com.deep.cs.service.user.UserInfoService; +import com.deep.cs.utils.MinioUtil; +import com.deep.cs.utils.ResponseResult; +import com.deep.cs.utils.UUIDUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * 操作用户信息类 + * + * @author lzx + * @since 2023.7.8 + */ +@Service +public class UserInfoServiceImpl implements UserInfoService { + + @Autowired + private MinioUtil minioUtil; + + @Autowired + private UUIDUtil uuidUtil; + + @Autowired + private UserMapper userMapper; + + // 获取用户信息 + @Override + public ResponseResult getUserInfo(Integer userId) { + + User user = userMapper.selectById(userId); + if (user == null) { + return new ResponseResult<>(400, "用户不存在", null); + } + + Map map = new HashMap<>(); + map.put("user", user); + + return new ResponseResult<>(200, "获取成功", map); + } + + // 更新用户信息 + @Override + public ResponseResult uploadUserInfo( + String username, Integer gender, Integer age, + MultipartFile avatar, String description + ) throws IOException { + + // 获取SecurityContextHolder中的用户 + UsernamePasswordAuthenticationToken authentication = + (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + User user = loginUser.getUser(); + + // 更新字段(判断是否为空) + if (username != null) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(User::getUsername, username); + User selectUser = userMapper.selectOne(lambdaQueryWrapper); + if (selectUser == null || username.equals(user.getUsername())) { + user.setUsername(username); + } else { + return new ResponseResult<>(400, "用户名被占用", null); + } + } + if (gender != null) { + user.setGender(gender); + } + if (age != null) { + user.setAge(age); + } + if (description != null) { + user.setDescription(description); + } + + // 图片文件上传至minio并生成外链 + String objectName = uuidUtil.getUUID(); + minioUtil.putObject("csdeep", objectName, avatar.getInputStream(), avatar.getContentType()); + String avatarUrl = minioUtil.getObjectURL("csdeep", objectName); + + // 更新用户头像url并更新数据库 + user.setAvatar(avatarUrl); + userMapper.updateById(user); + + return new ResponseResult(200, "上传成功", null); + } + + @Override + public ResponseResult userCount() { + + // 获取所有用户的数量 + int count = userMapper.selectList(null).size(); + + Map map = new HashMap<>(); + map.put("userCount", count); + + return new ResponseResult<>(200, "获取成功", map); + } +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/article/ArticleService.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/article/ArticleService.java new file mode 100644 index 0000000000000000000000000000000000000000..6b3e8e49b4ecb5d2df98fd08e6c5eebb7a1f9c18 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/article/ArticleService.java @@ -0,0 +1,26 @@ +package com.deep.cs.service.article; + +import com.deep.cs.utils.ResponseResult; + +import java.io.UnsupportedEncodingException; +import java.util.List; + +public interface ArticleService { + ResponseResult createArticle(); + + ResponseResult updateArticle(Integer articleId, String title, String content, Integer categoryId, List tags) throws UnsupportedEncodingException; + + ResponseResult deleteArticle(Integer articleId); + + ResponseResult publishArticle(Integer articleId); + + ResponseResult getArticleInfo(Integer articleId); + + ResponseResult getDraftList(); + + ResponseResult getPublishList(Integer userId); + + ResponseResult getAllArticle(Integer page, Integer pageSize, String sortBy); + + ResponseResult getTagList(); +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/checkcode/CheckCodeService.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/checkcode/CheckCodeService.java new file mode 100644 index 0000000000000000000000000000000000000000..14ab045b20d04882908cc67a145d91ca8d2dad20 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/checkcode/CheckCodeService.java @@ -0,0 +1,10 @@ +package com.deep.cs.service.checkcode; + +import com.deep.cs.utils.ResponseResult; + +import java.util.concurrent.Future; + +public interface CheckCodeService { + Future sendCheckCode(String ops, String to); + Future checkCheckCode(String ops, String email, String code); +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/collect/CollectService.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/collect/CollectService.java new file mode 100644 index 0000000000000000000000000000000000000000..1105f0a07ef8fefca85ec50ce58a9c60ff1af051 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/collect/CollectService.java @@ -0,0 +1,13 @@ +package com.deep.cs.service.collect; + +import com.deep.cs.utils.ResponseResult; + +public interface CollectService { + ResponseResult addArticleCollect(Integer articleId); + + ResponseResult deleteArticleCollect(Integer articleId); + + ResponseResult countArticleCollect(Integer articleId); + + ResponseResult checkArticleCollect(Integer articleId); +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/comment/CommentService.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/comment/CommentService.java new file mode 100644 index 0000000000000000000000000000000000000000..1669c5afee29112ddcdb357f07c4cdfd306db72c --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/comment/CommentService.java @@ -0,0 +1,19 @@ +package com.deep.cs.service.comment; + +import com.deep.cs.utils.ResponseResult; + +import java.io.UnsupportedEncodingException; + +public interface CommentService { + ResponseResult addComment(Integer articleId, String content, Integer isReply, Integer replyId) throws UnsupportedEncodingException; + + ResponseResult deleteComment(Integer commentId); + + ResponseResult getCommentInfo(Integer commentId) throws UnsupportedEncodingException; + + ResponseResult getNormalComment(Integer articleId, Integer page, Integer pageSize); + + ResponseResult getReplyComment(Integer commentId); + + ResponseResult countComment(Integer articleId); +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/file/FileUploadService.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/file/FileUploadService.java new file mode 100644 index 0000000000000000000000000000000000000000..0b9ab869c5ca9a7c9e600c2d882290f0b818abcc --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/file/FileUploadService.java @@ -0,0 +1,10 @@ +package com.deep.cs.service.file; + +import com.deep.cs.utils.ResponseResult; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +public interface FileUploadService { + ResponseResult uploadFile(MultipartFile file) throws IOException; +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/follow/FollowService.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/follow/FollowService.java new file mode 100644 index 0000000000000000000000000000000000000000..92045b76e5e65e62ba4b5f458a3a92f1269b2434 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/follow/FollowService.java @@ -0,0 +1,19 @@ +package com.deep.cs.service.follow; + +import com.deep.cs.utils.ResponseResult; + +public interface FollowService { + ResponseResult addFollow(Integer userId); + + ResponseResult deleteFollow(Integer userId); + + ResponseResult countFollowing(Integer userId); + + ResponseResult countFollower(Integer userId); + + ResponseResult getFollowingList(Integer userId); + + ResponseResult getFollowerList(Integer userId); + + ResponseResult checkFollow(Integer userId); +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/like/LikeService.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/like/LikeService.java new file mode 100644 index 0000000000000000000000000000000000000000..e8adfdb760b05288ce930848b8c4b85c4c2013ab --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/like/LikeService.java @@ -0,0 +1,13 @@ +package com.deep.cs.service.like; + +import com.deep.cs.utils.ResponseResult; + +public interface LikeService { + ResponseResult addArticleLike(Integer articleId); + + ResponseResult deleteArticleLike(Integer articleId); + + ResponseResult countArticleLike(Integer articleId); + + ResponseResult checkArticleLike(Integer articleId); +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/login/LoginService.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/login/LoginService.java new file mode 100644 index 0000000000000000000000000000000000000000..4bd4c6689dbfdbb26ce62a84b422792963a318e6 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/login/LoginService.java @@ -0,0 +1,15 @@ +package com.deep.cs.service.login; + +import com.deep.cs.utils.ResponseResult; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeoutException; + +public interface LoginService { + ResponseResult login(String email, String password); + + ResponseResult logout(); + + ResponseResult resetPassword(String email, String checkCode, String password, String confirmPwd) throws ExecutionException, InterruptedException, TimeoutException; +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/register/RegisterService.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/register/RegisterService.java new file mode 100644 index 0000000000000000000000000000000000000000..3a15de867b770f8b2a4d9d4036276d693220af14 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/register/RegisterService.java @@ -0,0 +1,13 @@ +package com.deep.cs.service.register; + +import com.deep.cs.utils.ResponseResult; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; + +public interface RegisterService { + ResponseResult register( + String username, String email, String checkCode, + String password, String confirmPwd + ) throws ExecutionException, InterruptedException, TimeoutException; +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/user/UserInfoService.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/user/UserInfoService.java new file mode 100644 index 0000000000000000000000000000000000000000..1927cef4376e10e751f26e00901cb5ffe2b5f491 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/service/user/UserInfoService.java @@ -0,0 +1,18 @@ +package com.deep.cs.service.user; + +import com.deep.cs.utils.ResponseResult; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.concurrent.Future; + +public interface UserInfoService { + ResponseResult getUserInfo(Integer userId); + + ResponseResult uploadUserInfo( + String username, Integer gender, Integer age, + MultipartFile avatar, String description + ) throws IOException; + + ResponseResult userCount(); +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/JedisUtils.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/JedisUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..a81ac8251af7c3811f0c05e3e1f05696caa97072 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/JedisUtils.java @@ -0,0 +1,40 @@ +package com.deep.cs.utils; + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolConfig; + +import java.util.ResourceBundle; + +/** + * jedis工具类 + * 用于配置jedis + */ +public class JedisUtils { + private static final JedisPool jp; + private static final String host; + private static final int port; + private static final int maxTotal; + private static final int maxIdle; + + // 静态代码块初始化资源 + static { + //读取配置文件 获得参数值 + ResourceBundle rb = ResourceBundle.getBundle("redis"); + host = rb.getString("redis.host"); + port = Integer.parseInt(rb.getString("redis.port")); + maxTotal = Integer.parseInt(rb.getString("redis.maxTotal")); + maxIdle = Integer.parseInt(rb.getString("redis.maxIdle")); + JedisPoolConfig jpc = new JedisPoolConfig(); + jpc.setMaxTotal(maxTotal); + jpc.setMaxIdle(maxIdle); + jp = new JedisPool(jpc, host, port); + } + + /** + * 对外访问接口,提供jedis连接对象,连接从连接池获取 + */ + public static Jedis getJedis() { + return jp.getResource(); + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/JwtUtil.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/JwtUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..6792d8bdc3de8883735006c833425caa83244406 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/JwtUtil.java @@ -0,0 +1,62 @@ +package com.deep.cs.utils; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.JwtBuilder; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.springframework.stereotype.Component; + +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.util.Base64; +import java.util.Date; +import java.util.UUID; + +@Component +public class JwtUtil { + public static final long JWT_TTL = 60 * 60 * 1000L * 24 * 3; // 有效期3天 + public static final String JWT_KEY = "2ya2sbcc00dlesf2gd3oi3pceenqp600z2r99e2s00n6xtpe8ueun3vm3dlw2kunxs0jci2hz0"; + + public static String getUUID() { + return UUID.randomUUID().toString().replaceAll("-", ""); + } + + public static String createJWT(String subject) { + JwtBuilder builder = getJwtBuilder(subject, null, getUUID()); + return builder.compact(); + } + + private static JwtBuilder getJwtBuilder(String subject, Long ttlMillis, String uuid) { + SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; + SecretKey secretKey = generalKey(); + long nowMillis = System.currentTimeMillis(); + Date now = new Date(nowMillis); + if (ttlMillis == null) { + ttlMillis = JwtUtil.JWT_TTL; + } + + long expMillis = nowMillis + ttlMillis; + Date expDate = new Date(expMillis); + return Jwts.builder() + .setId(uuid) + .setSubject(subject) + .setIssuer("sg") + .setIssuedAt(now) + .signWith(signatureAlgorithm, secretKey) + .setExpiration(expDate); + } + + public static SecretKey generalKey() { + byte[] encodeKey = Base64.getDecoder().decode(JwtUtil.JWT_KEY); + return new SecretKeySpec(encodeKey, 0, encodeKey.length, "HmacSHA256"); + } + + public static Claims parseJWT(String jwt) throws Exception { + SecretKey secretKey = generalKey(); + return Jwts.parserBuilder() + .setSigningKey(secretKey) + .build() + .parseClaimsJws(jwt) + .getBody(); + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/MailUtil.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/MailUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..6f9bbc46714746e9c41ce768e87549355ced6a0e --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/MailUtil.java @@ -0,0 +1,34 @@ +package com.deep.cs.utils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.stereotype.Component; + +/** + * 邮件工具类 + * + * @author WA_automat + * @since 1.0 + */ +@Component +public class MailUtil { + + @Autowired(required = false) + private JavaMailSender mailSender; // 引入Spring Mail依赖后,会自动装配到IOC容器。用来发送邮件 + + @Value("${spring.mail.username}") + private String from; + + public String send(String to, String subject, String text) { + SimpleMailMessage mail = new SimpleMailMessage(); + mail.setFrom(from); + mail.setTo(to); + mail.setSubject(subject); + mail.setText(text); + mailSender.send(mail); + return "success"; + } + +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/MinioUtil.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/MinioUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..b6367d904634de0c8f6b48ae41e41a6ddb3cedcb --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/MinioUtil.java @@ -0,0 +1,262 @@ +package com.deep.cs.utils; + +import com.google.common.collect.Lists; +import io.minio.*; +import io.minio.errors.*; +import io.minio.http.Method; +import io.minio.messages.Bucket; +import io.minio.messages.Item; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@Slf4j +@Component +public class MinioUtil { + + private static final int DEFAULT_EXPIRY_TIME = 7 * 24 * 3600; + + @Autowired + private MinioClient minio; + + /** + * 检查存储桶是否存在 + * + * @param bucketName 存储桶名称 + * @return + */ + @SneakyThrows + public boolean bucketExists(String bucketName) { + return minio.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); + } + + /** + * 创建存储桶 + * + * @param bucketName 存储桶名称 + */ + @SneakyThrows + public boolean makeBucket(String bucketName) { + boolean flag = bucketExists(bucketName); + if (flag) { + return true; + } + + minio.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); + return true; + } + + /** + * 列出所有存储桶名称 + * + * @return + */ + @SneakyThrows + public List listBucketNames() { + List list = listBuckets(); + return list.stream().filter(Objects::nonNull).map(Bucket::name).collect(Collectors.toList()); + } + + /** + * 列出所有存储桶 + * + * @return + */ + @SneakyThrows + public List listBuckets() { + return minio.listBuckets(); + } + + /** + * 删除存储桶 + * + * @param bucketName 存储桶名称 + * @return + */ + @SneakyThrows + public boolean removeBucket(String bucketName) { + Iterable> myObjects = listObjects(bucketName); + for (Result result : myObjects) { + Item item = result.get(); + // 有对象文件,则删除失败 + if (item.size() > 0) { + return false; + } + } + // 删除存储桶,注意,只有存储桶为空时才能删除成功。 + minio.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build()); + return !bucketExists(bucketName); + } + + + /** + * 在test桶里创建文件夹对象 + * + * @param fileName + */ + public void createFile(String fileName) { + try { + if (!bucketExists("test")) { + //minio服务器创建桶 + makeBucket("test"); + } + minio.putObject( + PutObjectArgs.builder().bucket("test").object(fileName).stream( + new ByteArrayInputStream(new byte[]{}), 0, -1) + .build()); + } catch (ErrorResponseException | InsufficientDataException | + InternalException | InvalidKeyException | + InvalidResponseException | IOException | + NoSuchAlgorithmException | ServerException | XmlParserException e) { + e.printStackTrace(); + } + } + + /** + * 列出存储桶中的所有对象 + * + * @param bucketName 存储桶名称 + * @return + */ + @SneakyThrows + public Iterable> listObjects(String bucketName) { + return minio.listObjects(ListObjectsArgs.builder().bucket(bucketName).build()); + } + + /** + * 列出存储桶中的所有对象名称 + * + * @param bucketName 存储桶名称 + * @return + */ + @SneakyThrows + public List listObjectNames(String bucketName) { + List ret = Lists.newArrayList(); + Iterable> myObjects = listObjects(bucketName); + for (Result result : myObjects) { + Item item = result.get(); + ret.add(item.objectName()); + } + + return ret; + } + + /** + * 文件上传 + * + * @param bucketName + * @param multipartFile + */ + @SneakyThrows + public ObjectWriteResponse putObject(String bucketName, MultipartFile multipartFile) { + PutObjectArgs args = PutObjectArgs.builder() + .bucket(bucketName) + .object(multipartFile.getName()) + .contentType(multipartFile.getContentType()) + .stream(multipartFile.getInputStream(), multipartFile.getSize(), -1) + .build(); + + return minio.putObject(args); + } + + /** + * 通过InputStream上传对象 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @param in 要上传的流 + * @param contentType 要上传的文件类型 MimeTypeUtils.IMAGE_JPEG_VALUE + * @return + */ + @SneakyThrows + public ObjectWriteResponse putObject(String bucketName, String objectName, InputStream in, String contentType) { + PutObjectArgs args = PutObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .contentType(contentType) + .stream(in, in.available(), -1) + .build(); + + return minio.putObject(args); + } + + /** + * 以流的形式获取一个文件对象 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @return + */ + @SneakyThrows + public InputStream getObject(String bucketName, String objectName) { + boolean flag = bucketExists(bucketName); + if (!flag) { + return null; + } + + StatObjectResponse resp = statObject(bucketName, objectName); + return resp == null + ? null + : minio.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build()); + } + + /** + * 获取对象的元数据 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @return + */ + @SneakyThrows + public StatObjectResponse statObject(String bucketName, String objectName) { + return !bucketExists(bucketName) + ? null + : minio.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build()); + } + + /** + * 删除文件 + * + * @param fileName + * @return + * @throws Exception + */ + @SneakyThrows + public void removeMinio(String fileName) { + try { + minio.removeObject(RemoveObjectArgs.builder().bucket("test").object(fileName).build()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 获取文件外链 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @return url + */ + @SneakyThrows + public String getObjectURL(String bucketName, String objectName) { + GetPresignedObjectUrlArgs build = GetPresignedObjectUrlArgs.builder() + .method(Method.GET) + .bucket(bucketName) + .object(objectName) +// .expiry(60 * 60 * 24) + .build(); + return minio.getPresignedObjectUrl(build); + } +} + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/ResponseResult.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/ResponseResult.java new file mode 100644 index 0000000000000000000000000000000000000000..3c7342761d04cb32f8806a568566d4ed67bd6cea --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/ResponseResult.java @@ -0,0 +1,58 @@ +package com.deep.cs.utils; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 封装了响应报文的信息 + * 后续会使用这个类作为controller的返回值 + * + * @author CCL + * @since 2021年12月24日 + */ +@Data +@NoArgsConstructor +public class ResponseResult { + + private int code; + private String message; + private T data; + /** + * 成功,只能是0 + */ + private static final int SUCCESS_CODE = 200; + public static final String SUCCESS_MESSAGE = "操作成功"; + /** + * 失败 + */ + public static final int FAIL_CODE = 400; + public static final String FAIL_MESSAGE = "操作失败"; + + + public static ResponseResult success(T data) { + return new ResponseResult<>(SUCCESS_CODE, SUCCESS_MESSAGE, data); + } + + public static ResponseResult success(String message, T data) { + return new ResponseResult<>(SUCCESS_CODE, message, data); + } + + public static ResponseResult fail() { + return new ResponseResult<>(FAIL_CODE, FAIL_MESSAGE, null); + } + + public static ResponseResult fail(String message) { + return new ResponseResult<>(FAIL_CODE, message, null); + } + + public static ResponseResult fail(int code, String message) { + return new ResponseResult<>(code, message, null); + } + + public ResponseResult(int code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/UUIDUtil.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/UUIDUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..7ddf8693f1d0a740e24827341019d05d820b9fd2 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/UUIDUtil.java @@ -0,0 +1,36 @@ +package com.deep.cs.utils; + +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * @author : chpyue@foxmail.com + * @date :2018/11/5 6:59 + * @Description: UUID 工具类 + */ +@Component +public class UUIDUtil { + /** + * 获取一个UUID值 + * @return UUID值[String] + */ + public String getUUID(){ + return UUID.randomUUID().toString().replaceAll("-",""); + } + + /** + * 获取多个UUID值 + * @param number 所需个数 + * @return UUID集合 + */ + public List getUUID(Integer number){ + List list = new ArrayList<>(); + while (0 <= (number--)){ + list.add(getUUID()); + } + return list; + } +} diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/WebUtil.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/WebUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..61db5e802a8a97ea31af15cf225c560a9f316a5b --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/java/com/deep/cs/utils/WebUtil.java @@ -0,0 +1,22 @@ +package com.deep.cs.utils; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * web工具类 + * 暂时作为放行静态资源的工具 + * 后续可能继续添加功能 + */ +public class WebUtil { + public static void renderString(HttpServletResponse response, String string) { + response.setStatus(200); + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + try { + response.getWriter().println(string); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/application.properties b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/application.properties new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/application.yml b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..3e347109a6378012f18074d92f7b85fd3a027a5a --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/application.yml @@ -0,0 +1,67 @@ +server: + port: 3000 + +# spring相关配置 +spring: + + # opengauss相关配置 + datasource: + # config mysql + url: jdbc:postgresql://192.168.108.200:5432/db_department + username: opengauss + password: opengauss + driver-class-name: org.postgresql.Driver + + + # redis + redis: + # redis服务器地址 + host: localhost + # redis服务器连接端口 + port: 6379 + # redis数据库索引 + database: 0 + # 连接超时时间 (毫秒) + timeout: 5000 + password: + + # 项目中收发邮件所用的邮箱配置 + mail: + # SMTP服务器 + host: smtp.163.com + # 发送验证码邮箱 + username: cs_deep@163.com + # 该邮箱的密码:FkrVuSLeRL.6yC4 + # 授权码 + password: POLPLCYONFKVLBSN + # 编码 + default-encoding: utf-8 + # 发送邮件时采用ssl安全连接 + properties: + mail: + smtp: + auth: true + ssl: + enable: true + starttls: + enable: true + required: true + # 配置 neo4j + neo4j: + uri: bolt://localhost:7687 + authentication: + username: neo4j + password: Lzx12345 + + data: + # 配置 neo4j + neo4j: + database: neo4j + +# 配置 minio +minio: + endpoint: http://127.0.0.1:9090 #Minio服务所在地址 + bucketName: csdeep #存储桶名称 + accessKey: admin #访问的key + secretKey: admin1234 #访问的秘钥 + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/article/article.sql b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/article/article.sql new file mode 100644 index 0000000000000000000000000000000000000000..affc0d70b1c5c2f68e6041adf417e9ec88beefb8 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/article/article.sql @@ -0,0 +1,20 @@ +create table article +( + id int auto_increment, + nodeId int null, + authorId int not null, + title varchar(100) not null, + content text not null, + categoryId int not null, + createTime timestamp not null, + updateTime timestamp not null, + version int default 1 not null, + draft int default 1 not null, + constraint article_pk + primary key (id) +) + comment '文章表'; + +create unique index article_id_uindex + on article (id); + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/article/category.sql b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/article/category.sql new file mode 100644 index 0000000000000000000000000000000000000000..5ad7424ea0d18bfba5ba1ab6f1a2b8d496e7ff22 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/article/category.sql @@ -0,0 +1,12 @@ +create table category +( + id int auto_increment, + categoryName varchar(1000) not null, + constraint category_pk + primary key (id) +) + comment '类别表'; + +create unique index category_id_uindex + on category (id); + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/article/tag.sql b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/article/tag.sql new file mode 100644 index 0000000000000000000000000000000000000000..4c385daf8bdb53aaa7c8e83aa04729a83e29b318 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/article/tag.sql @@ -0,0 +1,13 @@ +create table tag +( + id int auto_increment, + articleId int not null, + tagName varchar(100) not null, + constraint tag_pk + primary key (id) +) + comment '标签表'; + +create unique index tag_id_uindex + on tag (id); + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/collect/collect.sql b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/collect/collect.sql new file mode 100644 index 0000000000000000000000000000000000000000..2066967c781d159d3a73aa98500ffbc4f1ea42cd --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/collect/collect.sql @@ -0,0 +1,13 @@ +create table collect +( + id int auto_increment, + userId int not null, + articleId int not null, + constraint collect_pk + primary key (id) +) + comment '收藏表'; + +create unique index collect_id_uindex + on collect (id); + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/comment/comment.sql b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/comment/comment.sql new file mode 100644 index 0000000000000000000000000000000000000000..03e5f32ec41502a9d12e836aaff61b35b2fdffda --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/comment/comment.sql @@ -0,0 +1,20 @@ +create table comment +( + id int auto_increment, + content text not null, + authorId int not null, + articleId int not null, + liked int default 0 not null, + createTime timestamp not null, + isReply int not null, + replyId int null, + isNasty int not null, + version int default 1 not null, + constraint comment_pk + primary key (id) +) + comment '评论表'; + +create unique index comment_id_uindex + on comment (id); + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/follow/follow.sql b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/follow/follow.sql new file mode 100644 index 0000000000000000000000000000000000000000..38b86086caf8f1125f7b1adc4f495af14d6bf17e --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/follow/follow.sql @@ -0,0 +1,13 @@ +create table follow +( + id int auto_increment, + followerId int not null, + followedId int not null, + constraint follow_pk + primary key (id) +) + comment '关注关系表'; + +create unique index follow_id_uindex + on follow (id); + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/like/like.sql b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/like/like.sql new file mode 100644 index 0000000000000000000000000000000000000000..00ae4956bb7e06847c1545f85353a6238786c06a --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/like/like.sql @@ -0,0 +1,13 @@ +create table `like` +( + id int auto_increment, + userId int not null, + articleId int not null, + constraint like_pk + primary key (id) +) + comment '点赞表'; + +create unique index like_id_uindex + on `like` (id); + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/menu.sql b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/menu.sql new file mode 100644 index 0000000000000000000000000000000000000000..7e05cf0cc34d99cc63a5e8e5373c6f9e89c64807 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/menu.sql @@ -0,0 +1,13 @@ +create table menu +( + id int auto_increment, + menuKey varchar(100) not null, + menuName varchar(100) not null, + constraint menu_pk + primary key (id) +) + comment '权限表'; + +create unique index menu_id_uindex + on menu (id); + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/role.sql b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/role.sql new file mode 100644 index 0000000000000000000000000000000000000000..dc41f58a54546f4d04e21720d86812121fa5efd3 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/role.sql @@ -0,0 +1,12 @@ +create table role +( + id int auto_increment, + roleName varchar(100) not null, + constraint role_pk + primary key (id) +) + comment '角色表'; + +create unique index role_id_uindex + on role (id); + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/sys_r_m.sql b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/sys_r_m.sql new file mode 100644 index 0000000000000000000000000000000000000000..b06431e2be42568dfa888e075947cf554d6b1555 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/sys_r_m.sql @@ -0,0 +1,13 @@ +create table sys_r_m +( + id int auto_increment, + roleId int not null, + menuId int not null, + constraint sys_r_m_pk + primary key (id) +) + comment '角色权限关联表'; + +create unique index sys_r_m_id_uindex + on sys_r_m (id); + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/sys_u_r.sql b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/sys_u_r.sql new file mode 100644 index 0000000000000000000000000000000000000000..66f630e9bafe55118c1bddd6385fc0e036eca22f --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/sys_u_r.sql @@ -0,0 +1,13 @@ +create table sys_u_r +( + id int auto_increment, + userId int not null, + roleId int not null, + constraint sys_u_r_pk + primary key (id) +) + comment '用户角色关联表'; + +create unique index sys_u_r_id_uindex + on sys_u_r (id); + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/user.sql b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/user.sql new file mode 100644 index 0000000000000000000000000000000000000000..f9ee70f7f5dd5dbd7030c8519933a0be2a88d503 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db/user/user.sql @@ -0,0 +1,20 @@ +create table user +( + id int auto_increment, + username varchar(100) not null, + email varchar(100) not null, + password varchar(100) not null, + gender int default 1 not null, + age int default 18 not null, + avatar varchar(1000) not null, + version int default 1 null, + nodeId int null, + description varchar(1000), + constraint user_pk + primary key (id) +) + comment '用户表'; + +create unique index user_id_uindex + on user (id); + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/mapper/ArticleMapper.xml b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/mapper/ArticleMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..5210a21a87cb9245a8026451a1d28231ac5cda23 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/mapper/ArticleMapper.xml @@ -0,0 +1,32 @@ + + + + + INSERT INTO tag(articleId, tagName) + VALUES (#{articleId}, #{tag}) + + + DELETE FROM tag + WHERE articleId = #{articleId} + + + + + + \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/mapper/CommentMapper.xml b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/mapper/CommentMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..cd49ef387529f1fcafa2a39bcfd77f963c74be77 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/mapper/CommentMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/mapper/UserMapper.xml b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..3e877818849546e5f948f77007d3b63c9740affe --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,71 @@ + + + + + INSERT INTO sys_u_r + (userId, roleId) + VALUES (#{userId}, #{roleId}) + + + INSERT INTO follow + (followerId, followedId) + VALUES (#{userId}, #{followedUserId}) + + + INSERT INTO `like` + (userId, articleId) + VALUES (#{userId}, #{articleId}) + + + INSERT INTO collect + (userId, articleId) + VALUES (#{userId}, #{articleId}) + + + DELETE FROM follow + WHERE followerId = #{userId} AND followedId = #{followedUserId} + + + DELETE FROM `like` + WHERE userId = #{userId} AND articleId = #{articleId} + + + DELETE FROM collect + WHERE userId = #{userId} AND articleId = #{articleId} + + + + + + + + diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/static/images/defaultAvatar.png b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/static/images/defaultAvatar.png new file mode 100644 index 0000000000000000000000000000000000000000..861ba8327283808a5a352af26c71d86b1613678a Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/static/images/defaultAvatar.png differ diff --git a/LinZeXun-examples/CS.DEEP_SpringBoot/src/test/java/com/deep/cs/CsApplicationTests.java b/LinZeXun-examples/CS.DEEP_SpringBoot/src/test/java/com/deep/cs/CsApplicationTests.java new file mode 100644 index 0000000000000000000000000000000000000000..14a4a743e24a5709498fb558337c027e11c5612a --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_SpringBoot/src/test/java/com/deep/cs/CsApplicationTests.java @@ -0,0 +1,86 @@ +package com.deep.cs; + +import com.deep.cs.mapper.ArticleMapper; +import com.deep.cs.mapper.UserMapper; +import com.deep.cs.pojo.article.Article; +import com.deep.cs.pojo.user.User; +import com.deep.cs.repository.article.ArticleRepository; +import com.deep.cs.repository.user.UserRepository; +import com.deep.cs.service.checkcode.CheckCodeService; +import com.deep.cs.utils.MinioUtil; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.neo4j.core.Neo4jTemplate; +import org.springframework.security.crypto.password.PasswordEncoder; + +import java.sql.Timestamp; +import java.text.SimpleDateFormat; + +@SpringBootTest +class CsApplicationTests { + + @Test + void contextLoads() { + System.out.println("hello world!"); + } + + @Autowired + private CheckCodeService checkCodeService; + + /** + * 测试验证码发送 + */ + @Test + void mailTest() { + checkCodeService.sendCheckCode("测试", "1577696824@qq.com"); + } + + @Autowired + private MinioUtil minioUtil; + + /** + * 测试 minio工具类 + */ + @Test + void minioTest() { + System.out.println(minioUtil.listBucketNames()); + } + + @Autowired + private UserRepository userRepository; + + @Autowired + private PasswordEncoder passwordEncoder; + + /** + * 测试 neo4j + */ + @Test + void neo4jTest() { + System.out.println(userRepository.findAll()); + } + + @Autowired + private UserMapper userMapper; + + @Autowired + private ArticleRepository articleRepository; + + @Autowired + private ArticleMapper articleMapper; + + @Test + void articleTest() { + + Article article = new Article(null, null, 14, + "测试文章", "测试文章内容", 1, + new Timestamp(System.currentTimeMillis()), new Timestamp(System.currentTimeMillis()), + null, null); + + articleMapper.insert(article); +// articleRepository.save(article); + } + + +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/.eslintrc.cjs b/LinZeXun-examples/CS.DEEP_Vue3/.eslintrc.cjs new file mode 100644 index 0000000000000000000000000000000000000000..dbffa8be7e8bece22f7c1fbfb93468b8128a70ee --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/.eslintrc.cjs @@ -0,0 +1,23 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution') + +module.exports = { + root: true, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-typescript', + '@vue/eslint-config-prettier/skip-formatting', + + ], + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + parser: '@typescript-eslint/parser', + jsxPragma: 'Vue', + ecmaFeatures:{ + jsx:true, + }, + }, + +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/.gitignore b/LinZeXun-examples/CS.DEEP_Vue3/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..38adffa64e8300a31b749218081149e1fe3deaaa --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/LinZeXun-examples/CS.DEEP_Vue3/.prettierrc.json b/LinZeXun-examples/CS.DEEP_Vue3/.prettierrc.json new file mode 100644 index 0000000000000000000000000000000000000000..66e23359c3dabfe3929b4e2fa049c41037afb15f --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "none" +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_Vue3/.vscode/extensions.json b/LinZeXun-examples/CS.DEEP_Vue3/.vscode/extensions.json new file mode 100644 index 0000000000000000000000000000000000000000..c0a6e5a48110e472b09d68afa2a030af6ab3208b --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/README.md b/LinZeXun-examples/CS.DEEP_Vue3/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5e9ae2dbab9b8c09be48aa87b57e779e9c5fc8d3 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/README.md @@ -0,0 +1,17 @@ +## CS.DEEP论坛前端项目 + +### 技术栈 + +--- + +1. 基于vite + ElementUI Plus + TypeScript + sass 构建的vue3项目 +2. vuex + vuex-persistedstate持久化插件 +3. vue-router +4. axios网络请求库 +5. mavon-editor + marked + highlight.js实现markdown的编写与html解析 + +### 项目启动 +* cd CS.DEEP_Vue3 进入根目录 +* npm install 下载依赖项 +* npm run dev 运行项目 +* main为项目主分支,成员主要在dev分支上开发 diff --git a/LinZeXun-examples/CS.DEEP_Vue3/auto-imports.d.ts b/LinZeXun-examples/CS.DEEP_Vue3/auto-imports.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..918aad88084b5f3573e72b56518eb8210dd24e45 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/auto-imports.d.ts @@ -0,0 +1,8 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-auto-import +export {} +declare global { + +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/components.d.ts b/LinZeXun-examples/CS.DEEP_Vue3/components.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8f4a18c16fbb497deb466a8685ef39782f5d10c4 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/components.d.ts @@ -0,0 +1,46 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +export {} + +declare module 'vue' { + export interface GlobalComponents { + ArticleHtml: typeof import('./src/components/common/ArticleHtml.vue')['default'] + AvatarAndUsername: typeof import('./src/components/mini/AvatarAndUsername.vue')['default'] + CalendarHeatmap: typeof import('./src/components/common/CalendarHeatmap.vue')['default'] + ElAffix: typeof import('element-plus/es')['ElAffix'] + ElAside: typeof import('element-plus/es')['ElAside'] + ElAvatar: typeof import('element-plus/es')['ElAvatar'] + ElButton: typeof import('element-plus/es')['ElButton'] + ElContainer: typeof import('element-plus/es')['ElContainer'] + ElDialog: typeof import('element-plus/es')['ElDialog'] + ElDropdown: typeof import('element-plus/es')['ElDropdown'] + ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] + ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu'] + ElHeader: typeof import('element-plus/es')['ElHeader'] + ElIcon: typeof import('element-plus/es')['ElIcon'] + ElImage: typeof import('element-plus/es')['ElImage'] + ElInput: typeof import('element-plus/es')['ElInput'] + ElMain: typeof import('element-plus/es')['ElMain'] + ElMenu: typeof import('element-plus/es')['ElMenu'] + ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] + ElPagination: typeof import('element-plus/es')['ElPagination'] + ElPopover: typeof import('element-plus/es')['ElPopover'] + ElTooltip: typeof import('element-plus/es')['ElTooltip'] + FooterBar: typeof import('./src/components/common/FooterBar.vue')['default'] + IconCommunity: typeof import('./src/components/icons/IconCommunity.vue')['default'] + IconDocumentation: typeof import('./src/components/icons/IconDocumentation.vue')['default'] + IconEcosystem: typeof import('./src/components/icons/IconEcosystem.vue')['default'] + IconSupport: typeof import('./src/components/icons/IconSupport.vue')['default'] + IconTooling: typeof import('./src/components/icons/IconTooling.vue')['default'] + RegisterAndLogin: typeof import('./src/components/mini/RegisterAndLogin.vue')['default'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + SvgIcon: typeof import('./src/components/SvgIcon/index.vue')['default'] + TopNavBar: typeof import('./src/components/common/TopNavBar.vue')['default'] + UserCard: typeof import('./src/components/common/UserCard.vue')['default'] + WordCloud: typeof import('./src/components/mini/WordCloud.vue')['default'] + } +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/env.d.ts b/LinZeXun-examples/CS.DEEP_Vue3/env.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..11f02fe2a0061d6e6e1f271b21da95423b448b32 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/LinZeXun-examples/CS.DEEP_Vue3/index.html b/LinZeXun-examples/CS.DEEP_Vue3/index.html new file mode 100644 index 0000000000000000000000000000000000000000..8205d4638f6ac2735181fa8254e9b8a964ad9e2b --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/index.html @@ -0,0 +1,20 @@ + + + + + + + CS.DEEP + + +
+ + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/package-lock.json b/LinZeXun-examples/CS.DEEP_Vue3/package-lock.json new file mode 100644 index 0000000000000000000000000000000000000000..ca66074579e820cfaba353ab4f176e168c4ec11a --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/package-lock.json @@ -0,0 +1,11611 @@ +{ + "name": "cs-deep-vue3", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "cs-deep-vue3", + "version": "0.0.0", + "dependencies": { + "@element-plus/icons": "^0.0.11", + "@element-plus/icons-vue": "^2.1.0", + "@types/marked": "^5.0.1", + "axios": "^1.4.0", + "echarts": "^5.4.2", + "element-plus": "^2.3.7", + "highlight.js": "^11.8.0", + "marked": "^6.0.0", + "mavon-editor": "^3.0.1", + "moment": "^2.29.4", + "node-sass": "^8.0.0", + "sass": "^1.63.6", + "vue": "^3.3.2", + "vue-router": "^4.2.0", + "vue3-cropper": "^0.4.0", + "vuex": "^4.1.0", + "vuex-persistedstate": "^4.1.0" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.2.0", + "@tsconfig/node18": "^2.0.1", + "@types/jsdom": "^21.1.1", + "@types/node": "^18.16.8", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + "@vue/eslint-config-prettier": "^7.1.0", + "@vue/eslint-config-typescript": "^11.0.3", + "@vue/test-utils": "^2.3.2", + "@vue/tsconfig": "^0.4.0", + "eslint": "^8.39.0", + "eslint-plugin-vue": "^9.11.0", + "jsdom": "^22.0.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.8.8", + "sass-resources-loader": "^2.2.5", + "typescript": "~5.0.4", + "unplugin-auto-import": "^0.16.4", + "unplugin-vue-components": "^0.25.1", + "vite": "^4.3.5", + "vite-plugin-svg-icons": "^2.0.1", + "vitest": "^0.31.0", + "vue-tsc": "^1.6.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.4.tgz", + "integrity": "sha512-qe8Nmh9rYI/HIspLSTwtbMFPj6dISG6+dJnOguTlPNXtCvS2uezdxscVBb7/3DrmNbQK49TDqpkSQ1chbRGdpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/compat-data/-/compat-data-7.22.3.tgz", + "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/core/-/core-7.22.1.tgz", + "integrity": "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.22.0", + "@babel/helper-compilation-targets": "^7.22.1", + "@babel/helper-module-transforms": "^7.22.1", + "@babel/helpers": "^7.22.0", + "@babel/parser": "^7.22.0", + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/generator/-/generator-7.22.3.tgz", + "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.3", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", + "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.0", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.1.tgz", + "integrity": "sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.22.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.22.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", + "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.3.tgz", + "integrity": "sha512-Gl7sK04b/2WOb6OPVeNy9eFKeD3L6++CzL3ykPOWqTn08xgYYK0wz4TUh2feIImDXxcVW3/9WQ1NMKY66/jfZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.21.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", + "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", + "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-simple-access": "^7.21.5", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.21.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", + "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-replace-supers/-/helper-replace-supers-7.22.1.tgz", + "integrity": "sha512-ut4qrkE4AuSfrwHSps51ekR1ZY/ygrP1tp0WFm8oVq6nzc/hvfV/22JylndIbsf2U2M9LOMwiSddr6y+78j+OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-member-expression-to-functions": "^7.22.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.21.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", + "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.21.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", + "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.21.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/helpers/-/helpers-7.22.3.tgz", + "integrity": "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/parser/-/parser-7.22.3.tgz", + "integrity": "sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw==", + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.21.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.21.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", + "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.22.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.3.tgz", + "integrity": "sha512-pyjnCIniO5PNaEuGxT28h0HbMru3qCVrMqVgVOz/krComdIrY9W6FCLBq9NWHY8HDGaUlan+UhmZElDENIfCcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-typescript": "^7.21.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.21.9", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/template/-/template-7.21.9.tgz", + "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.21.4", + "@babel/parser": "^7.21.9", + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/traverse/-/traverse-7.22.1.tgz", + "integrity": "sha512-lAWkdCoUFnmwLBhIRLciFntGYsIIoC6vIbN8zrLPqBnJmPu7Z6nzqnKd7FsxQUNAvZfVZ0x6KdNvNp8zWIOHSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.22.0", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.22.0", + "@babel/types": "^7.22.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/types/-/types-7.22.3.tgz", + "integrity": "sha512-P3na3xIQHTKY4L0YOG7pM8M8uoUIB910WQaSiiMCZUC2Cy8XFEQONGABFnHWBa2gpGKODTAJcNhi5Zk0sLRrzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.21.5", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz", + "integrity": "sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@element-plus/icons/-/icons-0.0.11.tgz", + "integrity": "sha512-iKQXSxXu131Ai+I9Ymtcof9WId7kaXvB1+WRfAfpQCW7UiAMYgdNDqb/u0hgTo2Yq3MwC4MWJnNuTBEpG8r7+A==", + "deprecated": "Please use @element-plus/icons-vue instead." + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz", + "integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.41.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@eslint/js/-/js-8.41.0.tgz", + "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.2.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/@floating-ui/core/-/core-1.2.6.tgz", + "integrity": "sha512-EvYTiXet5XqweYGClEmpu3BoxmsQ4hkj3QaYA6qEnigCWffTP3vNRwBReTdrwDwo7OoJ3wM8Uoe9Uk4n+d4hfg==", + "license": "MIT" + }, + "node_modules/@floating-ui/dom": { + "version": "1.2.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/@floating-ui/dom/-/dom-1.2.8.tgz", + "integrity": "sha512-XLwhYV90MxiHDq6S0rzFZj00fnDM+A1R9jhSioZoMsa7G0Q0i+Q4x40ajR8FHSdYDE1bgjG45mIWe6jtv9UPmg==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.2.6" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/fs/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/fs/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@rushstack/eslint-patch/-/eslint-patch-1.3.0.tgz", + "integrity": "sha512-IthPJsJR85GhOkp3Hvp8zFOPK5ynKn6STyHa/WZpioK7E1aYDiBzpqQPrngc14DszIUkIrdd3k9Iu0XSzlP/1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tsconfig/node18": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@tsconfig/node18/-/node18-2.0.1.tgz", + "integrity": "sha512-UqdfvuJK0SArA2CxhKWwwAWfnVSXiYe63bVpMutc27vpngCntGUZQETO24pEJ46zU6XM+7SpqYoMgcO3bM11Ew==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "4.3.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/jsdom": { + "version": "21.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/jsdom/-/jsdom-21.1.1.tgz", + "integrity": "sha512-cZFuoVLtzKP3gmq9eNosUL1R50U+USkbLtUQ1bYVgl/lKp0FZM7Cq4aIHAL8oIvQ17uSHi7jXPtfDOdjPwBE7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.14.195", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/lodash/-/lodash-4.14.195.tgz", + "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/lodash-es/-/lodash-es-4.17.7.tgz", + "integrity": "sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/marked": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-5.0.1.tgz", + "integrity": "sha512-Y3pAUzHKh605fN6fvASsz5FDSWbZcs/65Q6xYRmnIP9ZIYz27T4IOmXfH9gWJV1dpi7f1e7z7nBGUTx/a0ptpA==" + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.16.13", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/node/-/node-18.16.13.tgz", + "integrity": "sha512-uZRomboV1vBL61EBXneL4j9/hEn+1Yqa4LQdpGrKmXFyJmVfWc9JV9+yb2AlnOnuaDnb2PDO3hC6/LKmzJxP1A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/svgo": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-2.6.4.tgz", + "integrity": "sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.59.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", + "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/type-utils": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.59.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/parser/-/parser-5.59.7.tgz", + "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", + "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.59.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", + "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.59.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/types/-/types-5.59.7.tgz", + "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", + "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.59.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/utils/-/utils-5.59.7.tgz", + "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", + "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.59.7", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz", + "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "3.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.0.1.tgz", + "integrity": "sha512-+Jb7ggL48FSPS1uhPnJbJwWa9Sr90vQ+d0InW+AhBM22n+cfuYqJZDckBc+W3QSHe1WDvewMZfa4wZOtk5pRgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.20.7", + "@babel/plugin-transform-typescript": "^7.20.7", + "@vue/babel-plugin-jsx": "^1.1.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "0.31.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vitest/expect/-/expect-0.31.1.tgz", + "integrity": "sha512-BV1LyNvhnX+eNYzJxlHIGPWZpwJFZaCcOIzp2CNG0P+bbetenTupk6EO0LANm4QFt0TTit+yqx7Rxd1qxi/SQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "0.31.1", + "@vitest/utils": "0.31.1", + "chai": "^4.3.7" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.31.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vitest/runner/-/runner-0.31.1.tgz", + "integrity": "sha512-imWuc82ngOtxdCUpXwtEzZIuc1KMr+VlQ3Ondph45VhWoQWit5yvG/fFcldbnCi8DUuFi+NmNx5ehMUw/cGLUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "0.31.1", + "concordance": "^5.0.4", + "p-limit": "^4.0.0", + "pathe": "^1.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "0.31.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vitest/snapshot/-/snapshot-0.31.1.tgz", + "integrity": "sha512-L3w5uU9bMe6asrNzJ8WZzN+jUTX4KSgCinEJPXyny0o90fG4FPQMV0OWsq7vrCWfQlAilMjDnOF9nP8lidsJ+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "pretty-format": "^27.5.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "0.31.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vitest/spy/-/spy-0.31.1.tgz", + "integrity": "sha512-1cTpt2m9mdo3hRLDyCG2hDQvRrePTDgEJBFQQNz1ydHHZy03EiA6EpFxY+7ODaY7vMRCie+WlFZBZ0/dQWyssQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^2.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "0.31.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vitest/utils/-/utils-0.31.1.tgz", + "integrity": "sha512-yFyRD5ilwojsZfo3E0BnH72pSVSuLg2356cN1tCEe/0RtDzxTPYwOomIC+eQbot7m6DRy4tPZw+09mB7NkbMmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "concordance": "^5.0.4", + "loupe": "^2.3.6", + "pretty-format": "^27.5.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@volar/language-core": { + "version": "1.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@volar/language-core/-/language-core-1.4.1.tgz", + "integrity": "sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "1.4.1" + } + }, + "node_modules/@volar/source-map": { + "version": "1.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@volar/source-map/-/source-map-1.4.1.tgz", + "integrity": "sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "muggle-string": "^0.2.2" + } + }, + "node_modules/@volar/typescript": { + "version": "1.4.1-patch.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@volar/typescript/-/typescript-1.4.1-patch.2.tgz", + "integrity": "sha512-lPFYaGt8OdMEzNGJJChF40uYqMO4Z/7Q9fHPQC/NRVtht43KotSXLrkPandVVMf9aPbiJ059eAT+fwHGX16k4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "1.4.1" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@volar/vue-language-core": { + "version": "1.6.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/@volar/vue-language-core/-/vue-language-core-1.6.5.tgz", + "integrity": "sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "1.4.1", + "@volar/source-map": "1.4.1", + "@vue/compiler-dom": "^3.3.0", + "@vue/compiler-sfc": "^3.3.0", + "@vue/reactivity": "^3.3.0", + "@vue/shared": "^3.3.0", + "minimatch": "^9.0.0", + "muggle-string": "^0.2.2", + "vue-template-compiler": "^2.7.14" + } + }, + "node_modules/@volar/vue-language-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@volar/vue-language-core/node_modules/minimatch": { + "version": "9.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-9.0.0.tgz", + "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@volar/vue-typescript": { + "version": "1.6.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/@volar/vue-typescript/-/vue-typescript-1.6.5.tgz", + "integrity": "sha512-er9rVClS4PHztMUmtPMDTl+7c7JyrxweKSAEe/o/Noeq2bQx6v3/jZHVHBe8ZNUti5ubJL/+Tg8L3bzmlalV8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "1.4.1-patch.2", + "@volar/vue-language-core": "1.6.5" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-core/-/compiler-core-3.3.4.tgz", + "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.21.3", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", + "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", + "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-ssr": "3.3.4", + "@vue/reactivity-transform": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0", + "postcss": "^8.1.10", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", + "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/devtools-api/-/devtools-api-6.5.0.tgz", + "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==", + "license": "MIT" + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "7.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", + "integrity": "sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0" + }, + "peerDependencies": { + "eslint": ">= 7.28.0", + "prettier": ">= 2.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "11.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz", + "integrity": "sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.59.1", + "@typescript-eslint/parser": "^5.59.1", + "vue-eslint-parser": "^9.1.1" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", + "eslint-plugin-vue": "^9.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/reactivity/-/reactivity-3.3.4.tgz", + "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", + "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/runtime-core/-/runtime-core-3.3.4.tgz", + "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", + "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", + "license": "MIT", + "dependencies": { + "@vue/runtime-core": "3.3.4", + "@vue/shared": "3.3.4", + "csstype": "^3.1.1" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/server-renderer/-/server-renderer-3.3.4.tgz", + "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.3.4", + "@vue/shared": "3.3.4" + }, + "peerDependencies": { + "vue": "3.3.4" + } + }, + "node_modules/@vue/shared": { + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/shared/-/shared-3.3.4.tgz", + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", + "license": "MIT" + }, + "node_modules/@vue/test-utils": { + "version": "2.3.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/test-utils/-/test-utils-2.3.2.tgz", + "integrity": "sha512-hJnVaYhbrIm0yBS0+e1Y0Sj85cMyAi+PAbK4JHqMRUZ6S622Goa+G7QzkRSyvCteG8wop7tipuEbHoZo26wsSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-beautify": "1.14.6" + }, + "optionalDependencies": { + "@vue/compiler-dom": "^3.0.1", + "@vue/server-renderer": "^3.0.1" + }, + "peerDependencies": { + "@vue/compiler-dom": "^3.0.1", + "@vue/server-renderer": "^3.0.1", + "vue": "^3.0.1" + } + }, + "node_modules/@vue/tsconfig": { + "version": "0.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/tsconfig/-/tsconfig-0.4.0.tgz", + "integrity": "sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "license": "MIT", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "license": "ISC" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/async-foreach": { + "version": "0.1.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==", + "engines": { + "node": "*" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/blueimp-md5": { + "version": "2.19.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/blueimp-md5/-/blueimp-md5-2.19.0.tgz", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://repo.huaweicloud.com/repository/npm/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001489", + "resolved": "https://repo.huaweicloud.com/repository/npm/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz", + "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "4.3.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/concordance": { + "version": "5.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/concordance/-/concordance-5.0.4.tgz", + "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "date-time": "^3.1.0", + "esutils": "^2.0.3", + "fast-diff": "^1.2.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.15", + "md5-hex": "^3.0.1", + "semver": "^7.3.2", + "well-known-symbols": "^2.0.0" + }, + "engines": { + "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" + } + }, + "node_modules/concordance/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/concordance/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/concordance/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://repo.huaweicloud.com/repository/npm/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.1.tgz", + "integrity": "sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/css-select/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/css-select/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==" + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/cssstyle": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/date-time": { + "version": "3.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/date-time/-/date-time-3.1.0.tgz", + "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "time-zone": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dayjs": { + "version": "1.11.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", + "license": "MIT" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/echarts": { + "version": "5.4.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/echarts/-/echarts-5.4.2.tgz", + "integrity": "sha512-2W3vw3oI2tWJdyAz+b8DuWS0nfXtSDqlDmqgin/lfzbkB01cuMEN66KWBlmur3YMp5nEDEEt5s23pllnAzB4EA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.4.3" + } + }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, + "node_modules/editorconfig": { + "version": "0.15.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "bin": { + "editorconfig": "bin/editorconfig" + } + }, + "node_modules/editorconfig/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/editorconfig/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/editorconfig/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.411", + "resolved": "https://repo.huaweicloud.com/repository/npm/electron-to-chromium/-/electron-to-chromium-1.4.411.tgz", + "integrity": "sha512-5VXLW4Qw89vM2WTICHua/y8v7fKGDRVa2VPOtBB9IpLvW316B+xd8yD1wTmLPY2ot/00P/qt87xdolj4aG/Lzg==", + "dev": true, + "license": "ISC" + }, + "node_modules/element-plus": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.3.7.tgz", + "integrity": "sha512-h6TxclbaLUJxg/Bv5j/ZKsK+K5yadQliw5+R30HWyE69pXlqXTX24oYx+yw3pA4Dy+lqEDi5501FQ0CORk3OSA==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.0.6", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.3", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://repo.huaweicloud.com/repository/npm/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.21.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "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.0", + "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.4.3", + "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-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.41.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/eslint/-/eslint-8.41.0.tgz", + "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.41.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.14.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-plugin-vue/-/eslint-plugin-vue-9.14.1.tgz", + "integrity": "sha512-LQazDB1qkNEKejLe/b5a9VfEbtbczcOaui5lQ4Qw0tbRBbQYREyxxOV5BQgNDTqGPs9pxqiEpbMi9ywuIaF7vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.3.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", + "semver": "^7.3.5", + "vue-eslint-parser": "^9.3.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-vue/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://repo.huaweicloud.com/repository/npm/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "license": "MIT", + "dependencies": { + "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globule": { + "version": "1.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/globule/-/globule-1.3.4.tgz", + "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", + "license": "MIT", + "dependencies": { + "glob": "~7.1.1", + "lodash": "^4.17.21", + "minimatch": "~3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/globule/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globule/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://repo.huaweicloud.com/repository/npm/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC" + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz", + "integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://repo.huaweicloud.com/repository/npm/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "license": "ISC" + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "node_modules/htmlparser2/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "license": "MIT" + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "license": "MIT" + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + }, + "node_modules/js-beautify": { + "version": "1.14.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/js-beautify/-/js-beautify-1.14.6.tgz", + "integrity": "sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "config-chain": "^1.1.13", + "editorconfig": "^0.15.3", + "glob": "^8.0.3", + "nopt": "^6.0.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-string-escape": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "22.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://repo.huaweicloud.com/repository/npm/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://repo.huaweicloud.com/repository/npm/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/make-fetch-happen/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/marked": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-6.0.0.tgz", + "integrity": "sha512-7E3m/xIlymrFL5gWswIT4CheIE3fDeh51NV09M4x8iOc7NDYlyERcQMLAIHcSlrvwliwbPQ4OGD+MpPSYiQcqw==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 16" + } + }, + "node_modules/mavon-editor": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mavon-editor/-/mavon-editor-3.0.1.tgz", + "integrity": "sha512-973cYCwv+AB+fcecsU6Ua6UXATxDMaY0Q7QzKQ/GmRW1sg+3DolZDnCGXth7XHDgrmqKTO57N42fVYujt0wfFw==", + "dependencies": { + "xss": "^1.0.10" + } + }, + "node_modules/md5-hex": { + "version": "3.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/md5-hex/-/md5-hex-3.0.1.tgz", + "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", + "dev": true, + "license": "MIT", + "dependencies": { + "blueimp-md5": "^2.10.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/merge-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", + "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://repo.huaweicloud.com/repository/npm/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "license": "MIT", + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mlly": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.0.tgz", + "integrity": "sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.1.2" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.2.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/muggle-string/-/muggle-string-0.2.2.tgz", + "integrity": "sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://repo.huaweicloud.com/repository/npm/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-sass": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-8.0.0.tgz", + "integrity": "sha512-jPzqCF2/e6JXw6r3VxfIqYc8tKQdkj5Z/BDATYyG6FL6b/LuYBNFGFVhus0mthcWifHm/JzBpKAd+3eXsWeK/A==", + "hasInstallScript": true, + "dependencies": { + "async-foreach": "^0.1.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "make-fetch-happen": "^10.0.4", + "meow": "^9.0.0", + "nan": "^2.17.0", + "node-gyp": "^8.4.1", + "sass-graph": "^4.0.1", + "stdout-stream": "^1.4.0", + "true-case-path": "^2.2.1" + }, + "bin": { + "node-sass": "bin/node-sass" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/node-sass/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sass/node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sass/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/node-sass/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-sass/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sass/node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-sass/node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-sass/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/node-sass/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/node-sass/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/node-sass/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/node-sass/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-sass/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/node-sass/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/node-sass/node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sass/node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/node-sass/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-sass/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-sass/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-sass/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/node-sass/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sass/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-sass/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sass/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/nwsapi/-/nwsapi-2.2.5.tgz", + "integrity": "sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-visit/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://repo.huaweicloud.com/repository/npm/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-prefix-selector": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.0.tgz", + "integrity": "sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==", + "dev": true, + "peerDependencies": { + "postcss": ">4 <9" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://repo.huaweicloud.com/repository/npm/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/posthtml": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz", + "integrity": "sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==", + "dev": true, + "dependencies": { + "posthtml-parser": "^0.2.0", + "posthtml-render": "^1.0.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz", + "integrity": "sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==", + "dev": true, + "dependencies": { + "htmlparser2": "^3.8.3", + "isobject": "^2.1.0" + } + }, + "node_modules/posthtml-rename-id": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz", + "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "1.0.5" + } + }, + "node_modules/posthtml-render": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/posthtml-svg-mode": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz", + "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==", + "dev": true, + "dependencies": { + "merge-options": "1.0.1", + "posthtml": "^0.9.2", + "posthtml-parser": "^0.2.1", + "posthtml-render": "^1.0.6" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "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" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.23.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/rollup/-/rollup-3.23.0.tgz", + "integrity": "sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.63.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz", + "integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-graph": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz", + "integrity": "sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==", + "dependencies": { + "glob": "^7.0.0", + "lodash": "^4.17.11", + "scss-tokenizer": "^0.4.3", + "yargs": "^17.2.1" + }, + "bin": { + "sassgraph": "bin/sassgraph" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/sass-graph/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sass-resources-loader": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz", + "integrity": "sha512-po8rfETH9cOQACWxubT/1CCu77KjxwRtCDm6QAXZH99aUHBydwSoxdIjC40SGp/dcS/FkSNJl0j1VEojGZqlvQ==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.1.0", + "glob": "^7.1.6", + "loader-utils": "^2.0.0" + } + }, + "node_modules/sass-resources-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/sass-resources-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/sass-resources-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/sass-resources-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/sass-resources-loader/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sass-resources-loader/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sass-resources-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-resources-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scss-tokenizer": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz", + "integrity": "sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==", + "dependencies": { + "js-base64": "^2.4.9", + "source-map": "^0.7.3" + } + }, + "node_modules/scss-tokenizer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/scule": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.0.0.tgz", + "integrity": "sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shvl": { + "version": "2.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/shvl/-/shvl-2.0.3.tgz", + "integrity": "sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw==", + "deprecated": "older versions vulnerable to prototype pollution", + "license": "MIT" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/sigmund": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "license": "MIT", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "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" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://repo.huaweicloud.com/repository/npm/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://repo.huaweicloud.com/repository/npm/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "license": "CC0-1.0" + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/std-env": { + "version": "3.3.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/std-env/-/std-env-3.3.3.tgz", + "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/stdout-stream": { + "version": "1.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/strip-literal/-/strip-literal-1.0.1.tgz", + "integrity": "sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.8.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-baker": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz", + "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "clone": "^2.1.1", + "he": "^1.1.1", + "image-size": "^0.5.1", + "loader-utils": "^1.1.0", + "merge-options": "1.0.1", + "micromatch": "3.1.0", + "postcss": "^5.2.17", + "postcss-prefix-selector": "^1.6.0", + "posthtml-rename-id": "^1.0", + "posthtml-svg-mode": "^1.0.3", + "query-string": "^4.3.2", + "traverse": "^0.6.6" + } + }, + "node_modules/svg-baker/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/chalk/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svg-baker/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/micromatch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz", + "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.2.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "extglob": "^2.0.2", + "fragment-cache": "^0.2.1", + "kind-of": "^5.0.2", + "nanomatch": "^1.2.1", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/svg-baker/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svg-baker/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://repo.huaweicloud.com/repository/npm/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/terser": { + "version": "5.17.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/terser/-/terser-5.17.6.tgz", + "integrity": "sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/time-zone": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/time-zone/-/time-zone-1.0.0.tgz", + "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tinybench": { + "version": "2.5.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/tinybench/-/tinybench-2.5.0.tgz", + "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "0.5.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/tinypool/-/tinypool-0.5.0.tgz", + "integrity": "sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/tinyspy/-/tinyspy-2.1.0.tgz", + "integrity": "sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/ufo": { + "version": "1.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/ufo/-/ufo-1.1.2.tgz", + "integrity": "sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unimport": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.0.11.tgz", + "integrity": "sha512-UaaLu7TiqiEwjm5a9FGsL8RL87U65wyr1jBeIAAvLChgJZRMTTkknU9bkWjBsVGutXLT2Yq8/dPyWXSC3/ELRg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.2", + "escape-string-regexp": "^5.0.0", + "fast-glob": "^3.2.12", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "scule": "^1.0.0", + "strip-literal": "^1.0.1", + "unplugin": "^1.3.1" + } + }, + "node_modules/unimport/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "license": "ISC", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unplugin": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.3.1.tgz", + "integrity": "sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.2", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.5.0" + } + }, + "node_modules/unplugin-auto-import": { + "version": "0.16.4", + "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.16.4.tgz", + "integrity": "sha512-xdgBa9NAS3JG8HjkAZHSbGSMlrjKpaWKXGUzaF6RzEtr980RCl1t0Zsu0skUInNYrEQfqaHc7aGWPv41DLTK/w==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.2", + "@rollup/pluginutils": "^5.0.2", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "minimatch": "^9.0.1", + "unimport": "^3.0.7", + "unplugin": "^1.3.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.2", + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unplugin-auto-import/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/unplugin-auto-import/node_modules/minimatch": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/unplugin-vue-components": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.25.1.tgz", + "integrity": "sha512-kzS2ZHVMaGU2XEO2keYQcMjNZkanDSGDdY96uQT9EPe+wqSZwwgbFfKVJ5ti0+8rGAcKHColwKUvctBhq2LJ3A==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.4", + "@rollup/pluginutils": "^5.0.2", + "chokidar": "^3.5.3", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "minimatch": "^9.0.1", + "resolve": "^1.22.2", + "unplugin": "^1.3.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@babel/parser": "^7.15.8", + "@nuxt/kit": "^3.2.2", + "vue": "2 || 3" + }, + "peerDependenciesMeta": { + "@babel/parser": { + "optional": true + }, + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-components/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/unplugin-vue-components/node_modules/minimatch": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/unplugin/node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://repo.huaweicloud.com/repository/npm/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://repo.huaweicloud.com/repository/npm/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.3.9", + "resolved": "https://repo.huaweicloud.com/repository/npm/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "0.31.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/vite-node/-/vite-node-0.31.1.tgz", + "integrity": "sha512-BajE/IsNQ6JyizPzu9zRgHrBwczkAs0erQf/JRpgTIESpKvNj9/Gd0vxX905klLkb0I0SJVCKbdrl5c6FnqYKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.2.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-plugin-svg-icons": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vite-plugin-svg-icons/-/vite-plugin-svg-icons-2.0.1.tgz", + "integrity": "sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==", + "dev": true, + "dependencies": { + "@types/svgo": "^2.6.1", + "cors": "^2.8.5", + "debug": "^4.3.3", + "etag": "^1.8.1", + "fs-extra": "^10.0.0", + "pathe": "^0.2.0", + "svg-baker": "1.7.0", + "svgo": "^2.8.0" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vite-plugin-svg-icons/node_modules/pathe": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz", + "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", + "dev": true + }, + "node_modules/vitest": { + "version": "0.31.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/vitest/-/vitest-0.31.1.tgz", + "integrity": "sha512-/dOoOgzoFk/5pTvg1E65WVaobknWREN15+HF+0ucudo3dDG/vCZoXTQrjIfEaWvQXmqScwkRodrTbM/ScMpRcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.31.1", + "@vitest/runner": "0.31.1", + "@vitest/snapshot": "0.31.1", + "@vitest/spy": "0.31.1", + "@vitest/utils": "0.31.1", + "acorn": "^8.8.2", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.7", + "concordance": "^5.0.4", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "std-env": "^3.3.2", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.5.0", + "vite": "^3.0.0 || ^4.0.0", + "vite-node": "0.31.1", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue/-/vue-3.3.4.tgz", + "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-sfc": "3.3.4", + "@vue/runtime-dom": "3.3.4", + "@vue/server-renderer": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-eslint-parser/-/vue-eslint-parser-9.3.0.tgz", + "integrity": "sha512-48IxT9d0+wArT1+3wNIy0tascRoywqSUe2E1YalIC1L8jsUGe5aJQItWfRok7DVFGz3UYvzEI7n5wiTXsCMAcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-eslint-parser/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/vue-router": { + "version": "4.2.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-router/-/vue-router-4.2.2.tgz", + "integrity": "sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.14", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", + "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.6.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-tsc/-/vue-tsc-1.6.5.tgz", + "integrity": "sha512-Wtw3J7CC+JM2OR56huRd5iKlvFWpvDiU+fO1+rqyu4V2nMTotShz4zbOZpW5g9fUOcjnyZYfBo5q5q+D/q27JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/vue-language-core": "1.6.5", + "@volar/vue-typescript": "1.6.5", + "semver": "^7.3.8" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/vue-tsc/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-tsc/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-tsc/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/vue3-cropper": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/vue3-cropper/-/vue3-cropper-0.4.0.tgz", + "integrity": "sha512-TBraxN0AkaSyVwOsnB10b8L7+S8JW+39bsLkk6O1cjn155WtlrbljDOa8Gtl0CCta0FGVvQUKoCdhnBB79YVfg==", + "dependencies": { + "core-js": "^3.6.5", + "vue": "^3.0.0" + } + }, + "node_modules/vuex": { + "version": "4.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.11" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vuex-persistedstate": { + "version": "4.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz", + "integrity": "sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "dependencies": { + "deepmerge": "^4.2.2", + "shvl": "^2.0.3" + }, + "peerDependencies": { + "vuex": "^3.0 || ^4.0.0-rc" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", + "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", + "dev": true + }, + "node_modules/well-known-symbols": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/well-known-symbols/-/well-known-symbols-2.0.0.tgz", + "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=6" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "12.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://repo.huaweicloud.com/repository/npm/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "license": "MIT", + "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", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/xss": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", + "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://repo.huaweicloud.com/repository/npm/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zrender": { + "version": "5.4.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/zrender/-/zrender-5.4.3.tgz", + "integrity": "sha512-DRUM4ZLnoaT0PBVvGBDO9oWIDBKFdAVieNWxWwK0niYzJCMwGchRk21/hsE+RKkIveH3XHCyvXcJDkgLVvfizQ==", + "license": "BSD-3-Clause", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + } + } +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/package.json b/LinZeXun-examples/CS.DEEP_Vue3/package.json new file mode 100644 index 0000000000000000000000000000000000000000..976def22a5203f23283cde2ee7a91b68559c08ad --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/package.json @@ -0,0 +1,59 @@ +{ + "name": "cs-deep-vue3", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "vite --open", + "build": "run-p type-check build-only", + "preview": "vite preview", + "test:unit": "vitest", + "build-only": "vite build", + "type-check": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", + "format": "prettier --write src/" + }, + "dependencies": { + "@element-plus/icons": "^0.0.11", + "@element-plus/icons-vue": "^2.1.0", + "@types/marked": "^5.0.1", + "axios": "^1.4.0", + "echarts": "^5.4.2", + "element-plus": "^2.3.7", + "highlight.js": "^11.8.0", + "marked": "^6.0.0", + "mavon-editor": "^3.0.1", + "moment": "^2.29.4", + "node-sass": "^8.0.0", + "sass": "^1.63.6", + "vue": "^3.3.2", + "vue-router": "^4.2.0", + "vue3-cropper": "^0.4.0", + "vuex": "^4.1.0", + "vuex-persistedstate": "^4.1.0" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.2.0", + "@tsconfig/node18": "^2.0.1", + "@types/jsdom": "^21.1.1", + "@types/node": "^18.16.8", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + "@vue/eslint-config-prettier": "^7.1.0", + "@vue/eslint-config-typescript": "^11.0.3", + "@vue/test-utils": "^2.3.2", + "@vue/tsconfig": "^0.4.0", + "eslint": "^8.39.0", + "eslint-plugin-vue": "^9.11.0", + "jsdom": "^22.0.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.8.8", + "sass-resources-loader": "^2.2.5", + "typescript": "~5.0.4", + "unplugin-auto-import": "^0.16.4", + "unplugin-vue-components": "^0.25.1", + "vite": "^4.3.5", + "vite-plugin-svg-icons": "^2.0.1", + "vitest": "^0.31.0", + "vue-tsc": "^1.6.4" + } +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/public/favicon.ico b/LinZeXun-examples/CS.DEEP_Vue3/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/public/favicon.ico differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/App.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/App.vue new file mode 100644 index 0000000000000000000000000000000000000000..53feedb600b18d8fea47735ecb427072bacd4e3e --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/App.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/api/instance/create.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/api/instance/create.ts new file mode 100644 index 0000000000000000000000000000000000000000..7794632dabb86bfdf17adf459175e239350b0b94 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/api/instance/create.ts @@ -0,0 +1,111 @@ +import axios from 'axios' +import type {AxiosInstance, AxiosRequestConfig, AxiosResponse, CreateAxiosDefaults} from 'axios' + + +// 导出Request,可以用来自定义传递配置来创建实例 +export class Request { + // axios 实例 + instance: AxiosInstance + // 基础配置,url和超时时间(异步方法可能不只需要 1s 的调用时间,这里改成了 3min + baseConfig: AxiosRequestConfig = { + baseURL: 'http://localhost:3000', + timeout: 180000, + } + + constructor(config: AxiosRequestConfig) { + const mergedConfig = { + ...(this.baseConfig as CreateAxiosDefaults), + ...config, + }; + // 使用axios.create创建axios实例,配置为基础配置和我们传递进来的配置 + this.instance = axios.create(mergedConfig as CreateAxiosDefaults); + + this.instance.interceptors.request.use( + async (config: AxiosRequestConfig) => { + if (config.url.includes('login') || config.url.includes('register') || config.url.includes('reset') || + (config.url.includes('/article/get/all') && !config.url.includes('recommend')) || + config.url.includes('/article/get/tag') || config.url.includes('/user/count') || + config.url.includes('/article/get/category') || config.url.includes('/search?keyword=')) { + return config; + } + const token = localStorage.getItem('token'); + const expirationTime = localStorage.getItem('expirationTime'); + config.headers!['token'] = `${token}`; + + // 判断token是否过期 + const currentDate = new Date(); + const expirationDate = new Date(expirationTime); + + // TODO:token过期不会自动跳转到登录? + if (!token || expirationDate < currentDate) { + localStorage.clear(); + window.location.href = '/login'; + } + return config; + }, + (err: any) => { + // 请求错误,这里可以用全局提示框进行提示 + return Promise.reject(err); + } + ); + + this.instance.interceptors.response.use( + (res: AxiosResponse) => { + // 直接返回res,当然你也可以只返回res.data + // 系统如果有自定义code也可以在这里处理 + return res; + }, + (err: any) => { + // 这里用来处理http常见错误,进行全局提示 + let message: string; + switch (err.response.status) { + case 400: + message = "请求错误(400)"; + break + case 403: + message = "拒绝访问(403)"; + break; + case 404: + message = "请求出错(404)"; + break; + case 408: + message = "请求超时(408)"; + break; + case 500: + message = "服务器错误(500)"; + break; + case 502: + message = "网络错误(502)"; + break; + case 503: + message = "服务不可用(503)"; + break; + case 504: + message = "网络超时(504)"; + break; + case 505: + message = "HTTP版本不受支持(505)"; + break; + default: + message = `连接出错(${err.response.status})!`; + } + console.log(message) + return Promise.reject(err.response); + } + ); + }; + + // 定义请求方法 + public get( + url: string, + ): Promise> { + return this.instance.get(url); + } + + public post( + url: string, + data?: any, + ): Promise> { + return this.instance.post(url, data); + } +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/api/instance/index.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/api/instance/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..653b8e4f99e73b76f1780bc6c92e55eb761c9b82 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/api/instance/index.ts @@ -0,0 +1,5 @@ +import { Request } from './create'; + +const service = new Request({}); + +export default service; diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/article/index.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/article/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..3c51f34c0d91f2d1dd23695a785fd39db17faaf5 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/article/index.ts @@ -0,0 +1,120 @@ +import service from "@/api/instance"; +import { + createArticleRes, getCategoryArticleReq, getCategoryArticleRes, getDraftListRes, + imageBackRes, + isCollectRes, + isLikeRes, numberOfLikeAndCollect, realTimeSearchRes, + ResponseResult, +} from "@/api/modules/article/type"; +import {articleType} from "@/type"; + +const createArticle = () => { + return service.post>('/article/create') +} + +const getArticleInfo = (data: number) => { + return service.get>('/article/get/info' + '?articleId=' + data) +} + +const updateArticleInfo = (data: articleType) => { + return service.post>('/article/update' + + '?articleId=' + data.article.id + + '&title=' + data.article.title + + '&content=' + data.article.content + + '&categoryId=' + data.article.categoryId + + '&tags=' + data.tag) +} + +const updateImageHandle = (data: FormData) => { + return service.post>('/upload/file', data) +} + +const publishArticle = (data: articleType) => { + return service.post>('/article/publish' + + '?articleId=' + data.article.id + + '&title=' + data.article.title + + '&content=' + data.article.content + + '&categoryId=' + data.article.categoryId + + '&tags=' + data.tag + ) +} + +const deleteArticle = (data: number) => { + return service.post>('/article/delete' + + '?articleId=' + data) +} + +const likeArticle = (data: number) => { + return service.post>('/like/add' + + '?articleId=' + data) +} + +const cancelLikeArticle = (data: number) => { + return service.post>('/like/delete' + + '?articleId=' + data) +} + +const collectArticle = (data: number) => { + return service.post>('/collect/add' + + '?articleId=' + data) +} + +const cancelCollectArticle = (data: number) => { + return service.post>('/collect/delete' + + '?articleId=' + data) +} + +const getLikeStateOfArticle = (data: number) => { + return service.get>('/like/check' + + '?articleId=' + data) +} + +const getCollectStateOfArticle = (data: number) => { + return service.get>('/collect/check' + + '?articleId=' + data) +} + +const getLikeNumber = (data: number) => { + return service.get>('/like/count' + + '?articleId=' + data) +} + +const getCollectNumber = (data: number) => { + return service.get>('/collect/count' + + '?articleId=' + data) +} + +const getCategoryArticle = (data: getCategoryArticleReq) => { + return service.get>('/article/get/category/list' + + '?page=' + data.page + + '&pageSize=' + data.pageSize + + '&categoryId=' + data.categoryId) +} + +const getDraftList = () => { + return service.get>('/article/get/draft/list') +} + +const getRealTimeSearch = (data: string) => { + return service.get>('/search?keyword=' + data) +} + +export default { + createArticle, // 创建文章 + getArticleInfo, // 获取文章信息 + updateArticleInfo, // 更新文章信息 + updateImageHandle, // 上传图片 + publishArticle, // 发布文章 + deleteArticle, // 删除文章 + likeArticle, // 点赞文章 + cancelLikeArticle, // 取消点赞文章 + collectArticle, // 收藏文章 + cancelCollectArticle, // 取消收藏文章 + getLikeStateOfArticle, // 获取点赞状态 + getCollectStateOfArticle,// 获取收藏状态 + getLikeNumber, // 获取点赞数 + getCollectNumber, // 获取收藏数 + getCategoryArticle, // 获取各分类的文章列表 + getDraftList, // 获取草稿箱列表 + getRealTimeSearch, // 获取实时搜索文章列表 +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/article/type.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/article/type.ts new file mode 100644 index 0000000000000000000000000000000000000000..b62b39e4861babab24191b6b5f9d6272fa20c499 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/article/type.ts @@ -0,0 +1,48 @@ +import {articleBaseInfo} from "@/type"; + +export type ResponseResult = { + code: number; + message: string; + data: T; +} + +export type createArticleRes = { + article: articleBaseInfo +} + +export type imageBackRes = { + url: string +} + +export type isLikeRes = { + isLike: number +} + +export type isCollectRes = { + isCollect: number +} + +export type numberOfLikeAndCollect = { + count: number +} + +export type getCategoryArticleReq = { + page: number, + pageSize: number, + categoryId: number +} + +export type getCategoryArticleRes = { + articleCount: number, + articleList: Array +} + +export type getDraftListRes = { + articleCount: number, + articleList: Array +} + +export type realTimeSearchRes={ + articleCount: number, + articleList: Array +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/comment/index.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/comment/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..6e0bb3aff1b8bde1ffe39545baf9c9a6bc69baf4 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/comment/index.ts @@ -0,0 +1,53 @@ +import { + GetCommentInfoRes, + GetOneLevelCommentReq, + GetOneLevelCommentRes, GetTwoLevelCommentRes, + PublishCommentReq, + PublishCommentRes, + ResponseResult +} from "@/api/modules/comment/type"; +import service from "@/api/instance"; + +const publishComment = (data: PublishCommentReq) => { + return service.post>('/comment/add' + + '?articleId=' + data.articleId + + '&content=' + data.content) +} + +const replyComment = (data: PublishCommentReq) => { + return service.post>('/comment/add' + + '?articleId=' + data.articleId + + '&content=' + data.content + + '&isReply=' + data.isReply + + '&replyId=' + data.replyId) +} + +const getOneLevelComment = (data: GetOneLevelCommentReq) => { + return service.get>('/comment/get/normal' + + '?articleId=' + data.articleId + + '&page=' + data.page) +} + +const getTwoLevelComment = (data: number) => { + return service.get>('/comment/get/reply' + + '?commentId=' + data) +} + +const deleteComment = (data: number) => { + return service.post>('/comment/delete' + + '?commentId=' + data) +} + +const getCommentInfo = (data: number) => { + return service.get>('/comment/get/info' + + '?commentId=' + data) +} + +export default { + publishComment, // 发布评论 + replyComment, // 回复评论 + getOneLevelComment,// 获取文章一级评论 + getTwoLevelComment,// 获取文章二级评论 + deleteComment, // 删除评论 + getCommentInfo, // 获取某一评论信息 +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/comment/type.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/comment/type.ts new file mode 100644 index 0000000000000000000000000000000000000000..b0976e816a4aae138a56df2f6fff2332bfff7af1 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/comment/type.ts @@ -0,0 +1,37 @@ +import {commentType} from "@/type"; + +export type ResponseResult = { + code: number; + message: string; + data: T; +} + +export type PublishCommentReq = { + articleId: number; + content: string; + isReply?: number; + replyId?: number; +} + +export type PublishCommentRes = { + comment: commentType; +} + +export type GetOneLevelCommentReq = { + articleId: number, + page: number, + pageSize?: number +} + +export type GetOneLevelCommentRes = { + commentList: Array + replySize: Array +} + +export type GetTwoLevelCommentRes = { + commentList: Array +} + +export type GetCommentInfoRes = { + comment: commentType +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/common/index.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/common/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..01db8c6d69737b51e9a0be53d00698671d5896f2 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/common/index.ts @@ -0,0 +1,27 @@ +import { + getParticularArticleListReq, + getParticularArticleListRes, + getRandomTagListRes, getWebsiteUserCountRes, + ResponseResult +} from "@/api/modules/common/type"; +import service from "@/api/instance"; + +const getParticularArticleList = (data: getParticularArticleListReq) => { + return service.get>('/article/get/all' + + '?page=' + data.page + + '&sortBy=' + data.sortBy) +} + +const getRandomTagList = () => { + return service.get>('/article/get/tag') +} + +const getWebsiteUserCount = () => { + return service.get>('/user/count') +} + +export default { + getParticularArticleList, // 依据不同排序方式获取文章首页列表 + getRandomTagList, // 获取随机的标签列表用于展示在“话题广场” + getWebsiteUserCount, // 获取网站用户数 +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/common/type.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/common/type.ts new file mode 100644 index 0000000000000000000000000000000000000000..d40c422adf13059588ee1c2086d525307641ee78 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/common/type.ts @@ -0,0 +1,26 @@ +import {articleBaseInfo} from "@/type"; + +export type ResponseResult = { + code: number; + message: string; + data: T; +} + +export type getParticularArticleListReq = { + page: number, + sortBy: string, + pageSize?: number +} + +export type getParticularArticleListRes = { + articleList: Array, + articleCount: number +} + +export type getRandomTagListRes = { + tagList: Array +} + +export type getWebsiteUserCountRes = { + userCount: number +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/index.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..ab90856ce7a40fc3ce4ded9647770792d7f20d51 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/index.ts @@ -0,0 +1,11 @@ +import userApi from '@/api/modules/user' +import articleApi from '@/api/modules/article' +import commentApi from "@/api/modules/comment"; +import commonApi from '@/api/modules/common' + +export default { + userApi, + articleApi, + commentApi, + commonApi +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/user/index.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/user/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..57e542d9b15e15cb64bcb7cbe4cf949c623408f3 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/user/index.ts @@ -0,0 +1,122 @@ +import service from '../../instance/index' +import {loginType, registerType, resetPwdType} from '@/type' +import { + ResponseResult, + FollowerData, + FollowingData, + UserinfoData, + LoginData, + IsFollowData, + UserinfoEditRequest, + FollowingList, + FollowerList, + GetHeatmapInfoRes, +} from "@/api/modules/user/type"; + +const login = (data: loginType) => { + return service.post>('/user/login' + + '?email=' + data.email + + '&password=' + data.password, data) +} + +const sendRegisterCode = (data: any) => { + return service.get>('/checkcode/register/code' + + '?email=' + data.email) +} + +const register = (data: registerType) => { + return service.post>('/user/register' + + '?username=' + data.username + + '&email=' + data.email + + '&checkCode=' + data.checkCode + + '&password=' + data.password + + '&confirmPwd=' + data.confirmPwd, data) +} + +const resetPwd = (data: resetPwdType) => { + return service.post>('/user/reset/password' + + '?email=' + data.email + + '&checkCode=' + data.checkCode + + '&password=' + data.password + + '&confirmPwd=' + data.confirmPwd, data) +} + +const sendResetCode = (data: any) => { + return service.get>('/checkcode/reset/code' + + '?email=' + data.email) +} + +const getFollowingNum = (data: number) => { + return service.get>('/user/following/count' + + '?userId=' + data) +} + +const getFollowerNum = (data: number) => { + return service.get>('/user/follower/count' + + '?userId=' + data) +} + +const getUserinfoData = (data: number) => { + return service.get>('/user/get/info' + + '?userId=' + data) +} + +const getFollowState = (data: number) => { + return service.get>('/user/check/follow' + + '?userId=' + data) +} + +const followHandle = (data: number) => { + return service.post>('/user/add/follow' + + '?userId=' + data) +} + +const cancelFollowHandle = (data: number) => { + return service.post>('/user/delete/follow' + + '?userId=' + data) +} + +const logout = () => { + return service.post>('/user/logout') +} + +const uploadInfo = (data: UserinfoEditRequest) => { + return service.post>('/user/upload/info' + + '?username=' + data.username + + '&gender=' + data.gender + + '&age=' + data.age + + '&description=' + data.description, data.avatar) +} + +const getFollowingList = (data: number) => { + return service.get>('/user/following/list' + + '?userId=' + data) +} + +const getFollowerList = (data: number) => { + return service.get>('/user/follower/list' + + '?userId=' + data) +} + +const getHeatmapInfo = (data: number) => { + return service.get>('/user/activation?userId=' + data) +} + +export default { + login, // 登录 + logout, // 退出登录 + sendRegisterCode, // 注册发送验证码 + register, // 注册 + resetPwd, // 重置密码 + sendResetCode, // 重置密码发送验证码 + getFollowingNum, // 依据userId获取关注数量 + getFollowerNum, // 依据userId获取粉丝数量 + getUserinfoData, // 依据userId获取用户信息 + getFollowState, // 获取用户登录状态 + followHandle, // 关注用户 + cancelFollowHandle, // 取消关注 + uploadInfo, // 更新用户信息 + getFollowingList, // 获取关注列表 + getFollowerList, // 获取粉丝列表 + getHeatmapInfo, // 获取用户活跃度信息 +}; diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/user/type.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/user/type.ts new file mode 100644 index 0000000000000000000000000000000000000000..440c34d5ac4fc99f9a556c66bc67c10b10d89677 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/api/modules/user/type.ts @@ -0,0 +1,54 @@ +import {userType} from '@/type' + +export type LoginData = { + user: userType; + token: string; + expirationTime: string; +} + +export type FollowingData = { + followingCount: number; +} + +export type FollowerData = { + followerCount: number; +} + +export type UserinfoData = { + user: userType; +} + +export type IsFollowData = { + isFollow: boolean; +} + +export type DayItem = { + key: number, + value: number +} + +export type GetHeatmapInfoRes = { + activationList: Array +} + +export type UserinfoEditRequest = { + username: string; + gender: number; + age: number; + avatar: FormData; + description: string; +} + +export type FollowingList = { + following: Array +} + +export type FollowerList = { + follower: Array +} + +export type ResponseResult = { + code: number; + message: string; + data: T; +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/base.css b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/base.css new file mode 100644 index 0000000000000000000000000000000000000000..d3de42ec96a1637ebe2e2587a95196c90fbda9e9 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/base.css @@ -0,0 +1,73 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: color 0.5s, background-color 0.5s; + line-height: 1.6; + font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, + Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/demo.css b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/demo.css new file mode 100644 index 0000000000000000000000000000000000000000..a67054a0a030993643b8cbe9f344b34706efa134 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/demo.css @@ -0,0 +1,539 @@ +/* Logo 字体 */ +@font-face { + font-family: "iconfont logo"; + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); +} + +.logo { + font-family: "iconfont logo"; + font-size: 160px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* tabs */ +.nav-tabs { + position: relative; +} + +.nav-tabs .nav-more { + position: absolute; + right: 0; + bottom: 0; + height: 42px; + line-height: 42px; + color: #666; +} + +#tabs { + border-bottom: 1px solid #eee; +} + +#tabs li { + cursor: pointer; + width: 100px; + height: 40px; + line-height: 40px; + text-align: center; + font-size: 16px; + border-bottom: 2px solid transparent; + position: relative; + z-index: 1; + margin-bottom: -1px; + color: #666; +} + + +#tabs .active { + border-bottom-color: #f00; + color: #222; +} + +.tab-container .content { + display: none; +} + +/* 页面布局 */ +.main { + padding: 30px 100px; + width: 960px; + margin: 0 auto; +} + +.main .logo { + color: #333; + text-align: left; + margin-bottom: 30px; + line-height: 1; + height: 110px; + margin-top: -50px; + overflow: hidden; + *zoom: 1; +} + +.main .logo a { + font-size: 160px; + color: #333; +} + +.helps { + margin-top: 40px; +} + +.helps pre { + padding: 20px; + margin: 10px 0; + border: solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists { + width: 100% !important; + overflow: hidden; + *zoom: 1; +} + +.icon_lists li { + width: 100px; + margin-bottom: 10px; + margin-right: 20px; + text-align: center; + list-style: none !important; + cursor: default; +} + +.icon_lists li .code-name { + line-height: 1.2; +} + +.icon_lists .icon { + display: block; + height: 100px; + line-height: 100px; + font-size: 42px; + margin: 10px auto; + color: #333; + -webkit-transition: font-size 0.25s linear, width 0.25s linear; + -moz-transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; +} + +.icon_lists .icon:hover { + font-size: 100px; +} + +.icon_lists .svg-icon { + /* 通过设置 font-size 来改变图标大小 */ + width: 1em; + /* 图标和文字相邻时,垂直对齐 */ + vertical-align: -0.15em; + /* 通过设置 color 来改变 SVG 的颜色/fill */ + fill: currentColor; + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 + normalize.css 中也包含这行 */ + overflow: hidden; +} + +.icon_lists li .name, +.icon_lists li .code-name { + color: #666; +} + +/* markdown 样式 */ +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p { + margin: 1em 0; +} + +.markdown>p, +.markdown>blockquote, +.markdown>.highlight, +.markdown>ol, +.markdown>ul { + width: 80%; +} + +.markdown ul>li { + list-style: circle; +} + +.markdown>ul li, +.markdown blockquote ul>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown>ul li p, +.markdown>ol li p { + margin: 0.6em 0; +} + +.markdown ol>li { + list-style: decimal; +} + +.markdown>ol li, +.markdown blockquote ol>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown>table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown>table th { + white-space: nowrap; + color: #333; + font-weight: 600; +} + +.markdown>table th, +.markdown>table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown>table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown>br, +.markdown>p>br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +/* 代码高亮 */ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/demo_index.html b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/demo_index.html new file mode 100644 index 0000000000000000000000000000000000000000..57147dcac9c282e51472c41da9903e6ab81cda38 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/demo_index.html @@ -0,0 +1,809 @@ + + + + + iconfont Demo + + + + + + + + + + + + + +
+

+ + +

+ +
+
+
    + +
  • + +
    养护管理
    +
    &#xe77c;
    +
  • + +
  • + +
    科研
    +
    &#xe600;
    +
  • + +
  • + +
    专家
    +
    &#xe607;
    +
  • + +
  • + +
    专家-copy
    +
    &#xec82;
    +
  • + +
  • + +
    疑问
    +
    &#xe62c;
    +
  • + +
  • + +
    消息-置灰
    +
    &#xe61d;
    +
  • + +
  • + +
    +
    &#xe6e7;
    +
  • + +
  • + +
    评论
    +
    &#xe8b4;
    +
  • + +
  • + +
    下拉
    +
    &#xe62e;
    +
  • + +
  • + +
    客户
    +
    &#xe623;
    +
  • + +
  • + +
    博客园
    +
    &#xe603;
    +
  • + +
  • + +
    加关注
    +
    &#xe638;
    +
  • + +
  • + +
    举报
    +
    &#xe60d;
    +
  • + +
  • + +
    分享
    +
    &#xe7c5;
    +
  • + +
  • + +
    功能图标-46-copy
    +
    &#xec81;
    +
  • + +
  • + +
    功能图标-46
    +
    &#xe691;
    +
  • + +
  • + +
    时钟_clock74
    +
    &#xe972;
    +
  • + +
  • +  +
    点赞
    +
    &#xec7f;
    +
  • + +
  • + +
    24gf-tags
    +
    &#xe885;
    +
  • + +
  • + +
    收藏
    +
    &#xe8b9;
    +
  • + +
  • + +
    回复,转发
    +
    &#xea17;
    +
  • + +
  • + +
    扳手
    +
    &#xe62d;
    +
  • + +
  • + +
    置顶
    +
    &#xe634;
    +
  • + +
  • + +
    链接
    +
    &#xe6c8;
    +
  • + +
  • + +
    地理位置
    +
    &#xe637;
    +
  • + +
  • + +
    时钟
    +
    &#xe78b;
    +
  • + +
  • + +
    学校_学校信息
    +
    &#xe661;
    +
  • + +
+
+

Unicode 引用

+
+ +

Unicode 是字体在网页端最原始的应用方式,特点是:

+
    +
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • +
  • 默认情况下不支持多色,直接添加多色图标会自动去色。
  • +
+
+

注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)

+
+

Unicode 使用步骤如下:

+

第一步:拷贝项目下面生成的 @font-face

+
@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.woff2?t=1693494754638') format('woff2'),
+       url('iconfont.woff?t=1693494754638') format('woff'),
+       url('iconfont.ttf?t=1693494754638') format('truetype');
+}
+
+

第二步:定义使用 iconfont 的样式

+
.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+

第三步:挑选相应图标并获取字体编码,应用于页面

+
+<span class="iconfont">&#x33;</span>
+
+
+

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    + 养护管理 +
    +
    .icon-yanghuguanli +
    +
  • + +
  • + +
    + 科研 +
    +
    .icon-keyan +
    +
  • + +
  • + +
    + 专家 +
    +
    .icon-zhuanjia +
    +
  • + +
  • + +
    + 专家-copy +
    +
    .icon-zhuanjia-copy +
    +
  • + +
  • + +
    + 疑问 +
    +
    .icon-yiwen +
    +
  • + +
  • + +
    + 消息-置灰 +
    +
    .icon-xiaoxi-zhihui +
    +
  • + +
  • + +
    + 火 +
    +
    .icon-icon-test +
    +
  • + +
  • + +
    + 评论 +
    +
    .icon-pinglun +
    +
  • + +
  • + +
    + 下拉 +
    +
    .icon-xiala +
    +
  • + +
  • + +
    + 客户 +
    +
    .icon-kehu +
    +
  • + +
  • + +
    + 博客园 +
    +
    .icon-bokeyuan +
    +
  • + +
  • + +
    + 加关注 +
    +
    .icon-tianchongxing- +
    +
  • + +
  • + +
    + 举报 +
    +
    .icon-icon_tip_off +
    +
  • + +
  • + +
    + 分享 +
    +
    .icon-fenxiang +
    +
  • + +
  • + +
    + 功能图标-46-copy +
    +
    .icon-gongnengtubiao-46-copy +
    +
  • + +
  • + +
    + 功能图标-46 +
    +
    .icon-gongnengtubiao-46 +
    +
  • + +
  • + +
    + 时钟_clock74 +
    +
    .icon-shizhongclock74 +
    +
  • + +
  • + +
    + 点赞 +
    +
    .icon-dianzan +
    +
  • + +
  • + +
    + 24gf-tags +
    +
    .icon-24gf-tags +
    +
  • + +
  • + +
    + 收藏 +
    +
    .icon-shoucang +
    +
  • + +
  • + +
    + 回复,转发 +
    +
    .icon-undo-full +
    +
  • + +
  • + +
    + 扳手 +
    +
    .icon-editor2b +
    +
  • + +
  • + +
    + 置顶 +
    +
    .icon-zhiding +
    +
  • + +
  • + +
    + 链接 +
    +
    .icon-lianjie +
    +
  • + +
  • + +
    + 地理位置 +
    +
    .icon-diliweizhi +
    +
  • + +
  • + +
    + 时钟 +
    +
    .icon-shizhong +
    +
  • + +
  • + +
    + 学校_学校信息 +
    +
    .icon-xuexiao_xuexiaoxinxi +
    +
  • + +
+
+

font-class 引用

+
+ +

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

+

与 Unicode 使用方式相比,具有如下特点:

+
    +
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • +
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 fontclass 代码:

+
<link rel="stylesheet" href="./iconfont.css">
+
+

第二步:挑选相应图标并获取类名,应用于页面:

+
<span class="iconfont icon-xxx"></span>
+
+
+

" + iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    养护管理
    +
    #icon-yanghuguanli
    +
  • + +
  • + +
    科研
    +
    #icon-keyan
    +
  • + +
  • + +
    专家
    +
    #icon-zhuanjia
    +
  • + +
  • + +
    专家-copy
    +
    #icon-zhuanjia-copy
    +
  • + +
  • + +
    疑问
    +
    #icon-yiwen
    +
  • + +
  • + +
    消息-置灰
    +
    #icon-xiaoxi-zhihui
    +
  • + +
  • + +
    +
    #icon-icon-test
    +
  • + +
  • + +
    评论
    +
    #icon-pinglun
    +
  • + +
  • + +
    下拉
    +
    #icon-xiala
    +
  • + +
  • + +
    客户
    +
    #icon-kehu
    +
  • + +
  • + +
    博客园
    +
    #icon-bokeyuan
    +
  • + +
  • + +
    加关注
    +
    #icon-tianchongxing-
    +
  • + +
  • + +
    举报
    +
    #icon-icon_tip_off
    +
  • + +
  • + +
    分享
    +
    #icon-fenxiang
    +
  • + +
  • + +
    功能图标-46-copy
    +
    #icon-gongnengtubiao-46-copy
    +
  • + +
  • + +
    功能图标-46
    +
    #icon-gongnengtubiao-46
    +
  • + +
  • + +
    时钟_clock74
    +
    #icon-shizhongclock74
    +
  • + +
  • + +
    点赞
    +
    #icon-dianzan
    +
  • + +
  • + +
    24gf-tags
    +
    #icon-24gf-tags
    +
  • + +
  • + +
    收藏
    +
    #icon-shoucang
    +
  • + +
  • + +
    回复,转发
    +
    #icon-undo-full
    +
  • + +
  • + +
    扳手
    +
    #icon-editor2b
    +
  • + +
  • + +
    置顶
    +
    #icon-zhiding
    +
  • + +
  • + +
    链接
    +
    #icon-lianjie
    +
  • + +
  • + +
    地理位置
    +
    #icon-diliweizhi
    +
  • + +
  • + +
    时钟
    +
    #icon-shizhong
    +
  • + +
  • + +
    学校_学校信息
    +
    #icon-xuexiao_xuexiaoxinxi
    +
  • + +
+
+

Symbol 引用

+
+ +

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

+
    +
  • 支持多色图标了,不再受单色限制。
  • +
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • +
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • +
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 symbol 代码:

+
<script src="./iconfont.js"></script>
+
+

第二步:加入通用 CSS 代码(引入一次就行):

+
<style>
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+</style>
+
+

第三步:挑选相应图标并获取类名,应用于页面:

+
<svg class="icon" aria-hidden="true">
+  <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+ +
+
+ + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/emoji/emoji.json b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/emoji/emoji.json new file mode 100644 index 0000000000000000000000000000000000000000..d1ca47f91a37248a20264d14d3fad202a6d99790 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/emoji/emoji.json @@ -0,0 +1,474 @@ +{ + "grinning": { + "keywords": ["face", "smile", "happy", "joy", ":D", "grin"], + "char": "😀", + "fitzpatrick_scale": false, + "category": "people" + }, + "grin": { + "keywords": ["face", "happy", "smile", "joy", "kawaii"], + "char": "😁", + "fitzpatrick_scale": false, + "category": "people" + }, + "smile": { + "keywords": ["face", "happy", "joy", "funny", "haha", "laugh", "like", ":D", ":)"], + "char": "😄", + "fitzpatrick_scale": false, + "category": "people" + }, + "sweat_smile": { + "keywords": ["face", "hot", "happy", "laugh", "sweat", "smile", "relief"], + "char": "😅", + "fitzpatrick_scale": false, + "category": "people" + }, + "laughing": { + "keywords": ["happy", "joy", "lol", "satisfied", "haha", "face", "glad", "XD", "laugh"], + "char": "😆", + "fitzpatrick_scale": false, + "category": "people" + }, + "innocent": { + "keywords": ["face", "angel", "heaven", "halo"], + "char": "😇", + "fitzpatrick_scale": false, + "category": "people" + }, + "wink": { + "keywords": ["face", "happy", "mischievous", "secret", ";)", "smile", "eye"], + "char": "😉", + "fitzpatrick_scale": false, + "category": "people" + }, + "blush": { + "keywords": ["face", "smile", "happy", "flushed", "crush", "embarrassed", "shy", "joy"], + "char": "😊", + "fitzpatrick_scale": false, + "category": "people" + }, + "slightly_smiling_face": { + "keywords": ["face", "smile"], + "char": "🙂", + "fitzpatrick_scale": false, + "category": "people" + }, + "yum": { + "keywords": ["happy", "joy", "tongue", "smile", "face", "silly", "yummy", "nom", "delicious", "savouring"], + "char": "😋", + "fitzpatrick_scale": false, + "category": "people" + }, + "heart_eyes": { + "keywords": ["face", "love", "like", "affection", "valentines", "infatuation", "crush", "heart"], + "char": "😍", + "fitzpatrick_scale": false, + "category": "people" + }, + "kissing_heart": { + "keywords": ["face", "love", "like", "affection", "valentines", "infatuation", "kiss"], + "char": "😘", + "fitzpatrick_scale": false, + "category": "people" + }, + "kissing": { + "keywords": ["love", "like", "face", "3", "valentines", "infatuation", "kiss"], + "char": "😗", + "fitzpatrick_scale": false, + "category": "people" + }, + "kissing_smiling_eyes": { + "keywords": ["face", "affection", "valentines", "infatuation", "kiss"], + "char": "😙", + "fitzpatrick_scale": false, + "category": "people" + }, + "kissing_closed_eyes": { + "keywords": ["face", "love", "like", "affection", "valentines", "infatuation", "kiss"], + "char": "😚", + "fitzpatrick_scale": false, + "category": "people" + }, + "stuck_out_tongue_winking_eye": { + "keywords": ["face", "prank", "childish", "playful", "mischievous", "smile", "wink", "tongue"], + "char": "😜", + "fitzpatrick_scale": false, + "category": "people" + }, + "stuck_out_tongue_closed_eyes": { + "keywords": ["face", "prank", "playful", "mischievous", "smile", "tongue"], + "char": "😝", + "fitzpatrick_scale": false, + "category": "people" + }, + "stuck_out_tongue": { + "keywords": ["face", "prank", "childish", "playful", "mischievous", "smile", "tongue"], + "char": "😛", + "fitzpatrick_scale": false, + "category": "people" + }, + "sunglasses": { + "keywords": ["face", "cool", "smile", "summer", "beach", "sunglass"], + "char": "😎", + "fitzpatrick_scale": false, + "category": "people" + }, + "roll_eyes": { + "keywords": ["face", "eyeroll", "frustrated"], + "char": "🙄", + "fitzpatrick_scale": false, + "category": "people" + }, + "flushed": { + "keywords": ["face", "blush", "shy", "flattered"], + "char": "😳", + "fitzpatrick_scale": false, + "category": "people" + }, + "rage": { + "keywords": ["angry", "mad", "hate", "despise"], + "char": "😡", + "fitzpatrick_scale": false, + "category": "people" + }, + "confused": { + "keywords": ["face", "indifference", "huh", "weird", "hmmm", ":/"], + "char": "😕", + "fitzpatrick_scale": false, + "category": "people" + }, + "tired_face": { + "keywords": ["sick", "whine", "upset", "frustrated"], + "char": "😫", + "fitzpatrick_scale": false, + "category": "people" + }, + "triumph": { + "keywords": ["face", "gas", "phew", "proud", "pride"], + "char": "😤", + "fitzpatrick_scale": false, + "category": "people" + }, + "fearful": { + "keywords": ["face", "scared", "terrified", "nervous", "oops", "huh"], + "char": "😨", + "fitzpatrick_scale": false, + "category": "people" + }, + "disappointed_relieved": { + "keywords": ["face", "phew", "sweat", "nervous"], + "char": "😥", + "fitzpatrick_scale": false, + "category": "people" + }, + "sleepy": { + "keywords": ["face", "tired", "rest", "nap"], + "char": "😪", + "fitzpatrick_scale": false, + "category": "people" + }, + "sweat": { + "keywords": ["face", "hot", "sad", "tired", "exercise"], + "char": "😓", + "fitzpatrick_scale": false, + "category": "people" + }, + + "dizzy_face": { + "keywords": ["spent", "unconscious", "xox", "dizzy"], + "char": "😵", + "fitzpatrick_scale": false, + "category": "people" + }, + "astonished": { + "keywords": ["face", "xox", "surprised", "poisoned"], + "char": "😲", + "fitzpatrick_scale": false, + "category": "people" + }, + "sneezing_face": { + "keywords": ["face", "gesundheit", "sneeze", "sick", "allergy"], + "char": "🤧", + "fitzpatrick_scale": false, + "category": "people" + }, + "mask": { + "keywords": ["face", "sick", "ill", "disease"], + "char": "😷", + "fitzpatrick_scale": false, + "category": "people" + }, + "face_with_thermometer": { + "keywords": ["sick", "temperature", "thermometer", "cold", "fever"], + "char": "🤒", + "fitzpatrick_scale": false, + "category": "people" + }, + "face_with_head_bandage": { + "keywords": ["injured", "clumsy", "bandage", "hurt"], + "char": "🤕", + "fitzpatrick_scale": false, + "category": "people" + }, + "sleeping": { + "keywords": ["face", "tired", "sleepy", "night", "zzz"], + "char": "😴", + "fitzpatrick_scale": false, + "category": "people" + }, + "zzz": { + "keywords": ["sleepy", "tired", "dream"], + "char": "💤", + "fitzpatrick_scale": false, + "category": "people" + }, + "clap": { + "keywords": ["hands", "praise", "applause", "congrats", "yay"], + "char": "👏", + "fitzpatrick_scale": true, + "category": "people" + }, + "call_me_hand": { + "keywords": ["hands", "gesture"], + "char": "🤙", + "fitzpatrick_scale": true, + "category": "people" + }, + "+1": { + "keywords": ["thumbsup", "yes", "awesome", "good", "agree", "accept", "cool", "hand", "like"], + "char": "👍", + "fitzpatrick_scale": true, + "category": "people" + }, + "-1": { + "keywords": ["thumbsdown", "no", "dislike", "hand"], + "char": "👎", + "fitzpatrick_scale": true, + "category": "people" + }, + "facepunch": { + "keywords": ["angry", "violence", "fist", "hit", "attack", "hand"], + "char": "👊", + "fitzpatrick_scale": true, + "category": "people" + }, + "fist": { + "keywords": ["fingers", "hand", "grasp"], + "char": "✊", + "fitzpatrick_scale": true, + "category": "people" + }, + "v": { + "keywords": ["fingers", "ohyeah", "hand", "peace", "victory", "two"], + "char": "✌", + "fitzpatrick_scale": true, + "category": "people" + }, + "ok_hand": { + "keywords": ["fingers", "limbs", "perfect", "ok", "okay"], + "char": "👌", + "fitzpatrick_scale": true, + "category": "people" + }, + "raised_hand": { + "keywords": ["fingers", "stop", "highfive", "palm", "ban"], + "char": "✋", + "fitzpatrick_scale": true, + "category": "people" + }, + "raised_back_of_hand": { + "keywords": ["fingers", "raised", "backhand"], + "char": "🤚", + "fitzpatrick_scale": true, + "category": "people" + }, + "muscle": { + "keywords": ["arm", "flex", "hand", "summer", "strong", "biceps"], + "char": "💪", + "fitzpatrick_scale": true, + "category": "people" + }, + "handshake": { + "keywords": ["agreement", "shake"], + "char": "🤝", + "fitzpatrick_scale": false, + "category": "people" + }, + "point_left": { + "keywords": ["direction", "fingers", "hand", "left"], + "char": "👈", + "fitzpatrick_scale": true, + "category": "people" + }, + "point_right": { + "keywords": ["fingers", "hand", "direction", "right"], + "char": "👉", + "fitzpatrick_scale": true, + "category": "people" + }, + "fu": { + "keywords": ["hand", "fingers", "rude", "middle", "flipping"], + "char": "🖕", + "fitzpatrick_scale": true, + "category": "people" + }, + "raised_hand_with_fingers_splayed": { + "keywords": ["hand", "fingers", "palm"], + "char": "🖐", + "fitzpatrick_scale": true, + "category": "people" + }, + "lips": { + "keywords": ["mouth", "kiss"], + "char": "👄", + "fitzpatrick_scale": false, + "category": "people" + }, + "ear": { + "keywords": ["face", "hear", "sound", "listen"], + "char": "👂", + "fitzpatrick_scale": true, + "category": "people" + }, + + "eyes": { + "keywords": ["look", "watch", "stalk", "peek", "see"], + "char": "👀", + "fitzpatrick_scale": false, + "category": "people" + }, + + "santa": { + "keywords": ["festival", "man", "male", "xmas", "father christmas"], + "char": "🎅", + "fitzpatrick_scale": true, + "category": "people" + }, + + "sun_with_face": { + "keywords": ["nature", "morning", "sky"], + "char": "🌞", + "fitzpatrick_scale": false, + "category": "animals_and_nature" + }, + "crescent_moon": { + "keywords": ["night", "sleep", "sky", "evening", "magic"], + "char": "🌙", + "fitzpatrick_scale": false, + "category": "animals_and_nature" + }, + "star": { + "keywords": ["night", "yellow"], + "char": "⭐", + "fitzpatrick_scale": false, + "category": "animals_and_nature" + }, + + "zap": { + "keywords": ["thunder", "weather", "lightning bolt", "fast"], + "char": "⚡", + "fitzpatrick_scale": false, + "category": "animals_and_nature" + }, + "fire": { + "keywords": ["hot", "cook", "flame"], + "char": "🔥", + "fitzpatrick_scale": false, + "category": "animals_and_nature" + }, + + "snowflake": { + "keywords": ["winter", "season", "cold", "weather", "christmas", "xmas"], + "char": "❄️", + "fitzpatrick_scale": false, + "category": "animals_and_nature" + }, + + "soccer": { + "keywords": ["sports", "football"], + "char": "⚽", + "fitzpatrick_scale": false, + "category": "activity" + }, + "basketball": { + "keywords": ["sports", "balls", "NBA"], + "char": "🏀", + "fitzpatrick_scale": false, + "category": "activity" + }, + "football": { + "keywords": ["sports", "balls", "NFL"], + "char": "🏈", + "fitzpatrick_scale": false, + "category": "activity" + }, + "baseball": { + "keywords": ["sports", "balls"], + "char": "⚾", + "fitzpatrick_scale": false, + "category": "activity" + }, + "gift": { + "keywords": ["present", "birthday", "christmas", "xmas"], + "char": "🎁", + "fitzpatrick_scale": false, + "category": "objects" + }, + + "tada": { + "keywords": ["party", "congratulations", "birthday", "magic", "circus", "celebration"], + "char": "🎉", + "fitzpatrick_scale": false, + "category": "objects" + }, + + "black_nib": { + "keywords": ["pen", "stationery", "writing", "write"], + "char": "✒️", + "fitzpatrick_scale": false, + "category": "objects" + }, + "memo": { + "keywords": ["write", "documents", "stationery", "pencil", "paper", "writing", "legal", "exam", "quiz", "test", "study", "compose"], + "char": "📝", + "fitzpatrick_scale": false, + "category": "objects" + }, + "heart": { + "keywords": ["love", "like", "valentines"], + "char": "❤️", + "fitzpatrick_scale": false, + "category": "symbols" + }, + "yellow_heart": { + "keywords": ["love", "like", "affection", "valentines"], + "char": "💛", + "fitzpatrick_scale": false, + "category": "symbols" + }, + "green_heart": { + "keywords": ["love", "like", "affection", "valentines"], + "char": "💚", + "fitzpatrick_scale": false, + "category": "symbols" + }, + "vs": { + "keywords": ["words", "orange-square"], + "char": "🆚", + "fitzpatrick_scale": false, + "category": "symbols" + }, + "speech_balloon": { + "keywords": ["bubble", "words", "message", "talk", "chatting"], + "char": "💬", + "fitzpatrick_scale": false, + "category": "symbols" + }, + + "clock1": { + "keywords": ["time", "late", "early", "schedule"], + "char": "🕐", + "fitzpatrick_scale": false, + "category": "symbols" + } +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/font/open-sans-v17-latin-ext_latin-700.woff2 b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/font/open-sans-v17-latin-ext_latin-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c824c315343a80e2e49149e64c323cdec03703ac Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/font/open-sans-v17-latin-ext_latin-700.woff2 differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/font/open-sans-v17-latin-ext_latin-700italic.woff2 b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/font/open-sans-v17-latin-ext_latin-700italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4115f249e46377c92943d66d9c0f5c8001da90d6 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/font/open-sans-v17-latin-ext_latin-700italic.woff2 differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/font/open-sans-v17-latin-ext_latin-italic.woff2 b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/font/open-sans-v17-latin-ext_latin-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7584008a5313ab7e21d66af339618602d14ed7f0 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/font/open-sans-v17-latin-ext_latin-italic.woff2 differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/font/open-sans-v17-latin-ext_latin-regular.woff2 b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/font/open-sans-v17-latin-ext_latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9b582203f24b1d0369d49197f4e5b25bb8199da7 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/font/open-sans-v17-latin-ext_latin-regular.woff2 differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.css b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.css new file mode 100644 index 0000000000000000000000000000000000000000..3b08281574157b8d19d5b71e97a83ed567cd097a --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.css @@ -0,0 +1,123 @@ +@font-face { + font-family: "iconfont"; /* Project id 4168841 */ + src: url('iconfont.woff2?t=1693494754638') format('woff2'), + url('iconfont.woff?t=1693494754638') format('woff'), + url('iconfont.ttf?t=1693494754638') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-yanghuguanli:before { + content: "\e77c"; +} + +.icon-keyan:before { + content: "\e600"; +} + +.icon-zhuanjia:before { + content: "\e607"; +} + +.icon-zhuanjia-copy:before { + content: "\ec82"; +} + +.icon-yiwen:before { + content: "\e62c"; +} + +.icon-xiaoxi-zhihui:before { + content: "\e61d"; +} + +.icon-icon-test:before { + content: "\e6e7"; +} + +.icon-pinglun:before { + content: "\e8b4"; +} + +.icon-xiala:before { + content: "\e62e"; +} + +.icon-kehu:before { + content: "\e623"; +} + +.icon-bokeyuan:before { + content: "\e603"; +} + +.icon-tianchongxing-:before { + content: "\e638"; +} + +.icon-icon_tip_off:before { + content: "\e60d"; +} + +.icon-fenxiang:before { + content: "\e7c5"; +} + +.icon-gongnengtubiao-46-copy:before { + content: "\ec81"; +} + +.icon-gongnengtubiao-46:before { + content: "\e691"; +} + +.icon-shizhongclock74:before { + content: "\e972"; +} + +.icon-dianzan:before { + content: "\ec7f"; +} + +.icon-24gf-tags:before { + content: "\e885"; +} + +.icon-shoucang:before { + content: "\e8b9"; +} + +.icon-undo-full:before { + content: "\ea17"; +} + +.icon-editor2b:before { + content: "\e62d"; +} + +.icon-zhiding:before { + content: "\e634"; +} + +.icon-lianjie:before { + content: "\e6c8"; +} + +.icon-diliweizhi:before { + content: "\e637"; +} + +.icon-shizhong:before { + content: "\e78b"; +} + +.icon-xuexiao_xuexiaoxinxi:before { + content: "\e661"; +} + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.js b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.js new file mode 100644 index 0000000000000000000000000000000000000000..0c478864ae05550e9ae4800a18deed4a3452ee1b --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.js @@ -0,0 +1 @@ +window._iconfont_svg_string_4168841='',function(i){var c=(c=document.getElementsByTagName("script"))[c.length-1],l=c.getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var o,t,a,h,e,s=function(c,l){l.parentNode.insertBefore(c,l)};if(l&&!i.__iconfont__svg__cssinject__){i.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}o=function(){var c,l=document.createElement("div");l.innerHTML=i._iconfont_svg_string_4168841,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(c=document.body).firstChild?s(l,c.firstChild):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(o,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),o()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(a=o,h=i.document,e=!1,d(),h.onreadystatechange=function(){"complete"==h.readyState&&(h.onreadystatechange=null,n())})}function n(){e||(e=!0,a())}function d(){try{h.documentElement.doScroll("left")}catch(c){return void setTimeout(d,50)}n()}}(window); \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.json b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.json new file mode 100644 index 0000000000000000000000000000000000000000..a838e81d11f818ffc09dad427283210a18a1d9a8 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.json @@ -0,0 +1,198 @@ +{ + "id": "4168841", + "name": "论坛", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "35310946", + "name": "养护管理", + "font_class": "yanghuguanli", + "unicode": "e77c", + "unicode_decimal": 59260 + }, + { + "icon_id": "2584374", + "name": "科研", + "font_class": "keyan", + "unicode": "e600", + "unicode_decimal": 58880 + }, + { + "icon_id": "6756289", + "name": "专家", + "font_class": "zhuanjia", + "unicode": "e607", + "unicode_decimal": 58887 + }, + { + "icon_id": "37170635", + "name": "专家-copy", + "font_class": "zhuanjia-copy", + "unicode": "ec82", + "unicode_decimal": 60546 + }, + { + "icon_id": "705696", + "name": "疑问", + "font_class": "yiwen", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "33986996", + "name": "消息-置灰", + "font_class": "xiaoxi-zhihui", + "unicode": "e61d", + "unicode_decimal": 58909 + }, + { + "icon_id": "1810277", + "name": "火", + "font_class": "icon-test", + "unicode": "e6e7", + "unicode_decimal": 59111 + }, + { + "icon_id": "11372687", + "name": "评论", + "font_class": "pinglun", + "unicode": "e8b4", + "unicode_decimal": 59572 + }, + { + "icon_id": "8675195", + "name": "下拉", + "font_class": "xiala", + "unicode": "e62e", + "unicode_decimal": 58926 + }, + { + "icon_id": "2667538", + "name": "客户", + "font_class": "kehu", + "unicode": "e623", + "unicode_decimal": 58915 + }, + { + "icon_id": "3315084", + "name": "博客园", + "font_class": "bokeyuan", + "unicode": "e603", + "unicode_decimal": 58883 + }, + { + "icon_id": "6446182", + "name": "加关注", + "font_class": "tianchongxing-", + "unicode": "e638", + "unicode_decimal": 58936 + }, + { + "icon_id": "1048860", + "name": "举报", + "font_class": "icon_tip_off", + "unicode": "e60d", + "unicode_decimal": 58893 + }, + { + "icon_id": "1761733", + "name": "分享", + "font_class": "fenxiang", + "unicode": "e7c5", + "unicode_decimal": 59333 + }, + { + "icon_id": "36668709", + "name": "功能图标-46-copy", + "font_class": "gongnengtubiao-46-copy", + "unicode": "ec81", + "unicode_decimal": 60545 + }, + { + "icon_id": "14328038", + "name": "功能图标-46", + "font_class": "gongnengtubiao-46", + "unicode": "e691", + "unicode_decimal": 59025 + }, + { + "icon_id": "866325", + "name": "时钟_clock74", + "font_class": "shizhongclock74", + "unicode": "e972", + "unicode_decimal": 59762 + }, + { + "icon_id": "6337455", + "name": "点赞", + "font_class": "dianzan", + "unicode": "ec7f", + "unicode_decimal": 60543 + }, + { + "icon_id": "7542757", + "name": "24gf-tags", + "font_class": "24gf-tags", + "unicode": "e885", + "unicode_decimal": 59525 + }, + { + "icon_id": "11372701", + "name": "收藏", + "font_class": "shoucang", + "unicode": "e8b9", + "unicode_decimal": 59577 + }, + { + "icon_id": "18171143", + "name": "回复,转发", + "font_class": "undo-full", + "unicode": "ea17", + "unicode_decimal": 59927 + }, + { + "icon_id": "880428", + "name": "扳手", + "font_class": "editor2b", + "unicode": "e62d", + "unicode_decimal": 58925 + }, + { + "icon_id": "20226463", + "name": "置顶", + "font_class": "zhiding", + "unicode": "e634", + "unicode_decimal": 58932 + }, + { + "icon_id": "673794", + "name": "链接", + "font_class": "lianjie", + "unicode": "e6c8", + "unicode_decimal": 59080 + }, + { + "icon_id": "691179", + "name": "地理位置", + "font_class": "diliweizhi", + "unicode": "e637", + "unicode_decimal": 58935 + }, + { + "icon_id": "3092306", + "name": "时钟", + "font_class": "shizhong", + "unicode": "e78b", + "unicode_decimal": 59275 + }, + { + "icon_id": "7765186", + "name": "学校_学校信息", + "font_class": "xuexiao_xuexiaoxinxi", + "unicode": "e661", + "unicode_decimal": 58977 + } + ] +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.ttf b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9a0bd7400ddcc22983bea501fc08ce423fcbf9f4 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.ttf differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.woff b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..aa63afec398805ba36195eef70c68b8ea86256d8 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.woff differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.woff2 b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9a2b7ba6974e9741cf84ca77a7e49bd26158bd92 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/iconfont.woff2 differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/icons/message.svg b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/icons/message.svg new file mode 100644 index 0000000000000000000000000000000000000000..3b067296c59a9864a1cfe6cc0a3ef047a58ee08f --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/icons/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/404.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/404.png new file mode 100644 index 0000000000000000000000000000000000000000..a5ad6386c4ad7c811d12297ebe855da8106ac685 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/404.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/center.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/center.png new file mode 100644 index 0000000000000000000000000000000000000000..05f3aa0bd289ba86bcb605f5d2c4f502a390017e Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/center.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/checkCode.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/checkCode.png new file mode 100644 index 0000000000000000000000000000000000000000..90a2d8d2b004511789ed56b0cbc465cccf08af2a Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/checkCode.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/comment.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..1f351b00c738a6aded24308b9d07b52499d5c8e5 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/comment.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/delete_comment.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/delete_comment.png new file mode 100644 index 0000000000000000000000000000000000000000..1c50ae1c57ab3eb40deeb9e1809f210d6a5e7847 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/delete_comment.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/detailFun.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/detailFun.png new file mode 100644 index 0000000000000000000000000000000000000000..68668bb0e5445368ba3462e5abe28508e17ceb5a Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/detailFun.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/editFun.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/editFun.png new file mode 100644 index 0000000000000000000000000000000000000000..9dec5592e88bf2bfc404088b4f0b41773d4f1960 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/editFun.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/email.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/email.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5789761400d5e15e416a96f5f6b95c9f587626 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/email.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/empty.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..0701b15277650636e61e1bee71ff04f594686cd7 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/empty.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/face.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/face.png new file mode 100644 index 0000000000000000000000000000000000000000..28ea4b9690c593a2fb0acbe9b257bb0c66a3a1a3 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/face.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/female.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/female.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb10c55f9c16b6213fcfc9a09f5cceb6243d0ff Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/female.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/follower.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/follower.png new file mode 100644 index 0000000000000000000000000000000000000000..80a546aa00104151e4a090281bda99463d8c7d69 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/follower.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/following.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/following.png new file mode 100644 index 0000000000000000000000000000000000000000..2b23137dc1f91487c0e8b9cf3b332c05ad38c124 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/following.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/forum.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/forum.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb131981b10eaa8fc1c71039cbb6f8bc0a26c32 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/forum.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/haveCollect.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/haveCollect.png new file mode 100644 index 0000000000000000000000000000000000000000..3ed1ff2daa22ff59b60160d7910e8b91ede614fc Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/haveCollect.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/haveLike.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/haveLike.png new file mode 100644 index 0000000000000000000000000000000000000000..d48e0b90ce8e2636459d150eb49caf678bee3924 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/haveLike.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/haveNotCollect.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/haveNotCollect.png new file mode 100644 index 0000000000000000000000000000000000000000..be6cf8abc942929811c01bfd0890e6de5e6e0544 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/haveNotCollect.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/haveNotLike.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/haveNotLike.png new file mode 100644 index 0000000000000000000000000000000000000000..8f0698c5bc14883f8d31b253ee35182144276dc4 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/haveNotLike.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/homeFun.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/homeFun.png new file mode 100644 index 0000000000000000000000000000000000000000..024ab2a587a08c5a4233454a6b5536e59f7a4112 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/homeFun.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/level_comment.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/level_comment.png new file mode 100644 index 0000000000000000000000000000000000000000..82b9252ad6a559237df85911a51e9adfd26c1f66 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/level_comment.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/link.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/link.png new file mode 100644 index 0000000000000000000000000000000000000000..881e27055d9b55d24ea4faf2efe1d2834339c5a7 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/link.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/logout.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/logout.png new file mode 100644 index 0000000000000000000000000000000000000000..bff1e34993cb1a653a5d1058d193e2825a336e93 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/logout.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/male.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/male.png new file mode 100644 index 0000000000000000000000000000000000000000..ae1a0f55ceb2c79fc37118ef5bb86df52f78514e Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/male.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/msg.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/msg.png new file mode 100644 index 0000000000000000000000000000000000000000..196fd44f8fad9648ad0cc46a0cf9b5ebc3e37c62 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/msg.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/noData.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/noData.png new file mode 100644 index 0000000000000000000000000000000000000000..0a49201b3656958f04b9d54ec9df467c696a25cd Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/noData.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/pwd.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/pwd.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1111feb2830296fdeca78e58fe1f7a888f6e7d Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/pwd.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/searchFun.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/searchFun.png new file mode 100644 index 0000000000000000000000000000000000000000..eb50a7ce5fffbbf27d13f1caeb9001fe9a8b9f48 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/searchFun.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/set.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/set.png new file mode 100644 index 0000000000000000000000000000000000000000..410aaf34e4f2144bf3dc82f7b41c9870f76ad934 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/set.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/temp.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/temp.png new file mode 100644 index 0000000000000000000000000000000000000000..6e822ca08cf84b79f910d88a3cf92cf3f9d44e2d Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/temp.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/userFun.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/userFun.png new file mode 100644 index 0000000000000000000000000000000000000000..b261496ddf7d0e5336322cbb581aef621da29ec5 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/userFun.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/username.png b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/username.png new file mode 100644 index 0000000000000000000000000000000000000000..a795418f8dfb80e8f2a0c2b762853d45424ecd46 Binary files /dev/null and b/LinZeXun-examples/CS.DEEP_Vue3/src/assets/image/username.png differ diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/SvgIcon/index.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/SvgIcon/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..5a29b8e5fc243735f9b65c3c6dfcaef20e9c2753 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/SvgIcon/index.vue @@ -0,0 +1,29 @@ + + + + + \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/__tests__/HelloWorld.spec.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/components/__tests__/HelloWorld.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..2533202008f7270910420c60a420efaf9b505c90 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/__tests__/HelloWorld.spec.ts @@ -0,0 +1,11 @@ +import { describe, it, expect } from 'vitest' + +import { mount } from '@vue/test-utils' +import HelloWorld from '../HelloWorld.vue' + +describe('HelloWorld', () => { + it('renders properly', () => { + const wrapper = mount(HelloWorld, { props: { msg: 'Hello Vitest' } }) + expect(wrapper.text()).toContain('Hello Vitest') + }) +}) diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/ArticleHtml.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/ArticleHtml.vue new file mode 100644 index 0000000000000000000000000000000000000000..399b1467146a65c338c23421fd8dcc8ccfdcdcd8 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/ArticleHtml.vue @@ -0,0 +1,460 @@ + + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/CalendarHeatmap.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/CalendarHeatmap.vue new file mode 100644 index 0000000000000000000000000000000000000000..460e930a5de080688442c79c315514b4f8f139e6 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/CalendarHeatmap.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/FooterBar.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/FooterBar.vue new file mode 100644 index 0000000000000000000000000000000000000000..5980fc99208515b4d10bcfc3e64a135040a06f5e --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/FooterBar.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/TopNavBar.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/TopNavBar.vue new file mode 100644 index 0000000000000000000000000000000000000000..099d42e3a7e29c9ae990de7d691ecca6064bacf1 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/TopNavBar.vue @@ -0,0 +1,376 @@ + + + + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/UserCard.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/UserCard.vue new file mode 100644 index 0000000000000000000000000000000000000000..ea2a84e222b7d550fe057a656c64b90ba1444c8a --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/common/UserCard.vue @@ -0,0 +1,81 @@ + + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconCommunity.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconCommunity.vue new file mode 100644 index 0000000000000000000000000000000000000000..2dc8b055253af30fb797037e2fe260505f0cf711 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconDocumentation.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconDocumentation.vue new file mode 100644 index 0000000000000000000000000000000000000000..6d4791cfbcf2782b3e5ffbabd042d4c47b2fbbed --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconEcosystem.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconEcosystem.vue new file mode 100644 index 0000000000000000000000000000000000000000..c3a4f078c0bd340a33c61ea9ecd8a755d03571ed --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconSupport.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconSupport.vue new file mode 100644 index 0000000000000000000000000000000000000000..7452834d3ef961ce24c3a072ddba2620b6158bae --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconSupport.vue @@ -0,0 +1,7 @@ + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconTooling.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconTooling.vue new file mode 100644 index 0000000000000000000000000000000000000000..660598d7c76644ffe126a1a1feb1606650bfb937 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/index.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/components/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..7d989815439374390f1d1a04acb265e735a919af --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/index.ts @@ -0,0 +1,9 @@ +import SvgIcon from './SvgIcon/index.vue'; +const allGlobalComponent = { SvgIcon } +export default { + install(app) { + Object.keys(allGlobalComponent).forEach(key => { + app.component(key,allGlobalComponent[key]); + }) + } +} \ No newline at end of file diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/mini/AvatarAndUsername.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/mini/AvatarAndUsername.vue new file mode 100644 index 0000000000000000000000000000000000000000..f21a071e728e9dc13a52f5f4c1fec0d16b59434d --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/mini/AvatarAndUsername.vue @@ -0,0 +1,157 @@ + + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/mini/RegisterAndLogin.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/mini/RegisterAndLogin.vue new file mode 100644 index 0000000000000000000000000000000000000000..270a990e0fec3cef95d87bcb254d407ca361038f --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/mini/RegisterAndLogin.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/components/mini/WordCloud.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/components/mini/WordCloud.vue new file mode 100644 index 0000000000000000000000000000000000000000..4191917abc0033d69eec25f513ebd511a5f637bc --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/components/mini/WordCloud.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/global/const/index.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/global/const/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..2e26fdaa8a67fe78c5fe558c85250a75995a9dbd --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/global/const/index.ts @@ -0,0 +1,198 @@ +/* +* 全局常量的定义 +* 创建时间: 2023-07-09 +* */ + +import {commentType, twoLevelCommentType} from "@/type"; + +const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] +const COLORS = ['#ebedf0', '#c6e48b', '#7bc96f', '#239a3b', '#196127'] +const DEFAULTUSERINFO = { + nodeId: -1, + id: 0, + username: '2aurora2', + email: '', + password: '', + gender: 1, + age: 18, + avatar: 'https://img.51miz.com/Element/00/88/08/84/72f298b9_E880884_d0f63115.png', + description: "这个人很懒,什么都没写欸~", + version: 1 +} +const DEFAULTARTICLE = { + nodeId: -1, + id: 0, + authorId: 0, + title: '师范生如何提高自主学习能力?', + content: ` +## 自主学习能力的重要性 + +1. xxxx +2. xxxx +3. xxxx + +## 如何提高自主学习能力 + +1. xxxx +2. xxxx`, + categoryId: -1, + createTime: 1689949389, + updateTime: 1689949389, + version: 1, + draft: 1 +} +const CATEGORYLIST = ['专业知识', '分享发现', '吐槽讨论'] +const DEFAULTCOMMENT: commentType = { + id: 1, + content: "学到了很多感谢分享!", + authorId: 0, + articleId: 1, + createTime: 1690965366840, + isReply: 0, + replyId: 1, + isNasty: 0, + version: null +} +const DEFAULTREPLYCOMMENT: commentType = { + id: 1, + content: "以后有机会可以多交流交流呀~", + authorId: 1, + articleId: 1, + createTime: 1690965366840, + isReply: 0, + replyId: 1, + isNasty: 1, + version: null +} + +const DEFAULTREPLYCOMMENTPLUS = { + id: 1, + content: "没事没事,说不定下一发就出了呢", + authorId: 0, + articleId: 1, + createTime: 1690965366840, + isReply: 0, + replyId: 1, + isNasty: 0, + version: null +} + +const DEFAULTREPLYCOMMENTREQ = { + articleId: 0, + content: '', + replyId: 0, + replyName: '布林布林的', + isReply: 1 +} + +const DEFAULTREPLYCOMMENTREQPLUS = { + articleId: 0, + content: '', + replyId: 0, + replyName: '叽里咕噜', + isReply: 1 +} + +const DEFAULTTWOLEVELCOMMENT = { + avatar: 'https://img.51miz.com/Element/00/88/08/84/72f298b9_E880884_d0f63115.png', + name: '2aurora2', + publishTime: '2023-08-05 17:30:30', + ownReplyContent: DEFAULTREPLYCOMMENT, + quoteContent: '学到了很多,感谢分享', + isOwn: false, + isNasty: 0, + isShowNastyMark: false +} + +const DEFAULTONELEVELCOMMENT = { + avatar: 'https://img.51miz.com/Element/00/88/08/84/72f298b9_E880884_d0f63115.png', + name: '布林布林的', + content: DEFAULTCOMMENT, + isShowTwoLevelComment: false, + isShowEmoji: false, + isShowNastyMark: false, + publishTime: '2023-8-4 22:20:20', + numOfReply: 1, + isOwn: false, + twoLevelCommentList: [DEFAULTTWOLEVELCOMMENT], + replyEditComment: DEFAULTREPLYCOMMENTREQ +} + +const DEFAULTTWOLEVELCOMMENTPLUS = { + avatar: 'https://img.51miz.com/Element/00/88/08/84/72f298b9_E880884_d0f63115.png', + name: 'GGBond', + publishTime: '2023-08-05 17:30:30', + ownReplyContent: DEFAULTREPLYCOMMENTPLUS, + quoteContent: '啊啊啊啊今天10连没出金QWQ,和散兵无缘了QWQ,巴拉巴拉巴拉巴拉巴拉;啊啊啊啊今天10连没出金QWQ,和散兵是不是无缘了QWQ,巴拉巴拉巴拉巴拉巴拉', + isOwn: true, + isNasty: 0, + isShowNastyMark: false +} + +const DEFAULTONELEVELCOMMENTPLUS = { + avatar: 'https://img.51miz.com/Element/00/88/08/84/72f298b9_E880884_d0f63115.png', + name: '叽里咕噜', + content: DEFAULTCOMMENT, + isShowTwoLevelComment: false, + isShowEmoji: false, + isShowNastyMark: false, + publishTime: '2023-8-4 22:20:20', + numOfReply: 2, + isOwn: false, + twoLevelCommentList: [DEFAULTTWOLEVELCOMMENT, DEFAULTTWOLEVELCOMMENTPLUS], + replyEditComment: DEFAULTREPLYCOMMENTREQPLUS +} + +const DEFAULTARTICLEITEM = { + id: 1, + authorId: 1, + authorName: '长耳朵提提', + avatar: 'https://img.51miz.com/Element/00/88/08/84/72f298b9_E880884_d0f63115.png', + title: '【论坛指引】新用户必看!', + elapsed: '刚刚', + category: '专业知识' +} + +const CATEGORYOBJ = [ + { + name: '专业知识', + intro: '这里是分享知识的专属区域,在这里你可以看到专业性的知识的讨论~' + }, + { + name: '分享发现', + intro: '本论坛不局限分享知识,在这里你可以看到更多其他的有趣的发现~' + }, + { + name: '吐槽讨论', + intro: '在这里大家可以在合法合理的范围内进行适当地吐槽讨论~' + } +] + +const DEFAULTDRAFTITEM = { + id: 0, + title: '加载中……', + updateTime: '2023-9-19 20:12:12' +} + +const DEFAULTPERDAY = { + data: '2023-09-24', + activity: 0 +} + +export default { + MONTHS, // 各月份的英文简写 + COLORS, // 不同活跃度的颜色标注 + DEFAULTUSERINFO, // 默认用户信息 + DEFAULTARTICLE, // 默认文章信息 + CATEGORYLIST, // 文章分类 + DEFAULTCOMMENT, // 默认评论 + DEFAULTONELEVELCOMMENT, // 默认一级评论 + DEFAULTONELEVELCOMMENTPLUS, // 默认一级评论 + DEFAULTTWOLEVELCOMMENT, // 默认二级评论 + DEFAULTTWOLEVELCOMMENTPLUS,// 默认二级评论 + DEFAULTREPLYCOMMENTREQ,// 默认回复请求 + DEFAULTARTICLEITEM, // 默认文章列表Item + CATEGORYOBJ, // 分类介绍 + DEFAULTDRAFTITEM, // 默认草稿箱Item + DEFAULTPERDAY, // 默认活跃度信息 +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/global/utils/index.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/global/utils/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..5d5ff2f728b0869e71425907bac57434fabe7054 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/global/utils/index.ts @@ -0,0 +1,109 @@ +// instruction: 各类公共接口文件 + +// function:通过图片url获取file对象 +export async function getImageFileFromUrl(imageUrl: string): Promise { + const response = await fetch(imageUrl); + const blob = await response.blob(); + const fileName = imageUrl.substring(imageUrl.lastIndexOf('/') + 1); + + // 使用 File 构造函数创建一个新的文件对象 + return new File([blob], fileName, {type: blob.type}); +} + +// function:时间戳转换不含时分秒 +export function timestampToDateTimeStringSimple(timestamp: number): string { + const date = new Date(timestamp); // 将时间戳转换为毫秒 + + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + + return `${year}-${month}-${day}`; +} + +// function:时间戳转换含时分秒 +export function timestampToDateTimeString(timestamp: number): string { + const date = new Date(timestamp); // 将时间戳转换为毫秒 + + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + const seconds = String(date.getSeconds()).padStart(2, '0'); + + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; +} + +// function:计算字符串的字节长 +export function getStringLengthOfChar(str: string): number { + let length = 0; + for (let i = 0; i < str.length; i++) { + // 判断字符是否为中文 + if (str.charCodeAt(i) >= 0x4e00 && str.charCodeAt(i) <= 0x9fff) { + length += 2; // 中文字符长度为2 + } else { + length += 1; // 英文字符长度为1 + } + } + return length; +} + +// function:生成随机浅色系颜色 +export function generateLightColor(): string { + const hue = Math.floor(Math.random() * 360); // 随机选择色相 + const saturation = Math.floor(Math.random() * 40) + 60; // 随机选择饱和度(60-100) + const lightness = Math.floor(Math.random() * 30) + 70; // 随机选择亮度(70-100) + + return `hsl(${hue}, ${saturation}%, ${lightness}%)`; +} + +// function:生成随机深色色系颜色 +export function generateDarkColor(): string { + const hue = Math.floor(Math.random() * 360); // 随机选择色相 + const saturation = Math.floor(Math.random() * 40) + 30; // 随机选择饱和度(60-100) + const lightness = Math.floor(Math.random() * 30) + 10; // 随机选择亮度(70-100) + + return `hsl(${hue}, ${saturation}%, ${lightness}%)`; +} + +// function:计算距今时间 +export function getElapsedTime(timestamp: number): string { + const currentTimestamp = Date.now(); + const timeDifference = currentTimestamp - timestamp; + + const minutes = Math.floor(timeDifference / (1000 * 60)); + + if (minutes < 1) { + // 不到一分钟,显示刚刚 + return "刚刚"; + } else if (minutes < 60) { + // 不到一小时,显示几分钟前 + return `${minutes} 分钟前`; + } else if (minutes >= 60 && minutes < 1440) { + // 超过一小时但不到一天,显示几小时前 + const hours = Math.floor(minutes / 60); + return `${hours} 小时前`; + } else { + // 超过一天,显示几天前 + const days = Math.floor(minutes / 1440); + return `${days} 天前`; + } +} + +// function:防抖函数 +export function debounce(func, delay) { + let timerId; + + return function (...args) { + if (timerId) { + clearTimeout(timerId); + } + + timerId = setTimeout(() => { + func.apply(this, args); + timerId = null; + }, delay); + }; +} + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/main.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/main.ts new file mode 100644 index 0000000000000000000000000000000000000000..4fe1a00f64bc77d7d08229903739a60fdbac283a --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/main.ts @@ -0,0 +1,33 @@ +import { createApp } from 'vue' +import App from './App.vue' +import router from './router' +import ElementPlus from 'element-plus' +import * as ElementPlusIconsVue from '@element-plus/icons-vue' +import 'element-plus/dist/index.css' +import store, { key } from "@/store"; +import mavonEditor from 'mavon-editor' +import 'mavon-editor/dist/css/index.css' +import '@/assets/iconfont.css'; + + +const app = createApp(App) + +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component) +} + +app.use(router) + +app.use(store, key) + +// noinspection TypeScriptValidateTypes +app.use(ElementPlus); + +import 'virtual:svg-icons-register' +import globalComponent from '@/components' + +app.use(globalComponent); + +app.use(mavonEditor) + +app.mount('#app') diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/router/createRouteGuards.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/router/createRouteGuards.ts new file mode 100644 index 0000000000000000000000000000000000000000..c8284dff7f200837039bfbc81b7c6f85640fe417 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/router/createRouteGuards.ts @@ -0,0 +1,18 @@ +import {Router} from "vue-router"; +import {Store} from "vuex"; +import StateTypes from "@/store/interface"; + +export const createRouteGuards = (route: Router, store: Store) => { + route.beforeEach(async (to, from, next) => { + // 登录校验 + if (!to.meta.verifyLoginState) { + next() + } else { + if (to.path === '/login' || to.path === '/register' || to.path === '/resetPwd' || store.state.haveLogin) { + next() + } else { + next({path: '/login'}) + } + } + }) +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/router/index.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/router/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..ddf616a7484d3749fe5d817c645410351e610cea --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/router/index.ts @@ -0,0 +1,175 @@ +import {createRouter, createWebHistory, RouterOptions} from 'vue-router' +import HomeView from '../views/common/HomeView.vue' +import {createRouteGuards} from "@/router/createRouteGuards"; +import store from "@/store"; + +declare module 'vue-router' { + interface RouteMeta { + verifyLoginState: boolean + } +} + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'home', + component: HomeView, + meta: { + verifyLoginState: false + } + }, + { + path: '/login', + name: 'login', + component: () => import('../views/user/LoginView.vue'), + meta: { + verifyLoginState: true + } + }, + { + path: '/register', + name: 'register', + component: () => import('../views/user/RegisterView.vue'), + meta: { + verifyLoginState: true + } + }, + { + path: '/resetPwd', + name: 'resetPwd', + component: () => import('../views/user/ResetPwdView.vue'), + meta: { + verifyLoginState: true + } + }, + { + // userId只匹配数字 + path: '/user/:userId(\\d+)', + name: 'userInfo', + component: () => import('../views/user/UserInfoView.vue'), + meta: { + verifyLoginState: true + } + }, + { + path: '/edit/userinfo', + name: 'userinfoEdit', + component: () => import('@/views/user/UserinfoEditView.vue'), + meta: { + verifyLoginState: true + } + }, + { + path: '/post/:postId(\\d+)', + name: 'articleDetails', + component: () => import('@/views/article/ArticleDetailsView.vue'), + meta: { + verifyLoginState: true + } + }, + { + path: '/edit/post/:postId', + name: 'articleEdit', + component: () => import('@/views/article/ArticleEditView.vue'), + meta: { + verifyLoginState: true + } + }, + { + path: '/show/:userId(\\d+)', + name: 'show', + component: () => import('@/views/user/UserDetailView.vue'), + redirect: '/show/:userId(\\d+)/followings', + children: [ + { + path: 'followings', + name: 'following', + component: () => import('@/views/user/details/MyFollowingView.vue'), + meta: { + verifyLoginState: true + } + }, + { + path: 'followers', + name: 'follower', + component: () => import('@/views/user/details/MyFollowerView.vue'), + meta: { + verifyLoginState: true + } + }, + { + path: 'messages', + name: 'message', + component: () => import('@/views/user/details/MyMessageView.vue'), + meta: { + verifyLoginState: true + } + }, + { + path: 'drafts', + name: 'draft', + component: () => import('@/views/user/details/MyDraftView.vue'), + meta: { + verifyLoginState: true + } + }, + ] + }, + { + path: '/about', + name: 'aboutUs', + component: () => import('@/views/common/AboutUsView.vue'), + meta: { + verifyLoginState: false + } + }, + { + path: '/links', + name: 'links', + component: () => import('@/views/common/LinksView.vue'), + meta: { + verifyLoginState: false + } + }, + { + path: '/cate/:cateId([0-2])', + name: 'category', + component: () => import('@/views/article/ArticleDiffCateView.vue'), + meta: { + verifyLoginState: false + } + }, + { + path: '/search?key=:key', + name: 'search', + component: () => import('@/views/article/ArticleSearchView.vue'), + meta: { + verifyLoginState: false + } + }, + { + path: '/guide', + name: 'guide', + component: () => import('@/views/common/GuidanceView.vue'), + meta: { + verifyLoginState: false + } + }, + { + path: '/:pathMatch(.*)*', + name: 'notFound', + component: () => import('../views/common/NotFoundView.vue'), + meta: { + verifyLoginState: false + } + } + ], + scrollBehavior(to, from, savedPosition) { + return {top: 0} + }, +} as RouterOptions) + +createRouteGuards(router, store) +export default router diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/store/index.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/store/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..44d02498e337f64da1f5d430e12101a445d0851f --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/store/index.ts @@ -0,0 +1,24 @@ +import {createStore, Store,} from 'vuex' +import StateTypes from "@/store/interface"; +import {InjectionKey} from "vue"; +import createPersistedState from 'vuex-persistedstate'; +import CONST from '../global/const/index' +import {userType} from "@/type"; + +export default createStore({ + state: { + userinfo: CONST.DEFAULTUSERINFO, + haveLogin: false + }, + mutations: { + updateUserinfo(state, info: userType) { + state.userinfo = info; + }, + updateLoginState(state) { + state.haveLogin = !state.haveLogin; + } + }, + plugins: [createPersistedState()] +}) + +export const key: InjectionKey> = Symbol('vue-store') as InjectionKey>; diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/store/interface.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/store/interface.ts new file mode 100644 index 0000000000000000000000000000000000000000..aa6a998d9e34a8f898d4123813e7edf76c5b5ebe --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/store/interface.ts @@ -0,0 +1,6 @@ +import {userType} from "@/type"; + +export default interface StateTypes { + userinfo: userType; + haveLogin: boolean; +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/type/articleType.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/type/articleType.ts new file mode 100644 index 0000000000000000000000000000000000000000..03c08622ee07c634bd88c844299163eb55d085c7 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/type/articleType.ts @@ -0,0 +1,33 @@ +export type articleBaseInfo = { + nodeId: number; + id: number; + authorId: number; + title: string; + content: string; + categoryId: number; + createTime: number; + updateTime: number; + version: number; + draft: number; +} + +export type articleType = { + article: articleBaseInfo, + tag?: Array +} + +export type articleItemType = { + id: number, + authorId: number, + authorName: string, + avatar: string, + title: string, + elapsed: string, + category: string +} + +export type draftItemType = { + id: number, + title: string, + updateTime: string +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/type/commentType.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/type/commentType.ts new file mode 100644 index 0000000000000000000000000000000000000000..71b83be5dbf87c05713ede2e0c1d5877df5eb56c --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/type/commentType.ts @@ -0,0 +1,45 @@ +export type commentType = { + id: number, + content: string, + authorId: number, + articleId: number, + createTime: number, + isReply: number, + replyId?: number, + isNasty: number, + version?: any +} + +export type replyCommentReqType = { + articleId: number, + content: string, + replyId: number, + replyName: string, + isReply: number +} + +export type oneLevelCommentType = { + avatar: string, + name: string, + content: commentType, + publishTime: string, + isShowTwoLevelComment: boolean, + isShowEmoji: boolean, + isShowNastyMark: boolean, + numOfReply: number, + isOwn: boolean, + twoLevelCommentList: Array + replyEditComment: replyCommentReqType +} + +export type twoLevelCommentType = { + avatar: string, + name: string, + publishTime: string, + ownReplyContent: commentType, + quoteContent: string, + isOwn: boolean, + isNasty: number, + isShowNastyMark: boolean, +} + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/type/commonType.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/type/commonType.ts new file mode 100644 index 0000000000000000000000000000000000000000..4bc2d2713281164207f09753f18ecbc87be16c98 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/type/commonType.ts @@ -0,0 +1,7 @@ +/*话题广场每个标签的类型*/ +export type tagItemType = { + text: string, + color: string, + freq: number, + size: string +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/type/heatmapType.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/type/heatmapType.ts new file mode 100644 index 0000000000000000000000000000000000000000..9ebb33f860fc82ffb008a2a4cb13cf6ee77e2dd1 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/type/heatmapType.ts @@ -0,0 +1,24 @@ +/* +* 日历热力图类型定义文件,包含一些用户类型的定义 +* 创建者: 2aurora2 +* 创建时间: 2023-07-09 +* */ + +// 日历热力图每一单位列的类型 +export type columnDate = { + nodes: number; + title: string; + switch: boolean; + data: Array; +} +// 日历热力图每一单位节点的类型 +export type nodeDate = { + data: string; + color: string; + activity: number; +} +// 后端拿取的单位节点类型 +export type perDay = { + data: string; + activity: number; +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/type/index.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/type/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..e33bdcbc868976671a23b061350e8f7a1c512683 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/type/index.ts @@ -0,0 +1,5 @@ +export * from './userType' +export * from './heatmapType' +export * from './articleType' +export * from './commentType' +export * from './commonType' diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/type/userType.ts b/LinZeXun-examples/CS.DEEP_Vue3/src/type/userType.ts new file mode 100644 index 0000000000000000000000000000000000000000..e342b43fced170f459ff1129dcca9fa156da945c --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/type/userType.ts @@ -0,0 +1,38 @@ +/* +* 用户类型定义文件,包含一些用户类型的定义 +* 创建者: 2aurora2 +* 创建时间: 2023-07-09 +* */ + +// 用户登录传后端数据类型 +export type loginType = { + email: string; + password: string; +} +// 用户注册传后端数据类型 +export type registerType = { + email: string; + username: string; + checkCode: string; + password: string; + confirmPwd: string; +} +// 用户重置密码传后端数据类型 +export type resetPwdType = { + email: string; + checkCode: string; + password: string; + confirmPwd: string; +} +export type userType = { + nodeId: number; + id: number; + username: string; + email: string; + password: string; + gender: number; + age: number; + avatar: string; + description: string; + version: number; +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/views/article/ArticleDetailsView.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/views/article/ArticleDetailsView.vue new file mode 100644 index 0000000000000000000000000000000000000000..aa84f287490d140fcbd88777bb8c3e2a21c80edc --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/views/article/ArticleDetailsView.vue @@ -0,0 +1,1314 @@ + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/views/user/details/MyDraftView.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/views/user/details/MyDraftView.vue new file mode 100644 index 0000000000000000000000000000000000000000..85e5dd0549dd7093bd987333473fa99dfc2b9b51 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/views/user/details/MyDraftView.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/views/user/details/MyFollowerView.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/views/user/details/MyFollowerView.vue new file mode 100644 index 0000000000000000000000000000000000000000..9c8a57e6eb1d34029e450e2c3c0a28154a0b602b --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/views/user/details/MyFollowerView.vue @@ -0,0 +1,231 @@ + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/views/user/details/MyFollowingView.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/views/user/details/MyFollowingView.vue new file mode 100644 index 0000000000000000000000000000000000000000..118efd8059759be872b0487d8f57b8c74b2d0b3b --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/views/user/details/MyFollowingView.vue @@ -0,0 +1,206 @@ + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/src/views/user/details/MyMessageView.vue b/LinZeXun-examples/CS.DEEP_Vue3/src/views/user/details/MyMessageView.vue new file mode 100644 index 0000000000000000000000000000000000000000..f4052f1c5d72aeae36bc6f2f9bcf42ee8de6d239 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/src/views/user/details/MyMessageView.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/LinZeXun-examples/CS.DEEP_Vue3/tsconfig.app.json b/LinZeXun-examples/CS.DEEP_Vue3/tsconfig.app.json new file mode 100644 index 0000000000000000000000000000000000000000..3e5b621ef68e8f64302b895fde847842ec08349e --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/tsconfig.app.json @@ -0,0 +1,12 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/tsconfig.json b/LinZeXun-examples/CS.DEEP_Vue3/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..100cf6a8f2b8b43c3fba052e5241951ecdd7a384 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/tsconfig.json @@ -0,0 +1,14 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.vitest.json" + } + ] +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/tsconfig.node.json b/LinZeXun-examples/CS.DEEP_Vue3/tsconfig.node.json new file mode 100644 index 0000000000000000000000000000000000000000..a52f76f329820d61d5116bb3b8013a8677c8ebce --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsconfig/node18/tsconfig.json", + "include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "playwright.config.*"], + "compilerOptions": { + "composite": true, + "module": "ESNext", + "types": ["node"] + } +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/tsconfig.vitest.json b/LinZeXun-examples/CS.DEEP_Vue3/tsconfig.vitest.json new file mode 100644 index 0000000000000000000000000000000000000000..d080d611e38db50e232a39df044d1770a0f45940 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/tsconfig.vitest.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.app.json", + "exclude": [], + "compilerOptions": { + "composite": true, + "lib": [], + "types": ["node", "jsdom"] + } +} diff --git a/LinZeXun-examples/CS.DEEP_Vue3/vite.config.ts b/LinZeXun-examples/CS.DEEP_Vue3/vite.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..3c63c0dfc10a248a1839a293d79f45a1666058e7 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/vite.config.ts @@ -0,0 +1,45 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import AutoImport from 'unplugin-auto-import/vite' +import Components from 'unplugin-vue-components/vite' +import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' +import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' +import path from 'path' +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + vueJsx(), + AutoImport({ + resolvers: [ElementPlusResolver()], + }), + Components({ + resolvers: [ElementPlusResolver()], + }), + createSvgIconsPlugin({ + iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')], + symbolId: 'icon-[dir]-[name]', + }) + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + server: { + host: '127.0.0.1', + port: 8080 + }, + css: { + // css预处理器 + preprocessorOptions: { + less: { + charset: false, + additionalData: '@import "./src/assets/base.css";', + }, + }, + }, +}) diff --git a/LinZeXun-examples/CS.DEEP_Vue3/vitest.config.ts b/LinZeXun-examples/CS.DEEP_Vue3/vitest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..3d9192133c0ff6abf26bb5363c9052c2eb011c35 --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/vitest.config.ts @@ -0,0 +1,18 @@ +import { fileURLToPath } from 'node:url' +import { mergeConfig } from 'vite' +import { configDefaults, defineConfig } from 'vitest/config' +import viteConfig from './vite.config' + +export default mergeConfig( + viteConfig, + defineConfig({ + test: { + environment: 'jsdom', + exclude: [...configDefaults.exclude, 'e2e/*'], + root: fileURLToPath(new URL('./', import.meta.url)), + transformMode: { + web: [/\.[jt]sx$/], + }, + } + }) +) diff --git a/LinZeXun-examples/CS.DEEP_Vue3/vuex.d.ts b/LinZeXun-examples/CS.DEEP_Vue3/vuex.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7cf544627c0839673b8c3243c75772b677f571bf --- /dev/null +++ b/LinZeXun-examples/CS.DEEP_Vue3/vuex.d.ts @@ -0,0 +1,12 @@ +import {ComponentCustomProperties} from "vue"; +import StateTypes from "@/store/interface"; +import {Store} from "vuex"; + + +// 模块扩展 +declare module '@vue/runtime-core' { + // 为 `this.$store` 提供类型声明 + interface ComponentCustomProperties { + $store: Store + } +} diff --git a/LinZeXun-examples/README.md b/LinZeXun-examples/README.md new file mode 100644 index 0000000000000000000000000000000000000000..85a8857e86d59df8db64c123056a832ebc57c17a --- /dev/null +++ b/LinZeXun-examples/README.md @@ -0,0 +1,65 @@ +为了方便论坛用户更好地了解本论坛的使用,特撰写此“入站指引”介绍本论坛的主要功能,主要包括: + +- 1\. 论坛首页 +- 2\. 文章编辑 +- 3\. 文章详情页 +- 4\. 全局搜索 +- 5\. 用户中心 + +## 论坛首页 + +1\. 用户可以点击**发布**进入文章的编辑页面,对于文章编辑页面下文有详细概述。 + +2\. 在首页的侧边可以实时看到论坛的流量情况,包括:用户数、博客数、创立时间。 + +3\. 首页主体是论坛文章的展示,我们采用分页展示的方式,除此之外还有按照发布时间、文章热度、推荐等方式进行排列展示。 + +![](./CS.DEEP_Vue3/src/assets/image/homeFun.png) + +## 文章编辑 + +文章编辑页面如下图,主要包括文章标题、文章分类、文章标签、内容主体、文章发布、文章删除几部分内容。 + +1\. 对于文章分类有**专业知识、分享发现、吐槽讨论**三种可供选择。 + +2\. 对于文章标签用户的可塑性较高,可以任意填写**三个**与文章相关的标签,但是对于标签的字数有一定的限制。 + +3\. 文章内容的编写采用markdown的这一方式来进行,对markdown不了解的用户可以点击**右上角的问号**来查询。 + +4\. 如果未完成文章的内容编写可以点击保存保存到草稿箱;同样也可对文章进行发布和删除操作。 + +![](README/editFun.png) + +## 文章详情页 + +1\. 文章详情页本平台采用marked + highlight.js实现对markdown格式的转换,展示文章的标题,标签,正文等内容。 + +2\. 在文章详情页用户可以进行点赞、收藏、评论等功能。 + +3\. 如果用户对文章作者感兴趣可以点击作者头像来进入作者用户的个人信息页进行关注等操作。 + +![](README/detailFun.png) + +## 全局搜索 + +1\. 本论坛的搜索采用opengauss数据库实现文章的全局关键字搜索,会根据用户输入的关键词进行实时搜索结果的展现。 + +2\. 搜索结果下拉列表只会展示至多5条数据,更多的结果可进行搜索结果页面查看。 + +![](README/searchFun.png) + +## 用户中心 + +1\. 用户在个人中心可以点击**编辑个人资料**进行个人信息的编辑。 + +2\. 用户可以实时得到自己的关注数和粉丝数,点击两者可分别进入关注或者粉丝的列表页面。 + +3\. 用户还可以在博客文章的区域看到自己发布的文章。 + +4\. 活跃度热力图展示是本论坛的一大特色,用户可以通过**发布文章、对文章进行评论、关注用户**等方式得到活跃度的提升,不同颜色代表活跃度的高低,颜色越深代表活跃度越高。用户可以查看过去一年自身的活跃度变化。 + +![](README/userFun.png) + +## Issue提出 + +最后的最后如果发现论坛的Bug欢迎邮箱联系: cs\_deep@163.com,让我们共同维护这个平台吧~ \ No newline at end of file diff --git a/LinZeXun-examples/README/detailFun.png b/LinZeXun-examples/README/detailFun.png new file mode 100644 index 0000000000000000000000000000000000000000..68668bb0e5445368ba3462e5abe28508e17ceb5a Binary files /dev/null and b/LinZeXun-examples/README/detailFun.png differ diff --git a/LinZeXun-examples/README/editFun.png b/LinZeXun-examples/README/editFun.png new file mode 100644 index 0000000000000000000000000000000000000000..9dec5592e88bf2bfc404088b4f0b41773d4f1960 Binary files /dev/null and b/LinZeXun-examples/README/editFun.png differ diff --git a/LinZeXun-examples/README/searchFun.png b/LinZeXun-examples/README/searchFun.png new file mode 100644 index 0000000000000000000000000000000000000000..eb50a7ce5fffbbf27d13f1caeb9001fe9a8b9f48 Binary files /dev/null and b/LinZeXun-examples/README/searchFun.png differ diff --git a/LinZeXun-examples/README/userFun.png b/LinZeXun-examples/README/userFun.png new file mode 100644 index 0000000000000000000000000000000000000000..b261496ddf7d0e5336322cbb581aef621da29ec5 Binary files /dev/null and b/LinZeXun-examples/README/userFun.png differ diff --git a/LinZeXun-examples/docs/function_docs.md b/LinZeXun-examples/docs/function_docs.md new file mode 100644 index 0000000000000000000000000000000000000000..85a8857e86d59df8db64c123056a832ebc57c17a --- /dev/null +++ b/LinZeXun-examples/docs/function_docs.md @@ -0,0 +1,65 @@ +为了方便论坛用户更好地了解本论坛的使用,特撰写此“入站指引”介绍本论坛的主要功能,主要包括: + +- 1\. 论坛首页 +- 2\. 文章编辑 +- 3\. 文章详情页 +- 4\. 全局搜索 +- 5\. 用户中心 + +## 论坛首页 + +1\. 用户可以点击**发布**进入文章的编辑页面,对于文章编辑页面下文有详细概述。 + +2\. 在首页的侧边可以实时看到论坛的流量情况,包括:用户数、博客数、创立时间。 + +3\. 首页主体是论坛文章的展示,我们采用分页展示的方式,除此之外还有按照发布时间、文章热度、推荐等方式进行排列展示。 + +![](./CS.DEEP_Vue3/src/assets/image/homeFun.png) + +## 文章编辑 + +文章编辑页面如下图,主要包括文章标题、文章分类、文章标签、内容主体、文章发布、文章删除几部分内容。 + +1\. 对于文章分类有**专业知识、分享发现、吐槽讨论**三种可供选择。 + +2\. 对于文章标签用户的可塑性较高,可以任意填写**三个**与文章相关的标签,但是对于标签的字数有一定的限制。 + +3\. 文章内容的编写采用markdown的这一方式来进行,对markdown不了解的用户可以点击**右上角的问号**来查询。 + +4\. 如果未完成文章的内容编写可以点击保存保存到草稿箱;同样也可对文章进行发布和删除操作。 + +![](README/editFun.png) + +## 文章详情页 + +1\. 文章详情页本平台采用marked + highlight.js实现对markdown格式的转换,展示文章的标题,标签,正文等内容。 + +2\. 在文章详情页用户可以进行点赞、收藏、评论等功能。 + +3\. 如果用户对文章作者感兴趣可以点击作者头像来进入作者用户的个人信息页进行关注等操作。 + +![](README/detailFun.png) + +## 全局搜索 + +1\. 本论坛的搜索采用opengauss数据库实现文章的全局关键字搜索,会根据用户输入的关键词进行实时搜索结果的展现。 + +2\. 搜索结果下拉列表只会展示至多5条数据,更多的结果可进行搜索结果页面查看。 + +![](README/searchFun.png) + +## 用户中心 + +1\. 用户在个人中心可以点击**编辑个人资料**进行个人信息的编辑。 + +2\. 用户可以实时得到自己的关注数和粉丝数,点击两者可分别进入关注或者粉丝的列表页面。 + +3\. 用户还可以在博客文章的区域看到自己发布的文章。 + +4\. 活跃度热力图展示是本论坛的一大特色,用户可以通过**发布文章、对文章进行评论、关注用户**等方式得到活跃度的提升,不同颜色代表活跃度的高低,颜色越深代表活跃度越高。用户可以查看过去一年自身的活跃度变化。 + +![](README/userFun.png) + +## Issue提出 + +最后的最后如果发现论坛的Bug欢迎邮箱联系: cs\_deep@163.com,让我们共同维护这个平台吧~ \ No newline at end of file diff --git a/LinZeXun-examples/docs/how_to.md b/LinZeXun-examples/docs/how_to.md new file mode 100644 index 0000000000000000000000000000000000000000..829aecc7d31a190acf211a278d8fc118b7205cfb --- /dev/null +++ b/LinZeXun-examples/docs/how_to.md @@ -0,0 +1,16 @@ +## 前端运行 + +* cd CS.DEEP_Vue3 进入根目录 +* npm install 下载依赖项 +* npm run dev 运行项目 +* main为项目主分支,成员主要在dev分支上开发 + +## 后端运行 + +建表语句见:[LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db · WA_automat/examples - 码云 - 开源中国 (gitee.com)](https://gitee.com/Wa_automat/examples/tree/master/LinZeXun-examples/CS.DEEP_SpringBoot/src/main/resources/db) + +安装并运行opengauss、redis、minio、neo4j + +运行flask微服务(恶评识别服务) + +运行SpringBoot项目 \ No newline at end of file