From 5c7a30c7f8156fffc5ac3db505dcd217637618eb Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 5 Jan 2022 12:00:22 +0100 Subject: [PATCH] update to newer version --- README.md | 15 +- backend/.eslintrc.js | 7 + backend/Dockerfile | 14 +- backend/package-lock.json | 1455 ++ backend/package.json | 15 +- backend/src/Room.ts | 299 +- backend/src/Service.ts | 223 +- backend/src/User.ts | 193 +- .../timelines.js => src/data/timelines.ts} | 4896 +++--- backend/src/index.ts | 230 +- backend/src/timeline.ts | 61 +- backend/src/util.ts | 10 +- backend/tsconfig.json | 6 +- backend/yarn.lock | 739 - frontend/.eslintrc.js | 23 + frontend/Dockerfile | 12 +- frontend/config-overrides.js | 25 - frontend/index.html | 21 + frontend/package-lock.json | 5282 +++++++ frontend/package.json | 64 +- frontend/postcss.config.js | 6 + frontend/public/favicon.ico | Bin 3150 -> 15406 bytes frontend/public/index.html | 39 - frontend/public/logo192.png | Bin 5347 -> 49916 bytes frontend/public/logo512.png | Bin 9664 -> 234173 bytes frontend/public/manifest.json | 8 +- frontend/public/robots.txt | 1 + frontend/src/components/App.tsx | 11 - frontend/src/components/Centurion.tsx | 56 +- frontend/src/components/Feed.tsx | 232 +- frontend/src/components/FeedItem.tsx | 47 +- frontend/src/components/FeedTicker.tsx | 95 + frontend/src/components/Lobby.tsx | 502 +- frontend/src/components/NextShot.tsx | 80 +- frontend/src/components/Player.tsx | 261 +- frontend/src/components/ShotsTaken.tsx | 57 +- frontend/src/css/feed.css | 133 + frontend/src/css/feed.sass | 49 - frontend/src/css/index.css | 59 + frontend/src/css/index.sass | 57 - frontend/src/css/lobby.css | 76 + frontend/src/css/lobby.sass | 62 - frontend/src/css/player.css | 16 + frontend/src/css/player.sass | 4 - frontend/src/index.tsx | 9 +- frontend/src/lib/Connection.ts | 518 +- frontend/src/react-app-env.d.ts | 1 - frontend/src/types/types.ts | 153 +- frontend/src/util/hooks.ts | 39 +- frontend/src/util/socket.ts | 33 +- frontend/src/util/sub.ts | 67 +- frontend/tsconfig.json | 18 +- frontend/vite.config.ts | 46 + frontend/yarn.lock | 12344 ---------------- package-lock.json | 11772 +++++++++++++++ package.json | 44 + 56 files changed, 22972 insertions(+), 17513 deletions(-) create mode 100644 backend/.eslintrc.js create mode 100644 backend/package-lock.json rename backend/{data/timelines.js => src/data/timelines.ts} (53%) delete mode 100644 backend/yarn.lock create mode 100644 frontend/.eslintrc.js delete mode 100644 frontend/config-overrides.js create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/postcss.config.js delete mode 100644 frontend/public/index.html delete mode 100644 frontend/src/components/App.tsx create mode 100644 frontend/src/components/FeedTicker.tsx create mode 100644 frontend/src/css/feed.css delete mode 100644 frontend/src/css/feed.sass create mode 100644 frontend/src/css/index.css delete mode 100644 frontend/src/css/index.sass create mode 100644 frontend/src/css/lobby.css delete mode 100644 frontend/src/css/lobby.sass create mode 100644 frontend/src/css/player.css delete mode 100644 frontend/src/css/player.sass delete mode 100644 frontend/src/react-app-env.d.ts create mode 100644 frontend/vite.config.ts delete mode 100644 frontend/yarn.lock create mode 100644 package-lock.json create mode 100644 package.json diff --git a/README.md b/README.md index 9dc3052..cded2df 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,20 @@ -CENTVRION +CENTURION ========= ## Introduction -The projects consists of two projects, a frontend written in React, and a backend written in javascript. Both communicate with a websocket. +The projects consists of two projects, a frontend written in React, and a backend written in Typescript (Node). Both communicate with a websocket. ## Setup -Download centurion.m4a and place it in frontend/public/centurion.m4a +1. Download the various song files and place them in `frontend/public/songs/`. Easiest way to do this is to get them from production (E.g. `https://centurion.svia.nl/songs/centurion.m4a`) +2. Run `npm i` in the root directory, frontend, and backend. +3. Prepare the pre-commit hooks by running `npm run prepare`. -Start the backend with `npm run app` and the frontend with `npm run start`. +ESLint is used for linting, Prettier for formatting. Currently, there are no tests. Tread carefully. + +## Starting + +* Start the frontend by running `npm run start` in the frontend directory. +* Idem for the backend. diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js new file mode 100644 index 0000000..ea2fe81 --- /dev/null +++ b/backend/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + "ignorePatterns": [".eslintrc.js"], + "parserOptions": { + "tsconfigRootDir": __dirname, + "project": ["./tsconfig.json"] + } +}; diff --git a/backend/Dockerfile b/backend/Dockerfile index 7364ee9..a23f51c 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,11 +1,13 @@ -FROM node:13-alpine +FROM node:16-alpine WORKDIR /app -COPY package.json yarn.lock ./ -RUN yarn install +# Install TS manually since it's only included in the parent's package.json +RUN npm install --global typescript@^4.5.2 +COPY package.json package-lock.json ./ +RUN npm ci --no-progress --no-optional COPY tsconfig.json ./ - COPY src src/ -COPY data data/ -CMD ["npm", "run", "app"] +RUN npm run build + +CMD ["npm", "run", "start-compiled"] diff --git a/backend/package-lock.json b/backend/package-lock.json new file mode 100644 index 0000000..2688997 --- /dev/null +++ b/backend/package-lock.json @@ -0,0 +1,1455 @@ +{ + "name": "centurion-via-backend", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "centurion-via-backend", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "express": "^4.17.1", + "socket.io": "^4.4.0" + }, + "devDependencies": { + "@types/express": "^4.17.13", + "@types/node": "^16.11.12", + "ts-node": "^10.4.0" + } + }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/component-emitter": { + "version": "1.2.11", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, + "node_modules/@types/express": { + "version": "4.17.13", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.26", + "integrity": "sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.11.12", + "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.6.0", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.1", + "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/body-parser": { + "version": "1.19.0", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bytes": { + "version": "3.1.0", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/cors": { + "version": "2.8.5", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/debug": { + "version": "2.6.9", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/diff": { + "version": "4.0.2", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "6.1.0", + "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.2", + "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", + "dependencies": { + "base64-arraybuffer": "~1.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.1", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.3", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.2", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/escape-html": { + "version": "1.0.3", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/etag": { + "version": "1.8.1", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.17.1", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors": { + "version": "1.7.2", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.3", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/methods": { + "version": "1.1.2", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.17.1", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "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/ms": { + "version": "2.1.1", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node_modules/serve-static": { + "version": "1.14.1", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/socket.io": { + "version": "4.4.0", + "integrity": "sha512-bnpJxswR9ov0Bw6ilhCvO38/1WPtE3eA2dtxi2Iq4/sFebiDJQzgKNYA7AuVVdGW09nrESXd90NbZqtDd9dzRQ==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.3.3", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" + }, + "node_modules/socket.io-parser": { + "version": "4.0.4", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.3", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.2", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.3", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.2", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/statuses": { + "version": "1.5.0", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-node": { + "version": "10.4.0", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "4.5.2", + "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ws": { + "version": "8.2.3", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "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/yn": { + "version": "3.1.1", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + }, + "dependencies": { + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, + "@tsconfig/node10": { + "version": "1.0.8", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.2", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/component-emitter": { + "version": "1.2.11", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" + }, + "@types/connect": { + "version": "3.4.35", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cookie": { + "version": "0.4.1", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "@types/cors": { + "version": "2.8.12", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, + "@types/express": { + "version": "4.17.13", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.26", + "integrity": "sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/mime": { + "version": "1.3.2", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/node": { + "version": "16.11.12", + "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==" + }, + "@types/qs": { + "version": "6.9.7", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/serve-static": { + "version": "1.13.10", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.7", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "8.6.0", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "arg": { + "version": "4.1.3", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "base64-arraybuffer": { + "version": "1.0.1", + "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==" + }, + "base64id": { + "version": "2.0.0", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "body-parser": { + "version": "1.19.0", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "bytes": { + "version": "3.1.0", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "component-emitter": { + "version": "1.3.0", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "content-disposition": { + "version": "0.5.3", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cors": { + "version": "2.8.5", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "create-require": { + "version": "1.1.1", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "diff": { + "version": "4.0.2", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "engine.io": { + "version": "6.1.0", + "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "debug": { + "version": "4.3.3", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "engine.io-parser": { + "version": "5.0.2", + "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", + "requires": { + "base64-arraybuffer": "~1.0.1" + } + }, + "escape-html": { + "version": "1.0.3", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "finalhandler": { + "version": "1.1.2", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.2.0", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "http-errors": { + "version": "1.7.2", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.3", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.9.1", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "make-error": { + "version": "1.3.6", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.51.0", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + }, + "mime-types": { + "version": "2.1.34", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "requires": { + "mime-db": "1.51.0" + } + }, + "ms": { + "version": "2.0.0", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "object-assign": { + "version": "4.1.1", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "proxy-addr": { + "version": "2.0.7", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.7.0", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.17.1", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "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": { + "ms": { + "version": "2.1.1", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "socket.io": { + "version": "4.4.0", + "integrity": "sha512-bnpJxswR9ov0Bw6ilhCvO38/1WPtE3eA2dtxi2Iq4/sFebiDJQzgKNYA7AuVVdGW09nrESXd90NbZqtDd9dzRQ==", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "socket.io-adapter": { + "version": "2.3.3", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" + }, + "socket.io-parser": { + "version": "4.0.4", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "statuses": { + "version": "1.5.0", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "toidentifier": { + "version": "1.0.0", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "ts-node": { + "version": "10.4.0", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + } + }, + "type-is": { + "version": "1.6.18", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typescript": { + "version": "4.5.2", + "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", + "dev": true, + "peer": true + }, + "unpipe": { + "version": "1.0.0", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.1", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "ws": { + "version": "8.2.3", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} + }, + "yn": { + "version": "3.1.1", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/backend/package.json b/backend/package.json index 4f83c0d..42bfef4 100644 --- a/backend/package.json +++ b/backend/package.json @@ -5,18 +5,21 @@ "main": "./src/index.js", "scripts": { "build": "tsc", - "app": "ts-node src/index.ts" + "start-compiled": "node build/index.js", + "start": "ts-node src/index.ts", + "check": "tsc --noEmit", + "lint": "eslint 'src/**/*.{ts,tsx}'", + "fix": "eslint --fix 'src/**/*.{ts,tsx}'" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.17.1", - "socket.io": "^2.3.0" + "socket.io": "^4.4.0" }, "devDependencies": { - "@types/express": "^4.17.6", - "@types/socket.io": "^2.1.4", - "ts-node": "^8.8.2", - "typescript": "^3.8.3" + "@types/express": "^4.17.13", + "@types/node": "^16.11.12", + "ts-node": "^10.4.0" } } diff --git a/backend/src/Room.ts b/backend/src/Room.ts index ba5bf77..2d7be79 100644 --- a/backend/src/Room.ts +++ b/backend/src/Room.ts @@ -1,210 +1,167 @@ -import {Socket} from "socket.io"; - import User from "./User"; -import {getIndex, getNextShot, getTimeline, getTimelineNames, indexForTime} from "./timeline"; -import {getCurrentTime} from "./util"; +import { getTimeline, getTimelineNames } from "./timeline"; +import { getCurrentTime } from "./util"; export interface RoomOptions { - seekTime: number - timelineName: string + seekTime: number; + timelineName: string; +} + +export interface TickerMessage { + user: User; + message: string; +} + +// FIXME: dedupe with frontend +export interface SerializedRoom { + id: number; + userCount: number; + isLeader: boolean; + running: boolean; + startTime?: number; + seekTime: number; + timelineName: string; + readyToParticipate: boolean; + speedFactor: number; + ticker: string[]; + users?: { id: string; readyToParticipate: boolean }[]; } export default class Room { - id: number = 0; - users: User[] = []; - leader: User | null = null; + id = 0; + users: User[] = []; + leader: User | null = null; - running = false; - startTime = 0; - currentSeconds = 0; - timelineIndex: number = 0; + ticker: TickerMessage[] = []; - seekTime: number = 0; - timelineName: string = 'Centurion'; + running = false; + startTime: number | undefined = undefined; - // For debugging purposes - speedFactor = 1; - autoStart = false; + seekTime = 0; + timelineName = "Centurion"; - constructor(name: number) { - this.id = name; - } + // For debugging purposes + speedFactor = 1; - serialize(user: User) { - return { - 'id': this.id, - 'userCount': this.users.length, - 'isLeader': this.leader == user, - 'running': this.running, - 'startTime': this.startTime, - 'timelineName': this.timelineName, - 'seekTime': this.seekTime, - 'readyToParticipate': user.readyToParticipate || this.leader == user, - 'speedFactor': this.speedFactor - } - } + constructor(name: number) { + this.id = name; + } - serializeTimeline(user: User) { - return getTimeline(this.timelineName); - } + serialize(user?: User) { + const obj: SerializedRoom = { + id: this.id, + userCount: this.users.length, + isLeader: this.leader === user, + running: this.running, + startTime: this.startTime, + timelineName: this.timelineName, + seekTime: this.seekTime, + readyToParticipate: this.getLeader()?.readyToParticipate || false, + speedFactor: this.speedFactor, + ticker: this.ticker.map((i) => i.message), + }; - sync() { - this.users.forEach(u => u.sync()); + if (typeof user === "undefined" || this.leader === user) { + obj["users"] = this.users.map((u) => u.serialize()); } - join(user: User) { - this.users.push(user); - user.setRoom(this); + return obj; + } - if (!this.hasLeader()) { - this.setLeader(user); - } + serializeTimeline() { + return getTimeline(this.timelineName); + } - if (this.autoStart) { - this.seekTime = 2500000; - this.running = true; - this.start(); - } + sync() { + this.users.forEach((u) => u.sync()); + } - this.sync(); + async join(user: User) { + this.users.push(user); + await user.setRoom(this); + + if (!this.hasLeader()) { + this.setLeader(user); } - leave(user: User) { - this.users.splice(this.users.indexOf(user), 1); - user.setRoom(null); + this.sync(); + } - if (this.leader == user) { - this.setRandomLeader(); - } + async leave(user: User) { + this.removeTickerMessageForUser(user); + this.users.splice(this.users.indexOf(user), 1); + await user.setRoom(null); - this.sync(); + if (this.leader == user) { + this.setRandomLeader(); } - onBeforeDelete() { - } + this.sync(); + } - setOptions(options: any) { - this.seekTime = Math.max(0, Math.min(options.seekTime, 250 * 60 * 1000)) - if (getTimelineNames().indexOf(options.timelineName) >= 0) { - this.timelineName = options.timelineName; - } - this.sync() + setOptions(options: { seekTime: number; timelineName: string }) { + this.seekTime = Math.max(0, Math.min(options.seekTime, 250 * 60 * 1000)); + if (getTimelineNames().indexOf(options.timelineName) >= 0) { + this.timelineName = options.timelineName; } + this.sync(); + } - start() { - this.running = true; - this.startTime = getCurrentTime() - this.seekTime + start() { + this.running = true; + this.startTime = getCurrentTime() - this.seekTime; + this.sync(); + } - this.sync(); - } + /** + * + * @returns {boolean} + */ + hasUsers() { + return this.users.length !== 0; + } - run(io: Socket) { - this.running = true; - this.startTime = Date.now(); - - // io.to(this.id.toString()).emit('timeline', { - // 'timeline': { - // } - // }); - - const doTick = () => { - if (this.users.length === 0) { - // this room is over. - return; - } - - const timestamp = getIndex(this.timelineIndex); - const nextShot = getNextShot(this.timelineIndex); - - if (!timestamp) { - // We are done. - io.to(this.id.toString()).emit('tick_event', { - tick: { - current: this.currentSeconds - } - }); - console.log("Done"); - this.running = false; - return; - } - - console.log("ticking", this.currentSeconds); - - io.to(this.id.toString()).emit('tick_event', { - tick: { - current: this.currentSeconds, - next: timestamp, - nextShot: nextShot - } - }); - - if (this.currentSeconds >= timestamp.timestamp) { - this.timelineIndex += 1; - } - - this.currentSeconds += 1; - // We spend some time processing, wait a bit less than 1000ms - const nextTickTime = this.startTime + (1000 * this.currentSeconds / this.speedFactor); - const waitTime = nextTickTime - Date.now(); - console.log("waiting", waitTime); - setTimeout(doTick, Math.floor(waitTime / this.speedFactor)); - }; - - doTick(); + setRandomLeader() { + if (this.hasUsers()) { + this.leader = this.users[0]; } + } - /** - * - * @param io - * @param {number} time - */ - seek(io: Socket, time: number) { - this.currentSeconds = time; - this.startTime = Date.now() - time * 1000; - this.timelineIndex = indexForTime(this.currentSeconds); - io.to(this.id.toString()).emit('seek', time); - } + hasLeader(): boolean { + return this.leader != null; + } - /** - * - * @returns {boolean} - */ - hasUsers() { - return this.users.length !== 0; - } + setLeader(user: User) { + this.leader = user; + } - setRandomLeader() { - if (this.hasUsers()) { - this.leader = this.users[0]; - } - } + getLeader(): User | null { + return this.leader; + } - /** - * - * @param id - * @returns {User|undefined} - */ - getUser(id: string) { - return this.users.find(u => u.id === id); - } + submitTickerMessage(user: User, message: string) { + message = message.replace("\n", ""); - /** - * - * @param {string} id - */ - removeUser(id: string) { - this.users = this.users.filter(u => u.id !== id); - } + this.removeTickerMessageForUser(user); - hasLeader(): boolean { - return this.leader != null; - } + this.ticker.push({ + user: user, + message: message, + }); - setLeader(user: User) { - this.leader = user; - } + this.sync(); + } - getLeader(): User | null { - return this.leader; + removeTickerMessageForUser(user: User) { + let existing = -1; + for (let i = 0; i < this.ticker.length; i++) { + if (this.ticker[i].user === user) { + existing = i; + break; + } } -}; + if (existing >= 0) { + this.ticker.splice(existing, 1); + } + } +} diff --git a/backend/src/Service.ts b/backend/src/Service.ts index 8a5456e..4041ffb 100644 --- a/backend/src/Service.ts +++ b/backend/src/Service.ts @@ -1,140 +1,163 @@ -import {Socket} from "socket.io"; +import { Socket } from "socket.io"; -import User from './User' -import Room, {RoomOptions} from './Room' -import {getCurrentTime, randomInt} from "./util"; +import User from "./User"; +import Room, { RoomOptions } from "./Room"; +import { getCurrentTime } from "./util"; export default class Service { - private roomIdToRooms = new Map(); - private socketsToUsers = new Map(); + private roomIdToRooms = new Map(); + private socketsToUsers = new Map(); - onSocketConnect(socket: Socket) { - let user = new User(socket); - this.socketsToUsers.set(socket.id, user); - user.sync(); + get rooms(): Room[] { + const rooms = []; + for (const [, room] of this.roomIdToRooms) { + rooms.push(room); } - onSocketDisconnect(socket: Socket) { - let user = this.getUser(socket); + return rooms; + } - if (user.room != null) { - user.room.leave(user); - } + onSocketConnect(socket: Socket) { + const user = new User(socket); + this.socketsToUsers.set(socket.id, user); + user.sync(); + } - this.deleteEmptyRooms(); + async onSocketDisconnect(socket: Socket) { + const user = this.getUser(socket); - user.onDisconnect(); + if (user.room != null) { + await user.room.leave(user); } - onTimeSync(socket: Socket, requestId: number, clientTime: number) { - let user = this.getUser(socket); + this.deleteEmptyRooms(); + } - let now = getCurrentTime(); - user.emit('time_sync', { - 'requestId': requestId, - 'clientDiff': now - clientTime, - 'serverTime': now - }) - } - - onSetRoomOptions(socket: Socket, options: RoomOptions) { - let user = this.getUser(socket); + onTimeSync(socket: Socket, requestId: number, clientTime: number) { + const user = this.getUser(socket); - if (user.room?.getLeader() == user) { - user.room!!.setOptions(options) - } - } + const now = getCurrentTime(); + user.emit("time_sync", { + requestId: requestId, + clientDiff: now - clientTime, + serverTime: now, + }); + } - onRequestStart(socket: Socket) { - let user = this.getUser(socket); + onSetRoomOptions(socket: Socket, options: RoomOptions) { + const user = this.getUser(socket); - if (user.room?.getLeader() == user) { - user.room!!.start(); - } + if (user.room?.getLeader() == user) { + user.room.setOptions(options); } + } - onRequestJoin(socket: Socket, roomId: number): boolean { - let user = this.getUser(socket); - if (user.room && user.room.id == roomId) return false; + onRequestStart(socket: Socket) { + const user = this.getUser(socket); - if (user.room) { - user.room.leave(user); - this.deleteEmptyRooms(); - } + if (user.room?.getLeader() === user) { + user.room.start(); + user.room.sync(); + } + } - if (!this.roomIdToRooms.has(roomId)) { - this.createRoomWithId(roomId); - } + async onRequestJoin(socket: Socket, roomId: number) { + const user = this.getUser(socket); + if (user.room && user.room.id == roomId) return false; - let room = this.roomIdToRooms.get(roomId)!!; - room.join(user); + if (user.room) { + await user.room.leave(user); + this.deleteEmptyRooms(); + } - return true; + if (!this.roomIdToRooms.has(roomId)) { + this.createRoomWithId(roomId); } - onRequestReady(socket: Socket) { - let user = this.getUser(socket); - if (!user.room || user.readyToParticipate) return; - user.readyToParticipate = true; - user.sync(); + const room = this.roomIdToRooms.get(roomId); + if (!room) { + return false; } - onRequestJoinRandom(socket: Socket) { - let user = this.getUser(socket); + await room.join(user); - if (user.room) { - user.room.leave(user); - this.deleteEmptyRooms(); - } + return true; + } - const room = this.createRandomRoom(); - if (!room) throw Error('Too many rooms active'); - room.join(user); - } + onRequestSetReady(socket: Socket) { + const user = this.getUser(socket); + if (!user.room || user.readyToParticipate) return; + user.readyToParticipate = true; + user.room.sync(); + } - hasRoomId(roomId: number): boolean { - return this.roomIdToRooms.has(roomId); - } + async onRequestJoinRandom(socket: Socket) { + const user = this.getUser(socket); - private getUser(socket: Socket): User { - let user = this.socketsToUsers.get(socket.id); - if (!user) { - throw new Error('User not found'); - } - return user; + if (user.room) { + await user.room.leave(user); + this.deleteEmptyRooms(); } - private deleteEmptyRooms() { - for (let room of this.roomIdToRooms.values()) { - if (room.users.length == 0) { - this.deleteRoom(room); - } - } - } + const room = this.createRandomRoom(); + if (!room) throw Error("Too many rooms active"); + await room.join(user); + } + + hasRoomId(roomId: number): boolean { + return this.roomIdToRooms.has(roomId); + } - private createRandomRoom(): Room | null { - let tries = 0; - while (tries++ < 1000) { - const randomId = randomInt(100, Math.max(1000, this.roomIdToRooms.size * 2)); - if (this.roomIdToRooms.has(randomId)) continue; + submitTickerMessage(socket: Socket, message: string) { + const user = this.getUser(socket); - return this.createRoomWithId(randomId); - } - return null; + if (!user.room) { + throw new Error("User has no room"); } - private createRoomWithId(roomId: number): Room { - if (this.roomIdToRooms.has(roomId)) { - throw new Error('A room with the given id already exists'); - } + user.room.submitTickerMessage(user, message); + } - let room = new Room(roomId); - this.roomIdToRooms.set(roomId, room); - return room; + private getUser(socket: Socket): User { + const user = this.socketsToUsers.get(socket.id); + if (!user) { + throw new Error("User not found"); + } + return user; + } + + private deleteEmptyRooms() { + for (const room of this.roomIdToRooms.values()) { + if (room.users.length == 0) { + this.deleteRoom(room); + } } + } + + private createRandomRoom(): Room | null { + let tries = 0; + let i = 1; + while (tries++ < 1000) { + if (this.roomIdToRooms.has(i)) { + i++; + } else { + return this.createRoomWithId(i); + } + } + return null; + } - private deleteRoom(room: Room) { - this.roomIdToRooms.get(room.id)!!.onBeforeDelete(); - this.roomIdToRooms.delete(room.id) + private createRoomWithId(roomId: number): Room { + if (this.roomIdToRooms.has(roomId)) { + throw new Error("A room with the given id already exists"); } + + const room = new Room(roomId); + this.roomIdToRooms.set(roomId, room); + return room; + } + + private deleteRoom(room: Room) { + this.roomIdToRooms.delete(room.id); + } } diff --git a/backend/src/User.ts b/backend/src/User.ts index b40145e..ecb4520 100644 --- a/backend/src/User.ts +++ b/backend/src/User.ts @@ -1,108 +1,131 @@ -import {Socket} from "socket.io"; +import { Socket } from "socket.io"; -import Room from "./Room"; -import {getTimelineNames} from "./timeline"; +import Room, { SerializedRoom } from "./Room"; +import { getTimelineNames } from "./timeline"; -export default class User { - socket: Socket; - id: string; - - room: Room | null = null; - readyToParticipate: boolean = false; +export interface Config { + availableTimelines: string[]; +} - constructor(socket: Socket) { - this.socket = socket; - this.id = socket.id; +export default class User { + socket: Socket; + id: string; + + room: Room | null = null; + readyToParticipate = false; + + constructor(socket: Socket) { + this.socket = socket; + this.id = socket.id; + } + + serialize() { + return { + id: this.id, + readyToParticipate: this.readyToParticipate, + }; + } + + async setRoom(room: Room | null) { + if (this.room === room) return; + + if (this.room !== null) { + await this.socket.leave(this.room.id.toString()); + this.readyToParticipate = false; } - onDisconnect() { - if (this.room != null) { + this.room = room; - } + if (this.room !== null) { + await this.socket.join(this.room.id.toString()); } - setRoom(room: Room | null) { - if (this.room === room) return; + this.sync(); + } + + getConfig() { + return { + availableTimelines: getTimelineNames(), + }; + } + + sentConfig: Config | null = null; + sentRoom: SerializedRoom | null = null; + sentTimelineName: string | null = null; + + sync() { + // Config + const config = this.getConfig(); + if (!this.syncEquals(this.sentConfig, config)) { + this.sentConfig = Object.assign({}, config); + this.emit("config", { + config: this.sentConfig, + }); + } - if (this.room != null) { - this.socket.leave(this.room.id.toString()); - this.readyToParticipate = false; - } + // Room + if (!this.syncEquals(this.sentRoom, this.room?.serialize(this))) { + this.sentRoom = this.room + ? (JSON.parse( + JSON.stringify(this.room.serialize(this)) + ) as SerializedRoom) + : null; + + this.emit("room", { + room: this.sentRoom, + }); + } - this.room = room; + // Timeline + if (!this.syncEquals(this.sentTimelineName, this.room?.timelineName)) { + this.sentTimelineName = this.room?.timelineName || null; + this.emit("timeline", { + timeline: + this.sentTimelineName == null ? null : this.room?.serializeTimeline(), + }); + } + } - if (this.room != null) { - this.socket.join(this.room.id.toString()); - } + emit(eventName: string, obj: unknown) { + this.socket.emit(eventName, obj); + } - this.sync(); + syncEquals(obj1: unknown, obj2: unknown): boolean { + if (typeof obj1 !== typeof obj2) { + return false; } - getConfig() { - return { - 'availableTimelines': getTimelineNames() - } + if (typeof obj1 !== "object") { + // Both are not 'object' + return Object.is(obj1, obj2); } - sentConfig: any = null; - sentRoom: any = null; - sentTimelineName: string | null = null; - - sync() { - // Config - let config = this.getConfig(); - if (!this.syncEquals(this.sentConfig, config)) { - this.sentConfig = config; - this.emit('config', { - 'config': this.sentConfig - }); - } - - // Room - if (!this.syncEquals(this.sentRoom, this.room?.serialize(this))) { - this.sentRoom = this.room?.serialize(this); - this.emit('room', { - 'room': this.sentRoom - }) - } - - // Timeline - if (!this.syncEquals(this.sentTimelineName, this.room?.timelineName)) { - this.sentTimelineName = this.room?.timelineName || null; - this.emit('timeline', { - 'timeline': this.sentTimelineName == null ? null : this.room!!.serializeTimeline(this) - }) - } + if (obj1 === null && obj2 === null) { + return true; } - emit(eventName: string, obj: any) { - this.socket.emit(eventName, obj); + if (obj1 === null || obj2 === null) { + return false; } - syncEquals(obj1: any, obj2: any): boolean { - if (obj1 === undefined && obj2 === undefined) - return true; - - if ((obj1 === undefined && obj2 !== undefined) || (obj1 !== undefined && obj2 === undefined)) - return false; - - if (obj1 === null && obj2 === null) - return true; - - if ((obj1 === null && obj2 !== null) || (obj1 !== null && obj2 === null)) - return false; - - if (typeof (obj1) !== typeof (obj2)) - return false; - - if (typeof (obj1) === 'string' || typeof (obj1) === 'number' || typeof (obj1) === 'boolean') { - return obj1 === obj2; - } - - if (Object.keys(obj1).length !== Object.keys(obj2).length) return false + if (typeof obj2 !== "object") { + // This can not happen ;) + throw new TypeError("Obj2 is not object while obj1 is."); + } - return Object.keys(obj1).every(key => - obj2.hasOwnProperty(key) && this.syncEquals(obj1[key], obj2[key]) - ); + if (Object.keys(obj1).length !== Object.keys(obj2).length) { + return false; } + + return Object.keys(obj1).every((key: string) => { + if (!(key in obj1) || !(key in obj2)) { + return false; + } + + return this.syncEquals( + obj1[key as keyof object], + obj2[key as keyof object] + ); + }); + } } diff --git a/backend/data/timelines.js b/backend/src/data/timelines.ts similarity index 53% rename from backend/data/timelines.js rename to backend/src/data/timelines.ts index 97ed8f7..7b536e2 100644 --- a/backend/data/timelines.js +++ b/backend/src/data/timelines.ts @@ -1,2774 +1,2132 @@ -module.exports = { - 'timelines': [ - { - 'name': 'Centurion', - 'songFile': 'songs/centurion.mp3', - 'feed': [ +// FIXME: dedupes these types from front-end +export interface TimelineItem { + id?: string; + timestamp: number; + events: TimestampEvent[]; +} - { - "timestamp": 0, - "events": [ - { - "type": "shot", - "text": [ - "Zet je schrap!", - "We gaan zo beginnen" - ], - "shotCount": 0 - } - ] - }, - { - "timestamp": 42, - "events": [ - { - "type": "talk", - "text": [ - "Daar gaan we!", - "Dit was het startsein, je hoeft nog niet te drinken" - ] - }, - { - "type": "song", - "text": [ - "Nena", - "99 Luftballons" - ] - } - ] - }, - { - "timestamp": 108, - "events": [ - { - "type": "shot", - "text": [ - "De eerste!", - "Nog 99 shotjes" - ], - "shotCount": 1 - } - ] - }, - { - "timestamp": 148, - "events": [ - { - "type": "song", - "text": [ - "Hermes House Band", - "Country Roads" - ] - } - ] - }, - { - "timestamp": 167, - "events": [ - { - "type": "shot", - "text": [ - "Nummertje twee!", - "Nog 98 shotjes" - ], - "shotCount": 2 - } - ] - }, - { - "timestamp": 185, - "events": [ - { - "type": "song", - "text": [ - "Vinzzent", - "Dromendans" - ] - } - ] - }, - { - "timestamp": 223, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 97 shotjes" - ], - "shotCount": 3 - }, - { - "type": "song", - "text": [ - "Linda, Roos & Jessica", - "Ademnood" - ] - } - ] - }, - { - "timestamp": 283, - "events": [ - { - "type": "shot", - "text": [ - "Lustrum!", - "Nog 96 shotjes" - ], - "shotCount": 4 - }, - { - "type": "song", - "text": [ - "Peter de Koning", - "Het is altijd lente in de ogen van de tandarts-assistente" - ] - } - ] - }, - { - "timestamp": 340, - "events": [ - { - "type": "shot", - "text": [ - "Niet gooien!", - "Nog 95 shotjes" - ], - "shotCount": 5 - }, - { - "type": "song", - "text": [ - "Liquido", - "Narcotic" - ] - } - ] - }, - { - "timestamp": 412, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 94 shotjes" - ], - "shotCount": 6 - }, - { - "type": "song", - "text": [ - "Snoop Dogg feat. Pharrell", - "Drop It Like It's Hot" - ] - } - ] - }, - { - "timestamp": 449, - "events": [ - { - "type": "song", - "text": [ - "M.O.P.", - "Ante Up" - ] - } - ] - }, - { - "timestamp": 459, - "events": [ - { - "type": "shot", - "text": [ - "Pweeeep!", - "Nog 93 shotjes" - ], - "shotCount": 7 - } - ] - }, - { - "timestamp": 514, - "events": [ - { - "type": "shot", - "text": [ - "Trek een ad!", - "Nog 92 shotjes" - ], - "shotCount": 8 - }, - { - "type": "song", - "text": [ - "Los Del Rio", - "Macarena" - ] - } - ] - }, - { - "timestamp": 560, - "events": [ - { - "type": "song", - "text": [ - "Spice Girls", - "Wannabe" - ] - } - ] - }, - { - "timestamp": 574, - "events": [ - { - "type": "shot", - "text": [ - "We zijn er nog lang niet!", - "Nog 91 shotjes" - ], - "shotCount": 9 - } - ] - }, - { - "timestamp": 617, - "events": [ - { - "type": "song", - "text": [ - "Major Lazer feat. Busy Signal, The Flexican & FS Green", - "Watch Out For This (Bumaye)" - ] - } - ] - }, - { - "timestamp": 635, - "events": [ - { - "type": "shot", - "text": [ - "Nummer tien!", - "Nog 90 shotjes" - ], - "shotCount": 10 - } - ] - }, - { - "timestamp": 647, - "events": [ - { - "type": "time", - "text": [ - "Nog 90 minuten!", - "Geef alles, behalve op" - ] - } - ] - }, - { - "timestamp": 684, - "events": [ - { - "type": "song", - "text": [ - "Kabouter Plop", - "Kabouterdans" - ] - } - ] - }, - { - "timestamp": 699, - "events": [ - { - "type": "shot", - "text": [ - "Met vriendelijke toet!", - "Nog 89 shotjes" - ], - "shotCount": 11 - } - ] - }, - { - "timestamp": 725, - "events": [ - { - "type": "song", - "text": [ - "K3", - "Alle kleuren" - ] - } - ] - }, - { - "timestamp": 756, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 88 shotjes" - ], - "shotCount": 12 - } - ] - }, - { - "timestamp": 757, - "events": [ - { - "type": "song", - "text": [ - "Kinderen voor Kinderen", - "Tietenlied" - ] - } - ] - }, - { - "timestamp": 812, - "events": [ - { - "type": "shot", - "text": [ - "Ongeluksshotje 13!", - "Nog 87 shotjes" - ], - "shotCount": 13 - } - ] - }, - { - "timestamp": 814, - "events": [ - { - "type": "song", - "text": [ - "Guus Meeuwis", - "Het dondert en het bliksemt" - ] - } - ] - }, - { - "timestamp": 820, - "events": [ - { - "type": "talk", - "text": [ - "Carnaval is prachtig!", - "Leve de vervoerie" - ] - } - ] - }, - { - "timestamp": 874, - "events": [ - { - "type": "shot", - "text": [ - "Pweeeep!", - "Nog 86 shotjes" - ], - "shotCount": 14 - } - ] - }, - { - "timestamp": 876, - "events": [ - { - "type": "song", - "text": [ - "Harry Vermeegen", - "1-2-3-4 Dennis bier" - ] - } - ] - }, - { - "timestamp": 906, - "events": [ - { - "type": "song", - "text": [ - "Puhdys", - "Hey, wir woll’n die Eisbär'n sehn!" - ] - } - ] - }, - { - "timestamp": 935, - "events": [ - { - "type": "shot", - "text": [ - "Fünfzehn!", - "Nog 85 shotjes" - ], - "shotCount": 15 - } - ] - }, - { - "timestamp": 966, - "events": [ - { - "type": "song", - "text": [ - "DJ Ötzi", - "Burger Dance" - ] - } - ] - }, - { - "timestamp": 995, - "events": [ - { - "type": "shot", - "text": [ - "Toet!", - "Nog 84 shotjes" - ], - "shotCount": 16 - } - ] - }, - { - "timestamp": 996, - "events": [ - { - "type": "song", - "text": [ - "Mickie Krause", - "Hütte auf der Alm" - ] - } - ] - }, - { - "timestamp": 1030, - "events": [ - { - "type": "song", - "text": [ - "Ali B & Yes-R & The Partysquad", - "Rampeneren" - ] - } - ] - }, - { - "timestamp": 1046, - "events": [ - { - "type": "shot", - "text": [ - "Zuipen!", - "Nog 83 shotjes" - ], - "shotCount": 17 - } - ] - }, - { - "timestamp": 1107, - "events": [ - { - "type": "shot", - "text": [ - "Met dank aan bestuur 19; super 'vo", - "Nog 82 shotjes" - ], - "shotCount": 18 - }, - { - "type": "song", - "text": [ - "Martin Solveig", - "Intoxicated" - ] - } - ] - }, - { - "timestamp": 1137, - "events": [ - { - "type": "song", - "text": [ - "Nicki Minaj", - "Starships" - ] - } - ] - }, - { - "timestamp": 1173, - "events": [ - { - "type": "shot", - "text": [ - "Laatste shotje als tiener!", - "Nog 81 shotjes" - ], - "shotCount": 19 - } - ] - }, - { - "timestamp": 1222, - "events": [ - { - "type": "song", - "text": [ - "2Unlimited", - "Get Ready For This" - ] - } - ] - }, - { - "timestamp": 1233, - "events": [ - { - "type": "time", - "text": [ - "Nog 80 minuten!", - "Al 19 shotjes achter de rug" - ] - } - ] - }, - { - "timestamp": 1235, - "events": [ - { - "type": "shot", - "text": [ - "Adje!", - "Nog 80 shotjes" - ], - "shotCount": 20 - } - ] - }, - { - "timestamp": 1275, - "events": [ - { - "type": "song", - "text": [ - "The Village People", - "YMCA" - ] - } - ] - }, - { - "timestamp": 1288, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 79 shotjes" - ], - "shotCount": 21 - } - ] - }, - { - "timestamp": 1348, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 78 shotjes" - ], - "shotCount": 22 - } - ] - }, - { - "timestamp": 1350, - "events": [ - { - "type": "song", - "text": [ - "Carly Rae Jepsen ft Owl City", - "It's Always A Good Time" - ] - } - ] - }, - { - "timestamp": 1395, - "events": [ - { - "type": "song", - "text": [ - "Avicii", - "Levels" - ] - } - ] - }, - { - "timestamp": 1411, - "events": [ - { - "type": "shot", - "text": [ - "Claxon!", - "Nog 77 shotjes" - ], - "shotCount": 23 - } - ] - }, - { - "timestamp": 1456, - "events": [ - { - "type": "song", - "text": [ - "Flo-Rida feat. T-Pain", - "Low" - ] - } - ] - }, - { - "timestamp": 1471, - "events": [ - { - "type": "shot", - "text": [ - "En nu even op standje maximaal!", - "Nog 76 shotjes" - ], - "shotCount": 24 - } - ] - }, - { - "timestamp": 1486, - "events": [ - { - "type": "song", - "text": [ - "Taio Cruz", - "Hangover" - ] - } - ] - }, - { - "timestamp": 1522, - "events": [ - { - "type": "talk", - "text": [ - "Dit is nog het rustige stukje!", - "Zet hem maar op de bonk-bonk" - ] - } - ] - }, - { - "timestamp": 1530, - "events": [ - { - "type": "shot", - "text": [ - "Halve Abraham!", - "Nog 75 shotjes" - ], - "shotCount": 25 - } - ] - }, - { - "timestamp": 1545, - "events": [ - { - "type": "song", - "text": [ - "LMFAO", - "Party Rock Anthem" - ] - } - ] - }, - { - "timestamp": 1594, - "events": [ - { - "type": "shot", - "text": [ - "Hoch die Hände!", - "Nog 74 shotjes" - ], - "shotCount": 26 - }, - { - "type": "song", - "text": [ - "Hans Entertainment vs. Finger & Kadel", - "Hoch die Hände" - ] - } - ] - }, - { - "timestamp": 1623, - "events": [ - { - "type": "song", - "text": [ - "Galantis", - "No Money" - ] - } - ] - }, - { - "timestamp": 1653, - "events": [ - { - "type": "shot", - "text": [ - "Voel je 'm al?", - "Nog 73 shotjes" - ], - "shotCount": 27 - } - ] - }, - { - "timestamp": 1683, - "events": [ - { - "type": "song", - "text": [ - "Kid Cudi", - "Pursuit of Happiness (Steve Aoki remix)" - ] - } - ] - }, - { - "timestamp": 1712, - "events": [ - { - "type": "shot", - "text": [ - "Project X!", - "Nog 72 shotjes" - ], - "shotCount": 28 - } - ] - }, - { - "timestamp": 1741, - "events": [ - { - "type": "song", - "text": [ - "Yeah Yeah Yeahs", - "Heads Will Roll (A-Trak remix)" - ] - } - ] - }, - { - "timestamp": 1769, - "events": [ - { - "type": "shot", - "text": [ - "Pweeeep!", - "Nog 71 shotjes" - ], - "shotCount": 29 - } - ] - }, - { - "timestamp": 1814, - "events": [ - { - "type": "song", - "text": [ - "Michael Calfan", - "Resurrection" - ] - } - ] - }, - { - "timestamp": 1825, - "events": [ - { - "type": "time", - "text": [ - "Nog 70 minuten!", - "Half uurtje zit erop" - ] - } - ] - }, - { - "timestamp": 1829, - "events": [ - { - "type": "shot", - "text": [ - "Toet!", - "Nog 70 shotjes" - ], - "shotCount": 30 - } - ] - }, - { - "timestamp": 1858, - "events": [ - { - "type": "song", - "text": [ - "Basto!", - "Again and Again" - ] - } - ] - }, - { - "timestamp": 1887, - "events": [ - { - "type": "shot", - "text": [ - "Over de dertig!", - "Nog 69 (hehe) shotjes" - ], - "shotCount": 31 - } - ] - }, - { - "timestamp": 1916, - "events": [ - { - "type": "song", - "text": [ - "David Guetaa feat. Sia", - "Titanium" - ] - } - ] - }, - { - "timestamp": 1945, - "events": [ - { - "type": "shot", - "text": [ - "Trek een ad!", - "Nog 68 shotjes" - ], - "shotCount": 32 - } - ] - }, - { - "timestamp": 1959, - "events": [ - { - "type": "song", - "text": [ - "Gala", - "Freed From Desire" - ] - } - ] - }, - { - "timestamp": 2004, - "events": [ - { - "type": "shot", - "text": [ - "Nummertje 33!", - "Nog 67 shotjes!" - ], - "shotCount": 33 - } - ] - }, - { - "timestamp": 2034, - "events": [ - { - "type": "song", - "text": [ - "Wolter Kroes", - "Viva Hollandia" - ] - } - ] - }, - { - "timestamp": 2064, - "events": [ - { - "type": "shot", - "text": [ - "Voor het vaderland!", - "Nog 66 shotjes" - ], - "shotCount": 34 - } - ] - }, - { - "timestamp": 2125, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 65 shotjes" - ], - "shotCount": 35 - } - ] - }, - { - "timestamp": 2128, - "events": [ - { - "type": "song", - "text": [ - "Westlife", - "Uptown Girl" - ] - } - ] - }, - { - "timestamp": 2179, - "events": [ - { - "type": "song", - "text": [ - "Aqua", - "Barbie Girl" - ] - } - ] - }, - { - "timestamp": 2194, - "events": [ - { - "type": "shot", - "text": [ - "Pweeeep!", - "Nog 64 shotjes" - ], - "shotCount": 36 - } - ] - }, - { - "timestamp": 2225, - "events": [ - { - "type": "song", - "text": [ - "Guillerma & Tropical Danny", - "Toppertje" - ] - } - ] - }, - { - "timestamp": 2245, - "events": [ - { - "type": "shot", - "text": [ - "In dat keelgaatje!", - "Nog 63 shotjes" - ], - "shotCount": 37 - } - ] - }, - { - "timestamp": 2305, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 62 shotjes" - ], - "shotCount": 38 - }, - { - "type": "song", - "text": [ - "The Bloody Beetroots feat. Steve Aoki", - "Warp 1.9" - ] - } - ] - }, - { - "timestamp": 2374, - "events": [ - { - "type": "shot", - "text": [ - "Toet!", - "Nog 61 shotjes" - ], - "shotCount": 39 - }, - { - "type": "song", - "text": [ - "David Guetta & Showtek feat. Vassy", - "Bad" - ] - } - ] - }, - { - "timestamp": 2431, - "events": [ - { - "type": "shot", - "text": [ - "40 alweer!", - "Nog 60 shotjes" - ], - "shotCount": 40 - }, - { - "type": "song", - "text": [ - "Showtek & Justin Prime", - "Cannonball" - ] - } - ] - }, - { - "timestamp": 2444, - "events": [ - { - "type": "time", - "text": [ - "Nog 60 minuten!", - "Een klein uurtje" - ] - } - ] - }, - { - "timestamp": 2460, - "events": [ - { - "type": "song", - "text": [ - "Die Atzen", - "Disco Pogo" - ] - } - ] - }, - { - "timestamp": 2489, - "events": [ - { - "type": "shot", - "text": [ - "Zuipen!", - "Nog 59 shotjes" - ], - "shotCount": 41 - } - ] - }, - { - "timestamp": 2534, - "events": [ - { - "type": "song", - "text": [ - "Lorenz Büffel", - "Johnny Däpp" - ] - } - ] - }, - { - "timestamp": 2555, - "events": [ - { - "type": "shot", - "text": [ - "Dab dat glas naar je mond!", - "Nog 58 shotjes" - ], - "shotCount": 42 - } - ] - }, - { - "timestamp": 2587, - "events": [ - { - "type": "song", - "text": [ - "Zware Jongens", - "Jodeljump" - ] - } - ] - }, - { - "timestamp": 2606, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 57 shotjes" - ], - "shotCount": 43 - } - ] - }, - { - "timestamp": 2635, - "events": [ - { - "type": "song", - "text": [ - "Parla & Pardoux", - "Liberté" - ] - } - ] - }, - { - "timestamp": 2664, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 56 shotjes" - ], - "shotCount": 44 - } - ] - }, - { - "timestamp": 2695, - "events": [ - { - "type": "song", - "text": [ - "Markus Becker", - "Das rote Pferd" - ] - } - ] - }, - { - "timestamp": 2729, - "events": [ - { - "type": "shot", - "text": [ - "Pweeeep!", - "Nog 55 shotjes" - ], - "shotCount": 45 - } - ] - }, - { - "timestamp": 2743, - "events": [ - { - "type": "song", - "text": [ - "Olaf Henning", - "Cowboy und Indianer" - ] - } - ] - }, - { - "timestamp": 2784, - "events": [ - { - "type": "shot", - "text": [ - "Adje!", - "Nog 54 shotjes" - ], - "shotCount": 46 - } - ] - }, - { - "timestamp": 2785, - "events": [ - { - "type": "song", - "text": [ - "Ch!pz", - "Cowboy" - ] - } - ] - }, - { - "timestamp": 2824, - "events": [ - { - "type": "song", - "text": [ - "Toy-Box", - "Tarzan & Jane" - ] - } - ] - }, - { - "timestamp": 2850, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 53 shotjes" - ], - "shotCount": 47 - } - ] - }, - { - "timestamp": 2879, - "events": [ - { - "type": "song", - "text": [ - "Toy-Box", - "Sailor Song" - ] - } - ] - }, - { - "timestamp": 2919, - "events": [ - { - "type": "shot", - "text": [ - "Bijna op de helft!", - "Nog 52 shotjes" - ], - "shotCount": 48 - } - ] - }, - { - "timestamp": 2921, - "events": [ - { - "type": "song", - "text": [ - "Vengaboys", - "Boom, Boom, Boom, Boom!!" - ] - } - ] - }, - { - "timestamp": 2975, - "events": [ - { - "type": "shot", - "text": [ - "Bam!", - "Nog 51 shotjes" - ], - "shotCount": 49 - } - ] - }, - { - "timestamp": 2998, - "events": [ - { - "type": "song", - "text": [ - "Vengaboys", - "To Brazil!" - ] - } - ] - }, - { - "timestamp": 3024, - "events": [ - { - "type": "time", - "text": [ - "Nog 50 minuten!", - "We zijn op de helft!" - ] - } - ] - }, - { - "timestamp": 3039, - "events": [ - { - "type": "shot", - "text": [ - "Abraham!", - "Nog 50 shotjes" - ], - "shotCount": 50 - } - ] - }, - { - "timestamp": 3070, - "events": [ - { - "type": "song", - "text": [ - "Snollebollekes", - "Bam bam (bam)" - ] - } - ] - }, - { - "timestamp": 3104, - "events": [ - { - "type": "shot", - "text": [ - "Tweede helft!", - "Nog 49 shotjes" - ], - "shotCount": 51 - } - ] - }, - { - "timestamp": 3120, - "events": [ - { - "type": "song", - "text": [ - "Def Rhymz", - "Schudden" - ] - } - ] - }, - { - "timestamp": 3160, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 48 shotjes" - ], - "shotCount": 52 - } - ] - }, - { - "timestamp": 3190, - "events": [ - { - "type": "song", - "text": [ - "Cooldown Café", - "Hey baby" - ] - } - ] - }, - { - "timestamp": 3215, - "events": [ - { - "type": "shot", - "text": [ - "Pweeeep!", - "Nog 47 shotjes" - ], - "shotCount": 53 - } - ] - }, - { - "timestamp": 3232, - "events": [ - { - "type": "song", - "text": [ - "Gebroeders Ko", - "Schatje, mag ik je foto" - ] - } - ] - }, - { - "timestamp": 3279, - "events": [ - { - "type": "shot", - "text": [ - "Zuipen!", - "Nog 46 shotjes" - ], - "shotCount": 54 - }, - { - "type": "song", - "text": [ - "Guus Meeuwis", - "Het is een nacht" - ] - } - ] - }, - { - "timestamp": 3341, - "events": [ - { - "type": "shot", - "text": [ - "Adje!", - "Nog 45 shotjes" - ], - "shotCount": 55 - } - ] - }, - { - "timestamp": 3356, - "events": [ - { - "type": "song", - "text": [ - "Tom Waes", - "Dos cervezas" - ] - } - ] - }, - { - "timestamp": 3398, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 44 shotjes" - ], - "shotCount": 56 - } - ] - }, - { - "timestamp": 3412, - "events": [ - { - "type": "song", - "text": [ - "Peter Wackel", - "Vollgas" - ] - } - ] - }, - { - "timestamp": 3439, - "events": [ - { - "type": "song", - "text": [ - "Peter Wackel", - "Scheiß drauf!" - ] - } - ] - }, - { - "timestamp": 3465, - "events": [ - { - "type": "shot", - "text": [ - "Hard gaan!", - "Nog 43 shotjes" - ], - "shotCount": 57 - } - ] - }, - { - "timestamp": 3467, - "events": [ - { - "type": "song", - "text": [ - "Ikke Hüftgold", - "Dicke titten, kartoffelsalat" - ] - } - ] - }, - { - "timestamp": 3520, - "events": [ - { - "type": "shot", - "text": [ - "Hap, slok, weg!", - "Nog 42 shotjes" - ], - "shotCount": 58 - } - ] - }, - { - "timestamp": 3521, - "events": [ - { - "type": "song", - "text": [ - "Tim Toupet", - "Fliegerlied (So ein schöner Tag)" - ] - } - ] - }, - { - "timestamp": 3564, - "events": [ - { - "type": "song", - "text": [ - "Cooldown Café", - "Met z'n allen" - ] - } - ] - }, - { - "timestamp": 3577, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 41 shotjes" - ], - "shotCount": 59 - } - ] - }, - { - "timestamp": 3636, - "events": [ - { - "type": "time", - "text": [ - "Nog 40 minuten!", - "Uurtje achter de rug" - ] - } - ] - }, - { - "timestamp": 3643, - "events": [ - { - "type": "shot", - "text": [ - "Glas 60!", - "Nog 40 shotjes" - ], - "shotCount": 60 - } - ] - }, - { - "timestamp": 3659, - "events": [ - { - "type": "song", - "text": [ - "The Partysquad feat. Jayh, Sjaak & Reverse", - "Helemaal naar de klote" - ] - } - ] - }, - { - "timestamp": 3687, - "events": [ - { - "type": "song", - "text": [ - "K-Liber", - "Viben" - ] - } - ] - }, - { - "timestamp": 3700, - "events": [ - { - "type": "shot", - "text": [ - "Adje!", - "Nog 39 shotjes" - ], - "shotCount": 61 - } - ] - }, - { - "timestamp": 3753, - "events": [ - { - "type": "shot", - "text": [ - "Pweeeep!", - "Nog 38 shotjes" - ], - "shotCount": 62 - } - ] - }, - { - "timestamp": 3755, - "events": [ - { - "type": "song", - "text": [ - "FeestDJRuud & Dirtcaps feat. Sjaak & Kraantje Pappie", - "Weekend" - ] - } - ] - }, - { - "timestamp": 3808, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 37 shotjes" - ], - "shotCount": 63 - }, - { - "type": "song", - "text": [ - "Lawineboys", - "Joost" - ] - } - ] - }, - { - "timestamp": 3860, - "events": [ - { - "type": "song", - "text": [ - "Gebroeders Ko", - "Ik heb een toeter op mijn waterscooter" - ] - } - ] - }, - { - "timestamp": 3874, - "events": [ - { - "type": "shot", - "text": [ - "Toe-toe-toeter!", - "Nog 36 shotjes" - ], - "shotCount": 64 - } - ] - }, - { - "timestamp": 3904, - "events": [ - { - "type": "song", - "text": [ - "Gebroeders Ko", - "Tringeling" - ] - } - ] - }, - { - "timestamp": 3931, - "events": [ - { - "type": "shot", - "text": [ - "Tringeling!", - "Nog 35 shotjes" - ], - "shotCount": 65 - } - ] - }, - { - "timestamp": 3975, - "events": [ - { - "type": "song", - "text": [ - "Basshunter", - "Boten Anna" - ] - } - ] - }, - { - "timestamp": 3988, - "events": [ - { - "type": "shot", - "text": [ - "Zuipen!", - "Nog 34 shotjes" - ], - "shotCount": 66 - } - ] - }, - { - "timestamp": 4029, - "events": [ - { - "type": "song", - "text": [ - "Lawineboys", - "Wat zullen we drinken" - ] - } - ] - }, - { - "timestamp": 4050, - "events": [ - { - "type": "shot", - "text": [ - "Dorst!", - "Nog 33 shotjes" - ], - "shotCount": 67 - } - ] - }, - { - "timestamp": 4081, - "events": [ - { - "type": "song", - "text": [ - "Lamme Frans", - "Wakker met een biertje!" - ] - } - ] - }, - { - "timestamp": 4113, - "events": [ - { - "type": "shot", - "text": [ - "Biertje in de hand...", - "Nog 32 shotjes" - ], - "shotCount": 68 - } - ] - }, - { - "timestamp": 4124, - "events": [ - { - "type": "song", - "text": [ - "Lawineboys feat. DJ Jerome", - "Seks met die kale" - ] - } - ] - }, - { - "timestamp": 4175, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 31 shotjes" - ], - "shotCount": 69 - } - ] - }, - { - "timestamp": 4177, - "events": [ - { - "type": "song", - "text": [ - "Zombie Nation", - "Kernkraft 400" - ] - } - ] - }, - { - "timestamp": 4214, - "events": [ - { - "type": "time", - "text": [ - "Nog 30 minuten!", - "Half uurtje nog maar" - ] - } - ] - }, - { - "timestamp": 4228, - "events": [ - { - "type": "shot", - "text": [ - "Pweeeep!", - "Nog 30 shotjes" - ], - "shotCount": 70 - } - ] - }, - { - "timestamp": 4230, - "events": [ - { - "type": "song", - "text": [ - "DJ Boozywoozy", - "Party Affair" - ] - } - ] - }, - { - "timestamp": 4280, - "events": [ - { - "type": "shot", - "text": [ - "Tik maar achterover!", - "Nog 29 shotjes" - ], - "shotCount": 71 - } - ] - }, - { - "timestamp": 4289, - "events": [ - { - "type": "song", - "text": [ - "2Unlimited", - "No Limit" - ] - } - ] - }, - { - "timestamp": 4341, - "events": [ - { - "type": "shot", - "text": [ - "Alcoholic party!", - "Nog 28 shotjes" - ], - "shotCount": 72 - } - ] - }, - { - "timestamp": 4343, - "events": [ - { - "type": "song", - "text": [ - "DJ Kicken vs. MC-Q", - "Ain't No Party" - ] - } - ] - }, - { - "timestamp": 4408, - "events": [ - { - "type": "shot", - "text": [ - "Toet!", - "Nog 27 shotjes" - ], - "shotCount": 73 - } - ] - }, - { - "timestamp": 4411, - "events": [ - { - "type": "song", - "text": [ - "Jan Wayne", - "Becuase the Night" - ] - } - ] - }, - { - "timestamp": 4455, - "events": [ - { - "type": "song", - "text": [ - "Cascada", - "Everytime We Touch" - ] - } - ] - }, - { - "timestamp": 4467, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 26 shotjes" - ], - "shotCount": 74 - } - ] - }, - { - "timestamp": 4510, - "events": [ - { - "type": "song", - "text": [ - "Gigi D'Agostino", - "L'amour toujours" - ] - } - ] - }, - { - "timestamp": 4521, - "events": [ - { - "type": "shot", - "text": [ - "Shotje 75!", - "Nog 25 shotjes" - ], - "shotCount": 75 - } - ] - }, - { - "timestamp": 4573, - "events": [ - { - "type": "song", - "text": [ - "Jason Paige", - "Gotta Catch 'M All" - ] - } - ] - }, - { - "timestamp": 4578, - "events": [ - { - "type": "shot", - "text": [ - "Trek een ad!", - "Nog 24 shotjes" - ], - "shotCount": 76 - } - ] - }, - { - "timestamp": 4636, - "events": [ - { - "type": "song", - "text": [ - "Scooter", - "How Much Is The Fish" - ] - } - ] - }, - { - "timestamp": 4645, - "events": [ - { - "type": "shot", - "text": [ - "Pweeeep!", - "Nog 23 shotjes" - ], - "shotCount": 77 - } - ] - }, - { - "timestamp": 4675, - "events": [ - { - "type": "song", - "text": [ - "Scooter", - "Weekend" - ] - } - ] - }, - { - "timestamp": 4701, - "events": [ - { - "type": "shot", - "text": [ - "scToeter!", - "Nog 22 shotjes" - ], - "shotCount": 78 - } - ] - }, - { - "timestamp": 4714, - "events": [ - { - "type": "song", - "text": [ - "Scooter", - "One (Always Hardcore)" - ] - } - ] - }, - { - "timestamp": 4764, - "events": [ - { - "type": "shot", - "text": [ - "En door!", - "Nog 21 shotjes" - ], - "shotCount": 79 - } - ] - }, - { - "timestamp": 4766, - "events": [ - { - "type": "song", - "text": [ - "Scooter", - "Maria (I Like It Loud)" - ] - } - ] - }, - { - "timestamp": 4815, - "events": [ - { - "type": "time", - "text": [ - "Nog 20 minuten!", - "Geef alles, behalve over" - ] - } - ] - }, - { - "timestamp": 4818, - "events": [ - { - "type": "song", - "text": [ - "Scooter", - "J'adore Hardcore" - ] - } - ] - }, - { - "timestamp": 4829, - "events": [ - { - "type": "shot", - "text": [ - "Al 80 in de mik!", - "Nog 20 shotjes" - ], - "shotCount": 80 - } - ] - }, - { - "timestamp": 4860, - "events": [ - { - "type": "song", - "text": [ - "Wildstylez feat. Niels Geusebroek", - "Year of Summer" - ] - } - ] - }, - { - "timestamp": 4888, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 19 shotjes" - ], - "shotCount": 81 - } - ] - }, - { - "timestamp": 4929, - "events": [ - { - "type": "song", - "text": [ - "Brennan Heart & Wildstylez", - "Lose My Mind" - ] - } - ] - }, - { - "timestamp": 4953, - "events": [ - { - "type": "shot", - "text": [ - "Bakken vouwen!", - "Nog 18 shotjes" - ], - "shotCount": 82 - } - ] - }, - { - "timestamp": 5004, - "events": [ - { - "type": "shot", - "text": [ - "Pweeeep!", - "Nog 17 shotjes" - ], - "shotCount": 83 - } - ] - }, - { - "timestamp": 5006, - "events": [ - { - "type": "song", - "text": [ - "Starkoo", - "Ik wil je" - ] - } - ] - }, - { - "timestamp": 5059, - "events": [ - { - "type": "song", - "text": [ - "Feestteam", - "Let It Be" - ] - } - ] - }, - { - "timestamp": 5071, - "events": [ - { - "type": "shot", - "text": [ - "Let it bier!", - "Nog 16 shotjes" - ], - "shotCount": 84 - } - ] - }, - { - "timestamp": 5125, - "events": [ - { - "type": "shot", - "text": [ - "Adje numero 85!", - "Nog 15 shotjes" - ], - "shotCount": 85 - } - ] - }, - { - "timestamp": 5179, - "events": [ - { - "type": "song", - "text": [ - "DJ Nikolai & DJ Mike van Dijk", - "Piano Man" - ] - } - ] - }, - { - "timestamp": 5188, - "events": [ - { - "type": "shot", - "text": [ - "Toet!", - "Nog 14 shotjes" - ], - "shotCount": 86 - } - ] - }, - { - "timestamp": 5190, - "events": [ - { - "type": "talk", - "text": [ - "Gewoon doorgaan!", - "Deze Piano Man telt niet" - ] - } - ] - }, - { - "timestamp": 5237, - "events": [ - { - "type": "song", - "text": [ - "Robbie Williams", - "Angels" - ] - } - ] - }, - { - "timestamp": 5243, - "events": [ - { - "type": "shot", - "text": [ - "Drinken!", - "Nog 13 shotjes" - ], - "shotCount": 87 - } - ] - }, - { - "timestamp": 5278, - "events": [ - { - "type": "song", - "text": [ - "Enrique Iglesias", - "Hero" - ] - } - ] - }, - { - "timestamp": 5308, - "events": [ - { - "type": "shot", - "text": [ - "I can't be your biero!", - "Nog 12 shotjes" - ], - "shotCount": 88 - } - ] - }, - { - "timestamp": 5331, - "events": [ - { - "type": "song", - "text": [ - "Whitney Houston", - "I Will Always Love You" - ] - } - ] - }, - { - "timestamp": 5374, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 11 shotjes" - ], - "shotCount": 89 - } - ] - }, - { - "timestamp": 5380, - "events": [ - { - "type": "song", - "text": [ - "Mariah Carey", - "All I Want For Christmas" - ] - } - ] - }, - { - "timestamp": 5431, - "events": [ - { - "type": "shot", - "text": [ - "90 in de keel, hierna niet veel!", - "Nog 10 shotjes" - ], - "shotCount": 90 - } - ] - }, - { - "timestamp": 5441, - "events": [ - { - "type": "time", - "text": [ - "Nog 10 minuten!", - "De laatste loodjes" - ] - } - ] - }, - { - "timestamp": 5444, - "events": [ - { - "type": "song", - "text": [ - "Kraantje Pappie", - "Feesttent (FeestDJRuud remix)" - ] - } - ] - }, - { - "timestamp": 5488, - "events": [ - { - "type": "shot", - "text": [ - "Zuip je uit de dubbele cijfers!", - "Nog 9 shotjes" - ], - "shotCount": 91 - } - ] - }, - { - "timestamp": 5490, - "events": [ - { - "type": "song", - "text": [ - "New Kids feat. DJ Paul Elstak", - "Turbo" - ] - } - ] - }, - { - "timestamp": 5556, - "events": [ - { - "type": "shot", - "text": [ - "Zuipen!", - "Nog 8 shotjes" - ], - "shotCount": 92 - } - ] - }, - { - "timestamp": 5558, - "events": [ - { - "type": "song", - "text": [ - "Lipstick", - "I'm a Raver" - ] - } - ] - }, - { - "timestamp": 5591, - "events": [ - { - "type": "song", - "text": [ - "Nakatomi", - "Children of the Night" - ] - } - ] - }, - { - "timestamp": 5612, - "events": [ - { - "type": "shot", - "text": [ - "Pweeeep!", - "Nog 7 shotjes" - ], - "shotCount": 93 - } - ] - }, - { - "timestamp": 5614, - "events": [ - { - "type": "song", - "text": [ - "Charly Lownoise & Mental Theo", - "Wonderful Days" - ] - } - ] - }, - { - "timestamp": 5659, - "events": [ - { - "type": "song", - "text": [ - "DJ Paul Elstak", - "Luv You More" - ] - } - ] - }, - { - "timestamp": 5667, - "events": [ - { - "type": "shot", - "text": [ - "Bijna daar!", - "Nog 6 shotjes" - ], - "shotCount": 94 - } - ] - }, - { - "timestamp": 5704, - "events": [ - { - "type": "song", - "text": [ - "DJ Paul Elstak", - "Rainbow In The Sky" - ] - } - ] - }, - { - "timestamp": 5716, - "events": [ - { - "type": "time", - "text": [ - "Nog 5 minuten!", - "Zet de shotjes maar klaar" - ] - } - ] - }, - { - "timestamp": 5731, - "events": [ - { - "type": "shot", - "text": [ - "Toeter!", - "Nog 5 shotjes" - ], - "shotCount": 95 - } - ] - }, - { - "timestamp": 5733, - "events": [ - { - "type": "song", - "text": [ - "Evil Activities", - "Nobody Said It Was Easy" - ] - } - ] - }, - { - "timestamp": 5783, - "events": [ - { - "type": "shot", - "text": [ - "Slok 96!", - "Nog 4 shotjes" - ], - "shotCount": 96 - } - ] - }, - { - "timestamp": 5827, - "events": [ - { - "type": "song", - "text": [ - "Melrose", - "O" - ] - } - ] - }, - { - "timestamp": 5846, - "events": [ - { - "type": "shot", - "text": [ - "Voor de 97e keer!", - "Nog 3 shotjes" - ], - "shotCount": 97 - } - ] - }, - { - "timestamp": 5855, - "events": [ - { - "type": "song", - "text": [ - "Backstreet Boys", - "I Want It That Way" - ] - } - ] - }, - { - "timestamp": 5902, - "events": [ - { - "type": "shot", - "text": [ - "Nummer 98!", - "Nog 2 shotjes" - ], - "shotCount": 98 - } - ] - }, - { - "timestamp": 5933, - "events": [ - { - "type": "song", - "text": [ - "R. Kelly", - "The World's Greatest" - ] - } - ] - }, - { - "timestamp": 5970, - "events": [ - { - "type": "shot", - "text": [ - "Nummer 99!", - "Nog 1 shotje" - ], - "shotCount": 99 - } - ] - }, - { - "timestamp": 6020, - "events": [ - { - "type": "shot", - "text": [ - "CENTURION!", - "Geen shots meer" - ], - "shotCount": 100 - } - ] - } - ] +export const EVENT_PRIORITY: EventType[] = ["shot", "talk", "time", "song"]; +export type EventType = "talk" | "shot" | "song" | "time"; + +interface TimestampEventBase { + id?: string; + type: EventType; + text: string[]; +} + +interface TimestampEventShot extends TimestampEventBase { + type: "shot"; + shotCount: number; +} + +export type TimestampEvent = TimestampEventBase | TimestampEventShot; + +const timelines: { + timelines: { + name: string; + songFile: string; + feed: TimelineItem[]; + }[]; +} = { + timelines: [ + { + name: "Centurion", + songFile: "songs/centurion.m4a", + feed: [ + { + timestamp: 0, + events: [ + { + type: "talk", + text: ["Zet je schrap!", "We gaan zo beginnen"], + }, + ], + }, + { + timestamp: 42, + events: [ + { + type: "talk", + text: [ + "Daar gaan we!", + "Dit was het startsein, je hoeft nog niet te drinken", + ], + }, + { + type: "song", + text: ["Nena", "99 Luftballons"], + }, + ], + }, + { + timestamp: 108, + events: [ + { + type: "shot", + text: ["De eerste!", "Nog 99 shotjes"], + shotCount: 1, + }, + ], + }, + { + timestamp: 148, + events: [ + { + type: "song", + text: ["Hermes House Band", "Country Roads"], + }, + ], + }, + { + timestamp: 167, + events: [ + { + type: "shot", + text: ["Nummertje twee!", "Nog 98 shotjes"], + shotCount: 2, + }, + ], + }, + { + timestamp: 185, + events: [ + { + type: "song", + text: ["Vinzzent", "Dromendans"], + }, + ], + }, + { + timestamp: 223, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 97 shotjes"], + shotCount: 3, + }, + { + type: "song", + text: ["Linda, Roos & Jessica", "Ademnood"], + }, + ], + }, + { + timestamp: 283, + events: [ + { + type: "shot", + text: ["Niet gooien!", "Nog 96 shotjes"], + shotCount: 4, + }, + { + type: "song", + text: [ + "Peter de Koning", + "Het is altijd lente in de ogen van de tandarts-assistente", + ], + }, + ], + }, + { + timestamp: 340, + events: [ + { + type: "shot", + text: ["Lustrum!", "Nog 95 shotjes"], + shotCount: 5, + }, + { + type: "song", + text: ["Liquido", "Narcotic"], + }, + ], + }, + { + timestamp: 412, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 94 shotjes"], + shotCount: 6, + }, + { + type: "song", + text: ["Snoop Dogg feat. Pharrell", "Drop It Like It's Hot"], + }, + ], + }, + { + timestamp: 449, + events: [ + { + type: "song", + text: ["M.O.P.", "Ante Up"], + }, + ], + }, + { + timestamp: 459, + events: [ + { + type: "shot", + text: ["Pweeeep!", "Nog 93 shotjes"], + shotCount: 7, + }, + ], + }, + { + timestamp: 514, + events: [ + { + type: "shot", + text: ["Trek een ad!", "Nog 92 shotjes"], + shotCount: 8, + }, + { + type: "song", + text: ["Los Del Rio", "Macarena"], + }, + ], + }, + { + timestamp: 560, + events: [ + { + type: "song", + text: ["Spice Girls", "Wannabe"], + }, + ], + }, + { + timestamp: 574, + events: [ + { + type: "shot", + text: ["We zijn er nog lang niet!", "Nog 91 shotjes"], + shotCount: 9, + }, + ], + }, + { + timestamp: 617, + events: [ + { + type: "song", + text: [ + "Major Lazer feat. Busy Signal, The Flexican & FS Green", + "Watch Out For This (Bumaye)", + ], + }, + ], + }, + { + timestamp: 635, + events: [ + { + type: "shot", + text: ["Nummer tien!", "Nog 90 shotjes"], + shotCount: 10, + }, + ], + }, + { + timestamp: 647, + events: [ + { + type: "time", + text: ["Nog 90 minuten!", "Geef alles, behalve op"], + }, + ], + }, + { + timestamp: 650, + events: [ + { + type: "song", + text: ["André van Duin", "Er staat een paard in de gang"], + }, + ], + }, + { + timestamp: 667, + events: [ + { + type: "song", + text: ["Lil Kleine & Ronnie Flex", "Drank & Drugs"], + }, + ], + }, + { + timestamp: 684, + events: [ + { + type: "song", + text: ["Kabouter Plop", "Kabouterdans"], + }, + ], + }, + { + timestamp: 699, + events: [ + { + type: "shot", + text: ["Met vriendelijke toet!", "Nog 89 shotjes"], + shotCount: 11, + }, + ], + }, + { + timestamp: 725, + events: [ + { + type: "song", + text: ["K3", "Alle kleuren"], + }, + ], + }, + { + timestamp: 756, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 88 shotjes"], + shotCount: 12, + }, + ], + }, + { + timestamp: 757, + events: [ + { + type: "song", + text: ["Kinderen voor Kinderen", "Tietenlied"], + }, + ], + }, + { + timestamp: 812, + events: [ + { + type: "shot", + text: ["Ongeluksshotje 13!", "Nog 87 shotjes"], + shotCount: 13, + }, + ], + }, + { + timestamp: 814, + events: [ + { + type: "song", + text: ["Guus Meeuwis", "Het dondert en het bliksemt"], + }, + ], + }, + { + timestamp: 874, + events: [ + { + type: "shot", + text: ["Pweeeep!", "Nog 86 shotjes"], + shotCount: 14, + }, + ], + }, + { + timestamp: 876, + events: [ + { + type: "song", + text: ["Harry Vermeegen", "1-2-3-4 Dennis bier"], + }, + ], + }, + { + timestamp: 906, + events: [ + { + type: "song", + text: ["Puhdys", "Hey, wir woll’n die Eisbär'n sehn!"], + }, + ], + }, + { + timestamp: 935, + events: [ + { + type: "shot", + text: ["Fünfzehn!", "Nog 85 shotjes"], + shotCount: 15, + }, + ], + }, + { + timestamp: 966, + events: [ + { + type: "song", + text: ["DJ Ötzi", "Burger Dance"], + }, + ], + }, + { + timestamp: 995, + events: [ + { + type: "shot", + text: ["Toet!", "Nog 84 shotjes"], + shotCount: 16, + }, + ], + }, + { + timestamp: 996, + events: [ + { + type: "song", + text: ["Mickie Krause", "Hütte auf der Alm"], + }, + ], + }, + { + timestamp: 1030, + events: [ + { + type: "song", + text: ["Ali B & Yes-R & The Partysquad", "Rampeneren"], + }, + ], + }, + { + timestamp: 1046, + events: [ + { + type: "shot", + text: ["Zuipen!", "Nog 83 shotjes"], + shotCount: 17, + }, + ], + }, + { + timestamp: 1107, + events: [ + { + type: "shot", + text: ["18, legaal!", "Nog 82 shotjes"], + shotCount: 18, + }, + { + type: "song", + text: ["Martin Solveig", "Intoxicated"], + }, + ], + }, + { + timestamp: 1137, + events: [ + { + type: "song", + text: ["Nicki Minaj", "Starships"], + }, + ], + }, + { + timestamp: 1173, + events: [ + { + type: "shot", + text: ["Laatste shotje als tiener!", "Nog 81 shotjes"], + shotCount: 19, + }, + ], + }, + { + timestamp: 1222, + events: [ + { + type: "song", + text: ["2Unlimited", "Get Ready For This"], + }, + ], + }, + { + timestamp: 1233, + events: [ + { + type: "time", + text: ["Nog 80 minuten!", "Al 19 shotjes achter de rug"], + }, + ], + }, + { + timestamp: 1235, + events: [ + { + type: "shot", + text: ["Adje!", "Nog 80 shotjes"], + shotCount: 20, + }, + ], + }, + { + timestamp: 1275, + events: [ + { + type: "song", + text: ["The Village People", "YMCA"], + }, + ], + }, + { + timestamp: 1288, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 79 shotjes"], + shotCount: 21, + }, + ], + }, + { + timestamp: 1348, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 78 shotjes"], + shotCount: 22, + }, + ], + }, + { + timestamp: 1350, + events: [ + { + type: "song", + text: ["Carly Rae Jepsen ft Owl City", "It's Always A Good Time"], + }, + ], + }, + { + timestamp: 1395, + events: [ + { + type: "song", + text: ["Avicii", "Levels"], + }, + ], + }, + { + timestamp: 1411, + events: [ + { + type: "shot", + text: ["Claxon!", "Nog 77 shotjes"], + shotCount: 23, + }, + ], + }, + { + timestamp: 1456, + events: [ + { + type: "song", + text: ["Flo-Rida feat. T-Pain", "Low"], + }, + ], + }, + { + timestamp: 1471, + events: [ + { + type: "shot", + text: ["En nu even op standje maximaal!", "Nog 76 shotjes"], + shotCount: 24, + }, + ], + }, + { + timestamp: 1486, + events: [ + { + type: "song", + text: ["Taio Cruz", "Hangover"], + }, + ], + }, + { + timestamp: 1522, + events: [ + { + type: "talk", + text: [ + "Dit is nog het rustige stukje!", + "Zet hem maar op de bonk-bonk", + ], + }, + ], + }, + { + timestamp: 1530, + events: [ + { + type: "shot", + text: ["Halve Abraham!", "Nog 75 shotjes"], + shotCount: 25, + }, + ], + }, + { + timestamp: 1545, + events: [ + { + type: "song", + text: ["LMFAO", "Party Rock Anthem"], + }, + ], + }, + { + timestamp: 1594, + events: [ + { + type: "shot", + text: ["Hoch die Hände!", "Nog 74 shotjes"], + shotCount: 26, + }, + { + type: "song", + text: ["Hans Entertainment vs. Finger & Kadel", "Hoch die Hände"], + }, + ], + }, + { + timestamp: 1623, + events: [ + { + type: "song", + text: ["Galantis", "No Money"], + }, + ], + }, + { + timestamp: 1653, + events: [ + { + type: "shot", + text: ["Voel je 'm al?", "Nog 73 shotjes"], + shotCount: 27, + }, + ], + }, + { + timestamp: 1683, + events: [ + { + type: "song", + text: ["Kid Cudi", "Pursuit of Happiness (Steve Aoki remix)"], + }, + ], + }, + { + timestamp: 1712, + events: [ + { + type: "shot", + text: ["Project X!", "Nog 72 shotjes"], + shotCount: 28, + }, + ], + }, + { + timestamp: 1741, + events: [ + { + type: "song", + text: ["Yeah Yeah Yeahs", "Heads Will Roll (A-Trak remix)"], + }, + ], + }, + { + timestamp: 1769, + events: [ + { + type: "shot", + text: ["Pweeeep!", "Nog 71 shotjes"], + shotCount: 29, + }, + ], + }, + { + timestamp: 1814, + events: [ + { + type: "song", + text: ["Michael Calfan", "Resurrection"], + }, + ], + }, + { + timestamp: 1825, + events: [ + { + type: "time", + text: ["Nog 70 minuten!", "Half uurtje zit erop"], + }, + ], + }, + { + timestamp: 1829, + events: [ + { + type: "shot", + text: ["Toet!", "Nog 70 shotjes"], + shotCount: 30, + }, + ], + }, + { + timestamp: 1858, + events: [ + { + type: "song", + text: ["Basto!", "Again and Again"], + }, + ], + }, + { + timestamp: 1887, + events: [ + { + type: "shot", + text: ["Over de dertig!", "Nog 69 (nice) shotjes"], + shotCount: 31, + }, + ], + }, + { + timestamp: 1916, + events: [ + { + type: "song", + text: ["David Guetta feat. Sia", "Titanium"], + }, + ], + }, + { + timestamp: 1945, + events: [ + { + type: "shot", + text: ["Trek een ad!", "Nog 68 shotjes"], + shotCount: 32, + }, + ], + }, + { + timestamp: 1959, + events: [ + { + type: "song", + text: ["Gala", "Freed From Desire"], + }, + ], + }, + { + timestamp: 2004, + events: [ + { + type: "shot", + text: ["Nummertje 33!", "Nog 67 shotjes!"], + shotCount: 33, + }, + ], + }, + { + timestamp: 2034, + events: [ + { + type: "song", + text: ["Wolter Kroes", "Viva Hollandia"], + }, + ], + }, + { + timestamp: 2064, + events: [ + { + type: "shot", + text: ["Voor het vaderland!", "Nog 66 shotjes"], + shotCount: 34, + }, + ], + }, + { + timestamp: 2090, + events: [ + { + type: "song", + text: ["Spongebob Squarepants", "Het Spongebob Squarepants-lied"], + }, + ], + }, + { + timestamp: 2125, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 65 shotjes"], + shotCount: 35, + }, + ], + }, + { + timestamp: 2128, + events: [ + { + type: "song", + text: ["Westlife", "Uptown Girl"], + }, + ], + }, + { + timestamp: 2179, + events: [ + { + type: "song", + text: ["Aqua", "Barbie Girl"], + }, + ], + }, + { + timestamp: 2194, + events: [ + { + type: "shot", + text: ["Pweeeep!", "Nog 64 shotjes"], + shotCount: 36, + }, + ], + }, + { + timestamp: 2225, + events: [ + { + type: "song", + text: ["Guillermo & Tropical Danny", "Toppertje"], + }, + ], + }, + { + timestamp: 2245, + events: [ + { + type: "shot", + text: ["In dat keelgaatje!", "Nog 63 shotjes"], + shotCount: 37, + }, + ], + }, + { + timestamp: 2305, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 62 shotjes"], + shotCount: 38, + }, + { + type: "song", + text: ["The Bloody Beetroots feat. Steve Aoki", "Warp 1.9"], + }, + ], + }, + { + timestamp: 2374, + events: [ + { + type: "shot", + text: ["Toet!", "Nog 61 shotjes"], + shotCount: 39, + }, + { + type: "song", + text: ["David Guetta & Showtek feat. Vassy", "Bad"], + }, + ], + }, + { + timestamp: 2431, + events: [ + { + type: "shot", + text: ["40 alweer!", "Nog 60 shotjes"], + shotCount: 40, + }, + { + type: "song", + text: ["Showtek & Justin Prime", "Cannonball"], + }, + ], + }, + { + timestamp: 2444, + events: [ + { + type: "time", + text: ["Nog 60 minuten!", "Een klein uurtje"], + }, + ], + }, + { + timestamp: 2460, + events: [ + { + type: "song", + text: ["Die Atzen", "Disco Pogo"], + }, + ], + }, + { + timestamp: 2489, + events: [ + { + type: "shot", + text: ["Zuipen!", "Nog 59 shotjes"], + shotCount: 41, + }, + ], + }, + { + timestamp: 2534, + events: [ + { + type: "song", + text: ["Lorenz Büffel", "Johnny Däpp"], + }, + ], + }, + { + timestamp: 2555, + events: [ + { + type: "shot", + text: ["Dab dat glas naar je mond!", "Nog 58 shotjes"], + shotCount: 42, + }, + ], + }, + { + timestamp: 2587, + events: [ + { + type: "song", + text: ["Zware Jongens", "Jodeljump"], + }, + ], + }, + { + timestamp: 2606, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 57 shotjes"], + shotCount: 43, + }, + ], + }, + { + timestamp: 2635, + events: [ + { + type: "song", + text: ["Parla & Pardoux", "Liberté"], + }, + ], + }, + { + timestamp: 2664, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 56 shotjes"], + shotCount: 44, + }, + ], + }, + { + timestamp: 2695, + events: [ + { + type: "song", + text: ["Markus Becker", "Das rote Pferd"], + }, + ], + }, + { + timestamp: 2729, + events: [ + { + type: "shot", + text: ["Pweeeep!", "Nog 55 shotjes"], + shotCount: 45, + }, + ], + }, + { + timestamp: 2743, + events: [ + { + type: "song", + text: ["Olaf Henning", "Cowboy und Indianer"], + }, + ], + }, + { + timestamp: 2784, + events: [ + { + type: "shot", + text: ["Adje!", "Nog 54 shotjes"], + shotCount: 46, + }, + ], + }, + { + timestamp: 2785, + events: [ + { + type: "song", + text: ["Ch!pz", "Cowboy"], + }, + ], + }, + { + timestamp: 2824, + events: [ + { + type: "song", + text: ["Toy-Box", "Tarzan & Jane"], + }, + ], }, { - 'name': 'Totale isolatie', - 'songFile': 'songs/totale_isolatie.m4a', - 'feed': [ - { - 'timestamp': 0, - 'events': [ - { - 'type': 'talk', - 'text': [ - 'Ik heb geen tekst', - 'want het is veel werk' - ] - } - ] - }, - { - 'timestamp': 10, - 'events': [ - { - 'type': 'talk', - 'text': [ - 'Nee echt', - 'niks' - ] - }, - { - 'type': 'song', - 'text': [ - 'Blahblah', - 'blahblahblah' - ] - } - ] - } - ] + timestamp: 2850, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 53 shotjes"], + shotCount: 47, + }, + ], + }, + { + timestamp: 2879, + events: [ + { + type: "song", + text: ["Toy-Box", "Sailor Song"], + }, + ], + }, + { + timestamp: 2919, + events: [ + { + type: "shot", + text: ["Bijna op de helft!", "Nog 52 shotjes"], + shotCount: 48, + }, + ], + }, + { + timestamp: 2922, + events: [ + { + type: "song", + text: ["Vengaboys", "Boom, Boom, Boom, Boom!!"], + }, + ], + }, + { + timestamp: 2975, + events: [ + { + type: "shot", + text: ["Bam!", "Nog 51 shotjes"], + shotCount: 49, + }, + ], + }, + { + timestamp: 2998, + events: [ + { + type: "song", + text: ["Vengaboys", "To Brazil!"], + }, + ], + }, + { + timestamp: 3024, + events: [ + { + type: "time", + text: ["Nog 50 minuten!", "We zijn op de helft!"], + }, + ], + }, + { + timestamp: 3039, + events: [ + { + type: "shot", + text: ["Abraham!", "Nog 50 shotjes"], + shotCount: 50, + }, + ], + }, + { + timestamp: 3070, + events: [ + { + type: "song", + text: ["Snollebollekes", "Bam bam (bam)"], + }, + ], + }, + { + timestamp: 3104, + events: [ + { + type: "shot", + text: ["Tweede helft!", "Nog 49 shotjes"], + shotCount: 51, + }, + ], + }, + { + timestamp: 3120, + events: [ + { + type: "song", + text: ["Def Rhymz", "Schudden"], + }, + ], + }, + { + timestamp: 3160, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 48 shotjes"], + shotCount: 52, + }, + ], + }, + { + timestamp: 3190, + events: [ + { + type: "song", + text: ["Cooldown Café", "Hey baby"], + }, + ], + }, + { + timestamp: 3215, + events: [ + { + type: "shot", + text: ["Pweeeep!", "Nog 47 shotjes"], + shotCount: 53, + }, + ], + }, + { + timestamp: 3232, + events: [ + { + type: "song", + text: ["Gebroeders Ko", "Schatje, mag ik je foto"], + }, + ], + }, + { + timestamp: 3279, + events: [ + { + type: "shot", + text: ["Zuipen!", "Nog 46 shotjes"], + shotCount: 54, + }, + { + type: "song", + text: ["Guus Meeuwis", "Het is een nacht"], + }, + ], + }, + { + timestamp: 3341, + events: [ + { + type: "shot", + text: ["Adje!", "Nog 45 shotjes"], + shotCount: 55, + }, + ], + }, + { + timestamp: 3356, + events: [ + { + type: "song", + text: ["Tom Waes", "Dos cervezas"], + }, + ], + }, + { + timestamp: 3398, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 44 shotjes"], + shotCount: 56, + }, + ], + }, + { + timestamp: 3412, + events: [ + { + type: "song", + text: ["Peter Wackel", "Vollgas"], + }, + ], + }, + { + timestamp: 3439, + events: [ + { + type: "song", + text: ["Peter Wackel", "Scheiß drauf!"], + }, + ], + }, + { + timestamp: 3465, + events: [ + { + type: "shot", + text: ["Hard gaan!", "Nog 43 shotjes"], + shotCount: 57, + }, + ], + }, + { + timestamp: 3467, + events: [ + { + type: "song", + text: ["Ikke Hüftgold", "Dicke titten, kartoffelsalat"], + }, + ], + }, + { + timestamp: 3520, + events: [ + { + type: "shot", + text: ["Hap, slok, weg!", "Nog 42 shotjes"], + shotCount: 58, + }, + ], + }, + { + timestamp: 3521, + events: [ + { + type: "song", + text: ["Tim Toupet", "Fliegerlied (So ein schöner Tag)"], + }, + ], + }, + { + timestamp: 3564, + events: [ + { + type: "song", + text: ["Cooldown Café", "Met z'n allen"], + }, + ], + }, + { + timestamp: 3577, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 41 shotjes"], + shotCount: 59, + }, + ], + }, + { + timestamp: 3636, + events: [ + { + type: "time", + text: ["Nog 40 minuten!", "Uurtje achter de rug"], + }, + ], + }, + { + timestamp: 3643, + events: [ + { + type: "shot", + text: ["Glas 60!", "Nog 40 shotjes"], + shotCount: 60, + }, + ], + }, + { + timestamp: 3659, + events: [ + { + type: "song", + text: [ + "The Partysquad feat. Jayh, Sjaak & Reverse", + "Helemaal naar de klote", + ], + }, + ], + }, + { + timestamp: 3687, + events: [ + { + type: "song", + text: ["K-Liber", "Viben"], + }, + ], + }, + { + timestamp: 3700, + events: [ + { + type: "shot", + text: ["Adje!", "Nog 39 shotjes"], + shotCount: 61, + }, + ], + }, + { + timestamp: 3753, + events: [ + { + type: "shot", + text: ["Pweeeep!", "Nog 38 shotjes"], + shotCount: 62, + }, + ], + }, + { + timestamp: 3755, + events: [ + { + type: "song", + text: [ + "FeestDJRuud & Dirtcaps feat. Sjaak & Kraantje Pappie", + "Weekend", + ], + }, + ], + }, + { + timestamp: 3808, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 37 shotjes"], + shotCount: 63, + }, + { + type: "song", + text: ["Lawineboys", "Joost"], + }, + ], + }, + { + timestamp: 3860, + events: [ + { + type: "song", + text: ["Gebroeders Ko", "Ik heb een toeter op mijn waterscooter"], + }, + ], + }, + { + timestamp: 3874, + events: [ + { + type: "shot", + text: ["Toe-toe-toeter!", "Nog 36 shotjes"], + shotCount: 64, + }, + ], + }, + { + timestamp: 3904, + events: [ + { + type: "song", + text: ["Gebroeders Ko", "Tringeling"], + }, + ], + }, + { + timestamp: 3931, + events: [ + { + type: "shot", + text: ["Tringeling!", "Nog 35 shotjes"], + shotCount: 65, + }, + ], + }, + { + timestamp: 3975, + events: [ + { + type: "song", + text: ["Basshunter", "Boten Anna"], + }, + ], + }, + { + timestamp: 3988, + events: [ + { + type: "shot", + text: ["Zuipen!", "Nog 34 shotjes"], + shotCount: 66, + }, + ], + }, + { + timestamp: 4029, + events: [ + { + type: "song", + text: ["Lawineboys", "Wat zullen we drinken"], + }, + ], + }, + { + timestamp: 4050, + events: [ + { + type: "shot", + text: ["Dorst!", "Nog 33 shotjes"], + shotCount: 67, + }, + ], + }, + { + timestamp: 4081, + events: [ + { + type: "song", + text: ["Lamme Frans", "Wakker met een biertje!"], + }, + ], + }, + { + timestamp: 4113, + events: [ + { + type: "shot", + text: ["Biertje in de hand...", "Nog 32 shotjes"], + shotCount: 68, + }, + ], + }, + { + timestamp: 4124.18, + events: [ + { + type: "song", + text: ["Lawineboys feat. DJ Jerome", "Seks met die kale"], + }, + ], + }, + { + timestamp: 4175, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 31 shotjes"], + shotCount: 69, + }, + ], + }, + { + timestamp: 4177, + events: [ + { + type: "song", + text: ["Zombie Nation", "Kernkraft 400"], + }, + ], + }, + { + timestamp: 4214, + events: [ + { + type: "time", + text: ["Nog 30 minuten!", "Half uurtje nog maar"], + }, + ], + }, + { + timestamp: 4228, + events: [ + { + type: "shot", + text: ["Pweeeep!", "Nog 30 shotjes"], + shotCount: 70, + }, + ], + }, + { + timestamp: 4230, + events: [ + { + type: "song", + text: ["DJ Boozywoozy", "Party Affair"], + }, + ], + }, + { + timestamp: 4280, + events: [ + { + type: "shot", + text: ["Tik maar achterover!", "Nog 29 shotjes"], + shotCount: 71, + }, + ], + }, + { + timestamp: 4289, + events: [ + { + type: "song", + text: ["2Unlimited", "No Limit"], + }, + ], + }, + { + timestamp: 4341, + events: [ + { + type: "shot", + text: ["Alcoholic party!", "Nog 28 shotjes"], + shotCount: 72, + }, + ], + }, + { + timestamp: 4343, + events: [ + { + type: "song", + text: ["DJ Kicken vs. MC-Q", "Ain't No Party"], + }, + ], + }, + { + timestamp: 4408, + events: [ + { + type: "shot", + text: ["Toet!", "Nog 27 shotjes"], + shotCount: 73, + }, + ], + }, + { + timestamp: 4411, + events: [ + { + type: "song", + text: ["Jan Wayne", "Becuase the Night"], + }, + ], + }, + { + timestamp: 4455, + events: [ + { + type: "song", + text: ["Cascada", "Everytime We Touch"], + }, + ], + }, + { + timestamp: 4467, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 26 shotjes"], + shotCount: 74, + }, + ], + }, + { + timestamp: 4510, + events: [ + { + type: "song", + text: ["Gigi D'Agostino", "L'amour toujours"], + }, + ], + }, + { + timestamp: 4521, + events: [ + { + type: "shot", + text: ["Shotje 75!", "Nog 25 shotjes"], + shotCount: 75, + }, + ], + }, + { + timestamp: 4573, + events: [ + { + type: "song", + text: ["Jason Paige", "Gotta Catch 'M All"], + }, + ], + }, + { + timestamp: 4578, + events: [ + { + type: "shot", + text: ["Trek een ad!", "Nog 24 shotjes"], + shotCount: 76, + }, + ], + }, + { + timestamp: 4636, + events: [ + { + type: "song", + text: ["Scooter", "How Much Is The Fish"], + }, + ], + }, + { + timestamp: 4645, + events: [ + { + type: "shot", + text: ["Pweeeep!", "Nog 23 shotjes"], + shotCount: 77, + }, + ], + }, + { + timestamp: 4674, + events: [ + { + type: "song", + text: ["Scooter", "Weekend"], + }, + ], + }, + { + timestamp: 4701, + events: [ + { + type: "shot", + text: ["scToeter!", "Nog 22 shotjes"], + shotCount: 78, + }, + ], + }, + { + timestamp: 4714, + events: [ + { + type: "song", + text: ["Scooter", "One (Always Hardcore)"], + }, + ], + }, + { + timestamp: 4764, + events: [ + { + type: "shot", + text: ["En door!", "Nog 21 shotjes"], + shotCount: 79, + }, + ], + }, + { + timestamp: 4766, + events: [ + { + type: "song", + text: ["Scooter", "Maria (I Like It Loud)"], + }, + ], + }, + { + timestamp: 4815, + events: [ + { + type: "time", + text: ["Nog 20 minuten!", "Geef alles, behalve over"], + }, + ], + }, + { + timestamp: 4818, + events: [ + { + type: "song", + text: ["Scooter", "J'adore Hardcore"], + }, + ], + }, + { + timestamp: 4829, + events: [ + { + type: "shot", + text: ["Al 80 in de mik!", "Nog 20 shotjes"], + shotCount: 80, + }, + ], + }, + { + timestamp: 4860, + events: [ + { + type: "song", + text: ["Wildstylez feat. Niels Geusebroek", "Year of Summer"], + }, + ], + }, + { + timestamp: 4888, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 19 shotjes"], + shotCount: 81, + }, + ], + }, + { + timestamp: 4929, + events: [ + { + type: "song", + text: ["Brennan Heart & Wildstylez", "Lose My Mind"], + }, + ], + }, + { + timestamp: 4953, + events: [ + { + type: "shot", + text: ["Bakken vouwen!", "Nog 18 shotjes"], + shotCount: 82, + }, + ], + }, + { + timestamp: 5004, + events: [ + { + type: "shot", + text: ["Pweeeep!", "Nog 17 shotjes"], + shotCount: 83, + }, + ], + }, + { + timestamp: 5006, + events: [ + { + type: "song", + text: ["Starkoo", "Ik wil je"], + }, + ], + }, + { + timestamp: 5059, + events: [ + { + type: "song", + text: ["Feestteam", "Let It Be / Hey Jude (mix)"], + }, + ], + }, + { + timestamp: 5071, + events: [ + { + type: "shot", + text: ["Let it bier!", "Nog 16 shotjes"], + shotCount: 84, + }, + ], + }, + { + timestamp: 5125, + events: [ + { + type: "shot", + text: ["Adje numero 85!", "Nog 15 shotjes"], + shotCount: 85, + }, + ], + }, + { + timestamp: 5179, + events: [ + { + type: "song", + text: ["DJ Nikolai & DJ Mike van Dijk", "Piano Man"], + }, + ], + }, + { + timestamp: 5188.35, + events: [ + { + type: "shot", + text: ["Toet!", "Nog 14 shotjes"], + shotCount: 86, + }, + ], + }, + { + timestamp: 5190, + events: [ + { + type: "talk", + text: ["Gewoon doorgaan!", "Deze Piano Man telt niet"], + }, + ], + }, + { + timestamp: 5237, + events: [ + { + type: "song", + text: ["Robbie Williams", "Angels"], + }, + ], + }, + { + timestamp: 5243, + events: [ + { + type: "shot", + text: ["Drinken!", "Nog 13 shotjes"], + shotCount: 87, + }, + ], + }, + { + timestamp: 5278, + events: [ + { + type: "song", + text: ["Enrique Iglesias", "Hero"], + }, + ], + }, + { + timestamp: 5309, + events: [ + { + type: "shot", + text: ["I can't be your biero!", "Nog 12 shotjes"], + shotCount: 88, + }, + ], + }, + { + timestamp: 5331, + events: [ + { + type: "song", + text: ["Whitney Houston", "I Will Always Love You"], + }, + ], + }, + { + timestamp: 5374, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 11 shotjes"], + shotCount: 89, + }, + ], + }, + { + timestamp: 5380, + events: [ + { + type: "song", + text: ["Mariah Carey", "All I Want For Christmas"], + }, + ], + }, + { + timestamp: 5431, + events: [ + { + type: "shot", + text: ["90 in de keel, hierna niet veel!", "Nog 10 shotjes"], + shotCount: 90, + }, + ], + }, + { + timestamp: 5441, + events: [ + { + type: "time", + text: ["Nog 10 minuten!", "De laatste loodjes"], + }, + ], + }, + { + timestamp: 5444, + events: [ + { + type: "song", + text: ["Kraantje Pappie", "Feesttent (FeestDJRuud remix)"], + }, + ], + }, + { + timestamp: 5488, + events: [ + { + type: "shot", + text: ["Zuip je uit de dubbele cijfers!", "Nog 9 shotjes"], + shotCount: 91, + }, + ], + }, + { + timestamp: 5490.25, + events: [ + { + type: "song", + text: ["New Kids feat. DJ Paul Elstak", "Turbo"], + }, + ], + }, + { + timestamp: 5556, + events: [ + { + type: "shot", + text: ["Zuipen!", "Nog 8 shotjes"], + shotCount: 92, + }, + ], + }, + { + timestamp: 5558, + events: [ + { + type: "song", + text: ["Lipstick", "I'm a Raver"], + }, + ], + }, + { + timestamp: 5591, + events: [ + { + type: "song", + text: ["Nakatomi", "Children of the Night"], + }, + ], + }, + { + timestamp: 5612, + events: [ + { + type: "shot", + text: ["Pweeeep!", "Nog 7 shotjes"], + shotCount: 93, + }, + ], + }, + { + timestamp: 5614, + events: [ + { + type: "song", + text: ["Charly Lownoise & Mental Theo", "Wonderful Days"], + }, + ], + }, + { + timestamp: 5659, + events: [ + { + type: "song", + text: ["DJ Paul Elstak", "Luv You More"], + }, + ], + }, + { + timestamp: 5667, + events: [ + { + type: "shot", + text: ["Bijna daar!", "Nog 6 shotjes"], + shotCount: 94, + }, + ], + }, + { + timestamp: 5704, + events: [ + { + type: "song", + text: ["DJ Paul Elstak", "Rainbow In The Sky"], + }, + ], + }, + { + timestamp: 5716, + events: [ + { + type: "time", + text: ["Nog 5 minuten!", "Zet de shotjes maar klaar"], + }, + ], + }, + { + timestamp: 5731.46, + events: [ + { + type: "shot", + text: ["Toeter!", "Nog 5 shotjes"], + shotCount: 95, + }, + ], + }, + { + timestamp: 5733, + events: [ + { + type: "song", + text: ["Evil Activities", "Nobody Said It Was Easy"], + }, + ], + }, + { + timestamp: 5783, + events: [ + { + type: "shot", + text: ["Slok 96!", "Nog 4 shotjes"], + shotCount: 96, + }, + ], + }, + { + timestamp: 5827, + events: [ + { + type: "song", + text: ["Melrose", "O"], + }, + ], + }, + { + timestamp: 5846, + events: [ + { + type: "shot", + text: ["Voor de 97e keer!", "Nog 3 shotjes"], + shotCount: 97, + }, + ], + }, + { + timestamp: 5855, + events: [ + { + type: "song", + text: ["Backstreet Boys", "I Want It That Way"], + }, + ], + }, + { + timestamp: 5902, + events: [ + { + type: "shot", + text: ["Nummer 98!", "Nog 2 shotjes"], + shotCount: 98, + }, + ], + }, + { + timestamp: 5933, + events: [ + { + type: "song", + text: ["R. Kelly", "The World's Greatest"], + }, + ], + }, + { + timestamp: 5970, + events: [ + { + type: "shot", + text: ["Nummer 99!", "Nog 1 shotje"], + shotCount: 99, + }, + { + type: "song", + text: ["Céline Dion", "My Heart Will Go On"], + }, + ], }, { + timestamp: 6020, + events: [ + { + type: "shot", + text: ["CENTURION!", "Geen shots meer"], + shotCount: 100, + }, + ], + }, + ], + }, + { 'name': 'Centurion 2.0', 'songFile': 'songs/Centurion2.mp3', 'feed': [ @@ -5892,5 +5250,7 @@ module.exports = { } ] } - ] -} + ], +}; + +export default timelines; diff --git a/backend/src/index.ts b/backend/src/index.ts index e0ec8ba..903cc0f 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,105 +1,133 @@ import express from "express"; -import SocketIO, {Socket} from "socket.io"; +import { Server } from "socket.io"; import path from "path"; -import Service from './Service' +import Service from "./Service"; +import { RoomOptions } from "./Room"; // process.on('SIGINT', () => process.exit()); // process.on('SIGTERM', () => process.exit()); -const HOST = '0.0.0.0'; +const HOST = "0.0.0.0"; const PORT = 3001; const app = express(); -const server = app.listen(PORT, HOST, () => console.log(`Centurion listening on port ${PORT}!`)); -app.use(express.static(path.join(__dirname, '../public'))); +const httpServer = app.listen(PORT, HOST, () => + console.log(`Centurion listening on port ${PORT}!`) +); +app.use(express.static(path.join(__dirname, "../public"))); -const io = SocketIO(server); +const io = new Server(httpServer); const service = new Service(); -io.on('connection', socket => { - socket.on('disconnect', (reason) => { - service.onSocketDisconnect(socket); - }); - - socket.on('ping', () => { - socket.emit('pong'); - }) - - socket.on('time_sync', (requestId: number, clientTime: number) => { - if (!Number.isSafeInteger(requestId)) return; - if (!Number.isSafeInteger(clientTime)) return; - - service.onTimeSync(socket, requestId, clientTime); - }) - - socket.on('room_options', (options) => { - if (!options) return; - if (!options.timelineName || typeof (options.timelineName) !== 'string') return; - if (!Number.isSafeInteger(options.seekTime)) return; - - service.onSetRoomOptions(socket, options); - }); - - socket.on('request_start', (options) => { - service.onRequestStart(socket); - }); - - socket.on('request_join', (roomId: number) => { - if (!Number.isSafeInteger(roomId)) return; - - service.onRequestJoin(socket, roomId); - }); - - socket.on('request_ready', () => { - service.onRequestReady(socket); - }) - - socket.on('request_join_random', () => { - service.onRequestJoinRandom(socket); - }) - - socket.on('call', (id: number, name: string, params: any) => { - if (!Number.isSafeInteger(id)) return; - // noinspection SuspiciousTypeOfGuard - if (!name || typeof (name) !== 'string') return; - // if (!params) return; - - let call = new Call(socket, id, name, params); - - if (name == 'room_exists') { - let roomId = params && params['roomId']; - if (!Number.isSafeInteger(roomId)) { - call.error('Invalid room id'); - return; - } +app.get("/state", (req, res) => { + return res.json(service.rooms.map((r) => r.serialize())); +}); - call.respond(service.hasRoomId(roomId)); - return; - } - // - // if (name == 'request_join') { - // let roomId = params && params['roomId']; - // if (!Number.isSafeInteger(roomId)) { - // call.error('Invalid room id'); - // return; - // } - // if (!service.hasRoomId(roomId)) { - // call.respond(false); - // return; - // } - // if (service.onRequestJoin(socket, roomId)) { - // call.respond(true); - // } else { - // call.respond(false); - // } - // } - }) - - service.onSocketConnect(socket); - - /*socket.on('join_room', (roomId, callback) => { +io.on("connection", (socket) => { + socket.on("disconnect", async () => { + await service.onSocketDisconnect(socket); + }); + + socket.on("ping", () => { + socket.emit("pong"); + }); + + socket.on("time_sync", (requestId: number, clientTime: number) => { + if (!Number.isSafeInteger(requestId)) return; + if (!Number.isSafeInteger(clientTime)) return; + + service.onTimeSync(socket, requestId, clientTime); + }); + + socket.on("room_options", (options: RoomOptions) => { + if (!options) return; + if (!options.timelineName || typeof options.timelineName !== "string") + return; + if (!Number.isSafeInteger(options.seekTime)) return; + + service.onSetRoomOptions(socket, options); + }); + + socket.on("request_start", () => { + service.onRequestStart(socket); + }); + + socket.on( + "request_join", + async (roomId: number, callback: (err?: string, res?: boolean) => void) => { + if (!Number.isSafeInteger(roomId)) { + return callback("Invalid roomId."); + } + + if (!service.hasRoomId(roomId)) { + // cannot join a room that does not exist. + return callback(undefined, false); + } + + try { + const didJoinRoom = await service.onRequestJoin(socket, roomId); + callback(undefined, didJoinRoom); + } catch (e) { + callback(e instanceof Error ? e.message : "Unknown error."); + } + } + ); + + socket.on("request_set_ready", () => { + service.onRequestSetReady(socket); + }); + + socket.on("request_join_random", async () => { + await service.onRequestJoinRandom(socket); + }); + + socket.on( + "submit_ticker_message", + (message?: unknown, callback?: (res?: null, err?: string) => void) => { + if (typeof message !== "string") { + return callback && callback(null, "Invalid message."); + } + + if (message.length > 192) { + // perfect voor het Wilhelmus + return callback && callback(null, "Message too long."); + } + + try { + service.submitTickerMessage(socket, message); + return callback && callback(); + } catch (e) { + console.error(e); + return ( + callback && + callback(null, e instanceof Error ? e.message : "Unknown error") + ); + } + } + ); + + service.onSocketConnect(socket); + + // if (name == 'request_join') { + // let roomId = params && params['roomId']; + // if (!Number.isSafeInteger(roomId)) { + // call.error('Invalid room id'); + // return; + // } + // if (!service.hasRoomId(roomId)) { + // call.respond(false); + // return; + // } + // if (service.onRequestJoin(socket, roomId)) { + // call.respond(true); + // } else { + // call.respond(false); + // } + // } + + /*socket.on('join_room', (roomId, callback) => { if (!callback || typeof callback !== 'function') { console.error("Join: Callback not a function."); return @@ -157,31 +185,3 @@ io.on('connection', socket => { } });*/ }); - -class Call { - private socket: Socket; - private id: number; - private name: string; - private params: any; - - constructor(socket: Socket, id: number, name: string, params: any) { - this.socket = socket; - this.id = id; - this.name = name; - this.params = params; - } - - error(reason: string) { - this.socket.emit('call_response', { - 'id': this.id, - 'error': reason - }) - } - - respond(data: any) { - this.socket.emit('call_response', { - 'id': this.id, - 'response': data - }); - } -} diff --git a/backend/src/timeline.ts b/backend/src/timeline.ts index 9afa7d3..a91a6aa 100644 --- a/backend/src/timeline.ts +++ b/backend/src/timeline.ts @@ -1,62 +1,11 @@ -// @ts-ignore -import timeline from '../data/timelines.js'; - +import timeline from "./data/timelines"; export function getTimelineNames(): string[] { - return timeline.timelines.map((i: any) => i.name) + return timeline.timelines.map((timeline) => timeline.name); } export function getTimeline(name: string) { - let t = timeline.timelines.find((i: any) => i.name == name); - if (!t) return null; - return t; -} - -/** - * - * @param i - * @returns {*} - */ -export function getIndex(i: number): any { - if (i >= timeline.length) { - return; - } - - return timeline[i]; -} - -/** - * @param {number} i - the index. - * @returns {{count: number, timestamp: number}|undefined} - */ -export function getNextShot(i: number) { - for (; i < timeline.length; i++) { - const time = getIndex(i); - - for (let event of time.events) { - if (event.type === 'shot') { - return { - timestamp: time.timestamp, - count: event.shotCount - } - } - } - } - - return undefined; -} - -export function indexForTime(seconds: number): number { - let lastIndex = 0; - for (let i = 0; i < timeline.length; i++) { - const time = timeline[i]; - - if (time.timestamp >= seconds) { - return lastIndex; - } - - lastIndex = i; - } - - return -1; + const t = timeline.timelines.find((t) => t.name == name); + if (!t) return null; + return t; } diff --git a/backend/src/util.ts b/backend/src/util.ts index 157e5bd..67c8b78 100644 --- a/backend/src/util.ts +++ b/backend/src/util.ts @@ -5,16 +5,14 @@ * @returns {number} */ export function randomInt(min: number, max: number): number { - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min)) + min; + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min)) + min; } let _randomTimeOffsetForDebug = randomInt(-10000, 10000); _randomTimeOffsetForDebug = 0; -console.log('random time offset', _randomTimeOffsetForDebug); - export function getCurrentTime() { - return Date.now() + _randomTimeOffsetForDebug; + return Date.now() + _randomTimeOffsetForDebug; } diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 8bb50b5..d6ef2db 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -1,8 +1,12 @@ { "compilerOptions": { + "outDir": "build", "target": "es6", "module": "commonjs", "strict": true, "esModuleInterop": true - } + }, + "include": [ + "src" + ] } diff --git a/backend/yarn.lock b/backend/yarn.lock deleted file mode 100644 index efafd4c..0000000 --- a/backend/yarn.lock +++ /dev/null @@ -1,739 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@types/body-parser@*": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" - integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.33" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546" - integrity sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A== - dependencies: - "@types/node" "*" - -"@types/express-serve-static-core@*": - version "4.17.5" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.5.tgz#a00ac7dadd746ae82477443e4d480a6a93ea083c" - integrity sha512-578YH5Lt88AKoADy0b2jQGwJtrBxezXtVe/MBqWXKZpqx91SnC0pVkVCcxcytz3lWW+cHBYDi3Ysh0WXc+rAYw== - dependencies: - "@types/node" "*" - "@types/range-parser" "*" - -"@types/express@^4.17.6": - version "4.17.6" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.6.tgz#6bce49e49570507b86ea1b07b806f04697fac45e" - integrity sha512-n/mr9tZI83kd4azlPG5y997C/M4DNABK9yErhFM6hKdym4kkmd9j0vtsJyjFIwfRBxtrxZtAfGZCNRIBMFLK5w== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "*" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/mime@*": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" - integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw== - -"@types/node@*": - version "13.9.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.2.tgz#ace1880c03594cc3e80206d96847157d8e7fa349" - integrity sha512-bnoqK579sAYrQbp73wwglccjJ4sfRdKU7WNEZ5FW4K2U6Kc0/eZ5kvXG0JKsEKFB50zrFmfFt52/cvBbZa7eXg== - -"@types/qs@*": - version "6.9.1" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.1.tgz#937fab3194766256ee09fcd40b781740758617e7" - integrity sha512-lhbQXx9HKZAPgBkISrBcmAcMpZsmpe/Cd/hY7LGZS5OfkySUBItnPZHgQPssWYUET8elF+yCFBbP1Q0RZPTdaw== - -"@types/range-parser@*": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" - integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== - -"@types/serve-static@*": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.3.tgz#eb7e1c41c4468272557e897e9171ded5e2ded9d1" - integrity sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g== - dependencies: - "@types/express-serve-static-core" "*" - "@types/mime" "*" - -"@types/socket.io@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@types/socket.io/-/socket.io-2.1.4.tgz#674e7bc193c5ccdadd4433f79f3660d31759e9ac" - integrity sha512-cI98INy7tYnweTsUlp8ocveVdAxENUThO0JsLSCs51cjOP2yV5Mqo5QszMDPckyRRA+PO6+wBgKvGvHUCc23TQ== - dependencies: - "@types/node" "*" - -accepts@~1.3.4, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= - -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= - -base64id@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== - -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= - dependencies: - callsite "1.0.0" - -blob@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" - integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -engine.io-client@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.0.tgz#82a642b42862a9b3f7a188f41776b2deab643700" - integrity sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA== - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~4.1.0" - engine.io-parser "~2.2.0" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~6.1.0" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed" - integrity sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w== - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.5" - has-binary2 "~1.0.2" - -engine.io@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.0.tgz#3a962cc4535928c252759a00f98519cb46c53ff3" - integrity sha512-XCyYVWzcHnK5cMz7G4VTu2W7zJS7SM1QkcelghyIk/FmobWBtXE7fwhBusEKvCSqc3bMh8fNFMlUkCKTFRxH2w== - dependencies: - accepts "~1.3.4" - base64id "2.0.0" - cookie "0.3.1" - debug "~4.1.0" - engine.io-parser "~2.2.0" - ws "^7.1.2" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== - dependencies: - isarray "2.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inherits@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -mime-db@1.43.0: - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== - -mime-types@~2.1.24: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== - dependencies: - mime-db "1.43.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= - dependencies: - better-assert "~1.0.0" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.1" - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - 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" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -socket.io-adapter@~1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" - integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== - -socket.io-client@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" - integrity sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA== - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~4.1.0" - engine.io-client "~3.4.0" - has-binary2 "~1.0.2" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.3.0" - to-array "0.1.4" - -socket.io-parser@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" - integrity sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng== - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - isarray "2.0.1" - -socket.io-parser@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.0.tgz#370bb4a151df2f77ce3345ff55a7072cc6e9565a" - integrity sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ== - dependencies: - component-emitter "1.2.1" - debug "~4.1.0" - isarray "2.0.1" - -socket.io@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb" - integrity sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg== - dependencies: - debug "~4.1.0" - engine.io "~3.4.0" - has-binary2 "~1.0.2" - socket.io-adapter "~1.1.0" - socket.io-client "2.3.0" - socket.io-parser "~3.4.0" - -source-map-support@^0.5.17: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -ts-node@^8.8.2: - version "8.9.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.9.0.tgz#d7bf7272dcbecd3a2aa18bd0b96c7d2f270c15d4" - integrity sha512-rwkXfOs9zmoHrV8xE++dmNd6ZIS+nmHHCxcV53ekGJrxFLMbp+pizpPS07ARvhwneCIECPppOwbZHvw9sQtU4w== - dependencies: - arg "^4.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typescript@^3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" - integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -ws@^7.1.2: - version "7.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" - integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== - -ws@~6.1.0: - version "6.1.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" - integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== - dependencies: - async-limiter "~1.0.0" - -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" - integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js new file mode 100644 index 0000000..b4408df --- /dev/null +++ b/frontend/.eslintrc.js @@ -0,0 +1,23 @@ +module.exports = { + "ignorePatterns": [".eslintrc.js", "vite.config.ts", "postcss.config.js"], + "settings": { + "react": { + "version": "detect" + } + }, + "parserOptions": { + "tsconfigRootDir": __dirname, + "project": ["./tsconfig.json"] + }, + "extends": [ + "plugin:react/recommended" + ], + "rules": { + // suppress errors for missing 'import React' in files + "react/react-in-jsx-scope": "off", + // At some point these must be set to "error" + "@typescript-eslint/no-unsafe-member-access": "warn", + "@typescript-eslint/no-unsafe-assignment": "warn", + "@typescript-eslint/no-unsafe-argument": "warn" + } +}; diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 9d2ae56..264055a 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,14 +1,16 @@ -FROM node:13-alpine AS build +FROM node:16-alpine AS build WORKDIR /app -COPY package.json yarn.lock config-overrides.js ./ -RUN yarn install +# Install TS manually since it's only included in the parent's package.json +RUN npm install --global typescript@^4.5.2 +COPY package.json package-lock.json vite.config.ts ./ +RUN npm ci --no-progress --no-optional -COPY tsconfig.json ./ +COPY tsconfig.json postcss.config.js index.html ./ COPY public public/ COPY src src/ -RUN yarn build +RUN npm run build FROM nginx:alpine WORKDIR /app diff --git a/frontend/config-overrides.js b/frontend/config-overrides.js deleted file mode 100644 index 4236e05..0000000 --- a/frontend/config-overrides.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - webpack: function (config, env) { - return config; - }, - devServer: function (configFunction) { - // Return the replacement function for create-react-app to use to generate the Webpack - // Development Server config. "configFunction" is the function that would normally have - // been used to generate the Webpack Development server config - you can use it to create - // a starting configuration to then modify instead of having to create a config from scratch. - return function (proxy, allowedHost) { - // Create the default config by calling configFunction with the proxy/allowedHost parameters - const config = configFunction(proxy, allowedHost); - - config.proxy = { - "/socket.io": { - target: "http://localhost:3001", - ws: true - } - } - - // Return your customised Webpack Development Server config. - return config; - }; - } -} diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..3993d2f --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,21 @@ + + + + + + + + + + + Centurion + + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..9a2b72c --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,5282 @@ +{ + "name": "centurion-via", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "centurion-via", + "version": "0.1.0", + "dependencies": { + "antd": "^4.17.2", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-ticker": "^1.3.0", + "react-transition-group": "^4.4.2", + "socket.io-client": "^4.4.0" + }, + "devDependencies": { + "@testing-library/jest-dom": "^5.15.1", + "@testing-library/react": "^12.1.2", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.0.3", + "@types/react": "^17.0.37", + "@types/react-dom": "^17.0.11", + "@types/react-transition-group": "^4.4.4", + "@types/socket.io-client": "^1.4.36", + "@vitejs/plugin-react": "^1.1.1", + "autoprefixer": "^10.4.0", + "less": "^4.1.2", + "postcss": "^8.4.4", + "postcss-nested": "^5.0.6", + "vite": "^2.7.1", + "vite-plugin-imp": "^2.0.10", + "vite-plugin-svgr": "^0.6.0" + } + }, + "node_modules/@ant-design/colors": { + "version": "6.0.0", + "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/icons": { + "version": "4.7.0", + "integrity": "sha512-aoB4Z7JA431rt6d4u+8xcNPPCrdufSRMUOpxa1ab6mz1JCQZOEVolj2WVs/tDFmN62zzK30mNelEsprLYsSF3g==", + "dependencies": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-svg": "^4.2.1", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.9.4" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.2.1", + "integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==" + }, + "node_modules/@ant-design/react-slick": { + "version": "0.28.4", + "integrity": "sha512-j9eAHTn7GxbXUFNknJoHS2ceAsqrQi2j8XykjZE1IXCD8kJF+t28EvhBLniDpbOsBk/3kjalnhriTfZcjBHNqg==", + "dependencies": { + "@babel/runtime": "^7.10.4", + "classnames": "^2.2.5", + "json2mq": "^0.2.0", + "lodash": "^4.17.21", + "resize-observer-polyfill": "^1.5.0" + }, + "peerDependencies": { + "react": ">=16.9.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.0", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.16.4", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.16.0", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.16.0", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.0", + "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.3", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.0", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.0", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.0", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.0", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.0", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.0", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.0", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.0", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.15.7", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.16.3", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.0", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.16.4", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.0", + "integrity": "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.16.0", + "integrity": "sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.16.0", + "integrity": "sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.16.0", + "integrity": "sha512-97yCFY+2GvniqOThOSjPor8xUoDiQ0STVWAQMl3pjhJoFVe5DuXDLZCRSZxu9clx+oRCbTiXGgKEG/Yoyo6Y+w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.16.0", + "integrity": "sha512-8yvbGGrHOeb/oyPc9tzNoe9/lmIjz3HLa9Nc5dMGDyNpGjfFrk8D2KdEq9NRkftZzeoQEW6yPQ29TMZtrLiUUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.16.3", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.16.3", + "integrity": "sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==", + "dev": true, + "dependencies": { + "core-js-pure": "^3.19.0", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.0", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.16.3", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.16.0", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.4.0", + "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/types": { + "version": "27.4.2", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "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/@rollup/pluginutils": { + "version": "4.1.1", + "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.0.0", + "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==" + }, + "node_modules/@testing-library/dom": { + "version": "8.11.1", + "integrity": "sha512-3KQDyx9r0RKYailW2MiYrSSKEfH0GTkI51UGEvJenvcoDoeRYs0PZpi2SXqtnMClQvCqdtTTpOfFETDTVADpAg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.0.0", + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "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/@testing-library/jest-dom": { + "version": "5.15.1", + "integrity": "sha512-kmj8opVDRE1E4GXyLlESsQthCXK7An28dFWxhiMwD7ZUI7ZxA6sjdJRxLerD9Jd8cHX4BDc1jzXaaZKqzlUkvg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^4.2.2", + "chalk": "^3.0.0", + "css": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/react": { + "version": "12.1.2", + "integrity": "sha512-ihQiEOklNyHIpo2Y8FREkyD1QAea054U0MVbwH1m8N9TxeFz+KoJ9LkqoKqJlzx2JDm56DVwaJ1r36JYxZM05g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "4.2.2", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.0.3", + "integrity": "sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==", + "dev": true, + "dependencies": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/node": { + "version": "16.11.11", + "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.4", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "dev": true + }, + "node_modules/@types/react": { + "version": "17.0.37", + "integrity": "sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "17.0.11", + "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.4", + "integrity": "sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "node_modules/@types/socket.io-client": { + "version": "1.4.36", + "integrity": "sha512-ZJWjtFBeBy1kRSYpVbeGYTElf6BqPQUkXDlHHD4k/42byCN5Rh027f4yARHCink9sKAkbtGZXEAmR0ZCnc2/Ag==", + "dev": true + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.2", + "integrity": "sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg==", + "dev": true, + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "1.1.1", + "integrity": "sha512-IJSRD4culdwQ6cRK0D1mstV1vdvYSb2HK1JQ1FDo6Hr7j5ppWJEwBC2v/Gy0h/A1lMmi4AnXACY/d10EgbQNEA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-transform-react-jsx": "^7.16.0", + "@babel/plugin-transform-react-jsx-development": "^7.16.0", + "@babel/plugin-transform-react-jsx-self": "^7.16.0", + "@babel/plugin-transform-react-jsx-source": "^7.16.0", + "@rollup/pluginutils": "^4.1.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "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/antd": { + "version": "4.17.2", + "integrity": "sha512-1/xwj72mzg2ly5byvnxsgucEL5JMrinlsaAr4Y+vjobmTBSI9l9zOVkwwOG8kPIrFkhrzC1I42n6GZKnTwfZmg==", + "dependencies": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons": "^4.7.0", + "@ant-design/react-slick": "~0.28.1", + "@babel/runtime": "^7.12.5", + "@ctrl/tinycolor": "^3.4.0", + "array-tree-filter": "^2.1.0", + "classnames": "^2.2.6", + "copy-to-clipboard": "^3.2.0", + "lodash": "^4.17.21", + "memoize-one": "^6.0.0", + "moment": "^2.25.3", + "rc-cascader": "~2.2.0", + "rc-checkbox": "~2.3.0", + "rc-collapse": "~3.1.0", + "rc-dialog": "~8.6.0", + "rc-drawer": "~4.4.2", + "rc-dropdown": "~3.2.0", + "rc-field-form": "~1.21.0", + "rc-image": "~5.2.5", + "rc-input-number": "~7.3.0", + "rc-mentions": "~1.6.1", + "rc-menu": "~9.0.12", + "rc-motion": "^2.4.4", + "rc-notification": "~4.5.7", + "rc-pagination": "~3.1.9", + "rc-picker": "~2.5.17", + "rc-progress": "~3.1.0", + "rc-rate": "~2.9.0", + "rc-resize-observer": "^1.0.0", + "rc-select": "~13.1.0-alpha.0", + "rc-slider": "~9.7.4", + "rc-steps": "~4.1.0", + "rc-switch": "~3.2.0", + "rc-table": "~7.19.0", + "rc-tabs": "~11.10.0", + "rc-textarea": "~0.3.0", + "rc-tooltip": "~5.1.1", + "rc-tree": "~5.3.0", + "rc-tree-select": "~4.7.0", + "rc-trigger": "^5.2.10", + "rc-upload": "~4.3.0", + "rc-util": "^5.14.0", + "scroll-into-view-if-needed": "^2.2.25" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/aria-query": { + "version": "4.2.2", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/array-tree-filter": { + "version": "2.1.0", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, + "node_modules/async-validator": { + "version": "4.0.7", + "integrity": "sha512-Pj2IR7u8hmUEDOwB++su6baaRi+QvsgajuFB9j95foM1N2gy5HM4z60hfusIO0fBPG5uLAEl6yCJr1jNSVugEQ==" + }, + "node_modules/atob": { + "version": "2.1.2", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.0", + "integrity": "sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA==", + "dev": true, + "dependencies": { + "browserslist": "^4.17.5", + "caniuse-lite": "^1.0.30001272", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/backo2": { + "version": "1.0.2", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "node_modules/browserslist": { + "version": "4.18.1", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001284", + "integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "3.0.0", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/classnames": { + "version": "2.3.1", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.17", + "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==" + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/copy-anything": { + "version": "2.0.3", + "integrity": "sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==", + "dev": true, + "dependencies": { + "is-what": "^3.12.0" + } + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.1", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/core-js-pure": { + "version": "3.19.2", + "integrity": "sha512-5LkcgQEy8pFeVnd/zomkUBSwnmIxuF1C8E9KrMAbOc8f34IBT9RGvTYeNDdp1PnvMJrrVhvk1hg/yVV5h/znlg==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css": { + "version": "3.0.0", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "dev": true + }, + "node_modules/cssesc": { + "version": "3.0.0", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.0.10", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + }, + "node_modules/date-fns": { + "version": "2.27.0", + "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/dayjs": { + "version": "1.10.7", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" + }, + "node_modules/debug": { + "version": "4.3.3", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/diff-sequences": { + "version": "27.4.0", + "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.10", + "integrity": "sha512-Xu9mD0UjrJisTmv7lmVSDMagQcU9R5hwAbxsaAE/35XPnPLJobbuREfV/rraiSaEj/UOvgrzQs66zyTWTlyd+g==", + "dev": true + }, + "node_modules/dom-align": { + "version": "1.12.2", + "integrity": "sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg==" + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.10", + "integrity": "sha512-tFgA40Iq2oy4k2PnZrLJowbgpij+lD6ZLxkw8Ht1NKTYyN8dvSvC5xlo8X0WW2jqhKSzITrbr5mpB4/AZ/8OUA==", + "dev": true + }, + "node_modules/engine.io-client": { + "version": "6.1.1", + "integrity": "sha512-V05mmDo4gjimYW+FGujoGmmmxRaDsrVr7AXA3ZIfa04MWM1jOfZfUwou0oNqhNwy/votUDvGDt4JA4QF4e0b4g==", + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.2.3", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "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/engine.io-client/node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.2", + "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", + "dependencies": { + "base64-arraybuffer": "~1.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser/node_modules/base64-arraybuffer": { + "version": "1.0.1", + "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.13.15", + "integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "optionalDependencies": { + "esbuild-android-arm64": "0.13.15", + "esbuild-darwin-64": "0.13.15", + "esbuild-darwin-arm64": "0.13.15", + "esbuild-freebsd-64": "0.13.15", + "esbuild-freebsd-arm64": "0.13.15", + "esbuild-linux-32": "0.13.15", + "esbuild-linux-64": "0.13.15", + "esbuild-linux-arm": "0.13.15", + "esbuild-linux-arm64": "0.13.15", + "esbuild-linux-mips64le": "0.13.15", + "esbuild-linux-ppc64le": "0.13.15", + "esbuild-netbsd-64": "0.13.15", + "esbuild-openbsd-64": "0.13.15", + "esbuild-sunos-64": "0.13.15", + "esbuild-windows-32": "0.13.15", + "esbuild-windows-64": "0.13.15", + "esbuild-windows-arm64": "0.13.15" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.13.15", + "integrity": "sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/escalade": { + "version": "3.1.1", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/fraction.js": { + "version": "4.1.2", + "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true, + "optional": true + }, + "node_modules/has": { + "version": "1.0.3", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-cors": { + "version": "1.1.0", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.8.0", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/jest-diff": { + "version": "27.4.2", + "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.4.0", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "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/jest-get-type": { + "version": "27.4.0", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json2mq": { + "version": "0.2.0", + "integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=", + "dependencies": { + "string-convert": "^0.2.0" + } + }, + "node_modules/json5": { + "version": "2.2.0", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less": { + "version": "4.1.2", + "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^2.5.2", + "source-map": "~0.6.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lodash": { + "version": "4.17.21", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lz-string": { + "version": "1.4.4", + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/mime": { + "version": "1.6.0", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/moment": { + "version": "2.29.1", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.1.30", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "2.9.1", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "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/parse-node-version": { + "version": "1.0.1", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parseqs": { + "version": "0.0.6", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "node_modules/parseuri": { + "version": "0.0.6", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "node_modules/path-parse": { + "version": "1.0.7", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.0", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss": { + "version": "8.4.4", + "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", + "dev": true, + "dependencies": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-nested": { + "version": "5.0.6", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.6" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.7", + "integrity": "sha512-U+b/Deoi4I/UmE6KOVPpnhS7I7AYdKbhGcat+qTQ27gycvaACvNEw11ba6RrkwVmDVRW7sigWgLj4/KbbJjeDA==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/pretty-format": { + "version": "27.4.2", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "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", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/prop-types": { + "version": "15.7.2", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true, + "optional": true + }, + "node_modules/rc-align": { + "version": "4.0.11", + "integrity": "sha512-n9mQfIYQbbNTbefyQnRHZPWuTEwG1rY4a9yKlIWHSTbgwI+XUMGRYd0uJ5pE2UbrNX0WvnMBA1zJ3Lrecpra/A==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "lodash": "^4.17.21", + "rc-util": "^5.3.0", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-cascader": { + "version": "2.2.1", + "integrity": "sha512-4saWcwpmxxh5fhUdaDgOLF2gWL8KNxLwWqELX702HNXEt2yU7AixjfvgEORNsnQZleT2W2AaGMkRDeWrwt8fMw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "array-tree-filter": "^2.1.0", + "rc-tree-select": "~4.7.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.0.1", + "warning": "^4.0.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-checkbox": { + "version": "2.3.2", + "integrity": "sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-collapse": { + "version": "3.1.2", + "integrity": "sha512-HujcKq7mghk/gVKeI6EjzTbb8e19XUZpakrYazu1MblEZ3Hu3WBMSN4A3QmvbF6n1g7x6lUlZvsHZ5shABWYOQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.3.4", + "rc-util": "^5.2.1", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dialog": { + "version": "8.6.0", + "integrity": "sha512-GSbkfqjqxpZC5/zc+8H332+q5l/DKUhpQr0vdX2uDsxo5K0PhvaMEVjyoJUTkZ3+JstEADQji1PVLVb/2bJeOQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-motion": "^2.3.0", + "rc-util": "^5.6.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-drawer": { + "version": "4.4.3", + "integrity": "sha512-FYztwRs3uXnFOIf1hLvFxIQP9MiZJA+0w+Os8dfDh/90X7z/HqP/Yg+noLCIeHEbKln1Tqelv8ymCAN24zPcfQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-util": "^5.7.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dropdown": { + "version": "3.2.0", + "integrity": "sha512-j1HSw+/QqlhxyTEF6BArVZnTmezw2LnSmRk6I9W7BCqNCKaRwleRmMMs1PHbuaG8dKHVqP6e21RQ7vPBLVnnNw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-trigger": "^5.0.4" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-field-form": { + "version": "1.21.2", + "integrity": "sha512-LR/bURt/Tf5g39mb0wtMtQuWn42d/7kEzpzlC5fNC7yaRVmLTtlPP4sBBlaViETM9uZQKLoaB0Pt9Mubhm9gow==", + "dependencies": { + "@babel/runtime": "^7.8.4", + "async-validator": "^4.0.2", + "rc-util": "^5.8.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">= 16.9.0", + "react-dom": ">= 16.9.0" + } + }, + "node_modules/rc-image": { + "version": "5.2.5", + "integrity": "sha512-qUfZjYIODxO0c8a8P5GeuclYXZjzW4hV/5hyo27XqSFo1DmTCs2HkVeQObkcIk5kNsJtgsj1KoPThVsSc/PXOw==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-dialog": "~8.6.0", + "rc-util": "^5.0.6" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-input-number": { + "version": "7.3.4", + "integrity": "sha512-W9uqSzuvJUnz8H8vsVY4kx+yK51SsAxNTwr8SNH4G3XqQNocLVmKIibKFRjocnYX1RDHMND9FFbgj2h7E7nvGA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.9.8" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-mentions": { + "version": "1.6.1", + "integrity": "sha512-LDzGI8jJVGnkhpTZxZuYBhMz3avcZZqPGejikchh97xPni/g4ht714Flh7DVvuzHQ+BoKHhIjobHnw1rcP8erg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-menu": "^9.0.0", + "rc-textarea": "^0.3.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.0.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-menu": { + "version": "9.0.14", + "integrity": "sha512-CIox5mZeLDAi32SlHrV7UeSjv7tmJJhwRyxQtZCKt351w3q59XlL4WMFOmtT9gwIfP9h0XoxdBZUMe/xzkp78A==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.2.0", + "rc-trigger": "^5.1.2", + "rc-util": "^5.12.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-motion": { + "version": "2.4.4", + "integrity": "sha512-ms7n1+/TZQBS0Ydd2Q5P4+wJTSOrhIrwNxLXCZpR7Fa3/oac7Yi803HDALc2hLAKaCTQtw9LmQeB58zcwOsqlQ==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.2.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-notification": { + "version": "4.5.7", + "integrity": "sha512-zhTGUjBIItbx96SiRu3KVURcLOydLUHZCPpYEn1zvh+re//Tnq/wSxN4FKgp38n4HOgHSVxcLEeSxBMTeBBDdw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.2.0", + "rc-util": "^5.0.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-overflow": { + "version": "1.2.2", + "integrity": "sha512-X5kj9LDU1ue5wHkqvCprJWLKC+ZLs3p4He/oxjZ1Q4NKaqKBaYf5OdSzRSgh3WH8kSdrfU8LjvlbWnHgJOEkNQ==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-pagination": { + "version": "3.1.14", + "integrity": "sha512-tcugvxrtPiVU00Uh0IwC8NIUlxa4KtA9pXcaMNJdSHeO2uQqVkHEwllsULTAWRF3zRV2ozo2weP/DRKIUrX+Zg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-picker": { + "version": "2.5.19", + "integrity": "sha512-u6myoCu/qiQ0vLbNzSzNrzTQhs7mldArCpPHrEI6OUiifs+IPXmbesqSm0zilJjfzrZJLgYeyyOMSznSlh0GKA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "date-fns": "2.x", + "dayjs": "1.x", + "moment": "^2.24.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.4.0", + "shallowequal": "^1.1.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-progress": { + "version": "3.1.4", + "integrity": "sha512-XBAif08eunHssGeIdxMXOmRQRULdHaDdIFENQ578CMb4dyewahmmfJRyab+hw4KH4XssEzzYOkAInTLS7JJG+Q==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-rate": { + "version": "2.9.1", + "integrity": "sha512-MmIU7FT8W4LYRRHJD1sgG366qKtSaKb67D0/vVvJYR0lrCuRrCiVQ5qhfT5ghVO4wuVIORGpZs7ZKaYu+KMUzA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.0.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-resize-observer": { + "version": "1.1.1", + "integrity": "sha512-5A3B9ha297ItltzXl812WFE36SyRDTNclfrXE3FL1pEwXkBh7iSEzxjzfwsPeMcF9ahy3ZoxLgLuRksXBGGD6A==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.15.0", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-select": { + "version": "13.1.1", + "integrity": "sha512-Oy4L27x5QgGR8902pw0bJVjrTWFnKPKvdLHzJl5pjiA+jM1hpzDfLGg/bY2ntk5ElxxQKZUwbFKUeqfCQU7SrQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-overflow": "^1.0.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.9.8", + "rc-virtual-list": "^3.2.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-slider": { + "version": "9.7.4", + "integrity": "sha512-pjLKLiDKiaL7/pNywfIBD+lDo5TtVo05KuIBSWEIoqu6FHh6IMWvthCiaODuYaVs3RLeF2nXOP5AjkD2Lt2Rwg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-tooltip": "^5.0.1", + "rc-util": "^5.0.0", + "shallowequal": "^1.1.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-steps": { + "version": "4.1.4", + "integrity": "sha512-qoCqKZWSpkh/b03ASGx1WhpKnuZcRWmvuW+ZUu4mvMdfvFzVxblTwUM+9aBd0mlEUFmt6GW8FXhMpHkK3Uzp3w==", + "dependencies": { + "@babel/runtime": "^7.10.2", + "classnames": "^2.2.3", + "rc-util": "^5.0.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-switch": { + "version": "3.2.2", + "integrity": "sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.0.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-table": { + "version": "7.19.2", + "integrity": "sha512-NdpnoM50MK02H5/hGOsObfxCvGFUG5cHB9turE5BKJ81T5Ycbq193w5tLhnpILXe//Oanzr47MdMxkUnVGP+qg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.14.0", + "shallowequal": "^1.1.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tabs": { + "version": "11.10.4", + "integrity": "sha512-FXihSD9DEF7G/C5iIHNon5jzIO66Two0aeB6uHCmSYibasCsnuBFslHXb9Pa4woqs+vVNjiKRgoDZfurwx1rzg==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "classnames": "2.x", + "rc-dropdown": "^3.2.0", + "rc-menu": "^9.0.0", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.5.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-textarea": { + "version": "0.3.5", + "integrity": "sha512-qa+k5vDn9ct65qr+SgD2KwJ9Xz6P84lG2z+TDht/RBr71WnM/K61PqHUAcUyU6YqTJD26IXgjPuuhZR7HMw7eA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.7.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tooltip": { + "version": "5.1.1", + "integrity": "sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "rc-trigger": "^5.0.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tree": { + "version": "5.3.0", + "integrity": "sha512-A9GpRalG9sCsC+D3Dw9AB3a2gggf7KUT1FoCGGrbmCH1vsBYfTm3Z4RqEUrWtC7793HRccUTxqnENymkKS99lw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-util": "^5.0.0", + "rc-virtual-list": "^3.4.1" + }, + "engines": { + "node": ">=10.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-tree-select": { + "version": "4.7.0", + "integrity": "sha512-xcc2yPpQieTW6BcRkcKbT1dcAYCQ7ARtkoHlS9EsNdd6xgw9LA6rek6PMed8r/VRMfiKtWV4c4xijW5PI6s4Rw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-select": "~13.1.0-alpha.0", + "rc-tree": "~5.3.0", + "rc-util": "^5.7.0" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-trigger": { + "version": "5.2.10", + "integrity": "sha512-FkUf4H9BOFDaIwu42fvRycXMAvkttph9AlbCZXssZDVzz2L+QZ0ERvfB/4nX3ZFPh1Zd+uVGr1DEDeXxq4J1TA==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-align": "^4.0.0", + "rc-motion": "^2.0.0", + "rc-util": "^5.5.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-upload": { + "version": "4.3.2", + "integrity": "sha512-v0HdwC/19xKAn1OYZ4hTMUSqSs/IA0n1v4p/cioSSnKubHrdpcCXC45N+TFMSOZtBlf4+xMNCFo3KDih31lAMg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-util": { + "version": "5.15.0", + "integrity": "sha512-8RI8sjOCXD3FhD3dzQNBQetpGol6BBd3sHQ/8jSGk9NPT0CH3JGtBfPODnASyE7AdDpCFQMOmgcp9CBs3S/1hg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-virtual-list": { + "version": "3.4.2", + "integrity": "sha512-OyVrrPvvFcHvV0ssz5EDZ+7Rf5qLat/+mmujjchNw5FfbJWNDwkpQ99EcVE6+FtNRmX9wFa1LGNpZLUTvp/4GQ==", + "dependencies": { + "classnames": "^2.2.6", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.0.7" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/react": { + "version": "17.0.2", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-ticker": { + "version": "1.3.0", + "integrity": "sha512-aB+Gk17BkZAMMYSel4aJ74EbDfvEbZ6zIFsvylO6FXV5xWj08NzaXc833uBv8TxP0RQ9kKjN6HgSd+VyH6Bu1w==", + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "peerDependencies": { + "prop-types": "^15.5.4", + "react": "^16.7.0", + "react-dom": "^16.7.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.2", + "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "1.20.0", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "node_modules/sax": { + "version": "1.2.4", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "node_modules/scheduler": { + "version": "0.20.2", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.28", + "integrity": "sha512-8LuxJSuFVc92+0AdNv4QOxRL4Abeo1DgLnGNkn1XlaujPH/3cCFz3QI60r2VNu4obJJROzgnIUw5TKQkZvZI1w==", + "dependencies": { + "compute-scroll-into-view": "^1.0.17" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/socket.io-client": { + "version": "4.4.0", + "integrity": "sha512-g7riSEJXi7qCFImPow98oT8X++MSsHz6MMFRXkWNJ6uEROSHOa3kxdrsYWMq85dO+09CFMkcqlpjvbVXQl4z6g==", + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "backo2": "~1.0.2", + "debug": "~4.3.2", + "engine.io-client": "~6.1.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.1.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.1.1", + "integrity": "sha512-USQVLSkDWE5nbcY760ExdKaJxCE65kcsG/8k5FDGZVVxpD1pA7hABYXYkCUvxUuYYh/+uQw0N/fvBzfT8o07KA==", + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.1", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "integrity": "sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c=" + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, + "node_modules/tslib": { + "version": "2.3.1", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/vite": { + "version": "2.7.1", + "integrity": "sha512-TDXXhcu5lyQ6uosK4ZWaOyB4VzOiizk0biitRzDzaEtgSUi8rVYPc4k1xgOjLSf0OuceDJmojFKXHOX9DB1WuQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.13.12", + "postcss": "^8.3.11", + "resolve": "^1.20.0", + "rollup": "^2.59.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "node_modules/vite-plugin-imp": { + "version": "2.0.10", + "integrity": "sha512-fn+g1/K3jedgS+etFHhD9fQzxpX3DI5DXjCw3wkP+dYBzG2sPDGoSiOxxsZS4YRFf5jo94ARqMMam9dbA6mWag==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/traverse": "^7.12.12", + "chalk": "^4.1.0", + "param-case": "^3.0.4" + }, + "peerDependencies": { + "vite": ">= 2.0.0-beta.5" + } + }, + "node_modules/vite-plugin-imp/node_modules/chalk": { + "version": "4.1.2", + "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/vite-plugin-svgr": { + "version": "0.6.0", + "integrity": "sha512-+9eiWLzdlLK3ktnO7gzazMmR/KJyXTy7z6GeRbhv5HKEOFjLdNk3eB0qJaSpzJC3dr2pKWml0jAmxH7O6CcQtg==", + "dev": true, + "dependencies": { + "@svgr/core": "^6.0.0-alpha.3" + }, + "peerDependencies": { + "vite": "^2.6.0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@babel/core": { + "version": "7.16.0", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.0.0", + "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "6.0.0", + "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "6.0.0", + "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.0.0", + "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.0.0", + "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.0.0", + "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.0.0", + "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "6.1.0", + "integrity": "sha512-1zacrn08K5RyV2NtXahOZ5Im/+aB1Y0LVh6QpzwgQV05sY7H5Npq+OcW/UqXbfB2Ua/WnHsFossFQqigCjarYg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-preset": { + "version": "6.1.0", + "integrity": "sha512-f9XrTqcwhHLVkjvXBw6QJVxuIfmW22z8iTdGqGvUGGxWoeRV2EzSHstWMBgIVd7t+TmkerqowRvBYiT0OEx3cw==", + "dev": true, + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^6.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "^6.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "^6.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "^6.0.0", + "@svgr/babel-plugin-transform-svg-component": "^6.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/core": { + "version": "6.1.1", + "integrity": "sha512-/NP+24cQmcEdJYptoFWO34SHkNx2x4KOGAMcnTpzOPQifvb1ecupWNEPeHBDY18utd0OMpl2kWf0ZnyN5VsVlg==", + "dev": true, + "dependencies": { + "@svgr/plugin-jsx": "^6.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/hast-util-to-babel-ast": { + "version": "6.0.0", + "integrity": "sha512-S+TxtCdDyRGafH1VG1t/uPZ87aOYOHzWL8kqz4FoSZcIbzWA6rnOmjNViNiDzqmEpzp2PW5o5mZfvC9DiVZhTQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.6", + "entities": "^3.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/plugin-jsx": { + "version": "6.1.0", + "integrity": "sha512-grAeVnwjr4eyzzscX6d5dK202nQcKGt5STry3BrCNuw8RZkMVFYumjH/qLnInO2ugc0ESSo8eCkb+30vXVxSTg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.15.5", + "@svgr/babel-preset": "^6.1.0", + "@svgr/hast-util-to-babel-ast": "^6.0.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "^6.0.0-alpha.0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/camelcase": { + "version": "6.2.1", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-svgr/node_modules/entities": { + "version": "3.0.1", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/vite-plugin-svgr/node_modules/semver": { + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/vite-plugin-svgr/node_modules/source-map": { + "version": "0.5.7", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vite/node_modules/postcss": { + "version": "8.4.4", + "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", + "dev": true, + "dependencies": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/vite/node_modules/rollup": { + "version": "2.61.0", + "integrity": "sha512-teQ+T1mUYbyvGyUavCodiyA9hD4DxwYZJwr/qehZGhs1Z49vsmzelMVYMxGU4ZhGRKxYPupHuz5yzm/wj7VpWA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/yaml": { + "version": "1.10.2", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + }, + "dependencies": { + "@ant-design/colors": { + "version": "6.0.0", + "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", + "requires": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "@ant-design/icons": { + "version": "4.7.0", + "integrity": "sha512-aoB4Z7JA431rt6d4u+8xcNPPCrdufSRMUOpxa1ab6mz1JCQZOEVolj2WVs/tDFmN62zzK30mNelEsprLYsSF3g==", + "requires": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-svg": "^4.2.1", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.9.4" + } + }, + "@ant-design/icons-svg": { + "version": "4.2.1", + "integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==" + }, + "@ant-design/react-slick": { + "version": "0.28.4", + "integrity": "sha512-j9eAHTn7GxbXUFNknJoHS2ceAsqrQi2j8XykjZE1IXCD8kJF+t28EvhBLniDpbOsBk/3kjalnhriTfZcjBHNqg==", + "requires": { + "@babel/runtime": "^7.10.4", + "classnames": "^2.2.5", + "json2mq": "^0.2.0", + "lodash": "^4.17.21", + "resize-observer-polyfill": "^1.5.0" + } + }, + "@babel/code-frame": { + "version": "7.16.0", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "@babel/compat-data": { + "version": "7.16.4", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true + }, + "@babel/core": { + "version": "7.16.0", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.16.0", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.0", + "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.3", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.16.0", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.0", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.0", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.0", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.0", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.16.0", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.0", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.0", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helpers": { + "version": "7.16.3", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "dev": true, + "requires": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" + } + }, + "@babel/highlight": { + "version": "7.16.0", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.16.4", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "dev": true + }, + "@babel/plugin-syntax-jsx": { + "version": "7.16.0", + "integrity": "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.16.0", + "integrity": "sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.16.0", + "integrity": "sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.16.0" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.16.0", + "integrity": "sha512-97yCFY+2GvniqOThOSjPor8xUoDiQ0STVWAQMl3pjhJoFVe5DuXDLZCRSZxu9clx+oRCbTiXGgKEG/Yoyo6Y+w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.16.0", + "integrity": "sha512-8yvbGGrHOeb/oyPc9tzNoe9/lmIjz3HLa9Nc5dMGDyNpGjfFrk8D2KdEq9NRkftZzeoQEW6yPQ29TMZtrLiUUA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/runtime": { + "version": "7.16.3", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.16.3", + "integrity": "sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==", + "dev": true, + "requires": { + "core-js-pure": "^3.19.0", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.0", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/traverse": { + "version": "7.16.3", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.16.0", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + } + }, + "@ctrl/tinycolor": { + "version": "3.4.0", + "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==" + }, + "@jest/types": { + "version": "27.4.2", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@rollup/pluginutils": { + "version": "4.1.1", + "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "@socket.io/component-emitter": { + "version": "3.0.0", + "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==" + }, + "@testing-library/dom": { + "version": "8.11.1", + "integrity": "sha512-3KQDyx9r0RKYailW2MiYrSSKEfH0GTkI51UGEvJenvcoDoeRYs0PZpi2SXqtnMClQvCqdtTTpOfFETDTVADpAg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "aria-query": { + "version": "5.0.0", + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@testing-library/jest-dom": { + "version": "5.15.1", + "integrity": "sha512-kmj8opVDRE1E4GXyLlESsQthCXK7An28dFWxhiMwD7ZUI7ZxA6sjdJRxLerD9Jd8cHX4BDc1jzXaaZKqzlUkvg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^4.2.2", + "chalk": "^3.0.0", + "css": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + } + }, + "@testing-library/react": { + "version": "12.1.2", + "integrity": "sha512-ihQiEOklNyHIpo2Y8FREkyD1QAea054U0MVbwH1m8N9TxeFz+KoJ9LkqoKqJlzx2JDm56DVwaJ1r36JYxZM05g==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0" + } + }, + "@testing-library/user-event": { + "version": "13.5.0", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5" + } + }, + "@types/aria-query": { + "version": "4.2.2", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "27.0.3", + "integrity": "sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==", + "dev": true, + "requires": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "@types/node": { + "version": "16.11.11", + "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.4", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "dev": true + }, + "@types/react": { + "version": "17.0.37", + "integrity": "sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "17.0.11", + "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-transition-group": { + "version": "4.4.4", + "integrity": "sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@types/socket.io-client": { + "version": "1.4.36", + "integrity": "sha512-ZJWjtFBeBy1kRSYpVbeGYTElf6BqPQUkXDlHHD4k/42byCN5Rh027f4yARHCink9sKAkbtGZXEAmR0ZCnc2/Ag==", + "dev": true + }, + "@types/testing-library__jest-dom": { + "version": "5.14.2", + "integrity": "sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg==", + "dev": true, + "requires": { + "@types/jest": "*" + } + }, + "@types/yargs": { + "version": "16.0.4", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "@vitejs/plugin-react": { + "version": "1.1.1", + "integrity": "sha512-IJSRD4culdwQ6cRK0D1mstV1vdvYSb2HK1JQ1FDo6Hr7j5ppWJEwBC2v/Gy0h/A1lMmi4AnXACY/d10EgbQNEA==", + "dev": true, + "requires": { + "@babel/core": "^7.16.0", + "@babel/plugin-transform-react-jsx": "^7.16.0", + "@babel/plugin-transform-react-jsx-development": "^7.16.0", + "@babel/plugin-transform-react-jsx-self": "^7.16.0", + "@babel/plugin-transform-react-jsx-source": "^7.16.0", + "@rollup/pluginutils": "^4.1.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "antd": { + "version": "4.17.2", + "integrity": "sha512-1/xwj72mzg2ly5byvnxsgucEL5JMrinlsaAr4Y+vjobmTBSI9l9zOVkwwOG8kPIrFkhrzC1I42n6GZKnTwfZmg==", + "requires": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons": "^4.7.0", + "@ant-design/react-slick": "~0.28.1", + "@babel/runtime": "^7.12.5", + "@ctrl/tinycolor": "^3.4.0", + "array-tree-filter": "^2.1.0", + "classnames": "^2.2.6", + "copy-to-clipboard": "^3.2.0", + "lodash": "^4.17.21", + "memoize-one": "^6.0.0", + "moment": "^2.25.3", + "rc-cascader": "~2.2.0", + "rc-checkbox": "~2.3.0", + "rc-collapse": "~3.1.0", + "rc-dialog": "~8.6.0", + "rc-drawer": "~4.4.2", + "rc-dropdown": "~3.2.0", + "rc-field-form": "~1.21.0", + "rc-image": "~5.2.5", + "rc-input-number": "~7.3.0", + "rc-mentions": "~1.6.1", + "rc-menu": "~9.0.12", + "rc-motion": "^2.4.4", + "rc-notification": "~4.5.7", + "rc-pagination": "~3.1.9", + "rc-picker": "~2.5.17", + "rc-progress": "~3.1.0", + "rc-rate": "~2.9.0", + "rc-resize-observer": "^1.0.0", + "rc-select": "~13.1.0-alpha.0", + "rc-slider": "~9.7.4", + "rc-steps": "~4.1.0", + "rc-switch": "~3.2.0", + "rc-table": "~7.19.0", + "rc-tabs": "~11.10.0", + "rc-textarea": "~0.3.0", + "rc-tooltip": "~5.1.1", + "rc-tree": "~5.3.0", + "rc-tree-select": "~4.7.0", + "rc-trigger": "^5.2.10", + "rc-upload": "~4.3.0", + "rc-util": "^5.14.0", + "scroll-into-view-if-needed": "^2.2.25" + } + }, + "aria-query": { + "version": "4.2.2", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "array-tree-filter": { + "version": "2.1.0", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, + "async-validator": { + "version": "4.0.7", + "integrity": "sha512-Pj2IR7u8hmUEDOwB++su6baaRi+QvsgajuFB9j95foM1N2gy5HM4z60hfusIO0fBPG5uLAEl6yCJr1jNSVugEQ==" + }, + "atob": { + "version": "2.1.2", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.0", + "integrity": "sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA==", + "dev": true, + "requires": { + "browserslist": "^4.17.5", + "caniuse-lite": "^1.0.30001272", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.1.0" + } + }, + "backo2": { + "version": "1.0.2", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "browserslist": { + "version": "4.18.1", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001284", + "integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw==", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "classnames": { + "version": "2.3.1", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "color-convert": { + "version": "2.0.1", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "compute-scroll-into-view": { + "version": "1.0.17", + "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==" + }, + "convert-source-map": { + "version": "1.8.0", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-anything": { + "version": "2.0.3", + "integrity": "sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==", + "dev": true, + "requires": { + "is-what": "^3.12.0" + } + }, + "copy-to-clipboard": { + "version": "3.3.1", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "requires": { + "toggle-selection": "^1.0.6" + } + }, + "core-js-pure": { + "version": "3.19.2", + "integrity": "sha512-5LkcgQEy8pFeVnd/zomkUBSwnmIxuF1C8E9KrMAbOc8f34IBT9RGvTYeNDdp1PnvMJrrVhvk1hg/yVV5h/znlg==", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.1", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "css": { + "version": "3.0.0", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "css.escape": { + "version": "1.5.1", + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "csstype": { + "version": "3.0.10", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + }, + "date-fns": { + "version": "2.27.0", + "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==" + }, + "dayjs": { + "version": "1.10.7", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" + }, + "debug": { + "version": "4.3.3", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "diff-sequences": { + "version": "27.4.0", + "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", + "dev": true + }, + "dom-accessibility-api": { + "version": "0.5.10", + "integrity": "sha512-Xu9mD0UjrJisTmv7lmVSDMagQcU9R5hwAbxsaAE/35XPnPLJobbuREfV/rraiSaEj/UOvgrzQs66zyTWTlyd+g==", + "dev": true + }, + "dom-align": { + "version": "1.12.2", + "integrity": "sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg==" + }, + "dom-helpers": { + "version": "5.2.1", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "dot-case": { + "version": "3.0.4", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "electron-to-chromium": { + "version": "1.4.10", + "integrity": "sha512-tFgA40Iq2oy4k2PnZrLJowbgpij+lD6ZLxkw8Ht1NKTYyN8dvSvC5xlo8X0WW2jqhKSzITrbr5mpB4/AZ/8OUA==", + "dev": true + }, + "engine.io-client": { + "version": "6.1.1", + "integrity": "sha512-V05mmDo4gjimYW+FGujoGmmmxRaDsrVr7AXA3ZIfa04MWM1jOfZfUwou0oNqhNwy/votUDvGDt4JA4QF4e0b4g==", + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0", + "yeast": "0.1.2" + }, + "dependencies": { + "ws": { + "version": "8.2.3", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} + }, + "xmlhttprequest-ssl": { + "version": "2.0.0", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" + } + } + }, + "engine.io-parser": { + "version": "5.0.2", + "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", + "requires": { + "base64-arraybuffer": "~1.0.1" + }, + "dependencies": { + "base64-arraybuffer": { + "version": "1.0.1", + "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==" + } + } + }, + "errno": { + "version": "0.1.8", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "esbuild": { + "version": "0.13.15", + "integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==", + "dev": true, + "requires": { + "esbuild-android-arm64": "0.13.15", + "esbuild-darwin-64": "0.13.15", + "esbuild-darwin-arm64": "0.13.15", + "esbuild-freebsd-64": "0.13.15", + "esbuild-freebsd-arm64": "0.13.15", + "esbuild-linux-32": "0.13.15", + "esbuild-linux-64": "0.13.15", + "esbuild-linux-arm": "0.13.15", + "esbuild-linux-arm64": "0.13.15", + "esbuild-linux-mips64le": "0.13.15", + "esbuild-linux-ppc64le": "0.13.15", + "esbuild-netbsd-64": "0.13.15", + "esbuild-openbsd-64": "0.13.15", + "esbuild-sunos-64": "0.13.15", + "esbuild-windows-32": "0.13.15", + "esbuild-windows-64": "0.13.15", + "esbuild-windows-arm64": "0.13.15" + } + }, + "esbuild-linux-64": { + "version": "0.13.15", + "integrity": "sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "fraction.js": { + "version": "4.1.2", + "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.8", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true, + "optional": true + }, + "has": { + "version": "1.0.3", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-cors": { + "version": "1.1.0", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "4.0.0", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "image-size": { + "version": "0.5.5", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "import-fresh": { + "version": "3.3.0", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "indent-string": { + "version": "4.0.0", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-core-module": { + "version": "2.8.0", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-what": { + "version": "3.14.1", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "jest-diff": { + "version": "27.4.2", + "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.4.0", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-get-type": { + "version": "27.4.0", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsesc": { + "version": "2.5.2", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json2mq": { + "version": "0.2.0", + "integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=", + "requires": { + "string-convert": "^0.2.0" + } + }, + "json5": { + "version": "2.2.0", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "less": { + "version": "4.1.2", + "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", + "dev": true, + "requires": { + "copy-anything": "^2.0.1", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^2.5.2", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "loose-envify": { + "version": "1.4.0", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lz-string": { + "version": "1.4.4", + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", + "dev": true + }, + "make-dir": { + "version": "2.1.0", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "memoize-one": { + "version": "6.0.0", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "mime": { + "version": "1.6.0", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true + }, + "min-indent": { + "version": "1.0.1", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimist": { + "version": "1.2.5", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "moment": { + "version": "2.29.1", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "ms": { + "version": "2.1.2", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanoid": { + "version": "3.1.30", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "dev": true + }, + "needle": { + "version": "2.9.1", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "no-case": { + "version": "3.0.4", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-releases": { + "version": "2.0.1", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "param-case": { + "version": "3.0.4", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@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" + } + }, + "parse-node-version": { + "version": "1.0.1", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, + "parseqs": { + "version": "0.0.6", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "parseuri": { + "version": "0.0.6", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "path-parse": { + "version": "1.0.7", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true + }, + "postcss": { + "version": "8.4.4", + "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", + "dev": true, + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + } + }, + "postcss-nested": { + "version": "5.0.6", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.7", + "integrity": "sha512-U+b/Deoi4I/UmE6KOVPpnhS7I7AYdKbhGcat+qTQ27gycvaACvNEw11ba6RrkwVmDVRW7sigWgLj4/KbbJjeDA==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "pretty-format": { + "version": "27.4.2", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } + } + }, + "prop-types": { + "version": "15.7.2", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "prr": { + "version": "1.0.1", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true, + "optional": true + }, + "rc-align": { + "version": "4.0.11", + "integrity": "sha512-n9mQfIYQbbNTbefyQnRHZPWuTEwG1rY4a9yKlIWHSTbgwI+XUMGRYd0uJ5pE2UbrNX0WvnMBA1zJ3Lrecpra/A==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "lodash": "^4.17.21", + "rc-util": "^5.3.0", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-cascader": { + "version": "2.2.1", + "integrity": "sha512-4saWcwpmxxh5fhUdaDgOLF2gWL8KNxLwWqELX702HNXEt2yU7AixjfvgEORNsnQZleT2W2AaGMkRDeWrwt8fMw==", + "requires": { + "@babel/runtime": "^7.12.5", + "array-tree-filter": "^2.1.0", + "rc-tree-select": "~4.7.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.0.1", + "warning": "^4.0.1" + } + }, + "rc-checkbox": { + "version": "2.3.2", + "integrity": "sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1" + } + }, + "rc-collapse": { + "version": "3.1.2", + "integrity": "sha512-HujcKq7mghk/gVKeI6EjzTbb8e19XUZpakrYazu1MblEZ3Hu3WBMSN4A3QmvbF6n1g7x6lUlZvsHZ5shABWYOQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.3.4", + "rc-util": "^5.2.1", + "shallowequal": "^1.1.0" + } + }, + "rc-dialog": { + "version": "8.6.0", + "integrity": "sha512-GSbkfqjqxpZC5/zc+8H332+q5l/DKUhpQr0vdX2uDsxo5K0PhvaMEVjyoJUTkZ3+JstEADQji1PVLVb/2bJeOQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-motion": "^2.3.0", + "rc-util": "^5.6.1" + } + }, + "rc-drawer": { + "version": "4.4.3", + "integrity": "sha512-FYztwRs3uXnFOIf1hLvFxIQP9MiZJA+0w+Os8dfDh/90X7z/HqP/Yg+noLCIeHEbKln1Tqelv8ymCAN24zPcfQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-util": "^5.7.0" + } + }, + "rc-dropdown": { + "version": "3.2.0", + "integrity": "sha512-j1HSw+/QqlhxyTEF6BArVZnTmezw2LnSmRk6I9W7BCqNCKaRwleRmMMs1PHbuaG8dKHVqP6e21RQ7vPBLVnnNw==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-trigger": "^5.0.4" + } + }, + "rc-field-form": { + "version": "1.21.2", + "integrity": "sha512-LR/bURt/Tf5g39mb0wtMtQuWn42d/7kEzpzlC5fNC7yaRVmLTtlPP4sBBlaViETM9uZQKLoaB0Pt9Mubhm9gow==", + "requires": { + "@babel/runtime": "^7.8.4", + "async-validator": "^4.0.2", + "rc-util": "^5.8.0" + } + }, + "rc-image": { + "version": "5.2.5", + "integrity": "sha512-qUfZjYIODxO0c8a8P5GeuclYXZjzW4hV/5hyo27XqSFo1DmTCs2HkVeQObkcIk5kNsJtgsj1KoPThVsSc/PXOw==", + "requires": { + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-dialog": "~8.6.0", + "rc-util": "^5.0.6" + } + }, + "rc-input-number": { + "version": "7.3.4", + "integrity": "sha512-W9uqSzuvJUnz8H8vsVY4kx+yK51SsAxNTwr8SNH4G3XqQNocLVmKIibKFRjocnYX1RDHMND9FFbgj2h7E7nvGA==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.9.8" + } + }, + "rc-mentions": { + "version": "1.6.1", + "integrity": "sha512-LDzGI8jJVGnkhpTZxZuYBhMz3avcZZqPGejikchh97xPni/g4ht714Flh7DVvuzHQ+BoKHhIjobHnw1rcP8erg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-menu": "^9.0.0", + "rc-textarea": "^0.3.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.0.1" + } + }, + "rc-menu": { + "version": "9.0.14", + "integrity": "sha512-CIox5mZeLDAi32SlHrV7UeSjv7tmJJhwRyxQtZCKt351w3q59XlL4WMFOmtT9gwIfP9h0XoxdBZUMe/xzkp78A==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.2.0", + "rc-trigger": "^5.1.2", + "rc-util": "^5.12.0", + "shallowequal": "^1.1.0" + } + }, + "rc-motion": { + "version": "2.4.4", + "integrity": "sha512-ms7n1+/TZQBS0Ydd2Q5P4+wJTSOrhIrwNxLXCZpR7Fa3/oac7Yi803HDALc2hLAKaCTQtw9LmQeB58zcwOsqlQ==", + "requires": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.2.1" + } + }, + "rc-notification": { + "version": "4.5.7", + "integrity": "sha512-zhTGUjBIItbx96SiRu3KVURcLOydLUHZCPpYEn1zvh+re//Tnq/wSxN4FKgp38n4HOgHSVxcLEeSxBMTeBBDdw==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.2.0", + "rc-util": "^5.0.1" + } + }, + "rc-overflow": { + "version": "1.2.2", + "integrity": "sha512-X5kj9LDU1ue5wHkqvCprJWLKC+ZLs3p4He/oxjZ1Q4NKaqKBaYf5OdSzRSgh3WH8kSdrfU8LjvlbWnHgJOEkNQ==", + "requires": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.5.1" + } + }, + "rc-pagination": { + "version": "3.1.14", + "integrity": "sha512-tcugvxrtPiVU00Uh0IwC8NIUlxa4KtA9pXcaMNJdSHeO2uQqVkHEwllsULTAWRF3zRV2ozo2weP/DRKIUrX+Zg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1" + } + }, + "rc-picker": { + "version": "2.5.19", + "integrity": "sha512-u6myoCu/qiQ0vLbNzSzNrzTQhs7mldArCpPHrEI6OUiifs+IPXmbesqSm0zilJjfzrZJLgYeyyOMSznSlh0GKA==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "date-fns": "2.x", + "dayjs": "1.x", + "moment": "^2.24.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.4.0", + "shallowequal": "^1.1.0" + } + }, + "rc-progress": { + "version": "3.1.4", + "integrity": "sha512-XBAif08eunHssGeIdxMXOmRQRULdHaDdIFENQ578CMb4dyewahmmfJRyab+hw4KH4XssEzzYOkAInTLS7JJG+Q==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6" + } + }, + "rc-rate": { + "version": "2.9.1", + "integrity": "sha512-MmIU7FT8W4LYRRHJD1sgG366qKtSaKb67D0/vVvJYR0lrCuRrCiVQ5qhfT5ghVO4wuVIORGpZs7ZKaYu+KMUzA==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.0.1" + } + }, + "rc-resize-observer": { + "version": "1.1.1", + "integrity": "sha512-5A3B9ha297ItltzXl812WFE36SyRDTNclfrXE3FL1pEwXkBh7iSEzxjzfwsPeMcF9ahy3ZoxLgLuRksXBGGD6A==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.15.0", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-select": { + "version": "13.1.1", + "integrity": "sha512-Oy4L27x5QgGR8902pw0bJVjrTWFnKPKvdLHzJl5pjiA+jM1hpzDfLGg/bY2ntk5ElxxQKZUwbFKUeqfCQU7SrQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-overflow": "^1.0.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.9.8", + "rc-virtual-list": "^3.2.0" + } + }, + "rc-slider": { + "version": "9.7.4", + "integrity": "sha512-pjLKLiDKiaL7/pNywfIBD+lDo5TtVo05KuIBSWEIoqu6FHh6IMWvthCiaODuYaVs3RLeF2nXOP5AjkD2Lt2Rwg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-tooltip": "^5.0.1", + "rc-util": "^5.0.0", + "shallowequal": "^1.1.0" + } + }, + "rc-steps": { + "version": "4.1.4", + "integrity": "sha512-qoCqKZWSpkh/b03ASGx1WhpKnuZcRWmvuW+ZUu4mvMdfvFzVxblTwUM+9aBd0mlEUFmt6GW8FXhMpHkK3Uzp3w==", + "requires": { + "@babel/runtime": "^7.10.2", + "classnames": "^2.2.3", + "rc-util": "^5.0.1" + } + }, + "rc-switch": { + "version": "3.2.2", + "integrity": "sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.0.1" + } + }, + "rc-table": { + "version": "7.19.2", + "integrity": "sha512-NdpnoM50MK02H5/hGOsObfxCvGFUG5cHB9turE5BKJ81T5Ycbq193w5tLhnpILXe//Oanzr47MdMxkUnVGP+qg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.14.0", + "shallowequal": "^1.1.0" + } + }, + "rc-tabs": { + "version": "11.10.4", + "integrity": "sha512-FXihSD9DEF7G/C5iIHNon5jzIO66Two0aeB6uHCmSYibasCsnuBFslHXb9Pa4woqs+vVNjiKRgoDZfurwx1rzg==", + "requires": { + "@babel/runtime": "^7.11.2", + "classnames": "2.x", + "rc-dropdown": "^3.2.0", + "rc-menu": "^9.0.0", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.5.0" + } + }, + "rc-textarea": { + "version": "0.3.5", + "integrity": "sha512-qa+k5vDn9ct65qr+SgD2KwJ9Xz6P84lG2z+TDht/RBr71WnM/K61PqHUAcUyU6YqTJD26IXgjPuuhZR7HMw7eA==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.7.0" + } + }, + "rc-tooltip": { + "version": "5.1.1", + "integrity": "sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA==", + "requires": { + "@babel/runtime": "^7.11.2", + "rc-trigger": "^5.0.0" + } + }, + "rc-tree": { + "version": "5.3.0", + "integrity": "sha512-A9GpRalG9sCsC+D3Dw9AB3a2gggf7KUT1FoCGGrbmCH1vsBYfTm3Z4RqEUrWtC7793HRccUTxqnENymkKS99lw==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-util": "^5.0.0", + "rc-virtual-list": "^3.4.1" + } + }, + "rc-tree-select": { + "version": "4.7.0", + "integrity": "sha512-xcc2yPpQieTW6BcRkcKbT1dcAYCQ7ARtkoHlS9EsNdd6xgw9LA6rek6PMed8r/VRMfiKtWV4c4xijW5PI6s4Rw==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-select": "~13.1.0-alpha.0", + "rc-tree": "~5.3.0", + "rc-util": "^5.7.0" + } + }, + "rc-trigger": { + "version": "5.2.10", + "integrity": "sha512-FkUf4H9BOFDaIwu42fvRycXMAvkttph9AlbCZXssZDVzz2L+QZ0ERvfB/4nX3ZFPh1Zd+uVGr1DEDeXxq4J1TA==", + "requires": { + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-align": "^4.0.0", + "rc-motion": "^2.0.0", + "rc-util": "^5.5.0" + } + }, + "rc-upload": { + "version": "4.3.2", + "integrity": "sha512-v0HdwC/19xKAn1OYZ4hTMUSqSs/IA0n1v4p/cioSSnKubHrdpcCXC45N+TFMSOZtBlf4+xMNCFo3KDih31lAMg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.2.0" + } + }, + "rc-util": { + "version": "5.15.0", + "integrity": "sha512-8RI8sjOCXD3FhD3dzQNBQetpGol6BBd3sHQ/8jSGk9NPT0CH3JGtBfPODnASyE7AdDpCFQMOmgcp9CBs3S/1hg==", + "requires": { + "@babel/runtime": "^7.12.5", + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + }, + "rc-virtual-list": { + "version": "3.4.2", + "integrity": "sha512-OyVrrPvvFcHvV0ssz5EDZ+7Rf5qLat/+mmujjchNw5FfbJWNDwkpQ99EcVE6+FtNRmX9wFa1LGNpZLUTvp/4GQ==", + "requires": { + "classnames": "^2.2.6", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.0.7" + } + }, + "react": { + "version": "17.0.2", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-dom": { + "version": "17.0.2", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-is": { + "version": "16.13.1", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-refresh": { + "version": "0.11.0", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "dev": true + }, + "react-ticker": { + "version": "1.3.0", + "integrity": "sha512-aB+Gk17BkZAMMYSel4aJ74EbDfvEbZ6zIFsvylO6FXV5xWj08NzaXc833uBv8TxP0RQ9kKjN6HgSd+VyH6Bu1w==", + "requires": {} + }, + "react-transition-group": { + "version": "4.4.2", + "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "redent": { + "version": "3.0.0", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "resolve": { + "version": "1.20.0", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "scheduler": { + "version": "0.20.2", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "scroll-into-view-if-needed": { + "version": "2.2.28", + "integrity": "sha512-8LuxJSuFVc92+0AdNv4QOxRL4Abeo1DgLnGNkn1XlaujPH/3cCFz3QI60r2VNu4obJJROzgnIUw5TKQkZvZI1w==", + "requires": { + "compute-scroll-into-view": "^1.0.17" + } + }, + "semver": { + "version": "5.7.1", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true + }, + "shallowequal": { + "version": "1.1.0", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "socket.io-client": { + "version": "4.4.0", + "integrity": "sha512-g7riSEJXi7qCFImPow98oT8X++MSsHz6MMFRXkWNJ6uEROSHOa3kxdrsYWMq85dO+09CFMkcqlpjvbVXQl4z6g==", + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "backo2": "~1.0.2", + "debug": "~4.3.2", + "engine.io-client": "~6.1.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.1.1" + } + }, + "socket.io-parser": { + "version": "4.1.1", + "integrity": "sha512-USQVLSkDWE5nbcY760ExdKaJxCE65kcsG/8k5FDGZVVxpD1pA7hABYXYkCUvxUuYYh/+uQw0N/fvBzfT8o07KA==", + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1" + } + }, + "source-map": { + "version": "0.6.1", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-js": { + "version": "1.0.1", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "dev": true + }, + "source-map-resolve": { + "version": "0.6.0", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "string-convert": { + "version": "0.2.1", + "integrity": "sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c=" + }, + "strip-indent": { + "version": "3.0.0", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "svg-parser": { + "version": "2.0.4", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "toggle-selection": { + "version": "1.0.6", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, + "tslib": { + "version": "2.3.1", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "vite": { + "version": "2.7.1", + "integrity": "sha512-TDXXhcu5lyQ6uosK4ZWaOyB4VzOiizk0biitRzDzaEtgSUi8rVYPc4k1xgOjLSf0OuceDJmojFKXHOX9DB1WuQ==", + "dev": true, + "requires": { + "esbuild": "^0.13.12", + "fsevents": "~2.3.2", + "postcss": "^8.3.11", + "resolve": "^1.20.0", + "rollup": "^2.59.0" + }, + "dependencies": { + "postcss": { + "version": "8.4.4", + "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", + "dev": true, + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + } + }, + "rollup": { + "version": "2.61.0", + "integrity": "sha512-teQ+T1mUYbyvGyUavCodiyA9hD4DxwYZJwr/qehZGhs1Z49vsmzelMVYMxGU4ZhGRKxYPupHuz5yzm/wj7VpWA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + } + } + }, + "vite-plugin-imp": { + "version": "2.0.10", + "integrity": "sha512-fn+g1/K3jedgS+etFHhD9fQzxpX3DI5DXjCw3wkP+dYBzG2sPDGoSiOxxsZS4YRFf5jo94ARqMMam9dbA6mWag==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/traverse": "^7.12.12", + "chalk": "^4.1.0", + "param-case": "^3.0.4" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "vite-plugin-svgr": { + "version": "0.6.0", + "integrity": "sha512-+9eiWLzdlLK3ktnO7gzazMmR/KJyXTy7z6GeRbhv5HKEOFjLdNk3eB0qJaSpzJC3dr2pKWml0jAmxH7O6CcQtg==", + "dev": true, + "requires": { + "@svgr/core": "^6.0.0-alpha.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.16.0", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.0.0", + "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "6.0.0", + "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "6.0.0", + "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.0.0", + "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.0.0", + "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.0.0", + "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.0.0", + "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "6.1.0", + "integrity": "sha512-1zacrn08K5RyV2NtXahOZ5Im/+aB1Y0LVh6QpzwgQV05sY7H5Npq+OcW/UqXbfB2Ua/WnHsFossFQqigCjarYg==", + "dev": true, + "requires": {} + }, + "@svgr/babel-preset": { + "version": "6.1.0", + "integrity": "sha512-f9XrTqcwhHLVkjvXBw6QJVxuIfmW22z8iTdGqGvUGGxWoeRV2EzSHstWMBgIVd7t+TmkerqowRvBYiT0OEx3cw==", + "dev": true, + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^6.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "^6.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "^6.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "^6.0.0", + "@svgr/babel-plugin-transform-svg-component": "^6.1.0" + } + }, + "@svgr/core": { + "version": "6.1.1", + "integrity": "sha512-/NP+24cQmcEdJYptoFWO34SHkNx2x4KOGAMcnTpzOPQifvb1ecupWNEPeHBDY18utd0OMpl2kWf0ZnyN5VsVlg==", + "dev": true, + "requires": { + "@svgr/plugin-jsx": "^6.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "6.0.0", + "integrity": "sha512-S+TxtCdDyRGafH1VG1t/uPZ87aOYOHzWL8kqz4FoSZcIbzWA6rnOmjNViNiDzqmEpzp2PW5o5mZfvC9DiVZhTQ==", + "dev": true, + "requires": { + "@babel/types": "^7.15.6", + "entities": "^3.0.1" + } + }, + "@svgr/plugin-jsx": { + "version": "6.1.0", + "integrity": "sha512-grAeVnwjr4eyzzscX6d5dK202nQcKGt5STry3BrCNuw8RZkMVFYumjH/qLnInO2ugc0ESSo8eCkb+30vXVxSTg==", + "dev": true, + "requires": { + "@babel/core": "^7.15.5", + "@svgr/babel-preset": "^6.1.0", + "@svgr/hast-util-to-babel-ast": "^6.0.0", + "svg-parser": "^2.0.2" + } + }, + "camelcase": { + "version": "6.2.1", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true + }, + "entities": { + "version": "3.0.1", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "warning": { + "version": "4.0.3", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "yaml": { + "version": "1.10.2", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yeast": { + "version": "0.1.2", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/frontend/package.json b/frontend/package.json index 282025b..958df4b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,35 +3,38 @@ "version": "0.1.0", "private": true, "dependencies": { - "@testing-library/jest-dom": "^4.2.4", - "@testing-library/react": "^9.4.0", - "@testing-library/user-event": "^7.2.1", - "@types/jest": "^24.9.1", - "@types/node": "^12.12.27", - "@types/react": "^16.9.19", - "@types/react-dom": "^16.9.5", - "@types/react-transition-group": "^4.2.3", - "antd": "^4.1.4", - "node-sass": "^4.13.1", - "query-string": "^6.12.1", - "react": "^16.12.0", - "react-dom": "^16.12.0", - "react-scripts": "^3.4.0", - "react-transition-group": "^4.3.0", - "socket.io-client": "^2.3.0", - "sscaffold-css": "^0.1.0", - "typescript": "^3.7.5", - "use-query-params": "^0.6.0", - "use-socketio": "^2.0.0" + "antd": "^4.17.2", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-ticker": "^1.3.0", + "react-transition-group": "^4.4.2", + "socket.io-client": "^4.4.0" }, - "scripts": { - "start": "react-app-rewired start", - "build": "react-app-rewired build", - "test": "react-app-rewired test", - "eject": "react-scripts eject" + "devDependencies": { + "@testing-library/jest-dom": "^5.15.1", + "@testing-library/react": "^12.1.2", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.0.3", + "@types/react": "^17.0.37", + "@types/react-dom": "^17.0.11", + "@types/react-transition-group": "^4.4.4", + "@types/socket.io-client": "^1.4.36", + "@vitejs/plugin-react": "^1.1.1", + "autoprefixer": "^10.4.0", + "less": "^4.1.2", + "postcss": "^8.4.4", + "postcss-nested": "^5.0.6", + "vite": "^2.7.1", + "vite-plugin-imp": "^2.0.10", + "vite-plugin-svgr": "^0.6.0" }, - "eslintConfig": { - "extends": "react-app" + "scripts": { + "start": "vite", + "build": "tsc && vite build", + "serve": "vite preview", + "check": "tsc --noEmit", + "lint": "eslint 'src/**/*.{ts,tsx}'", + "fix": "eslint --fix 'src/**/*.{ts,tsx}'" }, "browserslist": { "production": [ @@ -44,12 +47,5 @@ "last 1 firefox version", "last 1 safari version" ] - }, - "devDependencies": { - "@types/socket.io-client": "^1.4.32", - "customize-cra": "^0.9.1", - "eslint-plugin-react-hooks": "^2.3.0", - "react-app-rewired": "^2.1.5", - "workerize-loader": "^1.1.0" } } diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 0000000..0360ded --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: [ + require('autoprefixer'), + require('postcss-nested'), + ] +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico index bcd5dfd67cd0361b78123e95c2dd96031f27f743..31e6fa23e2f320ae8943ae97e1175662b6eacda4 100644 GIT binary patch literal 15406 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 J!1*)q{{ZJxW61yj literal 3150 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 MDeX2GIKR{Qf5okjU;qFB diff --git a/frontend/public/index.html b/frontend/public/index.html deleted file mode 100644 index 463c98f..0000000 --- a/frontend/public/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - Centurion - - - -
- - - diff --git a/frontend/public/logo192.png b/frontend/public/logo192.png index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..c94bd0f8706decb4ad7d6f6a3f84406057e1900d 100644 GIT binary patch literal 49916 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 literal 5347 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 X@eDJUQo;Ye2mwlRs+ii#8g1p%qjq$Kp- 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%0AVFWsYUc}@X;EmgQw?gam@5O46mUkjt#sZ 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­f7F0Zjftc*+jYOoo&^-j@;)feLtT%ze-NBN!_J! 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 SPKHH*0GJzF8C4jNqW&N8r{RVG literal 9664 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json index e17adca..ba14d11 100644 --- a/frontend/public/manifest.json +++ b/frontend/public/manifest.json @@ -1,9 +1,9 @@ { - "short_name": "React App", - "name": "Create React App Sample", + "short_name": "Centurion", + "name": "Centurion: honderd minuten...", "icons": [ { - "src": "harambee.ico", + "src": "favicon.ico", "sizes": "64x64 32x32 24x24 16x16", "type": "image/x-icon" }, @@ -20,6 +20,6 @@ ], "start_url": ".", "display": "standalone", - "theme_color": "#000000", + "theme_color": "#304ba3", "background_color": "#ffffff" } diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt index 01b0f9a..2d1aa03 100644 --- a/frontend/public/robots.txt +++ b/frontend/public/robots.txt @@ -1,2 +1,3 @@ # https://www.robotstxt.org/robotstxt.html User-agent: * +Disallow: / \ No newline at end of file diff --git a/frontend/src/components/App.tsx b/frontend/src/components/App.tsx deleted file mode 100644 index e15f5b5..0000000 --- a/frontend/src/components/App.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -import Centurion from "./Centurion"; - -const App = () => { - return ( - - ); -}; - -export default App; diff --git a/frontend/src/components/Centurion.tsx b/frontend/src/components/Centurion.tsx index 29b6d7a..f79486a 100644 --- a/frontend/src/components/Centurion.tsx +++ b/frontend/src/components/Centurion.tsx @@ -1,46 +1,26 @@ -import React from "react"; -import {Row} from "antd"; +import React, { useState } from "react"; -import {useRoomRunningAndReadyChanged} from "../lib/Connection"; -import NextShot from "./NextShot"; +import { useRoomRunningAndReadyChanged } from "../lib/Connection"; import Feed from "./Feed"; -import ShotsTaken from "./ShotsTaken"; import Lobby from "./Lobby"; -import logo from "../img/via-logo.svg"; -import haramlogo from "../img/harambee_logo.png"; -import Player from "./Player"; - const Centurion = () => { - const room = useRoomRunningAndReadyChanged(); - const showFeed = (room?.running && room.readyToParticipate) || false; - - const feedContent = ( - - - - - - - - - ); - - const lobbyContent = ( - - ); + const [currentUserReady, setCurrentUserReady] = useState(false); + const room = useRoomRunningAndReadyChanged(); + const showFeed = (room?.readyToParticipate && currentUserReady) || false; - return ( - <> -

- {showFeed ? feedContent : lobbyContent} -
-
- haramlogo - logo -
- - ); + return ( +
+ {showFeed ? ( + + ) : ( + setCurrentUserReady(b)} + /> + )} +
+ ); }; -export default Centurion; \ No newline at end of file +export default Centurion; diff --git a/frontend/src/components/Feed.tsx b/frontend/src/components/Feed.tsx index 76c60e3..b55cafe 100644 --- a/frontend/src/components/Feed.tsx +++ b/frontend/src/components/Feed.tsx @@ -1,40 +1,220 @@ -import React from 'react'; -import {Col} from "antd" +import React, { useRef, useState } from "react"; +import { Col, Row } from "antd"; -import {TimelineItem} from "../types/types"; +import { + EVENT_PRIORITY, + Timeline, + TimelineItem, + TimestampEvent, +} from "../types/types"; -import FeedItem from "./FeedItem" -import {roomTime, useTimeline} from "../lib/Connection"; -import {useUpdateAfterDelay} from "../util/hooks"; +import FeedItem from "./FeedItem"; +import connection, { + calculateRoomTime, + useRoomRunningAndReadyChanged, + useRoomTime, + useTimeline, +} from "../lib/Connection"; +import { useResize, useUpdateAfterDelay } from "../util/hooks"; import CSSTransition from "react-transition-group/CSSTransition"; import TransitionGroup from "react-transition-group/TransitionGroup"; +import NextShot from "./NextShot"; +import ShotsTaken from "./ShotsTaken"; +import Player from "./Player"; -const Feed = (props: any) => { - const timeline = useTimeline(); +import "../css/feed.css"; +import FeedTicker from "./FeedTicker"; - useUpdateAfterDelay(500) +declare global { + interface Window { + __feedShakeDebug?: boolean; + } +} - let liveFeed: TimelineItem[] = []; +function getNextItemDelay(timeline: Timeline | null, defaultDelay = 500) { + if (!timeline) { + return defaultDelay; + } - if (timeline != null) { - liveFeed = timeline.feed.filter(item => { - return item.timestamp * 1000 <= roomTime() - }); + const time = calculateRoomTime(); + const nextItem = timeline.itemAfterTime(time); + + if (!nextItem) { + return defaultDelay; + } + + const speedFactor = connection.room.get()?.speedFactor || 1; + return (nextItem.timestamp * 1000 - time) / speedFactor; +} + +/** + * This map relates back an event to the index of the item displayed from + * top to bottom. We can use this to calculate opacity. + */ +function calculateKeyToIndexMap(feed: TimelineItem[]) { + const keyToIndex: Map = new Map(); + + let totalEvents = 0; + for (const item of feed) { + totalEvents += item.events.length; + } + + let totalIdx = 0; + for (const item of feed) { + for (let eventIdx = 0; eventIdx < item.events.length; eventIdx++) { + keyToIndex.set(`${item.timestamp}.${eventIdx}`, totalEvents - ++totalIdx); } + } + + return keyToIndex; +} + +/** + * Makes sure 'shot' is always top-most within an timeline item + */ +function sortEvents(events: TimestampEvent[]) { + return events.sort((a, b) => { + return EVENT_PRIORITY.indexOf(b.type) - EVENT_PRIORITY.indexOf(a.type); + }); +} + +const Feed = () => { + const timeline = useTimeline(); + useRoomRunningAndReadyChanged(); + useResize(); + useRoomTime(); - return ( - - - {liveFeed.map((item, i) => - item.events.map((event, j) => - - - - ) - )} - + const feedElement = useRef(null); + const [lastShotId, setLastShotId] = useState(null); + + useUpdateAfterDelay(getNextItemDelay(timeline)); + + if (!timeline) { + throw new TypeError("Feed without timeline."); + } + + const time = calculateRoomTime(); + + const liveFeed = timeline.feed.filter((item) => { + return item.timestamp * 1000 <= time; + }); + + const keyToIndex: Map = calculateKeyToIndexMap(liveFeed); + + const lastEvent = timeline.eventBeforeTime(time, "shot"); + if (lastEvent && lastShotId !== lastEvent?.id) { + setLastShotId(lastEvent.id); + + if (feedElement.current) { + // Let the browser first do the heavy dom stuff to avoid lagging our + // animation. + setTimeout(doSingleShake, 100); + } + } + + function doSingleShake() { + if (!feedElement.current) return; + + if (feedElement.current.getAnimations().length > 0) return; + + if (feedElement.current.classList.contains("feed-shot-shake")) { + feedElement.current.getAnimations().forEach((i) => i.finish()); + feedElement.current.classList.remove("feed-shot-shake"); + setTimeout(doSingleShake, 0); + return; + } + + feedElement.current.classList.add("feed-shot-shake"); + const el = feedElement.current; + const listener = function () { + el.classList.remove("feed-shot-shake"); + el.removeEventListener("animationend", listener); + }; + el.addEventListener("animationend", listener); + } + + function itemOpacity(itemKey: string) { + // This is a bit of a hack but works better than trying to do this in css. + // This fades out the elements the lower the element is on the screen. + + // Ticker is only visible on large screens, the ticker obstructs some of + // the items. If it is not visible we simply take body height, otherwise + // we use the height where the ticker starts. + const tickerHeight = document + .querySelector(".ticker-container") + ?.getBoundingClientRect().y; + const bodyHeight = document.body.clientHeight; + const totalHeight = tickerHeight ? tickerHeight : bodyHeight; + + // Start at top most item, figure out which index is the first + // that is NOT visible. + const items = document.querySelectorAll(".feed-item-container"); + let i = items.length - 1; + for (; i > 0; i--) { + const rect = items[i].getBoundingClientRect(); + // If the bottom of this element is below the screen, we declare it + // not-visible. + if (rect.y + rect.height >= totalHeight) { + break; + } + } + const totalItemsOnScreen = items.length - i; + const index = keyToIndex.get(itemKey) ?? 0; + + let x = index / (totalItemsOnScreen - 1.8); + x = Math.min(0.9, Math.max(0, x)); + return 1 - Math.pow(x, 4); + } + + const debug = true; + if (debug) { + if (!window["__feedShakeDebug"]) { + window["__feedShakeDebug"] = true; + window.document.documentElement.addEventListener("keydown", (e) => { + if (e.keyCode === 67) { + // c + doSingleShake(); + } + }); + } + } + + return ( +
+ + + + + + + + + + + {liveFeed.map((item) => + sortEvents(item.events).map((event, j) => ( + +
+ +
+
+ )) + )} +
- ); +
+ + + +
+ ); }; export default Feed; diff --git a/frontend/src/components/FeedItem.tsx b/frontend/src/components/FeedItem.tsx index bbbc881..ccc0b7c 100644 --- a/frontend/src/components/FeedItem.tsx +++ b/frontend/src/components/FeedItem.tsx @@ -1,33 +1,38 @@ -import React, {PureComponent} from 'react'; +import { Col, Row } from "antd"; -import {TimestampEvent} from "../types/types"; +import type { TimestampEvent } from "../types/types"; -import '../css/feed.sass' +import "../css/feed.css"; import shot from "../img/shot.png"; import song from "../img/song.png"; import talk from "../img/talk.png"; import time from "../img/time.png"; +export interface FeedItemProps { + item: TimestampEvent; +} + const images = { - shot, song, talk, time + shot, + song, + talk, + time, }; -class FeedItem extends PureComponent<{item: TimestampEvent}> { - render() { - return ( -
-
- {this.props.item.text[0]} -
-
- -
-
- {this.props.item.text[1]} -
-
- ); - } -} +const FeedItem = ({ item }: FeedItemProps) => { + return ( + + + {item.text[0]} + + + {item.type} + + + {item.text[1]} + + + ); +}; export default FeedItem; diff --git a/frontend/src/components/FeedTicker.tsx b/frontend/src/components/FeedTicker.tsx new file mode 100644 index 0000000..2cf5d2b --- /dev/null +++ b/frontend/src/components/FeedTicker.tsx @@ -0,0 +1,95 @@ +import React, { MouseEvent, useRef, useState } from "react"; + +import "../css/feed.css"; +import connection, { useRoom } from "../lib/Connection"; +import { Button, Input, Modal } from "antd"; +import Ticker from "react-ticker"; + +const FeedTicker = (props: any) => { + const room = useRoom(); + + const [showTickerMessageModal, setShowTickerMessageModal] = useState(false); + const [tickerMessage, setTickerMessage] = useState(""); + const [blockMessageInput, setBlockMessageInput] = useState(false); + const messageInput = useRef(null); + function handleTickerMessageButton(e: MouseEvent) { + if (blockMessageInput) return; + setShowTickerMessageModal(true); + + setTimeout(function () { + messageInput.current?.focus(); + }, 100); + } + + function cancelTickerMessageModal() { + if (blockMessageInput) return; + setShowTickerMessageModal(false); + setTickerMessage(""); + } + + async function okTickerMessageModal() { + if (blockMessageInput) return; + if (tickerMessage) { + setBlockMessageInput(true); + + try { + await connection.submitTickerMessage(tickerMessage); + setBlockMessageInput(false); + setShowTickerMessageModal(false); + setTickerMessage(""); + if (messageInput.current) { + messageInput.current.input.value = ""; + } + } catch { + setBlockMessageInput(false); + } + } + } + + function getForIndex(index: number) { + return room?.ticker[index % room.ticker.length]; + } + + return ( +
+ + setTickerMessage(e.target.value)} + onKeyPress={(e) => { + e.key === "Enter" && okTickerMessageModal(); + }} + /> + + +
+ + {({ index }) => ( + <> + {room?.ticker && ( + {getForIndex(index)} + )} + + )} + + + +
+
+ ); +}; + +export default FeedTicker; diff --git a/frontend/src/components/Lobby.tsx b/frontend/src/components/Lobby.tsx index 5cbff5e..36bf2a5 100644 --- a/frontend/src/components/Lobby.tsx +++ b/frontend/src/components/Lobby.tsx @@ -1,219 +1,313 @@ -import React, {MouseEvent, useState} from 'react'; -import {Button, Card, Col, Divider, Form, Input, InputNumber, Row, Select} from "antd" -import {red} from '@ant-design/colors'; - -import connection, {useConfig, useIsConnected, useRoom} from "../lib/Connection"; - -import "../css/lobby.sass"; -import beer from "../img/beer.png" -import {RoomOptions} from "../types/types"; - -const {Option} = Select; - -const Lobby = (props: any) => { - // Form/control states. - const [selectedRoomId, setSelectedRoomId] = useState(1); - const [seekTime, setSeekTime] = useState(0); - const [timelineName, setTimelineName] = useState(null); - const [joiningLobby, setJoiningLobby] = useState(false); - const [joinLobbyError, setJoinLobbyError] = useState(false); - - // Room and logic states. - const isConnected = useIsConnected(); - const room = useRoom(); - const config = useConfig(); - - // @ts-ignore - const connectionType = connection.socket.io.engine.transport.name; - - let isLeader = room?.isLeader || false; - let userCount = room?.userCount || 0; - - function handleRequestStartClicked(e: MouseEvent) { - connection.requestStart(seekTime * 1000); - } - - function handleJoin(e: MouseEvent) { - connection.requestReady(); - } - - function applyRoomId(v: number) { - connection.requestJoin(v).then(v => { - setJoiningLobby(false); - setJoinLobbyError(!v); - }) - setJoiningLobby(true) - } +import { useState } from "react"; +import { + Button, + Card, + Col, + Divider, + Form, + Input, + InputNumber, + Row, + Select, + Badge, +} from "antd"; +import { red } from "@ant-design/colors"; + +import connection, { + useConfig, + useIsConnected, + useRoom, + useTimelineSongFileChanged, +} from "../lib/Connection"; + +import "../css/lobby.css"; +import logo from "../img/via-logo.svg"; +import haramlogo from "../img/harambee_logo.png"; +import beer from "../img/beer.png"; +import { RoomOptions } from "../types/types"; + +const { Option } = Select; + +export interface PropType { + currentUserReady: boolean; + onCurrentUserReadyChange?: (ready: boolean) => void; +} + +const Lobby = (props: PropType) => { + // Form/control states. + const [selectedRoomId, setSelectedRoomId] = useState(1); + const [seekTime, setSeekTime] = useState(0); + const [timelineName, setTimelineName] = useState(null); + const [joiningLobby, setJoiningLobby] = useState(false); + const [joinLobbyError, setJoinLobbyError] = useState(false); + const [isPreloading, setIsPreloading] = useState(false); + const timeline = useTimelineSongFileChanged(); + + // Room and logic states. + const isConnected = useIsConnected(); + const room = useRoom(); + const config = useConfig(); + + const isLeader = room?.isLeader || false; + const userCount = room?.userCount || 0; + + async function handleJoin() { + await preloadAudio(); + connection.requestSetReady(); + props.onCurrentUserReadyChange?.(true); + } + + async function applyRoomId(v: number) { + setJoiningLobby(true); + await connection.requestJoin(v); + setJoiningLobby(false); + setJoinLobbyError(!v); + } + + function handleJoinRandomLobby() { + connection.requestJoinRandom(); + setJoinLobbyError(false); + } + + function handleTimelineNameSet(timelineName: any) { + setTimelineName(timelineName); + connection.setRoomOptions( + new RoomOptions( + seekTime * 1000 || 0, + timelineName || room?.timelineName || "" + ) + ); + } + + function handleSetSeekTime(seekTime: number) { + setSeekTime(seekTime); + connection.setRoomOptions( + new RoomOptions( + seekTime * 1000 || 0, + timelineName || room?.timelineName || "" + ) + ); + } - function handleJoinRandomLobby() { - connection.requestJoinRandom() - setJoinLobbyError(false); - } + function preloadAudio(): Promise { + setIsPreloading(true); + const songFile = timeline?.songFile; - function handleTimelineNameSet(timelineName: any) { - setTimelineName(timelineName); - connection.setRoomOptions(new RoomOptions( - seekTime || 0, - timelineName || room?.timelineName || '')) + if (!songFile) { + return Promise.resolve(false); } - function handleSetSeekTime(seekTime: number) { - setSeekTime(seekTime); - connection.setRoomOptions(new RoomOptions( - seekTime * 1000 || 0, - timelineName || room?.timelineName || '')) - } - - let leaderConfig = ( + return new Promise((resolve) => { + const audioElement = new Audio(); + audioElement.addEventListener("canplaythrough", () => { + // 'canplaythrough' means the browser thinks it has buffered enough to play + // until the end. + setIsPreloading(false); + resolve(true); + }); + audioElement.src = songFile; + }); + } + + const leaderConfig = ( + + +
+ + handleSetSeekTime(parseInt(v.target.value) || 0)} + /> + + + + + +
+ + + +
+ ); + + const nonLeaderConfig = ( + + +

+ {room?.running ? "We luisteren naar" : "We gaan luisteren naar"}{" "} + {room && room.timelineName} en + {room?.running && zijn al gestart!} + {!room?.running && ( + starten op {(room?.seekTime || 0) / 1000} seconden + )} +

+ + + +
+ ); + + return ( +
+ + + beer + + + Centurion! + + + beer + + + + +
Honderd minuten...
+
Honderd shots...
+
Kun jij het aan?
+ +
+
+ + {!isConnected && ( - -
- - handleSetSeekTime(parseInt(v.target.value) || 0)}/> - - - - - - -
- - - + +

Verbinden...

+
- ) + )} - let nonLeaderConfig = ( + {isConnected && ( - -

- We gaan luisteren naar {room && room.timelineName} en - {room?.running && zijn al gestart!} - {!room?.running && starten op {(room?.seekTime || 0) / 1000} seconden} -

- - - -
- ) - - // @ts-ignore - return ( -
- - -
- beer -
- Centurion! - beer + loading={joiningLobby} + onClick={async () => { + await applyRoomId(selectedRoomId); + }} + > + Ga naar die lobby + + + {joinLobbyError && ( + + Die lobby bestaat niet + + )} -
- - -
Honderd minuten...
-
Honderd shots...
-
Kun jij het aan?
- -
-
+ - {!isConnected && - - -

Verbinden...

- -
- } - - {isConnected && - - - -

Huidige lobby: {room?.id || 'Geen lobby'}

- - {/*Verbonden met {connectionType}*/} - - {room && - - {userCount === 1 ? -

Er is één gebruiker aanwezig.

- : -

Er zijn {userCount} gebruikers aanwezig.

- } -
- } - {room && - Deel de link met je vrienden om mee te doen! - } -
-
- - {room && (isLeader ? leaderConfig : nonLeaderConfig)} - - - - - - setSelectedRoomId(v || 0)}/> - - - - {joinLobbyError && - Die lobby bestaat niet - } - - - - - of - - - - - - - -
+ + of + + + + + - - } -
- ); + + + + + )} + haramlogo + logo +
+ ); }; export default Lobby; diff --git a/frontend/src/components/NextShot.tsx b/frontend/src/components/NextShot.tsx index 0a13ec3..afbc7a9 100644 --- a/frontend/src/components/NextShot.tsx +++ b/frontend/src/components/NextShot.tsx @@ -1,42 +1,48 @@ -import React from 'react'; -import {Col, Progress} from "antd" -import {roomTime, useTimeline} from "../lib/Connection"; -import {useUpdateAfterDelay} from "../util/hooks"; - +import { Progress } from "antd"; +import { calculateRoomTime, useTimeline } from "../lib/Connection"; +import { useUpdateAfterDelay } from "../util/hooks"; const NextShot = () => { - const timeline = useTimeline() - - useUpdateAfterDelay(1000) - - let remainingTime = 0; - let remainingPercentage = 0; - - if (timeline) { - const time = roomTime(); - const [current, next] = timeline.itemAtTime(time, 'shot'); - - if (current && next) { - let currentTime = time - current.timestamp * 1000 - let nextTime = next.timestamp * 1000 - current.timestamp * 1000; - - remainingTime = Math.round((nextTime - currentTime) / 1000) - remainingPercentage = 100 - (currentTime / (nextTime || 1)) * 100; - } - } - - return ( - -

Tijd tot volgende shot:

- remainingTime + ' sec.'} - strokeColor={"#304ba3"} - strokeWidth={10} - status="normal"/> - - - ); + const timeline = useTimeline(); + + useUpdateAfterDelay(1000); + + if (!timeline) { + throw new TypeError("NextShot without timeline"); + } + + let remainingTime = 0; + let remainingPercentage = 0; + + const currentRoomTime = calculateRoomTime(); + + const nextItem = timeline.itemAfterTime(currentRoomTime, "shot"); + + if (nextItem) { + const prevShotRoomTime = + (timeline.itemBeforeTime(currentRoomTime, "shot")?.timestamp || 0) * 1000; + const nextShotRoomTime = nextItem?.timestamp * 1000; + const totalRoomTimeBetweenShots = nextShotRoomTime - prevShotRoomTime; + const roomTimeSinceLastShot = currentRoomTime - prevShotRoomTime; + + remainingTime = Math.round((nextShotRoomTime - currentRoomTime) / 1000); + remainingPercentage = + 100 - (roomTimeSinceLastShot / totalRoomTimeBetweenShots) * 100; + } + + return ( + <> +

Tijd tot volgende shot:

+ `${remainingTime} sec.`} + strokeColor={"#304ba3"} + strokeWidth={10} + status="normal" + /> + + ); }; export default NextShot; diff --git a/frontend/src/components/Player.tsx b/frontend/src/components/Player.tsx index 60c395a..c36f2bc 100644 --- a/frontend/src/components/Player.tsx +++ b/frontend/src/components/Player.tsx @@ -1,106 +1,211 @@ -import {roomTime, useRoomRunningAndReadyChanged, useRoomTime, useTimelineSongFileChanged} from "../lib/Connection"; -import React, {createRef, SyntheticEvent, useRef, useState} from "react"; +import connection, { + calculateRoomTime, + useRoomRunningAndReadyChanged, + useTimelineSongFileChanged, +} from "../lib/Connection"; +import { SyntheticEvent, useEffect, useRef, useState } from "react"; -import '../css/player.sass' -import {Room} from "../types/types"; -import {parse as parseQueryString} from "query-string"; +import { Button, Slider } from "antd"; +import { SoundFilled, SoundOutlined } from "@ant-design/icons"; + +import "../css/player.css"; +import { Room } from "../types/types"; const Player = () => { - const room = useRoomRunningAndReadyChanged(); - const _ = useRoomTime() - const timeline = useTimelineSongFileChanged(); + const room = useRoomRunningAndReadyChanged(); + const timeline = useTimelineSongFileChanged(); + + const player = useRef(null); + const defaultVolume = parseInt(localStorage.getItem("volume") ?? "100"); + + const [volume, setVolume] = useState(defaultVolume); + const [muted, setMuted] = useState(false); + const [finishedLoading, setFinishedLoading] = useState(false); + + const [timesSeeked, setTimesSeeked] = useState(0); + const [hadError, setHadError] = useState(false); + + // If our time synchronisation algorithm thing thinks the time is off by more + // than this value, we seek the running player to correct it. + const diffSecondsRequiredToSeekRunningPlayer = 0.2; + + // Hard cap we are allowed to seek this player. Some browsers are slow or inaccurate + // and will always be off. To avoid endless skipping of the song this cap stops seeking the + // player. + const maxTimesSeekAllow = 25; + + useEffect(() => { + // Need to use an effect since 'player' will only contain a reference after first render. + + if (!timeline) { + throw new Error("Player without active timeline."); + } + + if (!player.current) { + throw new Error("No player after mount."); + } - let player = useRef(null) + player.current.src = timeline.songFile; + }, [timeline]); - const [timesSeeked, setTimesSeeked] = useState(0); - const [hadError, setHadError] = useState(false); + function handlePlayerOnPlay(e: SyntheticEvent) { + e.preventDefault(); + // For when the user manually started the player for when autoplay is off. + setHadError(false); + } - // If our time synchronisation algorithm thing thinks the time is off by more - // than this value, we seek the running player to correct it. - const diffSecondsRequiredToSeekRunningPlayer = 0.20; + async function handlePlayerPause(e: SyntheticEvent) { + if (!shouldPlay()) { + // We should not be playing, pausing is fine. + console.log("should not play, paused"); + return; + } - // Hard cap we are allowed to seek this player. Some browsers are slow or inaccurate - // and will always be off. To avoid endless skipping of the song this cap stops seeking the - // player. - const maxTimesSeekAllow = 25; + e.preventDefault(); - const query = parseQueryString(window.location.search); - if (query.nosound) { - return null; + if (room) { + setPlayerTime(room, true); } + await player.current?.play(); + } - if (player.current && player.current.dataset.src != timeline!!.songFile) { - player.current.dataset.src = timeline!!.songFile; - player.current.src = timeline!!.songFile; + function handlePlayerCanPlayThrough() { + if (!finishedLoading) { + setFinishedLoading(true); + connection.requestStart(); + } + } + + function shouldPlay() { + return ( + player.current && + timeline && + room && + room.running && + room.readyToParticipate && + !player.current.ended + ); + } + + async function startPlaying(manual: boolean) { + if (!player.current) { + return; } - function handlePlayerOnPlay(e: SyntheticEvent) { - e.preventDefault(); + if (player.current.paused && !hadError) { + setPlayerVolume(volume); - // For when the user manually started the player for when autoplay is off. + try { + await player.current.play(); setHadError(false); - if (shouldPlay()) { - startPlaying(true) - } + } catch (e) { + console.error("Error playing", e); + setHadError(true); + } } - function shouldPlay() { - return player.current && timeline && room && room.running && room.readyToParticipate + if (!hadError && room) { + setPlayerTime(room, manual); } + } - function startPlaying(manual: boolean) { - if (!player.current) return; - - if (player.current.paused && !hadError) { - player.current.play().then(() => { - setHadError(false); - }).catch(e => { - console.error('Error playing', e); - setHadError(true); - }) - } - - if (!hadError) { - setPlayerTime(room!!, manual); - } + function setPlayerTime(room: Room, manualAdjustment: boolean) { + if (!player.current) { + return; } - function setPlayerTime(room: Room, manualAdjustment: boolean) { - if (!player.current) return; - - let targetTime = roomTime() / 1000; - let diff = player.current.currentTime - targetTime; - - if (player.current && Math.abs(diff) > diffSecondsRequiredToSeekRunningPlayer) { - if (room.speedFactor != 1 || manualAdjustment || timesSeeked < maxTimesSeekAllow) { - player.current.currentTime = targetTime; - player.current.playbackRate = Math.max(Math.min(4.0, room.speedFactor), 0.25); - - if (!manualAdjustment) { - setTimesSeeked(timesSeeked + 1); - } - } else { - console.warn('The running player is off, but we\'ve changed the time ' + - 'too often, skipping synchronizing the player.'); - } - } + // Player's currentTime is in seconds, not ms. + const targetTime = calculateRoomTime() / 1000; + const diff = Math.abs(player.current.currentTime - targetTime); + + // console.log('PLAYER DIFF', diff, + // 'min req to seek: ', diffSecondsRequiredToSeekRunningPlayer, + // `(${timesSeeked} / ${maxTimesSeekAllow})`); + + if (diff <= diffSecondsRequiredToSeekRunningPlayer) { + return; } - if (shouldPlay()) { - startPlaying(false) - } else { - if (player.current) { - player.current.pause(); - } + if (timesSeeked >= maxTimesSeekAllow && !manualAdjustment) { + // If we are adjusting manually we always allow a seek. + console.warn( + "The running player is off, but we've changed the time " + + "too often, skipping synchronizing the player." + ); + return; } - function render() { - return ( -