diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..db4cad6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,510 @@ +config.* + +# Created by https://www.toptal.com/developers/gitignore/api/visualstudio,visualstudiocode,node +# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudio,visualstudiocode,node + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test +.env*.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Storybook build outputs +.out +.storybook-out +storybook-static + +# rollup.js default build output +dist/ + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# Temporary folders +tmp/ +temp/ + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +### VisualStudio ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.[ji][sn][of][no] +coverage*.xml + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +### VisualStudio Patch ### +# Additional files built by Visual Studio +*.tlog + +# End of https://www.toptal.com/developers/gitignore/api/visualstudio,visualstudiocode,node diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..324421f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1778 @@ +{ + "name": "juanwangzhengba", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "fastify": "^3.17.0", + "fastify-static": "^4.2.2", + "socket.io": "^4.1.2", + "socket.io-client": "^4.1.2" + } + }, + "node_modules/@fastify/ajv-compiler": { + "version": "1.1.0", + "resolved": "https://registry.nlark.com/@fastify/ajv-compiler/download/@fastify/ajv-compiler-1.1.0.tgz", + "integrity": "sha1-XOgLH8i+v/yMW6Qo1eOS0PntEKE=", + "dependencies": { + "ajv": "^6.12.6" + } + }, + "node_modules/@fastify/forwarded": { + "version": "1.0.0", + "resolved": "https://registry.nlark.com/@fastify/forwarded/download/@fastify/forwarded-1.0.0.tgz", + "integrity": "sha1-zEo7wfAoVuVuZ9bWVQJujYwudCk=", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@fastify/proxy-addr": { + "version": "3.0.0", + "resolved": "https://registry.nlark.com/@fastify/proxy-addr/download/@fastify/proxy-addr-3.0.0.tgz", + "integrity": "sha1-fTu2R0oBsgYBAykpH07favivWC0=", + "dependencies": { + "@fastify/forwarded": "^1.0.0", + "ipaddr.js": "^2.0.0" + } + }, + "node_modules/@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.nlark.com/@types/component-emitter/download/@types/component-emitter-1.2.10.tgz?cache=0&sync_timestamp=1621240806137&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fcomponent-emitter%2Fdownload%2F%40types%2Fcomponent-emitter-1.2.10.tgz", + "integrity": "sha1-71sVibnxZURkLkc9tepWORB+8+o=" + }, + "node_modules/@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.nlark.com/@types/cookie/download/@types/cookie-0.4.0.tgz", + "integrity": "sha1-FPhUwPk9Mm452m47bzT303UT0Qg=" + }, + "node_modules/@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.nlark.com/@types/cors/download/@types/cors-2.8.10.tgz", + "integrity": "sha1-YcyEaYSeW83QxwRBIiZcOc7BDPQ=" + }, + "node_modules/@types/node": { + "version": "15.12.0", + "resolved": "https://registry.nlark.com/@types/node/download/@types/node-15.12.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-15.12.0.tgz", + "integrity": "sha1-akWdJhRQowDmhl+u3bWvAcM4m7M=" + }, + "node_modules/abstract-logging": { + "version": "2.0.1", + "resolved": "https://registry.nlark.com/abstract-logging/download/abstract-logging-2.0.1.tgz", + "integrity": "sha1-aww3HfIS23EptX0uf88oK4vxyDk=" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1621517685940&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz", + "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", + "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" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/archy/download/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.nlark.com/atomic-sleep/download/atomic-sleep-1.0.0.tgz", + "integrity": "sha1-64W3emAfyTLP5DLFrNNkqeLJB1s=", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/avvio": { + "version": "7.2.2", + "resolved": "https://registry.nlark.com/avvio/download/avvio-7.2.2.tgz", + "integrity": "sha1-WOAOeWiHACbNe31PaJ1ZbbYp4lE=", + "dependencies": { + "archy": "^1.0.0", + "debug": "^4.0.0", + "fastq": "^1.6.1", + "queue-microtask": "^1.1.2" + } + }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz", + "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=" + }, + "node_modules/base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/base64id/download/base64id-2.0.0.tgz", + "integrity": "sha1-J3Csa8R9MSr5eov5pjQ0LgzSXLY=", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/bufferutil": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/bufferutil/download/bufferutil-4.0.3.tgz", + "integrity": "sha1-ZnJLdWvtI818KMTTBteZT5lDzGs=", + "hasInstallScript": true, + "peer": true, + "dependencies": { + "node-gyp-build": "^4.2.0" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.nlark.com/cookie/download/cookie-0.4.1.tgz", + "integrity": "sha1-r9cT/ibr0hupXOth+agRblClN9E=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npm.taobao.org/cors/download/cors-2.8.5.tgz", + "integrity": "sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk=", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566571506&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz", + "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-4.2.2.tgz", + "integrity": "sha1-RNLqNnm49NT/ujPwPYZfwee/SVU=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.nlark.com/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding-negotiator": { + "version": "2.0.1", + "resolved": "https://registry.nlark.com/encoding-negotiator/download/encoding-negotiator-2.0.1.tgz", + "integrity": "sha1-eYcbtUc7gfagZw6N5TA/te4IaKM=", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/engine.io": { + "version": "5.1.1", + "resolved": "https://registry.nlark.com/engine.io/download/engine.io-5.1.1.tgz?cache=0&sync_timestamp=1621204854469&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fengine.io%2Fdownload%2Fengine.io-5.1.1.tgz", + "integrity": "sha1-ofl+Ud3xDL1NuLX/SxZarTdgzdM=", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-client": { + "version": "5.1.1", + "resolved": "https://registry.nlark.com/engine.io-client/download/engine.io-client-5.1.1.tgz", + "integrity": "sha1-9cOqrvG9yUQ6rG/95Is7L7LcVvw=", + "dependencies": { + "base64-arraybuffer": "0.1.4", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.1", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-4.0.2.tgz", + "integrity": "sha1-5B0LP7Zve/SjZx0gOKFUAk7bUB4=", + "dependencies": { + "base64-arraybuffer": "0.1.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.nlark.com/fast-decode-uri-component/download/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha1-Rvi2wisw/3qBNX1PWav66TggJUM=" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599659970&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&sync_timestamp=1576340291001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=" + }, + "node_modules/fast-json-stringify": { + "version": "2.7.6", + "resolved": "https://registry.nlark.com/fast-json-stringify/download/fast-json-stringify-2.7.6.tgz", + "integrity": "sha1-x8kvYT+QQnqAn+ZrLRge4j4PB0k=", + "dependencies": { + "ajv": "^6.11.0", + "deepmerge": "^4.2.2", + "rfdc": "^1.2.0", + "string-similarity": "^4.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/fast-redact": { + "version": "3.0.1", + "resolved": "https://registry.nlark.com/fast-redact/download/fast-redact-3.0.1.tgz", + "integrity": "sha1-1gFblx6TPQNSmwEzO6fyLCmWHpI=", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.nlark.com/fast-safe-stringify/download/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha1-EkqohYmSYfaK7bQqfAgN6dpgh0M=" + }, + "node_modules/fastify": { + "version": "3.17.0", + "resolved": "https://registry.nlark.com/fastify/download/fastify-3.17.0.tgz", + "integrity": "sha1-EZTEMKw/J/w+My5GH5Uh9eT/l3o=", + "dependencies": { + "@fastify/ajv-compiler": "^1.0.0", + "@fastify/proxy-addr": "^3.0.0", + "abstract-logging": "^2.0.0", + "avvio": "^7.1.2", + "fast-json-stringify": "^2.5.2", + "fastify-error": "^0.3.0", + "fastify-warning": "^0.2.0", + "find-my-way": "^4.0.0", + "flatstr": "^1.0.12", + "light-my-request": "^4.2.0", + "pino": "^6.2.1", + "readable-stream": "^3.4.0", + "rfdc": "^1.1.4", + "secure-json-parse": "^2.0.0", + "semver": "^7.3.2", + "tiny-lru": "^7.0.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/fastify-error": { + "version": "0.3.1", + "resolved": "https://registry.nlark.com/fastify-error/download/fastify-error-0.3.1.tgz", + "integrity": "sha1-jrmT4V489X8DV/xFKvkpDxwSeNI=" + }, + "node_modules/fastify-plugin": { + "version": "3.0.0", + "resolved": "https://registry.nlark.com/fastify-plugin/download/fastify-plugin-3.0.0.tgz", + "integrity": "sha1-zxuMgJjjtafIww5q6waQM3DAVMo=" + }, + "node_modules/fastify-static": { + "version": "4.2.2", + "resolved": "https://registry.nlark.com/fastify-static/download/fastify-static-4.2.2.tgz", + "integrity": "sha1-SL11vyPy+5gzlc6ZKpJEjXj+iLs=", + "dependencies": { + "content-disposition": "^0.5.3", + "encoding-negotiator": "^2.0.1", + "fastify-plugin": "^3.0.0", + "glob": "^7.1.4", + "readable-stream": "^3.4.0", + "send": "^0.17.1" + } + }, + "node_modules/fastify-warning": { + "version": "0.2.0", + "resolved": "https://registry.nlark.com/fastify-warning/download/fastify-warning-0.2.0.tgz", + "integrity": "sha1-5xd3YCakST3Jor76RNttF/YYAI8=" + }, + "node_modules/fastq": { + "version": "1.11.0", + "resolved": "https://registry.npm.taobao.org/fastq/download/fastq-1.11.0.tgz?cache=0&sync_timestamp=1614183622904&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffastq%2Fdownload%2Ffastq-1.11.0.tgz", + "integrity": "sha1-u5+5VaBxMKkY62PB9RYcwypdCFg=", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/find-my-way": { + "version": "4.1.0", + "resolved": "https://registry.nlark.com/find-my-way/download/find-my-way-4.1.0.tgz", + "integrity": "sha1-5wqhCzZwzIvpbrJRNXcFZE6lCHs=", + "dependencies": { + "fast-decode-uri-component": "^1.0.1", + "fast-deep-equal": "^3.1.3", + "safe-regex2": "^2.0.0", + "semver-store": "^0.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/flatstr": { + "version": "1.0.12", + "resolved": "https://registry.nlark.com/flatstr/download/flatstr-1.0.12.tgz", + "integrity": "sha1-wrpqCBc+27bJZA4wVbleKHzrWTE=" + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.nlark.com/glob/download/glob-7.1.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob%2Fdownload%2Fglob-7.1.7.tgz", + "integrity": "sha1-Oxk+kjPwHULQs/eClLvutBj5SpA=", + "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": "*" + } + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.nlark.com/has-cors/download/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.3.tgz", + "integrity": "sha1-bGGeT5xgMIw4UZSYwU+7EKrOuwY=", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" + }, + "node_modules/ipaddr.js": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-2.0.0.tgz", + "integrity": "sha1-d8zMyAY65xq2XFXyGwkGmOdj/G4=", + "engines": { + "node": ">= 10" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" + }, + "node_modules/light-my-request": { + "version": "4.4.1", + "resolved": "https://registry.nlark.com/light-my-request/download/light-my-request-4.4.1.tgz", + "integrity": "sha1-v6IiAxbu9PZGW/LwZneA2mt/anE=", + "dependencies": { + "ajv": "^6.12.2", + "cookie": "^0.4.0", + "fastify-warning": "^0.2.0", + "readable-stream": "^3.6.0", + "set-cookie-parser": "^2.4.1" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz?cache=0&sync_timestamp=1594427567713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.48.0", + "resolved": "https://registry.nlark.com/mime-db/download/mime-db-1.48.0.tgz?cache=0&sync_timestamp=1622433556078&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-db%2Fdownload%2Fmime-db-1.48.0.tgz", + "integrity": "sha1-41sxBF3X6to6qtU37YijOvvvLR0=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.31", + "resolved": "https://registry.nlark.com/mime-types/download/mime-types-2.1.31.tgz?cache=0&sync_timestamp=1622569162264&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.31.tgz", + "integrity": "sha1-oA12t0MXxh+cLbIhi46fjpxcnms=", + "dependencies": { + "mime-db": "1.48.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433926553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.nlark.com/negotiator/download/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-gyp-build": { + "version": "4.2.3", + "resolved": "https://registry.npm.taobao.org/node-gyp-build/download/node-gyp-build-4.2.3.tgz", + "integrity": "sha1-zmJ3+FODX3GIKe+0fbIPPk2cRzk=", + "peer": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npm.taobao.org/parseqs/download/parseqs-0.0.6.tgz", + "integrity": "sha1-jku1oZ0c3IRKCKyXTTTic6+mcNU=" + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.nlark.com/parseuri/download/parseuri-0.0.6.tgz", + "integrity": "sha1-4Ulugp46wv9H85pN0ESzKCPEolo=" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pino": { + "version": "6.11.3", + "resolved": "https://registry.nlark.com/pino/download/pino-6.11.3.tgz", + "integrity": "sha1-DALuxgKdJeZ5T9trvqNnJH10vCk=", + "dependencies": { + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.7", + "flatstr": "^1.0.12", + "pino-std-serializers": "^3.1.0", + "quick-format-unescaped": "^4.0.3", + "sonic-boom": "^1.0.2" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-std-serializers": { + "version": "3.2.0", + "resolved": "https://registry.nlark.com/pino-std-serializers/download/pino-std-serializers-3.2.0.tgz", + "integrity": "sha1-tWSHxALYguuWzWfCV4aAFrYa1nE=" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/queue-microtask/download/queue-microtask-1.2.3.tgz?cache=0&sync_timestamp=1616391583732&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqueue-microtask%2Fdownload%2Fqueue-microtask-1.2.3.tgz", + "integrity": "sha1-SSkii7xyTfrEPg77BYyve2z7YkM=" + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.3", + "resolved": "https://registry.nlark.com/quick-format-unescaped/download/quick-format-unescaped-4.0.3.tgz", + "integrity": "sha1-bWtmuCB6orNe7xK+FCG7JMQo9lI=" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ret": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/ret/download/ret-0.2.2.tgz?cache=0&sync_timestamp=1613002746282&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fret%2Fdownload%2Fret-0.2.2.tgz", + "integrity": "sha1-toYXgqH0di3OQ0Aqcet6KD9EVzw=", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz", + "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.nlark.com/rfdc/download/rfdc-1.3.0.tgz", + "integrity": "sha1-0LfEQasnINBdxM8m4ByJYx2doIs=" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=" + }, + "node_modules/safe-regex2": { + "version": "2.0.0", + "resolved": "https://registry.nlark.com/safe-regex2/download/safe-regex2-2.0.0.tgz", + "integrity": "sha1-sodSTDl8eimURwNn4BheGRax9bk=", + "dependencies": { + "ret": "~0.2.0" + } + }, + "node_modules/secure-json-parse": { + "version": "2.4.0", + "resolved": "https://registry.nlark.com/secure-json-parse/download/secure-json-parse-2.4.0.tgz", + "integrity": "sha1-Wq6q74XHpBf3YnGk9bDMMxXdyoU=" + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1616463641178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz", + "integrity": "sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-store": { + "version": "0.3.0", + "resolved": "https://registry.nlark.com/semver-store/download/semver-store-0.3.0.tgz", + "integrity": "sha1-zmAv8H3zcIDsn0+0CylXZUe+++k=" + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz", + "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566571506&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433926553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&sync_timestamp=1607433926553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" + }, + "node_modules/set-cookie-parser": { + "version": "2.4.8", + "resolved": "https://registry.nlark.com/set-cookie-parser/download/set-cookie-parser-2.4.8.tgz", + "integrity": "sha1-0NoO04i8jyTnBqOR+cniUqE8WLI=" + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz", + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=" + }, + "node_modules/socket.io": { + "version": "4.1.2", + "resolved": "https://registry.nlark.com/socket.io/download/socket.io-4.1.2.tgz", + "integrity": "sha1-+Q+QAqjVUO/iqh0yDe67mkW4MjM=", + "dependencies": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~5.1.0", + "socket.io-adapter": "~2.3.0", + "socket.io-parser": "~4.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.3.1", + "resolved": "https://registry.nlark.com/socket.io-adapter/download/socket.io-adapter-2.3.1.tgz?cache=0&sync_timestamp=1621465246751&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsocket.io-adapter%2Fdownload%2Fsocket.io-adapter-2.3.1.tgz", + "integrity": "sha1-pEJyDLCaSCPPuBKH3aH5tS1MzbI=" + }, + "node_modules/socket.io-client": { + "version": "4.1.2", + "resolved": "https://registry.nlark.com/socket.io-client/download/socket.io-client-4.1.2.tgz", + "integrity": "sha1-la1xEzGOoB+6CGAje5bXHhsf0us=", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "backo2": "~1.0.2", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-client": "~5.1.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-4.0.4.tgz", + "integrity": "sha1-nqIbDWFQjRgZbvBKLGuatjD0wrA=", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sonic-boom": { + "version": "1.4.1", + "resolved": "https://registry.nlark.com/sonic-boom/download/sonic-boom-1.4.1.tgz", + "integrity": "sha1-011qdAdmJPEub5F63nuddekY9T4=", + "dependencies": { + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1609654060878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.3.0.tgz", + "integrity": "sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-similarity": { + "version": "4.0.4", + "resolved": "https://registry.nlark.com/string-similarity/download/string-similarity-4.0.4.tgz", + "integrity": "sha1-QtAasLNGYOqKAY2o9WozCbuLKls=" + }, + "node_modules/tiny-lru": { + "version": "7.0.6", + "resolved": "https://registry.nlark.com/tiny-lru/download/tiny-lru-7.0.6.tgz", + "integrity": "sha1-sMPN7eHliCqi0a4hyyzszyozHyQ=", + "engines": { + "node": ">=6" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz", + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237517218&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz", + "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.5", + "resolved": "https://registry.nlark.com/utf-8-validate/download/utf-8-validate-5.0.5.tgz?cache=0&sync_timestamp=1620068388313&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futf-8-validate%2Fdownload%2Futf-8-validate-5.0.5.tgz", + "integrity": "sha1-3TLC6CxyAC3J8C62e6Z2H0NFbKE=", + "hasInstallScript": true, + "peer": true, + "dependencies": { + "node-gyp-build": "^4.2.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.nlark.com/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz?cache=0&sync_timestamp=1619133505879&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrappy%2Fdownload%2Fwrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.nlark.com/ws/download/ws-7.4.6.tgz", + "integrity": "sha1-VlTKjs3u5HwzqaS/bSjivimAN3w=", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=" + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.nlark.com/yeast/download/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + }, + "dependencies": { + "@fastify/ajv-compiler": { + "version": "1.1.0", + "resolved": "https://registry.nlark.com/@fastify/ajv-compiler/download/@fastify/ajv-compiler-1.1.0.tgz", + "integrity": "sha1-XOgLH8i+v/yMW6Qo1eOS0PntEKE=", + "requires": { + "ajv": "^6.12.6" + } + }, + "@fastify/forwarded": { + "version": "1.0.0", + "resolved": "https://registry.nlark.com/@fastify/forwarded/download/@fastify/forwarded-1.0.0.tgz", + "integrity": "sha1-zEo7wfAoVuVuZ9bWVQJujYwudCk=" + }, + "@fastify/proxy-addr": { + "version": "3.0.0", + "resolved": "https://registry.nlark.com/@fastify/proxy-addr/download/@fastify/proxy-addr-3.0.0.tgz", + "integrity": "sha1-fTu2R0oBsgYBAykpH07favivWC0=", + "requires": { + "@fastify/forwarded": "^1.0.0", + "ipaddr.js": "^2.0.0" + } + }, + "@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.nlark.com/@types/component-emitter/download/@types/component-emitter-1.2.10.tgz?cache=0&sync_timestamp=1621240806137&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fcomponent-emitter%2Fdownload%2F%40types%2Fcomponent-emitter-1.2.10.tgz", + "integrity": "sha1-71sVibnxZURkLkc9tepWORB+8+o=" + }, + "@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.nlark.com/@types/cookie/download/@types/cookie-0.4.0.tgz", + "integrity": "sha1-FPhUwPk9Mm452m47bzT303UT0Qg=" + }, + "@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.nlark.com/@types/cors/download/@types/cors-2.8.10.tgz", + "integrity": "sha1-YcyEaYSeW83QxwRBIiZcOc7BDPQ=" + }, + "@types/node": { + "version": "15.12.0", + "resolved": "https://registry.nlark.com/@types/node/download/@types/node-15.12.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-15.12.0.tgz", + "integrity": "sha1-akWdJhRQowDmhl+u3bWvAcM4m7M=" + }, + "abstract-logging": { + "version": "2.0.1", + "resolved": "https://registry.nlark.com/abstract-logging/download/abstract-logging-2.0.1.tgz", + "integrity": "sha1-aww3HfIS23EptX0uf88oK4vxyDk=" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1621517685940&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz", + "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/archy/download/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, + "atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.nlark.com/atomic-sleep/download/atomic-sleep-1.0.0.tgz", + "integrity": "sha1-64W3emAfyTLP5DLFrNNkqeLJB1s=" + }, + "avvio": { + "version": "7.2.2", + "resolved": "https://registry.nlark.com/avvio/download/avvio-7.2.2.tgz", + "integrity": "sha1-WOAOeWiHACbNe31PaJ1ZbbYp4lE=", + "requires": { + "archy": "^1.0.0", + "debug": "^4.0.0", + "fastq": "^1.6.1", + "queue-microtask": "^1.1.2" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz", + "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=" + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/base64id/download/base64id-2.0.0.tgz", + "integrity": "sha1-J3Csa8R9MSr5eov5pjQ0LgzSXLY=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "bufferutil": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/bufferutil/download/bufferutil-4.0.3.tgz", + "integrity": "sha1-ZnJLdWvtI818KMTTBteZT5lDzGs=", + "peer": true, + "requires": { + "node-gyp-build": "^4.2.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + } + } + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.nlark.com/cookie/download/cookie-0.4.1.tgz", + "integrity": "sha1-r9cT/ibr0hupXOth+agRblClN9E=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npm.taobao.org/cors/download/cors-2.8.5.tgz", + "integrity": "sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk=", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566571506&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz", + "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=", + "requires": { + "ms": "2.1.2" + } + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-4.2.2.tgz", + "integrity": "sha1-RNLqNnm49NT/ujPwPYZfwee/SVU=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.nlark.com/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding-negotiator": { + "version": "2.0.1", + "resolved": "https://registry.nlark.com/encoding-negotiator/download/encoding-negotiator-2.0.1.tgz", + "integrity": "sha1-eYcbtUc7gfagZw6N5TA/te4IaKM=" + }, + "engine.io": { + "version": "5.1.1", + "resolved": "https://registry.nlark.com/engine.io/download/engine.io-5.1.1.tgz?cache=0&sync_timestamp=1621204854469&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fengine.io%2Fdownload%2Fengine.io-5.1.1.tgz", + "integrity": "sha1-ofl+Ud3xDL1NuLX/SxZarTdgzdM=", + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + } + }, + "engine.io-client": { + "version": "5.1.1", + "resolved": "https://registry.nlark.com/engine.io-client/download/engine.io-client-5.1.1.tgz", + "integrity": "sha1-9cOqrvG9yUQ6rG/95Is7L7LcVvw=", + "requires": { + "base64-arraybuffer": "0.1.4", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.1", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-4.0.2.tgz", + "integrity": "sha1-5B0LP7Zve/SjZx0gOKFUAk7bUB4=", + "requires": { + "base64-arraybuffer": "0.1.4" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.nlark.com/fast-decode-uri-component/download/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha1-Rvi2wisw/3qBNX1PWav66TggJUM=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599659970&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&sync_timestamp=1576340291001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=" + }, + "fast-json-stringify": { + "version": "2.7.6", + "resolved": "https://registry.nlark.com/fast-json-stringify/download/fast-json-stringify-2.7.6.tgz", + "integrity": "sha1-x8kvYT+QQnqAn+ZrLRge4j4PB0k=", + "requires": { + "ajv": "^6.11.0", + "deepmerge": "^4.2.2", + "rfdc": "^1.2.0", + "string-similarity": "^4.0.1" + } + }, + "fast-redact": { + "version": "3.0.1", + "resolved": "https://registry.nlark.com/fast-redact/download/fast-redact-3.0.1.tgz", + "integrity": "sha1-1gFblx6TPQNSmwEzO6fyLCmWHpI=" + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.nlark.com/fast-safe-stringify/download/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha1-EkqohYmSYfaK7bQqfAgN6dpgh0M=" + }, + "fastify": { + "version": "3.17.0", + "resolved": "https://registry.nlark.com/fastify/download/fastify-3.17.0.tgz", + "integrity": "sha1-EZTEMKw/J/w+My5GH5Uh9eT/l3o=", + "requires": { + "@fastify/ajv-compiler": "^1.0.0", + "@fastify/proxy-addr": "^3.0.0", + "abstract-logging": "^2.0.0", + "avvio": "^7.1.2", + "fast-json-stringify": "^2.5.2", + "fastify-error": "^0.3.0", + "fastify-warning": "^0.2.0", + "find-my-way": "^4.0.0", + "flatstr": "^1.0.12", + "light-my-request": "^4.2.0", + "pino": "^6.2.1", + "readable-stream": "^3.4.0", + "rfdc": "^1.1.4", + "secure-json-parse": "^2.0.0", + "semver": "^7.3.2", + "tiny-lru": "^7.0.0" + } + }, + "fastify-error": { + "version": "0.3.1", + "resolved": "https://registry.nlark.com/fastify-error/download/fastify-error-0.3.1.tgz", + "integrity": "sha1-jrmT4V489X8DV/xFKvkpDxwSeNI=" + }, + "fastify-plugin": { + "version": "3.0.0", + "resolved": "https://registry.nlark.com/fastify-plugin/download/fastify-plugin-3.0.0.tgz", + "integrity": "sha1-zxuMgJjjtafIww5q6waQM3DAVMo=" + }, + "fastify-static": { + "version": "4.2.2", + "resolved": "https://registry.nlark.com/fastify-static/download/fastify-static-4.2.2.tgz", + "integrity": "sha1-SL11vyPy+5gzlc6ZKpJEjXj+iLs=", + "requires": { + "content-disposition": "^0.5.3", + "encoding-negotiator": "^2.0.1", + "fastify-plugin": "^3.0.0", + "glob": "^7.1.4", + "readable-stream": "^3.4.0", + "send": "^0.17.1" + } + }, + "fastify-warning": { + "version": "0.2.0", + "resolved": "https://registry.nlark.com/fastify-warning/download/fastify-warning-0.2.0.tgz", + "integrity": "sha1-5xd3YCakST3Jor76RNttF/YYAI8=" + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npm.taobao.org/fastq/download/fastq-1.11.0.tgz?cache=0&sync_timestamp=1614183622904&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffastq%2Fdownload%2Ffastq-1.11.0.tgz", + "integrity": "sha1-u5+5VaBxMKkY62PB9RYcwypdCFg=", + "requires": { + "reusify": "^1.0.4" + } + }, + "find-my-way": { + "version": "4.1.0", + "resolved": "https://registry.nlark.com/find-my-way/download/find-my-way-4.1.0.tgz", + "integrity": "sha1-5wqhCzZwzIvpbrJRNXcFZE6lCHs=", + "requires": { + "fast-decode-uri-component": "^1.0.1", + "fast-deep-equal": "^3.1.3", + "safe-regex2": "^2.0.0", + "semver-store": "^0.3.0" + } + }, + "flatstr": { + "version": "1.0.12", + "resolved": "https://registry.nlark.com/flatstr/download/flatstr-1.0.12.tgz", + "integrity": "sha1-wrpqCBc+27bJZA4wVbleKHzrWTE=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.nlark.com/glob/download/glob-7.1.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob%2Fdownload%2Fglob-7.1.7.tgz", + "integrity": "sha1-Oxk+kjPwHULQs/eClLvutBj5SpA=", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.nlark.com/has-cors/download/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.3.tgz", + "integrity": "sha1-bGGeT5xgMIw4UZSYwU+7EKrOuwY=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" + }, + "ipaddr.js": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-2.0.0.tgz", + "integrity": "sha1-d8zMyAY65xq2XFXyGwkGmOdj/G4=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" + }, + "light-my-request": { + "version": "4.4.1", + "resolved": "https://registry.nlark.com/light-my-request/download/light-my-request-4.4.1.tgz", + "integrity": "sha1-v6IiAxbu9PZGW/LwZneA2mt/anE=", + "requires": { + "ajv": "^6.12.2", + "cookie": "^0.4.0", + "fastify-warning": "^0.2.0", + "readable-stream": "^3.6.0", + "set-cookie-parser": "^2.4.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz?cache=0&sync_timestamp=1594427567713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "requires": { + "yallist": "^4.0.0" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" + }, + "mime-db": { + "version": "1.48.0", + "resolved": "https://registry.nlark.com/mime-db/download/mime-db-1.48.0.tgz?cache=0&sync_timestamp=1622433556078&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-db%2Fdownload%2Fmime-db-1.48.0.tgz", + "integrity": "sha1-41sxBF3X6to6qtU37YijOvvvLR0=" + }, + "mime-types": { + "version": "2.1.31", + "resolved": "https://registry.nlark.com/mime-types/download/mime-types-2.1.31.tgz?cache=0&sync_timestamp=1622569162264&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.31.tgz", + "integrity": "sha1-oA12t0MXxh+cLbIhi46fjpxcnms=", + "requires": { + "mime-db": "1.48.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433926553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.nlark.com/negotiator/download/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=" + }, + "node-gyp-build": { + "version": "4.2.3", + "resolved": "https://registry.npm.taobao.org/node-gyp-build/download/node-gyp-build-4.2.3.tgz", + "integrity": "sha1-zmJ3+FODX3GIKe+0fbIPPk2cRzk=", + "peer": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npm.taobao.org/parseqs/download/parseqs-0.0.6.tgz", + "integrity": "sha1-jku1oZ0c3IRKCKyXTTTic6+mcNU=" + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.nlark.com/parseuri/download/parseuri-0.0.6.tgz", + "integrity": "sha1-4Ulugp46wv9H85pN0ESzKCPEolo=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pino": { + "version": "6.11.3", + "resolved": "https://registry.nlark.com/pino/download/pino-6.11.3.tgz", + "integrity": "sha1-DALuxgKdJeZ5T9trvqNnJH10vCk=", + "requires": { + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.7", + "flatstr": "^1.0.12", + "pino-std-serializers": "^3.1.0", + "quick-format-unescaped": "^4.0.3", + "sonic-boom": "^1.0.2" + } + }, + "pino-std-serializers": { + "version": "3.2.0", + "resolved": "https://registry.nlark.com/pino-std-serializers/download/pino-std-serializers-3.2.0.tgz", + "integrity": "sha1-tWSHxALYguuWzWfCV4aAFrYa1nE=" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/queue-microtask/download/queue-microtask-1.2.3.tgz?cache=0&sync_timestamp=1616391583732&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqueue-microtask%2Fdownload%2Fqueue-microtask-1.2.3.tgz", + "integrity": "sha1-SSkii7xyTfrEPg77BYyve2z7YkM=" + }, + "quick-format-unescaped": { + "version": "4.0.3", + "resolved": "https://registry.nlark.com/quick-format-unescaped/download/quick-format-unescaped-4.0.3.tgz", + "integrity": "sha1-bWtmuCB6orNe7xK+FCG7JMQo9lI=" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "ret": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/ret/download/ret-0.2.2.tgz?cache=0&sync_timestamp=1613002746282&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fret%2Fdownload%2Fret-0.2.2.tgz", + "integrity": "sha1-toYXgqH0di3OQ0Aqcet6KD9EVzw=" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz", + "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=" + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.nlark.com/rfdc/download/rfdc-1.3.0.tgz", + "integrity": "sha1-0LfEQasnINBdxM8m4ByJYx2doIs=" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=" + }, + "safe-regex2": { + "version": "2.0.0", + "resolved": "https://registry.nlark.com/safe-regex2/download/safe-regex2-2.0.0.tgz", + "integrity": "sha1-sodSTDl8eimURwNn4BheGRax9bk=", + "requires": { + "ret": "~0.2.0" + } + }, + "secure-json-parse": { + "version": "2.4.0", + "resolved": "https://registry.nlark.com/secure-json-parse/download/secure-json-parse-2.4.0.tgz", + "integrity": "sha1-Wq6q74XHpBf3YnGk9bDMMxXdyoU=" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1616463641178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz", + "integrity": "sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "semver-store": { + "version": "0.3.0", + "resolved": "https://registry.nlark.com/semver-store/download/semver-store-0.3.0.tgz", + "integrity": "sha1-zmAv8H3zcIDsn0+0CylXZUe+++k=" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz", + "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566571506&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433926553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&sync_timestamp=1607433926553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" + } + } + }, + "set-cookie-parser": { + "version": "2.4.8", + "resolved": "https://registry.nlark.com/set-cookie-parser/download/set-cookie-parser-2.4.8.tgz", + "integrity": "sha1-0NoO04i8jyTnBqOR+cniUqE8WLI=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz", + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=" + }, + "socket.io": { + "version": "4.1.2", + "resolved": "https://registry.nlark.com/socket.io/download/socket.io-4.1.2.tgz", + "integrity": "sha1-+Q+QAqjVUO/iqh0yDe67mkW4MjM=", + "requires": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~5.1.0", + "socket.io-adapter": "~2.3.0", + "socket.io-parser": "~4.0.3" + } + }, + "socket.io-adapter": { + "version": "2.3.1", + "resolved": "https://registry.nlark.com/socket.io-adapter/download/socket.io-adapter-2.3.1.tgz?cache=0&sync_timestamp=1621465246751&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsocket.io-adapter%2Fdownload%2Fsocket.io-adapter-2.3.1.tgz", + "integrity": "sha1-pEJyDLCaSCPPuBKH3aH5tS1MzbI=" + }, + "socket.io-client": { + "version": "4.1.2", + "resolved": "https://registry.nlark.com/socket.io-client/download/socket.io-client-4.1.2.tgz", + "integrity": "sha1-la1xEzGOoB+6CGAje5bXHhsf0us=", + "requires": { + "@types/component-emitter": "^1.2.10", + "backo2": "~1.0.2", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-client": "~5.1.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.0.4" + } + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-4.0.4.tgz", + "integrity": "sha1-nqIbDWFQjRgZbvBKLGuatjD0wrA=", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, + "sonic-boom": { + "version": "1.4.1", + "resolved": "https://registry.nlark.com/sonic-boom/download/sonic-boom-1.4.1.tgz", + "integrity": "sha1-011qdAdmJPEub5F63nuddekY9T4=", + "requires": { + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1609654060878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.3.0.tgz", + "integrity": "sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-similarity": { + "version": "4.0.4", + "resolved": "https://registry.nlark.com/string-similarity/download/string-similarity-4.0.4.tgz", + "integrity": "sha1-QtAasLNGYOqKAY2o9WozCbuLKls=" + }, + "tiny-lru": { + "version": "7.0.6", + "resolved": "https://registry.nlark.com/tiny-lru/download/tiny-lru-7.0.6.tgz", + "integrity": "sha1-sMPN7eHliCqi0a4hyyzszyozHyQ=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz", + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237517218&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz", + "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=", + "requires": { + "punycode": "^2.1.0" + } + }, + "utf-8-validate": { + "version": "5.0.5", + "resolved": "https://registry.nlark.com/utf-8-validate/download/utf-8-validate-5.0.5.tgz?cache=0&sync_timestamp=1620068388313&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futf-8-validate%2Fdownload%2Futf-8-validate-5.0.5.tgz", + "integrity": "sha1-3TLC6CxyAC3J8C62e6Z2H0NFbKE=", + "peer": true, + "requires": { + "node-gyp-build": "^4.2.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.nlark.com/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz?cache=0&sync_timestamp=1619133505879&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrappy%2Fdownload%2Fwrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.nlark.com/ws/download/ws-7.4.6.tgz", + "integrity": "sha1-VlTKjs3u5HwzqaS/bSjivimAN3w=", + "requires": {} + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.nlark.com/yeast/download/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..d41383b --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "juanwangzhengba", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "watch": "tsc --watch" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "fastify": "^3.17.0", + "fastify-static": "^4.2.2", + "socket.io": "^4.1.2", + "socket.io-client": "^4.1.2" + } +} diff --git a/src/app.js b/src/app.js new file mode 100644 index 0000000..49e63e3 --- /dev/null +++ b/src/app.js @@ -0,0 +1,113 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var fastify_1 = __importDefault(require("fastify")); +var fastify_static_1 = __importDefault(require("fastify-static")); +var path_1 = require("path"); +var socket_io_1 = require("socket.io"); +var config_1 = require("./config"); +var app = fastify_1.default(); +var io = new socket_io_1.Server(app.server); +app.register(fastify_static_1.default, { + root: path_1.join(__dirname, "static") +}); +var global = { + last_time: Date.now(), + last_timeout_id: 0 +}; +var juanwang = []; +var juangroup = new Set(); +var lastjuan = {}; +app.get("/", function (req, res) { return __awaiter(void 0, void 0, void 0, function () { + return __generator(this, function (_a) { + res.redirect("index.html"); + return [2 /*return*/]; + }); +}); }); +app.get("/juanwang", function (req, res) { return __awaiter(void 0, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, juanwang]; + }); +}); }); +app.post("/start_new", function () { return __awaiter(void 0, void 0, void 0, function () { + return __generator(this, function (_a) { + juangroup.clear(); + juanwang = []; + return [2 /*return*/]; + }); +}); }); +app.post("/juan", function (req, res) { return __awaiter(void 0, void 0, void 0, function () { + var cur_time, data, name, group, last_time, notify_update; + var _a; + return __generator(this, function (_b) { + cur_time = Date.now(); + data = JSON.parse(req.body); + name = data.name; + if (!name) { + return [2 /*return*/, "你是谁?"]; + } + group = config_1.users[data.name]; + if (!group) { + return [2 /*return*/, "你是谁??"]; + } + last_time = (_a = lastjuan[name]) !== null && _a !== void 0 ? _a : 0; + lastjuan[name] = cur_time; + if (cur_time - last_time < 3000) + return [2 /*return*/, "3秒内只能卷一次"]; + if (juangroup.has(group)) + return [2 /*return*/, "每组在一次抢答中只能卷一次"]; + juanwang.push([name, group]); + juangroup.add(group); + notify_update = function () { + global.last_time = Date.now(); + io.emit("update"); + }; + if (Date.now() - global.last_time > 300) + notify_update(); + clearTimeout(global.last_timeout_id); + global.last_timeout_id = setTimeout(notify_update, 250); + return [2 /*return*/, "卷成功了"]; + }); +}); }); +io.on("connection", function (s) { + s.emit("update"); +}); +app.listen(5000, "0.0.0.0"); diff --git a/src/app.ts b/src/app.ts new file mode 100644 index 0000000..7b4deff --- /dev/null +++ b/src/app.ts @@ -0,0 +1,72 @@ +import fastify from "fastify"; +import fastify_static from "fastify-static" +import { join } from "path"; +import { Server as SocketIOServer } from "socket.io"; +import { users } from "./config"; + +const app = fastify(); +const io = new SocketIOServer(app.server); + +app.register(fastify_static, { + root: join(__dirname, "static") +}) + +let global = { + last_time: Date.now(), + last_timeout_id: 0 +}; + +let juanwang: [string, number][] = []; + +let juangroup = new Set(); + +let lastjuan: { [key: string]: number } = {}; + +app.get("/", async (req, res) => { + res.redirect("index.html"); +}); + +app.get("/juanwang", async (req, res) => { + return juanwang; +}); + +app.post("/start_new", async () => { + juangroup.clear(); + juanwang = []; +}); + +app.post("/juan", async (req, res) => { + let cur_time = Date.now(); + let data = JSON.parse(req.body as string); + let name: string = data.name; + if (!name) { + return "你是谁?"; + } + let group = users[data.name]; + if (!group) { + return "你是谁??"; + } + let last_time = lastjuan[name] ?? 0; + lastjuan[name] = cur_time; + if (cur_time - last_time < 3000) + return "3秒内只能卷一次"; + if (juangroup.has(group)) + return "每组在一次抢答中只能卷一次"; + juanwang.push([name, group]); + juangroup.add(group); + let notify_update = () => { + global.last_time = Date.now(); + io.emit("update"); + }; + if (Date.now() - global.last_time > 300) + notify_update(); + clearTimeout(global.last_timeout_id); + global.last_timeout_id = setTimeout(notify_update, 250) as unknown as number; + return "卷成功了"; +}); + +io.on("connection", s => { + s.emit("update"); +}); + +app.listen(5000, "0.0.0.0"); \ No newline at end of file diff --git a/src/static/index.html b/src/static/index.html new file mode 100644 index 0000000..6ec54e1 --- /dev/null +++ b/src/static/index.html @@ -0,0 +1,24 @@ + + + + + + + + 抢答器 - 别卷了 + + + + 姓名:
+ 每3秒只能卷一次 +
+ 当前结果:
+
    + +
+ + + + + + \ No newline at end of file diff --git a/src/static/index.js b/src/static/index.js new file mode 100644 index 0000000..b250e85 --- /dev/null +++ b/src/static/index.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +document.addEventListener("DOMContentLoaded", function () { + var btn = document.querySelector("#juan"); + var frm = document.querySelector("#frm"); + var lst = document.querySelector("#lst"); + var name = document.querySelector("#name"); + btn.addEventListener("click", function () { + fetch("/juan", { + method: "POST", + body: JSON.stringify({ name: name.value }) + }).then(function (r) { + r.text().then(function (t) { return alert(t); }); + }); + }); + var socket = io(); + socket.on("update", function () { + fetch("/juanwang").then(function (x) { return x.json(); }).then(function (juanwang) { + var newols = juanwang.map(function (juan) { + var element = document.createElement("li"); + element.innerText = juan[0] + " (\u5C0F\u7EC4" + juan[1] + ")"; + return element; + }); + lst.innerHTML = ""; + newols.forEach(function (o) { return lst.appendChild(o); }); + }); + }); +}); diff --git a/src/static/index.ts b/src/static/index.ts new file mode 100644 index 0000000..4e70da2 --- /dev/null +++ b/src/static/index.ts @@ -0,0 +1,30 @@ +import { Socket } from "socket.io-client"; + +declare function io(): Socket; + +document.addEventListener("DOMContentLoaded", () => { + let btn = document.querySelector("#juan")!; + let frm = document.querySelector("#frm")!; + let lst = document.querySelector("#lst")!; + let name = document.querySelector("#name")!; + btn.addEventListener("click", () => { + fetch("/juan", { + method: "POST", + body: JSON.stringify({ name: name.value }) + }).then(r => { + r.text().then(t => alert(t)); + }); + }); + var socket = io(); + socket.on("update", () => { + fetch("/juanwang").then(x => x.json()).then((juanwang: any[]) => { + let newols = juanwang.map(juan => { + let element = document.createElement("li"); + element.innerText = `${juan[0]} (小组${juan[1]})` + return element; + }); + lst.innerHTML = ""; + newols.forEach(o => lst.appendChild(o)); + }); + }); +}); \ No newline at end of file diff --git a/src/static/tcontrol.html b/src/static/tcontrol.html new file mode 100644 index 0000000..9323788 --- /dev/null +++ b/src/static/tcontrol.html @@ -0,0 +1,19 @@ + + + + + + + + 教师端 + + + + +
    + +
+ + + + \ No newline at end of file diff --git a/src/static/tcontrol.js b/src/static/tcontrol.js new file mode 100644 index 0000000..6437442 --- /dev/null +++ b/src/static/tcontrol.js @@ -0,0 +1,19 @@ +"use strict"; +document.addEventListener("DOMContentLoaded", function () { + var btn = document.querySelector("#start_new"); + var lst = document.querySelector("#lst"); + btn.addEventListener("click", function () { + fetch("/start_new", { method: "POST" }); + }); + setInterval(function () { + fetch("/juanwang").then(function (x) { return x.json(); }).then(function (juanwang) { + var newols = juanwang.map(function (juan) { + var element = document.createElement("li"); + element.innerText = "\u5C0F\u7EC4" + juan[1]; + return element; + }); + lst.innerHTML = ""; + newols.forEach(function (o) { return lst.appendChild(o); }); + }); + }, 300); +}); diff --git a/src/static/tcontrol.ts b/src/static/tcontrol.ts new file mode 100644 index 0000000..a709f2f --- /dev/null +++ b/src/static/tcontrol.ts @@ -0,0 +1,18 @@ +document.addEventListener("DOMContentLoaded", () => { + let btn = document.querySelector("#start_new")!; + let lst = document.querySelector("#lst")!; + btn.addEventListener("click", () => { + fetch("/start_new", { method: "POST" }); + }); + setInterval(() => { + fetch("/juanwang").then(x => x.json()).then((juanwang: any[]) => { + let newols = juanwang.map(juan => { + let element = document.createElement("li"); + element.innerText = `小组${juan[1]}` + return element; + }); + lst.innerHTML = ""; + newols.forEach(o => lst.appendChild(o)); + }); + }, 300); +}); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..194d0d1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,72 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outDir": "./", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an 'override' modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + } +}