From f02e1790dda32c624b09e615aec4faf0235fca96 Mon Sep 17 00:00:00 2001 From: DrunkenSoul Date: Sun, 8 Oct 2023 00:18:45 +0530 Subject: [PATCH] Adding Ultimate TicTacToe App --- UltimateTicTacToeGame/PBJI/README.md | 39 + UltimateTicTacToeGame/PBJI/index.html | 118 ++ UltimateTicTacToeGame/PBJI/package-lock.json | 1544 ++++++++++++++++++ UltimateTicTacToeGame/PBJI/package.json | 20 + UltimateTicTacToeGame/PBJI/preview | Bin 0 -> 12556 bytes UltimateTicTacToeGame/PBJI/script.js | 321 ++++ UltimateTicTacToeGame/PBJI/style.css | 128 ++ UltimateTicTacToeGame/PBJI/test.png | Bin 0 -> 22788 bytes 8 files changed, 2170 insertions(+) create mode 100644 UltimateTicTacToeGame/PBJI/README.md create mode 100644 UltimateTicTacToeGame/PBJI/index.html create mode 100644 UltimateTicTacToeGame/PBJI/package-lock.json create mode 100644 UltimateTicTacToeGame/PBJI/package.json create mode 100644 UltimateTicTacToeGame/PBJI/preview create mode 100755 UltimateTicTacToeGame/PBJI/script.js create mode 100644 UltimateTicTacToeGame/PBJI/style.css create mode 100644 UltimateTicTacToeGame/PBJI/test.png diff --git a/UltimateTicTacToeGame/PBJI/README.md b/UltimateTicTacToeGame/PBJI/README.md new file mode 100644 index 000000000..d8005ddb0 --- /dev/null +++ b/UltimateTicTacToeGame/PBJI/README.md @@ -0,0 +1,39 @@ +### Game Play +Ultimate Tic-Tac-Toe is a variant of the classic Tic-Tac-Toe game. It is played on a larger 9x9 grid which consists of nine 3x3 grids. The objective of the game is to win each 3x3 grid, and ultimately, the entire game by winning the most 3x3 grids. + +In this game, players take turns placing their symbol (either X or O) in a vacant square of the 3x3 grid. However, the twist is that the square where a player places their symbol determines the 3x3 grid where their opponent must play on their next turn. If a player wins a 3x3 grid, they gain control of that grid, and their symbol is displayed in the corresponding square of the larger 9x9 grid. The game continues until one player wins three 3x3 grids in a row, or until all the squares have been filled, resulting in a draw. + +Ultimate Tic-Tac-Toe is a more complex version of Tic-Tac-Toe that requires strategic thinking and planning ahead. It also introduces an element of control over the opponent's moves, as the placement of a player's symbol determines the next playable grid for their opponent. Overall, Ultimate Tic-Tac-Toe is an engaging and challenging game that provides a new twist on a classic game. + +### Preview + +[![thumbnail](./preview)](https://user-images.githubusercontent.com/67221507/235636375-ae5099f8-9d22-4b33-9b81-8cf77bacbf4b.mp4) + + +### Usage + +Make sure that + +- You are in the project directory +- You have node and npm installed on your machine + + +1) Install dependencies +``` +npm install +``` + +2) Run the server +``` +npm test +``` + +3) Open the localserver at the given address +![local server](./test.png) + + +Enjoy playing. + +### Features + +Singleplayer with bot. diff --git a/UltimateTicTacToeGame/PBJI/index.html b/UltimateTicTacToeGame/PBJI/index.html new file mode 100644 index 000000000..864f11276 --- /dev/null +++ b/UltimateTicTacToeGame/PBJI/index.html @@ -0,0 +1,118 @@ + + + + + UTTT + + + +

Ultimate

+ +
+ +
+ +

+

+

+

+

+

+

+

+

+
+ +
+

+

+

+

+

+

+

+

+

+
+
+

+

+

+

+

+

+

+

+

+
+
+

+

+

+

+

+

+

+

+

+
+
+

+

+

+

+

+

+

+

+

+
+
+

+

+

+

+

+

+

+

+

+
+
+

+

+

+

+

+

+

+

+

+
+
+

+

+

+

+

+

+

+

+

+
+
+

+

+

+

+

+

+

+

+

+
+
+

Its A Tie

+ + + diff --git a/UltimateTicTacToeGame/PBJI/package-lock.json b/UltimateTicTacToeGame/PBJI/package-lock.json new file mode 100644 index 000000000..857cc8c32 --- /dev/null +++ b/UltimateTicTacToeGame/PBJI/package-lock.json @@ -0,0 +1,1544 @@ +{ + "name": "uttt", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "uttt", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "browser-sync": "^2.29.3" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.14", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz", + "integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", + "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.3.tgz", + "integrity": "sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==", + "dependencies": { + "browser-sync-client": "^2.29.3", + "browser-sync-ui": "^2.29.3", + "bs-recipes": "1.3.4", + "chalk": "4.1.2", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "^4.0.1", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.2.0", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "^4.4.1", + "ua-parser-js": "^1.0.33", + "yargs": "^17.3.1" + }, + "bin": { + "browser-sync": "dist/bin.js" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/browser-sync-client": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.3.tgz", + "integrity": "sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==", + "dependencies": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/browser-sync-ui": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.3.tgz", + "integrity": "sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==", + "dependencies": { + "async-each-series": "0.1.1", + "chalk": "4.1.2", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^4.4.1", + "stream-throttle": "^0.1.3" + } + }, + "node_modules/bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" + }, + "node_modules/dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", + "bin": { + "dev-ip": "lib/dev-ip.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dependencies": { + "lodash": "^4.17.10" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/eazy-logger": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", + "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", + "dependencies": { + "chalk": "4.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.2.tgz", + "integrity": "sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==", + "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.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", + "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-client/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "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", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + }, + "node_modules/localtunnel": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", + "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", + "dependencies": { + "axios": "0.21.4", + "debug": "4.3.2", + "openurl": "1.1.1", + "yargs": "17.1.1" + }, + "bin": { + "lt": "bin/lt.js" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/localtunnel/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/localtunnel/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/localtunnel/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/localtunnel/node_modules/yargs": { + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/localtunnel/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==" + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "bin": { + "mime": "cli.js" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==" + }, + "node_modules/opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "dependencies": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==", + "dependencies": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "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.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/send/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/send/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/socket.io": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-client": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", + "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-client/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "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", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "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", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", + "dependencies": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + }, + "bin": { + "throttleproxy": "bin/throttleproxy.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", + "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "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/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/UltimateTicTacToeGame/PBJI/package.json b/UltimateTicTacToeGame/PBJI/package.json new file mode 100644 index 000000000..63911d93b --- /dev/null +++ b/UltimateTicTacToeGame/PBJI/package.json @@ -0,0 +1,20 @@ +{ + "name": "uttt", + "version": "1.0.0", + "description": "Utlimate tictactoe is variant of the popular board game tictactoe", + "main": "script.js", + "scripts": { + "test": "browser-sync start --server --files \"script.js\" \"style.css\"" + }, + "keywords": [ + "ultimate", + "tictactoe", + "uttt", + "vanilla-js" + ], + "author": "Purshotam", + "license": "ISC", + "dependencies": { + "browser-sync": "^2.29.3" + } +} diff --git a/UltimateTicTacToeGame/PBJI/preview b/UltimateTicTacToeGame/PBJI/preview new file mode 100644 index 0000000000000000000000000000000000000000..4aaa6a2c0b933d7bacee8766ec26272189798ca1 GIT binary patch literal 12556 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 pK$S&3{|-6u{~-!lQS7)Ee#_B1T%w}= 5){ + var instancesOfPlayer = 0; + for (j = 0;j < 9;j++){ + if(newPlot[parseInt(tileID/9)*9+j] == player){ + instancesOfPlayer++; + } + } + if (instancesOfPlayer>=3) { + for (i = 0; i < 8;i++) { + if (newPlot[parseInt(tileID/9)*9+winCombos[i][0]] == player + && newPlot[parseInt(tileID/9)*9+winCombos[i][1]] == player + && newPlot[parseInt(tileID/9)*9+winCombos[i][2]] == player) { + console.log (player+" wins in "+parseInt(tileID/9)); + numOfBSConcluded++; + return [player, parseInt(tileID/9)]; + } + } + } + } + return [null,null]; +} + +/*check for ties if any tile is left empty then it returns null otherwise returns 2 size array to temp1 */ +function checkTieTiles (player,tileID,newPlot) { + if (bigsquareConcluded[parseInt(tileID/9)] == null){ + for (i = 0; i < 9; i++) { + if (newPlot[parseInt(tileID/9)*9+i] == null){ + return[null,null]; + } + } + return ["T",parseInt(tileID/9)]; + } +} + +/* is called when the BS to activate is already concluded so activates the remaining tiles that unfilled*/ +function activateALL(tileID) { + for (j = 0; j < 9;j++){ + if (bigsquareConcluded[j] == null){ + for (i = 0; i < 9;i++){ + if (plot[j*9+i] == null){ + tiles[j*9+i].addEventListener('click', clickEvent, false); + tiles[j*9+i].style.backgroundColor = "#ffd304"; + tiles[j*9+i].style.cursor = "pointer"; + tiles[j*9+i].addEventListener('mouseover', mouseEvent1,false); + tiles[j*9+i].addEventListener('mouseout', mouseEvent2,false); + } + } + } + } +} + +/*checks wins using wincombo and bigsquareconcluded variable through looping technique*/ +function checkWinBS (player) { + for (i = 0; i < 8; i++) { + if (bigsquareConcluded[winCombos[i][0]] == player + && bigsquareConcluded[winCombos[i][1]] == player + && bigsquareConcluded[winCombos[i][2]] == player) { + console.log("game over "+player+" wins"); + return [player,player]; + } + } + return [null,null]; +} + +/* checks whether bigsquareconcluded is filled if yes returns tie*/ +function checkTieBS(player) { + for (i = 0; i < 8; i++) { + if (bigsquareConcluded[i] == null) { + return[null,null]; + } + } + return["T",player]; +} + +/* after conclusion in BS check functions this function is called for end game prompts and displays*/ +function gameOver(conclusion) { + if(conclusion[0] == "T"){ + document.querySelectorAll(".Conclusion")[0].style.display = "block"; + document.querySelectorAll(".Conclusion")[0].children[0].innerText = "Its A Tie"; + } + else{ + document.querySelectorAll(".Conclusion")[0].style.display = "block"; + document.querySelectorAll(".Conclusion")[0].children[0].innerText = conclusion[0] + " Wins"; + document.querySelectorAll(".Conclusion")[0].children[0].style.color = (conclusion[0]=="X")? "Cyan" :"#4ad522"; + } +} + +/*functions for hover state of tiles*/ +function mouseEvent1(tile) { + document.querySelectorAll('.'+tile.target.classList.item(0))[0].style.backgroundColor = "#e1ba00"; +} + +function mouseEvent2(tile) { + document.querySelectorAll('.'+tile.target.classList.item(0))[0].style.backgroundColor = "#ffd304"; +} + + +/*bot functions go here */ +function botMove(tileID) { + if (movesPlayed >= 100){ + return minimax(plot,Bot,movesPlayed); + } + else { + movesPlayed = movesPlayed + 1; + return randomPlay(tileID); + } + +} + +function minimax(plot,player,depth){ + +} + +function randomPlay(tileID) { + if (bigsquareConcluded[tileID%9] == null){ + var Valid_tiles = []; + + for (j = 0; j < 9;j++) { + if (plot[9*(tileID%9)+j] == null) { + Valid_tiles.push(9*(tileID%9)+j); + } + } + + randomMove = Valid_tiles[Math.floor(Math.random()*(Valid_tiles.length-1))]; + plot[randomMove] = "O"; + tiles[randomMove].children[0].innerText = "O"; + return randomMove; + } + else { + var Valid_tiles = []; + for (j = 0; j < 81;j++) { + if (plot[j] == null && bigsquareConcluded[parseInt(j/9)] == null) { + Valid_tiles.push(j); + } + } + + randomMove = Valid_tiles[Math.floor(Math.random()*(Valid_tiles.length-1))]; + plot[randomMove] = "O"; + tiles[randomMove].children[0].innerText = "O"; + return randomMove; + } +} \ No newline at end of file diff --git a/UltimateTicTacToeGame/PBJI/style.css b/UltimateTicTacToeGame/PBJI/style.css new file mode 100644 index 000000000..54b8732ff --- /dev/null +++ b/UltimateTicTacToeGame/PBJI/style.css @@ -0,0 +1,128 @@ + @charset "UTF-8"; + /*Css to plot a background and center the game plot in the middle of + the viewport, its 30 percent of width of the screen. Will make it more responsive in future */ + body{ + display: block; + } + + #Plot { + z-index: 1; + line-height: 1vw; + flex-wrap: wrap; + position: absolute; + transform: translate(-50%,-50%); + top: 50%; + left: 50%; + width: 70vmin; + height: 70vmin; + padding: 0vw 5vw; + } + + /*Css to plot big squares in a flex wrap so that they align inline and gave grey + color to them*/ + #Plot .MS{ + padding-right: 0.5%; + padding-left: 0.5%; + padding-top: 1%; + flex-wrap: wrap; + display: inline-flex; + width:28%; + height:28%; + background-color: grey; + margin-bottom: 1%; + + } + + + /*This are to margin big squares properly*/ + #Plot .MS:nth-child(3n+1){ + margin-left: 1vw; + } + + + #Plot .MS:nth-child(1), #Plot .MS:nth-child(2), #Plot .MS:nth-child(3){ + margin-top: 1vw; + } + + /*Small tiles inside the big squares and color white*/ + .MS .Tile { + display: inline-block; + width:30%; + height:30%; + background-color: white; + } + + /*For margining and aligning tiles properly inside the big squares */ + .MS .Tile:nth-child(3n+2) { + + margin-right: 2%; + margin-left: 2%; + } + + /*For margining and aligning x and o inside tiles */ + .Tile{ + margin: 0 auto; + } + + .Tile p{ + position: absolute; + transform: translate(60%,-70%); + font-size: 3.7vmin; + color: white; + } + + .Sbutton { + font-size: 3vmin; + width: 21vmin; + height: 9vmin; + position: absolute; + top: 85%; + left: 49.5%; + transform: translateX(-50%); + } + + .Conclusion { + color:white; + text-align: center; + display: none; + z-index: 2; + position: absolute; + transform: translate(-53%,-53%); + top: 50%; + left:50%; + width: 30vmin; + height: 30vmin; + background-color: grey; + opacity: 0.9; + } + + .Conclusion p{ + + font-weight: bold; + font-size: 3vmin; + position: absolute; + top: 35%; + left: 50%; + transform: translateX(-50%); + } + + #CurrentPlayer { + text-align: center; + height: 7vmin; + width: 7vmin; + color: white; + font-size: 6vmin; + position: absolute; + left: 49.5%; + transform: translateX(-50%); + } + + #Heading { + height: 3vmin; + display: block; + font-family: Tahoma, sans-serif; + position: absolute; + left: 50%; + transform: translateX(-50%); + font-size: 5vmin; + } \ No newline at end of file diff --git a/UltimateTicTacToeGame/PBJI/test.png b/UltimateTicTacToeGame/PBJI/test.png new file mode 100644 index 0000000000000000000000000000000000000000..40f4506ba651929a422e29811c343e63ad68af9d GIT binary patch literal 22788 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