From 8d09b9744c9b98590f60837cf80065b45bd8e5b7 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:20:53 +0100 Subject: [PATCH 01/81] chore(mellow-react): update dependencies --- templates/mellow-react/package-lock.json | 2137 +++++++++++----------- templates/mellow-react/package.json | 43 +- 2 files changed, 1096 insertions(+), 1084 deletions(-) diff --git a/templates/mellow-react/package-lock.json b/templates/mellow-react/package-lock.json index 96401fc..f34c6ba 100644 --- a/templates/mellow-react/package-lock.json +++ b/templates/mellow-react/package-lock.json @@ -8,27 +8,29 @@ "name": "mellow-react", "version": "0.0.0", "dependencies": { - "@inertiajs/react": "^1.0.15", - "@sailshq/connect-redis": "^3.2.1", - "@sailshq/lodash": "^3.10.3", - "@sailshq/socket.io-redis": "^5.2.0", + "@inertiajs/react": "^1.2.0", + "@sailshq/connect-redis": "^6.1.3", + "@sailshq/lodash": "^3.10.6", + "@sailshq/socket.io-redis": "^6.1.2", "inertia-sails": "^0.2.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sails": "^1.5.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "sails": "^1.5.12", "sails-flash": "^0.0.1", - "sails-hook-orm": "^4.0.0", - "sails-hook-sockets": "^2.0.0" + "sails-hook-orm": "^4.0.3", + "sails-hook-sockets": "^3.0.1" }, "devDependencies": { - "@rsbuild/plugin-react": "^0.7.3", - "create-sails-generator": "^0.0.1", - "prettier": "^2.6.2", - "prettier-plugin-tailwindcss": "^0.1.11", - "sails-hook-shipwright": "^0.2.0", + "@rsbuild/plugin-react": "^1.0.2", + "@types/node": "^22.5.5", + "create-sails-generator": "^0.0.3", + "playwright": "^1.47.1", + "prettier": "^3.3.3", + "prettier-plugin-tailwindcss": "^0.6.6", + "sails-hook-shipwright": "^0.3.0", "sails.io.js": "^1.2.1", - "socket.io-client": "^2.2.0", - "tailwindcss": "^3.0.24" + "socket.io-client": "^4.7.5", + "tailwindcss": "^3.4.12" }, "engines": { "node": ">=18.0" @@ -47,9 +49,10 @@ } }, "node_modules/@inertiajs/core": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-1.0.15.tgz", - "integrity": "sha512-7h73+manxkpXdSPlVa2uSjo10AbSS0z9Q1jV7r/otqHfTYCNp7JJxHUX4QpKq/3Z88U8bDUe1RRix1o76pyd5Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-1.2.0.tgz", + "integrity": "sha512-6U0gqCPbGGGMcLoDm+ckKipc5gptZMmfVFfPGdO7vlO7yipWf1RD+TKkcZGJklFvfgFMKwK2VPw8GAv1OctuQA==", + "license": "MIT", "dependencies": { "axios": "^1.6.0", "deepmerge": "^4.0.0", @@ -58,11 +61,12 @@ } }, "node_modules/@inertiajs/react": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/@inertiajs/react/-/react-1.0.15.tgz", - "integrity": "sha512-T+eDD8Yz5FZ3Qbd0xKXbfRNSrZAQP6o2+jKv7Jakyzjr8ZLdcIpXmevqlGGo5Tc3/ZLzHAX4+2fzpyEKtfonng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@inertiajs/react/-/react-1.2.0.tgz", + "integrity": "sha512-Q3wTaQJdoUbUB8YIGeQ0y2Tf/k8dNtz9Nu2dYr1pbYUBv++6d45iC/CFB/lIpqVvvUw8XuIai2bdsUcRSIbPCQ==", + "license": "MIT", "dependencies": { - "@inertiajs/core": "1.0.15", + "@inertiajs/core": "1.2.0", "lodash.isequal": "^4.5.0" }, "peerDependencies": { @@ -118,38 +122,42 @@ } }, "node_modules/@module-federation/runtime": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.1.6.tgz", - "integrity": "sha512-nj6a+yJ+QxmcE89qmrTl4lphBIoAds0PFPVGnqLRWflwAP88jrCcrrTqRhARegkFDL+wE9AE04+h6jzlbIfMKg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.5.1.tgz", + "integrity": "sha512-xgiMUWwGLWDrvZc9JibuEbXIbhXg6z2oUkemogSvQ4LKvrl/n0kbqP1Blk669mXzyWbqtSp6PpvNdwaE1aN5xQ==", "dev": true, + "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.1.6" + "@module-federation/sdk": "0.5.1" } }, "node_modules/@module-federation/runtime-tools": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.1.6.tgz", - "integrity": "sha512-7ILVnzMIa0Dlc0Blck5tVZG1tnk1MmLnuZpLOMpbdW+zl+N6wdMjjHMjEZFCUAJh2E5XJ3BREwfX8Ets0nIkLg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.5.1.tgz", + "integrity": "sha512-nfBedkoZ3/SWyO0hnmaxuz0R0iGPSikHZOAZ0N/dVSQaIzlffUo35B5nlC2wgWIc0JdMZfkwkjZRrnuuDIJbzg==", "dev": true, + "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.1.6", - "@module-federation/webpack-bundler-runtime": "0.1.6" + "@module-federation/runtime": "0.5.1", + "@module-federation/webpack-bundler-runtime": "0.5.1" } }, "node_modules/@module-federation/sdk": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.1.6.tgz", - "integrity": "sha512-qifXpyYLM7abUeEOIfv0oTkguZgRZuwh89YOAYIZJlkP6QbRG7DJMQvtM8X2yHXm9PTk0IYNnOJH0vNQCo6auQ==", - "dev": true + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.5.1.tgz", + "integrity": "sha512-exvchtjNURJJkpqjQ3/opdbfeT2wPKvrbnGnyRkrwW5o3FH1LaST1tkiNviT6OXTexGaVc2DahbdniQHVtQ7pA==", + "dev": true, + "license": "MIT" }, "node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.1.6.tgz", - "integrity": "sha512-K5WhKZ4RVNaMEtfHsd/9CNCgGKB0ipbm/tgweNNeC11mEuBTNxJ09Y630vg3WPkKv9vfMCuXg2p2Dk+Q/KWTSA==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.5.1.tgz", + "integrity": "sha512-mMhRFH0k2VjwHt3Jol9JkUsmI/4XlrAoBG3E0o7HoyoPYv1UFOWyqAflfANcUPgbYpvqmyLzDcO+3IT36LXnrA==", "dev": true, + "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.1.6", - "@module-federation/sdk": "0.1.6" + "@module-federation/runtime": "0.5.1", + "@module-federation/sdk": "0.5.1" } }, "node_modules/@nodelib/fs.scandir": { @@ -188,199 +196,197 @@ } }, "node_modules/@rsbuild/core": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-0.7.3.tgz", - "integrity": "sha512-Zf49scJ706Zu6PEA/nl99XLEgouNacK4RzF4ckqQalR+FW5iyc9/WYTQYUWf/g7IhQsYy61W/5pv3ddEkCjzYA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.0.4.tgz", + "integrity": "sha512-ACvCzeyW5gW5olGBzK5Tnc5RfUOQ+BPnMB7Y0Iycz0pRYAghKQcYkpPZlEpdsKQDNeBUKk9loOy+Z7Rca4Ouzw==", "dev": true, + "license": "MIT", "dependencies": { - "@rsbuild/shared": "0.7.3", - "@rspack/core": "0.7.1", - "@swc/helpers": "0.5.3", - "core-js": "~3.36.0", - "html-webpack-plugin": "npm:html-rspack-plugin@5.7.2", - "postcss": "^8.4.38" + "@rspack/core": "~1.0.5", + "@rspack/lite-tapable": "~1.0.0", + "@swc/helpers": "^0.5.13", + "caniuse-lite": "^1.0.30001659", + "core-js": "~3.38.1" }, "bin": { "rsbuild": "bin/rsbuild.js" }, "engines": { - "node": ">=16.0.0" + "node": ">=16.7.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" } }, "node_modules/@rsbuild/plugin-react": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@rsbuild/plugin-react/-/plugin-react-0.7.3.tgz", - "integrity": "sha512-v1eVRyyw8T0EXW19bGbc6IJMD0+jRiEpvSdVkivRFVvVW5wqNnEajBoFMvfhoHw7VywVkH1CFhjSFX6omAe+fw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rsbuild/plugin-react/-/plugin-react-1.0.2.tgz", + "integrity": "sha512-8Sa4AJ43/ift7ZW1iNMA38ZIEDXNINPa8rGI38u7b42yBgMUWBan8yDjFYAC0Gkg3lh8vCWYVQYZp0RyIS7lqA==", "dev": true, + "license": "MIT", "dependencies": { - "@rsbuild/shared": "0.7.3", - "@rspack/plugin-react-refresh": "0.7.1", + "@rspack/plugin-react-refresh": "1.0.0", "react-refresh": "^0.14.2" }, "peerDependencies": { - "@rsbuild/core": "^0.7.3" - } - }, - "node_modules/@rsbuild/shared": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@rsbuild/shared/-/shared-0.7.3.tgz", - "integrity": "sha512-TBD0rlZOayK0clLwmcTMMXXEIR6R8rNHmSLglPd3lZaBBim8yhDgudR5gNUFvO5zOefaV1SBj/Mr1uQqSyHzOg==", - "dev": true, - "dependencies": { - "@rspack/core": "0.7.1", - "caniuse-lite": "^1.0.30001625", - "html-webpack-plugin": "npm:html-rspack-plugin@5.7.2", - "postcss": "^8.4.38" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "@rsbuild/core": "1.x || ^1.0.1-rc.0" } }, "node_modules/@rspack/binding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-0.7.1.tgz", - "integrity": "sha512-4C9qRDytKIaExmCExTHPQlONeZMHQK/fyXGlVo/WIK/OLQj6XDshJ0Jk7YHE6XNwai3m3LwNNkEFeluMLVO1yQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.0.5.tgz", + "integrity": "sha512-SnVrzRWeKSosJ0/1e5taAeqJ1ISst6NAE1N8YK4ZdUEVWmE26tC2V/yTvZHSsqatc/0Cf+A18IZJx0q6H/DlRw==", "dev": true, + "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "0.7.1", - "@rspack/binding-darwin-x64": "0.7.1", - "@rspack/binding-linux-arm64-gnu": "0.7.1", - "@rspack/binding-linux-arm64-musl": "0.7.1", - "@rspack/binding-linux-x64-gnu": "0.7.1", - "@rspack/binding-linux-x64-musl": "0.7.1", - "@rspack/binding-win32-arm64-msvc": "0.7.1", - "@rspack/binding-win32-ia32-msvc": "0.7.1", - "@rspack/binding-win32-x64-msvc": "0.7.1" + "@rspack/binding-darwin-arm64": "1.0.5", + "@rspack/binding-darwin-x64": "1.0.5", + "@rspack/binding-linux-arm64-gnu": "1.0.5", + "@rspack/binding-linux-arm64-musl": "1.0.5", + "@rspack/binding-linux-x64-gnu": "1.0.5", + "@rspack/binding-linux-x64-musl": "1.0.5", + "@rspack/binding-win32-arm64-msvc": "1.0.5", + "@rspack/binding-win32-ia32-msvc": "1.0.5", + "@rspack/binding-win32-x64-msvc": "1.0.5" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-0.7.1.tgz", - "integrity": "sha512-nuTZ720C33OZL0otuGy0RYw/AmX7UF/Siq7Kq/sy5T6jtHX7Yy/RWEZG3pKlZWDgbvjHw4jZ+4M9/arTRgMacQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.0.5.tgz", + "integrity": "sha512-pEHj4AOluOa7FaR1DMACPUUZKO3qZI4/66xaTqk0BbclvMT7eheQAWtkmjdE9WJgeZ389TrwZeaMzzPdHhK/6Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-0.7.1.tgz", - "integrity": "sha512-GRDmYOUx24dZ5UlayZvMHNySK9m2WUpVkR0rPURI0XMG64+OqOwgbaopmgrDKgMNCOmpieR0q6zP4X5cBH4CNA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.0.5.tgz", + "integrity": "sha512-xS5EDD9l3MHL54bnmxsndm61P9l3l7ZNuLSuPl2MbYJzDqPdnXhTdkIjdcDOLH2daFm8gfB634wa5knZhPGLOw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.7.1.tgz", - "integrity": "sha512-w4pbei0AQZfw5JhbkELY9r4a+jY3fVNfgI+NxqVEcx3oglHfM5bPW0zw6c8B4hMAFEF83+YTvI9yIsPOfUtt0w==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.5.tgz", + "integrity": "sha512-svPOFlem7s6T33tX8a28uD5Ngc7bdML96ioiH7Fhi0J/at+WAthor4GeUNwkwuzBQI/Nc9XCgiYPcE0pzP7c6w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.7.1.tgz", - "integrity": "sha512-rwGTbhJq0a+uWq0dsgR20+x8XB5Vnj1Ejk2V6XjA5mOVxf8W9zRJx2S0RjDF33o/r4YQE4P26FrOHKkR57nKuw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.5.tgz", + "integrity": "sha512-cysqogEUNc0TgzzXcK9bkv12eoCjqhLzOvGXQU1zSEU9Hov7tuzMDl3Z6R3A7NgOCmWu84/wOnTrkSOI28caew==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.7.1.tgz", - "integrity": "sha512-7xtSbOGovZ5A9F7sumbSpDby8DYpKHfbfVnGpmjvngiLYUb3tcVEi1JydFjxbIaebd0hhR4h3rdwjPKbFW7ZVw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.5.tgz", + "integrity": "sha512-qIEMsWOzTKpVm0Sg553gKkua49Kd/sElLD1rZcXjjxjAsD97uq8AiNncArMfYdDKgkKbtwtW/Fb3uVuafTLnZg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-0.7.1.tgz", - "integrity": "sha512-EuOvMlDtpPL4lAetLW0InnZEMdVDoZfZ71vXu1u8/cPlbo32VD76ayymLgOmW0FX4hezKsu40LJKNWjCOmg4eA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.5.tgz", + "integrity": "sha512-yulltMSQN3aBt3NMURYTmJcpAJBi4eEJ4i9qF0INE8f0885sJpI0j35/31POkCghG1ZOSZkYALFrheKKP9e8pg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.7.1.tgz", - "integrity": "sha512-e1ZWVErTmrGOQUM4pEwHymS/d+j9W7aeCrD2Bd8HuR1C4+hjlD7BUHCIosZk64uYYct4jI6qMkPE9vkP9942YA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.5.tgz", + "integrity": "sha512-5oF/qN6TnUj28UAdaOgSIWKq7HG5QgI4p37zvQBBTXZHhrwN2kE6H+TaofWnSqWJynwmGIxJIx8bGo3lDfFbfA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.7.1.tgz", - "integrity": "sha512-RrUMGCAh8aZvmHGs1Y5R3fs2TjK1n20SWyuNVb6rAoPjvPT9cxW71XOxnD0bdJm+NEunR7BzL+IdoKAgkFGDog==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.5.tgz", + "integrity": "sha512-y16IPjd/z6L7+r6RXLu7J/jlZDUenSnJDqo10HnnxtLjOJ+vna+pljI8sHcwu1ao0c3J3uMvbkF34dTiev7Opg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.7.1.tgz", - "integrity": "sha512-QNO2gL3XZK5mGjZYVwdEfvBgzJZdQiJ7GR7WGCoVT3duRzueGErTKe1Q0DgDKNN5zzGRgs1FSJFKtKS3eKOGNg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.5.tgz", + "integrity": "sha512-PSBTbDSgT+ClYvyQTDtWBi/bxXW/xJmVjg9NOWe8KAEl5WNU+pToiCBLLPCGDSa+K7/zr2TDb6QakG/qYItPZw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rspack/core": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-0.7.1.tgz", - "integrity": "sha512-ZOVRucpC5FDT00FD5ynEZb7siXVyHnxzoJNhcv67OqtTcaO8e7iQiOE8fHMJM4Z2Ix0zGKQn5/FV9G6MZoH+4w==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.0.5.tgz", + "integrity": "sha512-UlydS2VupZ6yBx3jCqCHpeEUQNWCrBkTQhPIezK0eCAk13i745byjqXX4tcfN6jR5Kjh/1CIb8r07k9DgGON1w==", "dev": true, + "license": "MIT", "dependencies": { - "@module-federation/runtime-tools": "0.1.6", - "@rspack/binding": "0.7.1", - "caniuse-lite": "^1.0.30001616", - "tapable": "2.2.1", - "webpack-sources": "3.2.3" + "@module-federation/runtime-tools": "0.5.1", + "@rspack/binding": "1.0.5", + "@rspack/lite-tapable": "1.0.0", + "caniuse-lite": "^1.0.30001616" }, "engines": { "node": ">=16.0.0" @@ -394,11 +400,26 @@ } } }, + "node_modules/@rspack/lite-tapable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.0.0.tgz", + "integrity": "sha512-7MZf4lburSUZoEenwazwUDKHhqyfnLCGnQ/tKcUtztfmVzfjZfRn/EaiT0AKkYGnL2U8AGsw89oUeVyvaOLVCw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@rspack/plugin-react-refresh": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-0.7.1.tgz", - "integrity": "sha512-PVolWxsoFVeEEYfrLaJnPuLuz/pan/yzMow68UBMsk5667FzP5014AE+DIoOh2pIOFD+U3P+ujgz+sJNQ2CCnA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.0.0.tgz", + "integrity": "sha512-WvXkLewW5G0Mlo5H1b251yDh5FFiH4NDAbYlFpvFjcuXX2AchZRf9zdw57BDE/ADyWsJgA8kixN/zZWBTN3iYA==", "dev": true, + "license": "MIT", + "dependencies": { + "error-stack-parser": "^2.0.6", + "html-entities": "^2.1.0" + }, "peerDependencies": { "react-refresh": ">=0.10.0 <1.0.0" }, @@ -417,34 +438,19 @@ } }, "node_modules/@sailshq/connect-redis": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@sailshq/connect-redis/-/connect-redis-3.2.1.tgz", - "integrity": "sha512-WoirB/kUnHm5ORSMjyqElmdIY+Xq/gwW5HxKr0V8u6p833rMP25JXParG8IBo3Y3R+IUQEmv9JeJs/tE09eh5Q==", - "dependencies": { - "debug": "^2.2.0", - "redis": "^2.1.0" - }, + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@sailshq/connect-redis/-/connect-redis-6.1.3.tgz", + "integrity": "sha512-KFIMY/rGW82aNDk2bp2qpxV1+t7S9OSre3LNrCNsUsBnddonq3DjGnVp88i4QFNTe8lcw3g7z0IHC3bEafMVJg==", + "license": "MIT", "engines": { - "node": "*" - } - }, - "node_modules/@sailshq/connect-redis/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": ">=12" } }, - "node_modules/@sailshq/connect-redis/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/@sailshq/lodash": { - "version": "3.10.4", - "resolved": "https://registry.npmjs.org/@sailshq/lodash/-/lodash-3.10.4.tgz", - "integrity": "sha512-YXJqp9gdHcZKAmBY/WnwFpPtNQp2huD/ME2YMurH2YHJvxrVzYsmpKw/pb7yINArRpp8E++fwbQd3ajYXGA45Q==" + "version": "3.10.6", + "resolved": "https://registry.npmjs.org/@sailshq/lodash/-/lodash-3.10.6.tgz", + "integrity": "sha512-gp2pRE/kyh3DbrQ7MaI65xNcjrToZHRa52XJsNB8kZ0Aj0fcDNQPw8entkcuaaPYzCPxXau4rpOXaw/rl0c/ZQ==", + "license": "MIT" }, "node_modules/@sailshq/nedb": { "version": "1.8.2", @@ -463,30 +469,69 @@ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" }, - "node_modules/@sailshq/socket.io-redis": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@sailshq/socket.io-redis/-/socket.io-redis-5.2.1.tgz", - "integrity": "sha512-ucQfoDPigpC1qRfVYsm2lAz/jWW1NVuSS6gIGdKsF0WiB9CbFJeYIwhdfUtjWxaW1Mf73nkSd/FHo4lLOXM7jg==", + "node_modules/@sailshq/router": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@sailshq/router/-/router-1.3.9.tgz", + "integrity": "sha512-giCbgFJSChKC1MP3JnbY5mqQmlsAmYh9oXmuiXsA553LVY8fcPiI5j7LCVrKFcJ+bsI0MRHwrZOvayfni4SIew==", + "license": "MIT", "dependencies": { - "debug": "~2.6.8", - "notepack.io": "~2.1.2", - "redis": "3.1.1", - "socket.io-adapter": "~1.1.0", - "uid2": "0.0.3" + "array-flatten": "3.0.0", + "debug": "2.6.9", + "methods": "~1.1.2", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.11", + "setprototypeof": "1.2.0", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/@sailshq/socket.io-redis/node_modules/debug": { + "node_modules/@sailshq/router/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/@sailshq/socket.io-redis/node_modules/ms": { + "node_modules/@sailshq/router/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/@sailshq/router/node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@sailshq/router/node_modules/path-to-regexp": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.11.tgz", + "integrity": "sha512-c0t+KCuUkO/YDLPG4WWzEwx3J5F/GHXsD1h/SNZfySqAIKe/BaP95x8fWtOfRJokpS5yYHRJjMtYlXD8jxnpbw==", + "license": "MIT" + }, + "node_modules/@sailshq/socket.io-redis": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@sailshq/socket.io-redis/-/socket.io-redis-6.1.2.tgz", + "integrity": "sha512-rSyq/1cBF23C5jQHhmGI/XIIlDZma4YRhXt3t4rmAyO2pvGsODBTJrJGhCg9InLvKJ5qhnu/77JcCD/0b1qPAQ==", + "license": "MIT", + "dependencies": { + "debug": "~4.3.1", + "notepack.io": "~2.2.0", + "redis": "^3.0.0", + "socket.io-adapter": "~2.2.0", + "uid2": "0.0.3" + }, + "engines": { + "node": ">=10.0.0" + } }, "node_modules/@sailshq/socket.io-redis/node_modules/redis": { "version": "3.1.1", @@ -517,15 +562,46 @@ "node": ">=4" } }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, "node_modules/@swc/helpers": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", - "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.4.0" } }, + "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==", + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.5.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", + "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -538,11 +614,6 @@ "node": ">= 0.6" } }, - "node_modules/after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==" - }, "node_modules/anchor": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/anchor/-/anchor-1.4.1.tgz", @@ -597,14 +668,10 @@ "dev": true }, "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", + "license": "MIT" }, "node_modules/asap": { "version": "1.0.0", @@ -622,40 +689,30 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" }, "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==" - }, "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/base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==", - "engines": { - "node": ">= 0.6.0" - } - }, "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==", + "license": "MIT", "engines": { "node": "^4.5.0 || >= 5.9" } @@ -669,40 +726,40 @@ "node": ">=8" } }, - "node_modules/blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" - }, "node_modules/bluebird": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.2.1.tgz", "integrity": "sha512-OfdwXncy2KqoGIlXUqxe+xb7G54s8y5pdo96+KGQMkQMZ5C/rT26tT2IJxWtgiAPeklwAU6iXxxjX8b8blcTPQ==" }, "node_modules/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -711,45 +768,68 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, + "node_modules/body-parser/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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/body-parser/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", - "engines": { - "node": ">=0.6" + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, "node_modules/body-parser/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==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -787,6 +867,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -819,9 +900,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001629", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001629.tgz", - "integrity": "sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw==", + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", "dev": true, "funding": [ { @@ -836,80 +917,35 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/captains-log": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/captains-log/-/captains-log-2.0.4.tgz", - "integrity": "sha512-TJ11SQV9o3e7aJrq6GAvxztdCc+Tgx9uSdB1YQLNPlft4/h6XQgFyA/dFA9oS/CmHtVZvIvOmJXfAS0MDBDBGg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/captains-log/-/captains-log-2.0.5.tgz", + "integrity": "sha512-Gg6xMzB9Ps1kBpbdts2QqT8Dzw4Zo+uHAIjnvBD8APS09AbWDpU4KTlE0w1SkQx8PIZLLUcNPbLraTSTWGm1sA==", + "license": "MIT", "dependencies": { "@sailshq/lodash": "^3.10.2", - "chalk": "1.1.3", + "chalk": "2.3.0", "rc": "1.2.8", "semver": "7.5.2" } }, - "node_modules/captains-log/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/captains-log/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/captains-log/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/captains-log/node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "node_modules/chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/captains-log/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "engines": { - "node": ">=0.8.0" + "node": ">=4" } }, - "node_modules/captains-log/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -974,6 +1010,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -991,24 +1028,6 @@ "resolved": "https://registry.npmjs.org/common-js-file-extensions/-/common-js-file-extensions-1.0.2.tgz", "integrity": "sha512-unB33lDBJbuMtc6dqm6SZbHbIu+uR2+zlv+DCO6bfjdvrMdn2GSKZTbKpLnbYpJS+GLq49U8prq5FPfL8QVrtA==" }, - "node_modules/component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==" - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==" - }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -1094,6 +1113,7 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -1118,12 +1138,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1170,21 +1192,36 @@ } }, "node_modules/core-js": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.1.tgz", - "integrity": "sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", + "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, + "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==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/create-sails-generator": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/create-sails-generator/-/create-sails-generator-0.0.1.tgz", - "integrity": "sha512-WOFR+4NZuziKfRV3eWPSb2yTkJCwZQcqTEoYSgJoDmWbFhMQXOEA8ahH0WxOqMD/1OreYLtLncEZMzd7mEVfNQ==", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/create-sails-generator/-/create-sails-generator-0.0.3.tgz", + "integrity": "sha512-7meULkmsgo2sv3YFKQU34pOYYphZxKfS2TXTi3RR3qqLQPBOZtaWdGE0ksPEsyF43KbByzycgq96j8OoVLexvA==", "dev": true, + "license": "MIT", "peerDependencies": { "sails": ">=1" } @@ -1193,25 +1230,12 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==", + "license": "MIT", "dependencies": { "lru-cache": "^4.0.1", "which": "^1.2.9" } }, - "node_modules/cross-spawn/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/cross-spawn/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" - }, "node_modules/csrf": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.1.0.tgz", @@ -1272,6 +1296,23 @@ "node": ">=0.4.0" } }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -1284,6 +1325,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -1292,6 +1334,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1300,6 +1343,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -1316,6 +1360,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -1337,9 +1382,14 @@ } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/didyoumean": { "version": "1.2.2", @@ -1353,20 +1403,16 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true }, - "node_modules/double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==" - }, "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/ejs": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.7.tgz", - "integrity": "sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -1397,85 +1443,73 @@ } }, "node_modules/engine.io": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.6.1.tgz", - "integrity": "sha512-dfs8EVg/i7QjFsXxn7cCRQ+Wai1G1TlEvHhdYEi80fxn5R1vZ2K661O6v/rezj1FP234SZ14r9CmJke99iYDGg==", - "dependencies": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "license": "MIT", + "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", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "~7.4.2" + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.2.0" } }, "node_modules/engine.io-client": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.3.tgz", - "integrity": "sha512-qsgyc/CEhJ6cgMUwxRRtOndGVhIu5hpL5tR4umSpmX/MvkFoIxUTM7oFMDQumHNzlNLwSVy6qhstFPoWTf7dOw==", - "dependencies": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.6.2", - "yeast": "0.1.2" - } - }, - "node_modules/engine.io-client/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz", + "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==", + "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.0.0" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.0.0" } }, - "node_modules/engine.io-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", - "dependencies": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" } }, "node_modules/engine.io/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==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/engine.io/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "stackframe": "^1.3.4" } }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -1487,6 +1521,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -1513,37 +1548,39 @@ } }, "node_modules/express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", + "depd": "2.0.0", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.3.1", "fresh": "0.5.2", - "merge-descriptors": "1.0.1", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -1609,10 +1646,17 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, "node_modules/express/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==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1620,61 +1664,102 @@ "node_modules/express/node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, + "node_modules/express/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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/express/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==", + "license": "MIT", + "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/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } }, "node_modules/express/node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/express/node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", @@ -1693,20 +1778,25 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, - "node_modules/express/node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.2" - }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8" + } + }, + "node_modules/express/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==", + "license": "MIT", + "engines": { + "node": ">=0.6" } }, "node_modules/eyes": { @@ -1758,6 +1848,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", "integrity": "sha512-MX1ZLPIuKED51hrI4++K+1B0VX87Cs4EkybD2q12Ysuf5p4vkmHqMvQJRlDwROqFr4D2Pzyit5wGQxf30grIcw==", + "license": "MIT", "dependencies": { "pend": "~1.2.0" } @@ -1766,6 +1857,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } @@ -1774,6 +1866,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -1782,6 +1875,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1848,15 +1942,16 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -1870,6 +1965,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -1883,6 +1979,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1938,6 +2035,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -1987,6 +2085,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -2015,36 +2114,20 @@ "node": ">=0.10.0" } }, - "node_modules/has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dependencies": { - "isarray": "2.0.1" - } - }, - "node_modules/has-binary2/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==" - }, - "node_modules/has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==" - }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -2056,6 +2139,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2067,6 +2151,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2085,27 +2170,22 @@ "node": ">= 0.4" } }, - "node_modules/html-webpack-plugin": { - "name": "html-rspack-plugin", - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/html-rspack-plugin/-/html-rspack-plugin-5.7.2.tgz", - "integrity": "sha512-uVXGYq19bcsX7Q/53VqXQjCKXw0eUMHlFGDLTaqzgj/ckverfhZQvXyA6ecFBaF9XUH16jfCTCyALYi0lJcagg==", + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "dev": true, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" } - } + ], + "license": "MIT" }, "node_modules/http-errors": { "version": "1.7.3", @@ -2151,6 +2231,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -2175,15 +2256,11 @@ "@sailshq/lodash": "^3.10.2" } }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==" - }, "node_modules/inertia-sails": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/inertia-sails/-/inertia-sails-0.2.2.tgz", "integrity": "sha512-I4Zk6BrgriV+qCFb3ZVl/48uNC9mwNTOzL15I7yUvGBxe1jxgBYOuE+ygnNLRkPO7qhZOqJwMvE9tk2KudCIuA==", + "license": "MIT", "peerDependencies": { "sails": ">=1", "sails-flash": ">=0.0.1" @@ -2206,12 +2283,14 @@ "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -2274,6 +2353,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "license": "MIT", "engines": { "node": ">=4" } @@ -2281,12 +2361,14 @@ "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "node_modules/isstream": { "version": "0.1.2", @@ -2294,9 +2376,10 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -2314,6 +2397,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2325,14 +2409,16 @@ } }, "node_modules/jake/node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2348,6 +2434,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2358,7 +2445,29 @@ "node_modules/jake/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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/jake/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/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==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/jiti": { "version": "1.21.0", @@ -2439,6 +2548,16 @@ "loose-envify": "cli.js" } }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, "node_modules/machine": { "version": "15.2.3", "resolved": "https://registry.npmjs.org/machine/-/machine-15.2.3.tgz", @@ -2480,6 +2599,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/machinepack-process/-/machinepack-process-4.0.1.tgz", "integrity": "sha512-/5dqpWVhNjRC78v4cOKMH2I74u3hbM4pVha0SEh427eddWLSDt41txECZh+HLPPD3h/r35UU0cKszIFxqZYJlA==", + "license": "MIT", "dependencies": { "@sailshq/lodash": "^3.10.2", "machine": "^15.0.0-23", @@ -2551,6 +2671,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2564,9 +2685,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-dictionaries": { "version": "1.0.0", @@ -2589,6 +2714,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2610,6 +2736,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -2664,14 +2791,16 @@ } }, "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==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/multiparty": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.1.3.tgz", "integrity": "sha512-Qhty41IpN0IuoBstlVPhdgqtnwrsj0gE7ndajbtUVE0f2UTT/2ChmZZnS5Nsf4a5H+5C68V/tN2vi6Wcvhn00Q==", + "license": "MIT", "dependencies": { "fd-slicer": "~1.0.1" }, @@ -2731,20 +2860,21 @@ } }, "node_modules/notepack.io": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/notepack.io/-/notepack.io-2.1.3.tgz", - "integrity": "sha512-AgSt+cP5XMooho1Ppn8NB3FFaVWefV+qZoZncYTUSch2GAEwlYLcIIbT5YVkMlFeNHnfwOvc4HDlbvrB5BRxXA==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/notepack.io/-/notepack.io-2.2.0.tgz", + "integrity": "sha512-9b5w3t5VSH6ZPosoYnyDONnUTF8o0UkBw7JLA6eBlYJWyGT1Q3vQa8Hmuj1/X6RYvHjjygBDgw6fJhe0JEojfw==", + "license": "MIT" }, "node_modules/nprogress": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2759,9 +2889,13 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2797,6 +2931,7 @@ "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==", + "license": "MIT", "dependencies": { "is-wsl": "^1.1.0" }, @@ -2807,7 +2942,8 @@ "node_modules/parasails": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/parasails/-/parasails-0.9.3.tgz", - "integrity": "sha512-tX9sf+qDXE3NqZ8XhXai4dDSiVq8Z5FOttWH7tYuwiYwh9ZpPqFEf7W4Lx3A19e0P1D5FPuw1jNRWe3JMv9sQg==" + "integrity": "sha512-tX9sf+qDXE3NqZ8XhXai4dDSiVq8Z5FOttWH7tYuwiYwh9ZpPqFEf7W4Lx3A19e0P1D5FPuw1jNRWe3JMv9sQg==", + "license": "MIT" }, "node_modules/parley": { "version": "3.8.3", @@ -2819,16 +2955,6 @@ "flaverr": "^1.5.1" } }, - "node_modules/parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "node_modules/parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, "node_modules/parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -2852,9 +2978,10 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.5.3.tgz", - "integrity": "sha512-bqgexHATMvdKmLuLFDxO7cEy6zGYVuURhAbJZYVbBR6XnX4KmXXBOt0OKVaDGOJ5l5UY86OXpKE2RHD30TbbOQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", "dependencies": { "isarray": "0.0.1" } @@ -2862,7 +2989,8 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" }, "node_modules/picocolors": { "version": "1.0.0", @@ -2891,6 +3019,53 @@ "node": ">= 6" } }, + "node_modules/playwright": { + "version": "1.47.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.1.tgz", + "integrity": "sha512-SUEKi6947IqYbKxRiqnbUobVZY4bF1uu+ZnZNJX9DfU1tlf2UhWfvVjLf01pQx9URsOr18bFVUKXmanYWhbfkw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.47.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.47.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.1.tgz", + "integrity": "sha512-i1iyJdLftqtt51mEk6AhYFaAJCDx0xQ/O5NU8EKaWFgMjItPVma542Nh/Aq8aLCjIJSzjaiEQGW/nyqLkGF1OQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/pluralize": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", @@ -3052,30 +3227,98 @@ "dev": true }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-plugin-tailwindcss": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.1.13.tgz", - "integrity": "sha512-/EKQURUrxLu66CMUg4+1LwGdxnz8of7IDvrSLqEtDqhLH61SAlNNUSr90UTvZaemujgl3OH/VHg+fyGltrNixw==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.6.tgz", + "integrity": "sha512-OPva5S7WAsPLEsOuOWXATi13QrCKACCiIonFgIR6V4lYv4QLp++UXVhZSzRbZxXGimkQtQT86CC6fQqTOybGng==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12.17.0" + "node": ">=14.21.3" }, "peerDependencies": { - "prettier": ">=2.2.0" + "@ianvs/prettier-plugin-sort-imports": "*", + "@prettier/plugin-pug": "*", + "@shopify/prettier-plugin-liquid": "*", + "@trivago/prettier-plugin-sort-imports": "*", + "@zackad/prettier-plugin-twig-melody": "*", + "prettier": "^3.0", + "prettier-plugin-astro": "*", + "prettier-plugin-css-order": "*", + "prettier-plugin-import-sort": "*", + "prettier-plugin-jsdoc": "*", + "prettier-plugin-marko": "*", + "prettier-plugin-multiline-arrays": "*", + "prettier-plugin-organize-attributes": "*", + "prettier-plugin-organize-imports": "*", + "prettier-plugin-sort-imports": "*", + "prettier-plugin-style-order": "*", + "prettier-plugin-svelte": "*" + }, + "peerDependenciesMeta": { + "@ianvs/prettier-plugin-sort-imports": { + "optional": true + }, + "@prettier/plugin-pug": { + "optional": true + }, + "@shopify/prettier-plugin-liquid": { + "optional": true + }, + "@trivago/prettier-plugin-sort-imports": { + "optional": true + }, + "@zackad/prettier-plugin-twig-melody": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-css-order": { + "optional": true + }, + "prettier-plugin-import-sort": { + "optional": true + }, + "prettier-plugin-jsdoc": { + "optional": true + }, + "prettier-plugin-marko": { + "optional": true + }, + "prettier-plugin-multiline-arrays": { + "optional": true + }, + "prettier-plugin-organize-attributes": { + "optional": true + }, + "prettier-plugin-organize-imports": { + "optional": true + }, + "prettier-plugin-sort-imports": { + "optional": true + }, + "prettier-plugin-style-order": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + } } }, "node_modules/promise": { @@ -3110,6 +3353,7 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -3121,17 +3365,20 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "license": "ISC" }, "node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -3174,17 +3421,19 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "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==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -3196,29 +3445,50 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/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==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/raw-body/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, "node_modules/raw-body/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==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -3227,6 +3497,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -3238,9 +3509,10 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -3249,15 +3521,16 @@ } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, "node_modules/react-refresh": { @@ -3265,6 +3538,7 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3310,19 +3584,6 @@ "node": ">=8.10.0" } }, - "node_modules/redis": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", - "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", - "dependencies": { - "double-ended-queue": "^2.1.0-0", - "redis-commands": "^1.2.0", - "redis-parser": "^2.6.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/redis-commands": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", @@ -3336,18 +3597,11 @@ "node": ">=4" } }, - "node_modules/redis-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", - "integrity": "sha512-9Hdw19gwXFBJdN8ENUoNVJFRyMDFrE/ZBClPicKYDPwNPJ4ST1TedAHYNSiGKElwh2vrmRGMoJYbVdJd+WQXIw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/reportback": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/reportback/-/reportback-2.0.2.tgz", "integrity": "sha512-EOF6vRKfXjI7ydRoOdXXeRTK1zgWq7mep8/32patt0FOnBap32eTSw6yCea/o0025PHmVB8crx5OxzZJ+/P34g==", + "license": "MIT", "dependencies": { "captains-log": "^2.0.2", "switchback": "^2.0.1" @@ -3404,57 +3658,12 @@ "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz", "integrity": "sha512-fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw==" }, - "node_modules/router": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/router/-/router-1.3.2.tgz", - "integrity": "sha512-HyiHMDfHAmKe+k3fiHjiM33fFl9KITVhCyR6qqSPYyv308hghR7k5LapZlAUuYjkcnx1q36lZ/Ab/i3GrlVqTQ==", + "node_modules/rttc": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rttc/-/rttc-10.0.1.tgz", + "integrity": "sha512-wBsGNVaZ8K1qG0n5jxQ7dnOpvpewyQHGIjbMFYx8D16+51MM+FwkZwDPgH4GtnaTSzrNvrJriXFyvDi7OTZQ0A==", "dependencies": { - "array-flatten": "2.1.1", - "debug": "2.6.9", - "methods": "~1.1.2", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "setprototypeof": "1.1.0", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/router/node_modules/array-flatten": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", - "integrity": "sha512-Ylfqm/V1V/VKGazsJeRDZ31wV9gdNeK3ZsvwbYBAVSNgH8o8CMLfdx/ofn9pnMVsvTMfvC3yfcBYzGpD1vxnlw==" - }, - "node_modules/router/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/router/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/router/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/router/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/rttc": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/rttc/-/rttc-10.0.1.tgz", - "integrity": "sha512-wBsGNVaZ8K1qG0n5jxQ7dnOpvpewyQHGIjbMFYx8D16+51MM+FwkZwDPgH4GtnaTSzrNvrJriXFyvDi7OTZQ0A==", - "dependencies": { - "@sailshq/lodash": "^3.10.2" + "@sailshq/lodash": "^3.10.2" }, "engines": { "node": ">= 0.10.0", @@ -3492,16 +3701,19 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/sails": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/sails/-/sails-1.5.8.tgz", - "integrity": "sha512-S1omXwRYsnJzQtnDG0pDOmLUT8WssFV3KMIE15grYo6gtOwUwPhITs8dSw1rzTCyV8TIt5vQzVbeL82vvfwINA==", + "version": "1.5.12", + "resolved": "https://registry.npmjs.org/sails/-/sails-1.5.12.tgz", + "integrity": "sha512-Q4rTOkpUUKvfshEVMI/9ErE8dei/5tobF7WAAEHYLs7f3ExijbM3yZ79FsPx/6ai9P9IyYENsSgcJ7Zk8fd65A==", + "license": "MIT", "dependencies": { - "@sailshq/lodash": "^3.10.2", + "@sailshq/lodash": "^3.10.6", + "@sailshq/router": "^1.3.9", "async": "2.6.4", - "captains-log": "^2.0.0", + "captains-log": "^2.0.5", "chalk": "2.3.0", "commander": "2.11.0", "common-js-file-extensions": "1.0.2", @@ -3511,8 +3723,8 @@ "cookie-parser": "1.4.4", "cookie-signature": "1.1.0", "csurf": "1.10.0", - "ejs": "3.1.7", - "express": "4.17.3", + "ejs": "3.1.10", + "express": "4.21.0", "express-session": "1.17.0", "flaverr": "^1.10.0", "glob": "7.1.2", @@ -3527,18 +3739,17 @@ "minimist": "1.2.6", "parley": "^3.3.4", "parseurl": "1.3.2", - "path-to-regexp": "1.5.3", + "path-to-regexp": "1.9.0", "pluralize": "1.2.1", "prompt": "1.2.1", "rc": "1.2.8", - "router": "1.3.2", "rttc": "^10.0.0-0", - "sails-generate": "^2.0.3", + "sails-generate": "^2.0.11", "sails-stringfile": "^0.3.3", "semver": "7.5.2", "serve-favicon": "2.4.5", - "serve-static": "1.13.1", - "skipper": "^0.9.0-0", + "serve-static": "1.16.2", + "skipper": "^0.9.5", "sort-route-addresses": "^0.0.4", "uid-safe": "2.1.5", "vary": "1.1.2", @@ -3573,13 +3784,14 @@ } }, "node_modules/sails-generate": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/sails-generate/-/sails-generate-2.0.8.tgz", - "integrity": "sha512-uB3KQGHcMt3NpA26CTPgVDdFc1gNCKMhZHM4wyUASJoWPNbulZNjNdx/nj6A88Hr1VOSIs++9xpL/v654AAGhw==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/sails-generate/-/sails-generate-2.0.12.tgz", + "integrity": "sha512-uP1AxV+LjuCKF8tnUtyUsce2iyWRXi0hIZRwrf1+ruH0JwC014rQ8FBX8dX1Uso+jUYib4E3t6uj0N1tmpK80g==", + "license": "MIT", "dependencies": { "@sailshq/lodash": "^3.10.3", "async": "2.6.4", - "chalk": "1.1.3", + "chalk": "2.3.0", "cross-spawn": "4.0.2", "flaverr": "^1.0.0", "fs-extra": "0.30.0", @@ -3590,45 +3802,15 @@ "sails.io.js-dist": "^1.0.0" } }, - "node_modules/sails-generate/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sails-generate/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sails-generate/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/sails-hook-orm": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/sails-hook-orm/-/sails-hook-orm-4.0.2.tgz", - "integrity": "sha512-uNB1SW3thRyGo0KH0W+FTNMrKl/iGAayJedlMZmEsy3HbioI3sCiI0rDaL/gR4eWAoj3w2ZeUbl7NMpsuVvxoQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/sails-hook-orm/-/sails-hook-orm-4.0.3.tgz", + "integrity": "sha512-/PrAHwsjbby0PK27LpLamYMUz4CedVYW3vr6JFSG9OncoeUG9qgwcNjeWNxo2HuEfHDal92KISXkcdRX7jh5Eg==", + "license": "MIT", "dependencies": { "@sailshq/lodash": "^3.10.2", "async": "2.6.4", - "chalk": "1.1.3", + "chalk": "2.3.0", "flaverr": "^1.8.0", "parley": "^3.3.2", "prompt": "1.2.1", @@ -3637,50 +3819,21 @@ "waterline-utils": "^1.0.0" } }, - "node_modules/sails-hook-orm/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sails-hook-orm/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sails-hook-orm/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/sails-hook-shipwright": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sails-hook-shipwright/-/sails-hook-shipwright-0.2.0.tgz", - "integrity": "sha512-8qGh6iMeiswBoeywlsTm/wDrG0La2C2GXeGzB+90X2a8UUaLaYy4y5nSNDlfzRtG1SLublvYhpTmg6k0OtqadQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/sails-hook-shipwright/-/sails-hook-shipwright-0.3.0.tgz", + "integrity": "sha512-eG1valxwqpNRGZ4gRk8OM2Y6Nm41Jf3Whi2JeVlCEYHJ6kqmfEWDSUp5BJS8zCkRQAQfNFmk7TccC3Bi5kVGZQ==", "dev": true, + "license": "MIT", "dependencies": { - "@rsbuild/core": "^0.7.1" + "@rsbuild/core": "^1.0.1" } }, "node_modules/sails-hook-sockets": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sails-hook-sockets/-/sails-hook-sockets-2.0.4.tgz", - "integrity": "sha512-kR6i9WXzPjkRuTl+2NVzBpJMqP8DuPLLHF1rKQSXkxK0ysZlHGzCLJScPWuu8qd33b/Ug7If39qFFwZCZuhQCA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sails-hook-sockets/-/sails-hook-sockets-3.0.1.tgz", + "integrity": "sha512-d1LNW3h7T2xGEIHmf0btY2tcgK7EDqHZPyD3fpCx4Frhqx8n6MXdbbuKDdPx3c/h0inoJzZvkjtHNSovDk8hNQ==", + "license": "MIT", "dependencies": { "@sailshq/lodash": "^3.10.2", "async": "2.6.4", @@ -3689,7 +3842,7 @@ "machinepack-urls": "^6.0.2-0", "proxy-addr": "1.1.5", "semver": "7.5.2", - "socket.io": "2.5.0", + "socket.io": "4.7.5", "uid2": "0.0.3" } }, @@ -3709,17 +3862,6 @@ "node": ">= 0.10" } }, - "node_modules/sails-hook-sockets/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/sails-hook-sockets/node_modules/proxy-addr": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", @@ -3732,25 +3874,6 @@ "node": ">= 0.6" } }, - "node_modules/sails-hook-sockets/node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sails-hook-sockets/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/sails-stringfile": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/sails-stringfile/-/sails-stringfile-0.3.3.tgz", @@ -3764,25 +3887,14 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/sails.io.js/-/sails.io.js-1.2.1.tgz", "integrity": "sha512-Dd53Q4G8RRo3wZW7nSf49F88Y83qG/fkDSB7z7qb3qBd2vXiNodOAAv+tjKJuUsZ3osWIrlpaIxQUYMC4eR+cg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sails.io.js-dist": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/sails.io.js-dist/-/sails.io.js-dist-1.2.1.tgz", - "integrity": "sha512-fBMdntawlqd5N/1xL9Vu6l+J5zvy86jLUf0nFDal5McUeZzUy7PpNqq+Vx/F9KgItAyFJ7RoO3YltO9dD0Q5OQ==" - }, - "node_modules/sails/node_modules/chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dependencies": { - "ansi-styles": "^3.1.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" - }, - "engines": { - "node": ">=4" - } + "integrity": "sha512-fBMdntawlqd5N/1xL9Vu6l+J5zvy86jLUf0nFDal5McUeZzUy7PpNqq+Vx/F9KgItAyFJ7RoO3YltO9dD0Q5OQ==", + "license": "MIT" }, "node_modules/sails/node_modules/glob": { "version": "7.1.2", @@ -3800,29 +3912,20 @@ "node": "*" } }, - "node_modules/sails/node_modules/has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sails/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "loose-envify": "^1.1.0" } }, - "node_modules/sails/node_modules/semver": { + "node_modules/semver": { "version": "7.5.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3833,48 +3936,43 @@ "node": ">=10" } }, - "node_modules/sails/node_modules/supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==", + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "dependencies": { - "has-flag": "^2.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/sails/node_modules/yallist": { + "node_modules/semver/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" }, "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -3884,6 +3982,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3891,32 +3990,60 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, "node_modules/send/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, "node_modules/send/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==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -3942,99 +4069,43 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.1", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.1" + "parseurl": "~1.3.3", + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/serve-static/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/serve-static/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-static/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-static/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/serve-static/node_modules/ms": { + "node_modules/serve-static/node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-static/node_modules/send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.1", - "destroy": "~1.0.4", - "encodeurl": "~1.0.1", - "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.3.1" - }, + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8" } }, - "node_modules/serve-static/node_modules/send/node_modules/statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==", + "node_modules/serve-static/node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/serve-static/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/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -4050,12 +4121,14 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -4070,13 +4143,14 @@ } }, "node_modules/skipper": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/skipper/-/skipper-0.9.4.tgz", - "integrity": "sha512-+VaLLr4Pu658D2a+WD00miu/ZK0APJgSWqI1qfWqrks1jLKqfI0fFryUZ95MuCkhmlg2O7Ky5rIFkXe3IhFCCQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/skipper/-/skipper-0.9.5.tgz", + "integrity": "sha512-8uQBMJgTI0T07IxThc46pXg5Dkvycp42UhL3JavIcdK+pNRRK0SXUJSJ7Gv9CxdugLQK4H4s4DdnFbvIEtheVA==", + "license": "MIT", "dependencies": { "@sailshq/lodash": "^3.10.3", "async": "2.6.4", - "body-parser": "1.19.2", + "body-parser": "1.20.3", "debug": "3.1.0", "multiparty": "4.1.3", "semver": "7.5.2", @@ -4092,6 +4166,7 @@ "version": "0.5.12", "resolved": "https://registry.npmjs.org/skipper-disk/-/skipper-disk-0.5.12.tgz", "integrity": "sha512-yyLOWT1WKY2h9NaUuG77XyhMti6vltRqp3ofN2ZTYoG3/V/SRLH1CjtZQ2Az6oqgMrfN8SZ83k3ptaOvB31YmQ==", + "license": "MIT", "dependencies": { "@sailshq/lodash": "^3.10.2", "debug": "3.1.0", @@ -4102,6 +4177,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -4109,154 +4185,85 @@ "node_modules/skipper-disk/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/skipper/node_modules/debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/skipper/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/skipper/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, - "node_modules/skipper/node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "node_modules/socket.io": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "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" - } - }, - "node_modules/skipper/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/socket.io": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.5.0.tgz", - "integrity": "sha512-gGunfS0od3VpwDBpGwVkzSZx6Aqo9uOcf1afJj2cKnKFAoyl16fvhpsUhmUFd4Ldbvl5JvRQed6eQw6oQp6n8w==", - "dependencies": { - "debug": "~4.1.0", - "engine.io": "~3.6.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.5.0", - "socket.io-parser": "~3.4.0" + "node": ">=10.2.0" } }, "node_modules/socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz", + "integrity": "sha512-rG49L+FwaVEwuAdeBRq49M97YI3ElVabJPzvHT9S6a2CWhDKnjSFasvwAwSYPRhQzfn4NtDIbCaGYgOCOU/rlg==", + "license": "MIT" }, "node_modules/socket.io-client": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.5.0.tgz", - "integrity": "sha512-lOO9clmdgssDykiOmVQQitwBAF3I6mYcQAo7hQ7AM6Ny5X7fp8hIJ3HcQs3Rjz4SoggoxA1OgrQyY8EgTbcPYw==", - "dependencies": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - } - }, - "node_modules/socket.io-client/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/socket.io-client/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==" - }, - "node_modules/socket.io-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/socket.io-client/node_modules/socket.io-parser": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.3.tgz", - "integrity": "sha512-qOg87q1PMWWTeO01768Yh9ogn7chB9zkKtQnya41Y355S0UmpXgpcrFwAgjYJxu9BdKug5r5e9YtVSeWhKBUZg==", + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz", + "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==", + "dev": true, + "license": "MIT", "dependencies": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" + "@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-parser": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.3.tgz", - "integrity": "sha512-1rE4dZN3kCI/E5wixd393hmbqa78vVpkKmnEJhLeWoS/C5hbFYAbcSfnWoaVH43u9ToUVtzKjguxEZq+1XZfCQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", "dependencies": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/socket.io-parser/node_modules/component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==" - }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "node_modules/socket.io/node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "license": "MIT", "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/socket.io-parser/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==" - }, - "node_modules/socket.io/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" + "debug": "~4.3.4", + "ws": "~8.17.1" } }, "node_modules/sort-route-addresses": { @@ -4289,6 +4296,13 @@ "node": "*" } }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true, + "license": "MIT" + }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -4308,7 +4322,8 @@ "node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" }, "node_modules/strip-ansi": { "version": "3.0.1", @@ -4325,6 +4340,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4381,14 +4397,15 @@ } }, "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==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -4407,15 +4424,17 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/switchback/-/switchback-2.0.5.tgz", "integrity": "sha512-w9gnsTxR5geOKt45QUryhDP9KTLcOAqje9usR2VQ2ng8DfhaF+mkIcArxioMP/p6Z/ecKE58i2/B0DDlMJK1jw==", + "license": "MIT", "dependencies": { "@sailshq/lodash": "^3.10.3" } }, "node_modules/tailwindcss": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.6.tgz", - "integrity": "sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==", + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.12.tgz", + "integrity": "sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==", "dev": true, + "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -4425,7 +4444,7 @@ "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.19.1", + "jiti": "^1.21.0", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -4448,15 +4467,6 @@ "node": ">=14.0.0" } }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -4483,11 +4493,6 @@ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, - "node_modules/to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==" - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4515,10 +4520,11 @@ "dev": true }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" }, "node_modules/tsscmp": { "version": "1.0.6", @@ -4532,6 +4538,7 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -4561,6 +4568,12 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -4587,6 +4600,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.0.tgz", "integrity": "sha512-LNUrNsXdI/fUsypJbWM8Jt4DgQdFAZh41p9C7WE9Cn+CULOEkoG2lgQyH68v3wnIy5K3fN4jdSt270K6IFA3MQ==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -4665,15 +4679,6 @@ "node": ">=0.6" } }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/whelk": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/whelk/-/whelk-6.0.1.tgz", @@ -4734,6 +4739,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4787,15 +4793,16 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -4807,13 +4814,20 @@ } }, "node_modules/xmlhttprequest-ssl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", - "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "dev": true, "engines": { "node": ">=0.4.0" } }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "license": "ISC" + }, "node_modules/yargs": { "version": "3.4.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.4.5.tgz", @@ -4824,11 +4838,6 @@ "window-size": "0.1.0", "wordwrap": "0.0.2" } - }, - "node_modules/yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==" } } } diff --git a/templates/mellow-react/package.json b/templates/mellow-react/package.json index 0e70816..04a1616 100644 --- a/templates/mellow-react/package.json +++ b/templates/mellow-react/package.json @@ -5,34 +5,37 @@ "description": "a Sails application", "keywords": [], "dependencies": { - "@inertiajs/react": "^1.0.15", - "@sailshq/connect-redis": "^3.2.1", - "@sailshq/lodash": "^3.10.3", - "@sailshq/socket.io-redis": "^5.2.0", + "@inertiajs/react": "^1.2.0", + "@sailshq/connect-redis": "^6.1.3", + "@sailshq/lodash": "^3.10.6", + "@sailshq/socket.io-redis": "^6.1.2", "inertia-sails": "^0.2.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sails": "^1.5.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "sails": "^1.5.12", "sails-flash": "^0.0.1", - "sails-hook-orm": "^4.0.0", - "sails-hook-sockets": "^2.0.0" + "sails-hook-orm": "^4.0.3", + "sails-hook-sockets": "^3.0.1" }, "devDependencies": { - "@rsbuild/plugin-react": "^0.7.3", - "create-sails-generator": "^0.0.1", - "prettier": "^2.6.2", - "prettier-plugin-tailwindcss": "^0.1.11", - "sails-hook-shipwright": "^0.2.0", + "@rsbuild/plugin-react": "^1.0.2", + "@types/node": "^22.5.5", + "create-sails-generator": "^0.0.3", + "playwright": "^1.47.1", + "prettier": "^3.3.3", + "prettier-plugin-tailwindcss": "^0.6.6", + "sails-hook-shipwright": "^0.3.0", "sails.io.js": "^1.2.1", - "socket.io-client": "^2.2.0", - "tailwindcss": "^3.0.24" + "socket.io-client": "^4.7.5", + "tailwindcss": "^3.4.12" }, "scripts": { - "dev": "node app.js", + "dev": "node --watch app.js", "start": "NODE_ENV=production node app.js", - "test": "npm run lint && npm run custom-tests && echo 'Done.'", - "lint": "./node_modules/eslint/bin/eslint.js . --max-warnings=0 --report-unused-disable-directives && echo '✔ Your .js files look good.'", - "custom-tests": "echo \"(No other custom tests yet.)\" && echo" + "lint": "prettier --check .", + "lint:fix": "prettier --write .", + "test:unit": "node --test ./tests/unit/**/*.test.js", + "test": "npm run test:unit" }, "main": "app.js", "engines": { From 66937f7f01a5af6d746b131c3c4a91d12882e6da Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:22:39 +0100 Subject: [PATCH 02/81] feat(mellow-react): add routes --- templates/mellow-react/config/routes.js | 35 +++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/templates/mellow-react/config/routes.js b/templates/mellow-react/config/routes.js index 4961d3e..f038580 100644 --- a/templates/mellow-react/config/routes.js +++ b/templates/mellow-react/config/routes.js @@ -18,6 +18,37 @@ module.exports.routes = { * for configuration options and examples. * * * ***************************************************************************/ - 'GET /': 'home/index', - 'GET /example': 'example/index' + 'GET /': 'home/view-home', + + 'GET /signup': 'auth/view-signup', + 'POST /signup': 'auth/signup', + + 'GET /check-email': 'auth/view-check-email', + 'GET /verify-email': 'auth/verify-email', + + 'GET /link-expired': 'auth/view-link-expired', + 'GET /resend-link': 'auth/resend-link', + + 'GET /:operation/success': 'auth/view-success', + + 'GET /login': 'auth/view-login', + 'POST /login': 'auth/login', + + 'GET /forgot-password': 'auth/view-forgot-password', + 'POST /forgot-password': 'auth/forgot-password', + + 'GET /reset-password': 'auth/view-reset-password', + 'POST /reset-password': 'auth/reset-password', + + 'GET /dashboard': 'dashboard/view-dashboard', + + 'GET /profile': 'user/view-profile', + 'PATCH /profile': 'user/update-profile', + 'DELETE /profile': 'user/delete-profile', + + 'DELETE /logout': 'user/logout', + + 'GET /auth/:provider/redirect': 'auth/redirect', + + 'GET /auth/:provider/callback': 'auth/callback' } From 41dee0840386ccd4bb572b628bb2d82e79dff685 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:24:01 +0100 Subject: [PATCH 03/81] feat(mellow-react): add actions --- .../api/controllers/auth/callback.js | 92 +++++++++++++++ .../api/controllers/auth/forgot-password.js | 53 +++++++++ .../api/controllers/auth/login.js | 81 +++++++++++++ .../api/controllers/auth/redirect.js | 22 ++++ .../api/controllers/auth/resend-link.js | 44 ++++++++ .../api/controllers/auth/reset-password.js | 58 ++++++++++ .../api/controllers/auth/signup.js | 88 +++++++++++++++ .../api/controllers/auth/verify-email.js | 82 ++++++++++++++ .../api/controllers/auth/view-check-email.js | 21 ++++ .../controllers/auth/view-forgot-password.js | 15 +++ .../api/controllers/auth/view-link-expired.js | 15 +++ .../api/controllers/auth/view-login.js | 15 +++ .../controllers/auth/view-reset-password.js | 33 ++++++ .../api/controllers/auth/view-signup.js | 14 +++ .../api/controllers/auth/view-success.js | 38 +++++++ .../controllers/dashboard/view-dashboard.js | 15 +++ .../api/controllers/example/index.js | 22 ---- .../home/{index.js => view-home.js} | 7 +- .../api/controllers/user/delete-profile.js | 52 +++++++++ .../api/controllers/user/logout.js | 19 ++++ .../api/controllers/user/update-profile.js | 106 ++++++++++++++++++ .../api/controllers/user/view-profile.js | 15 +++ 22 files changed, 879 insertions(+), 28 deletions(-) create mode 100644 templates/mellow-react/api/controllers/auth/callback.js create mode 100644 templates/mellow-react/api/controllers/auth/forgot-password.js create mode 100644 templates/mellow-react/api/controllers/auth/login.js create mode 100644 templates/mellow-react/api/controllers/auth/redirect.js create mode 100644 templates/mellow-react/api/controllers/auth/resend-link.js create mode 100644 templates/mellow-react/api/controllers/auth/reset-password.js create mode 100644 templates/mellow-react/api/controllers/auth/signup.js create mode 100644 templates/mellow-react/api/controllers/auth/verify-email.js create mode 100644 templates/mellow-react/api/controllers/auth/view-check-email.js create mode 100644 templates/mellow-react/api/controllers/auth/view-forgot-password.js create mode 100644 templates/mellow-react/api/controllers/auth/view-link-expired.js create mode 100644 templates/mellow-react/api/controllers/auth/view-login.js create mode 100644 templates/mellow-react/api/controllers/auth/view-reset-password.js create mode 100644 templates/mellow-react/api/controllers/auth/view-signup.js create mode 100644 templates/mellow-react/api/controllers/auth/view-success.js create mode 100644 templates/mellow-react/api/controllers/dashboard/view-dashboard.js delete mode 100644 templates/mellow-react/api/controllers/example/index.js rename templates/mellow-react/api/controllers/home/{index.js => view-home.js} (68%) create mode 100644 templates/mellow-react/api/controllers/user/delete-profile.js create mode 100644 templates/mellow-react/api/controllers/user/logout.js create mode 100644 templates/mellow-react/api/controllers/user/update-profile.js create mode 100644 templates/mellow-react/api/controllers/user/view-profile.js diff --git a/templates/mellow-react/api/controllers/auth/callback.js b/templates/mellow-react/api/controllers/auth/callback.js new file mode 100644 index 0000000..928dc80 --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/callback.js @@ -0,0 +1,92 @@ +module.exports = { + friendlyName: 'Callback', + + description: 'Callback auth.', + + inputs: { + provider: { + isIn: ['google'], + required: true + }, + code: { + type: 'string', + required: true + } + }, + + exits: { + success: { + responseType: 'redirect' + } + }, + fn: async function ({ code, provider }, exits) { + const req = this.req + /** @type GoogleUser */ + const googleUser = await sails.wish.provider(provider).user(code) + + User.findOrCreate( + { or: [{ googleId: googleUser.id }, { email: googleUser.email }] }, + { + googleId: googleUser.id, + email: googleUser.email, + fullName: googleUser.name, + googleAvatarUrl: googleUser.picture, + googleAccessToken: googleUser.accessToken, + googleIdToken: googleUser.idToken, + emailStatus: googleUser.verified_email ? 'verified' : 'unverified' + } + ).exec(async (error, user, wasCreated) => { + if (error) throw error + + if (!wasCreated && googleUser.verified_email) { + await User.updateOne({ id: user.id }).set({ + emailStatus: 'verified' + }) + } + if (!wasCreated && user.googleId !== googleUser.id) { + // Checks if the user email has changed since last log in + // And then update the email change candidate which will be used be used to prompt the user to update their email + await User.updateOne({ id: user.id }).set({ + emailChangeCandidate: googleUser.email + }) + } + if (!wasCreated && user.email !== googleUser.email) { + // Checks if the user email has changed since last log in + // And then update the email change candidate which will be used be used to prompt the user to update their email + await User.updateOne({ id: user.id }).set({ + emailChangeCandidate: googleUser.email + }) + } + + // Checks if the user name has changed since last log in + // And then update the name if changed + if (!wasCreated && user.fullName !== googleUser.name) { + await User.updateOne({ id: user.id }).set({ + fullName: googleUser.name + }) + } + + if (!wasCreated && user.googleAvatarUrl !== googleUser.picture) { + await User.updateOne({ id: user.id }).set({ + googleAvatarUrl: googleUser.picture + }) + } + + if (!wasCreated && user.googleAccessToken !== googleUser.accessToken) { + await User.updateOne({ id: user.id }).set({ + googleAccessToken: googleUser.accessToken + }) + } + + if (!wasCreated && user.googleIdToken !== googleUser.idToken) { + await User.updateOne({ id: user.id }).set({ + googleIdToken: googleUser.idToken + }) + } + + req.session.userId = user.id + const urlToRedirectTo = '/dashboard' + return exits.success(urlToRedirectTo) + }) + } +} diff --git a/templates/mellow-react/api/controllers/auth/forgot-password.js b/templates/mellow-react/api/controllers/auth/forgot-password.js new file mode 100644 index 0000000..5ba541d --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/forgot-password.js @@ -0,0 +1,53 @@ +module.exports = { + friendlyName: 'Forgot password', + + description: + 'Send a password recovery notification to the user with the specified email address.', + + inputs: { + email: { + description: + 'The email address of the alleged user who wants to recover their password.', + example: 'kelvin@boringstack.com', + type: 'string', + required: true, + isEmail: true + } + }, + + exits: { + success: { + description: + 'The email address might have matched a user in the database. (If so, a recovery email was sent.)', + responseType: 'redirect' + } + }, + + fn: async function ({ email }) { + const userExists = await User.count({ email: this.req.session.userEmail }) + if (!userExists) { + return '/check-email' + } + + const token = await sails.helpers.strings.random('url-friendly') + + const user = await User.updateOne({ email }).set({ + passwordResetToken: token, + passwordResetTokenExpiresAt: + Date.now() + sails.config.custom.passwordResetTokenTTL + }) + + await sails.helpers.mail.send.with({ + to: user.email, + subject: 'Password reset instructions', + template: 'email-reset-password', + templateData: { + fullName: user.fullName, + token + } + }) + + this.req.session.userEmail = user.email + return '/check-email' + } +} diff --git a/templates/mellow-react/api/controllers/auth/login.js b/templates/mellow-react/api/controllers/auth/login.js new file mode 100644 index 0000000..b088f7d --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/login.js @@ -0,0 +1,81 @@ +module.exports = { + friendlyName: 'Login', + + description: 'Log in using the provided email and password combination.', + + extendedDescription: `This action attempts to look up the user record in the database with the +specified email address. Then, if such a user exists, it uses +bcrypt to compare the hashed password from the database with the provided +password attempt.`, + + inputs: { + email: { + description: 'The email to try in this attempt, e.g. "irl@example.com".', + type: 'string', + isEmail: true, + required: true + }, + + password: { + description: + 'The unencrypted password to try in this attempt, e.g. "passwordlol".', + type: 'string', + required: true + }, + + rememberMe: { + description: "Whether to extend the lifetime of the user's session.", + type: 'boolean' + } + }, + + exits: { + success: { + description: 'The requesting user agent has been successfully logged in.', + extendedDescription: `Under the covers, this stores the id of the logged-in user in the session +as the \`userId\` key. The next time this user agent sends a request, assuming +it includes a cookie (like a web browser), Sails will automatically make this +user id available as req.session.userId in the corresponding action. (Also note +that, thanks to the included "custom" hook, when a relevant request is received +from a logged-in user, that user's entire record from the database will be fetched +and exposed as a shared data via loggedInUser prop.)`, + responseType: 'redirect' + }, + badCombo: { + responseType: 'badRequest' + } + }, + + fn: async function ({ email, password, rememberMe }) { + const user = await User.findOne({ + email: email.toLowerCase() + }) + + if (!user) { + throw { + badCombo: { + problems: [{ login: 'Wrong email/password.' }] + } + } + } + + try { + await sails.helpers.passwords.checkPassword(password, user.password) + } catch (e) { + sails.log.error(e.message) + throw { + badCombo: { + problems: [{ login: 'Wrong email/password.' }] + } + } + } + + if (rememberMe) { + this.req.session.cookie.maxAge = + sails.config.custom.rememberMeCookieMaxAge + } + + this.req.session.userId = user.id + return '/dashboard' + } +} diff --git a/templates/mellow-react/api/controllers/auth/redirect.js b/templates/mellow-react/api/controllers/auth/redirect.js new file mode 100644 index 0000000..f8ce763 --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/redirect.js @@ -0,0 +1,22 @@ +module.exports = { + friendlyName: 'Redirect', + + description: 'Redirect auth.', + + inputs: { + provider: { + isIn: ['google'], + required: true + } + }, + + exits: { + success: { + responseType: 'redirect' + } + }, + + fn: async function ({ provider }) { + return sails.wish.provider(provider).redirect() + } +} diff --git a/templates/mellow-react/api/controllers/auth/resend-link.js b/templates/mellow-react/api/controllers/auth/resend-link.js new file mode 100644 index 0000000..9e29ad7 --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/resend-link.js @@ -0,0 +1,44 @@ +module.exports = { + friendlyName: 'Resend link', + + description: '', + + inputs: {}, + + exits: { + success: { + responseType: 'redirect' + }, + userNotFound: { + responseType: 'notFound' + } + }, + + fn: async function () { + const userExists = await User.count({ email: this.req.session.userEmail }) + if (!userExists) { + return '/check-email' + } + const unverifiedUser = await User.updateOne(this.req.session.userEmail).set( + { + emailStatus: 'unverified', + emailProofToken: sails.helpers.strings.random('url-friendly'), + emailProofTokenExpiresAt: + Date.now() + sails.config.custom.emailProofTokenTTL + } + ) + + this.req.session.userId = unverifiedUser.id + + await sails.helpers.mail.send.with({ + subject: 'Verify your email', + template: 'email-verify-account', + to: unverifiedUser.email, + templateData: { + token: unverifiedUser.emailProofToken, + fullName: unverifiedUser.fullName + } + }) + return '/check-email' + } +} diff --git a/templates/mellow-react/api/controllers/auth/reset-password.js b/templates/mellow-react/api/controllers/auth/reset-password.js new file mode 100644 index 0000000..c66f9a9 --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/reset-password.js @@ -0,0 +1,58 @@ +module.exports = { + friendlyName: 'Reset password', + + description: '', + + inputs: { + token: { + description: 'The verification token from the email.', + example: 'lyCap0N9i8wKYz7rhrEPog' + }, + password: { + type: 'string', + required: true, + minLength: 8 + } + }, + + exits: { + success: { + responseType: 'redirect' + }, + invalidOrExpiredToken: { + responseType: 'expired', + description: 'The provided token is expired, invalid, or already used up.' + }, + badSignupRequest: { + responseType: 'badRequest', + description: + 'The provided fullName, password and/or email address are invalid.', + extendedDescription: + 'If this request was sent from a graphical user interface, the request ' + + 'parameters should have been validated/coerced _before_ they were sent.' + } + }, + + fn: async function ({ token, password }) { + if (!token) { + throw 'invalidOrExpiredToken' + } + + const user = await User.findOne({ passwordResetToken: token }) + + if (!user || user.passwordResetTokenExpiresAt <= Date.now()) { + throw 'invalidOrExpiredToken' + } + await User.updateOne({ id: user.id }).set({ + password, + passwordResetToken: '', + passwordResetTokenExpiresAt: 0 + }) + + this.req.session.userId = user.id + + delete this.req.session.userEmail + + return '/reset-password/success' + } +} diff --git a/templates/mellow-react/api/controllers/auth/signup.js b/templates/mellow-react/api/controllers/auth/signup.js new file mode 100644 index 0000000..10d329f --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/signup.js @@ -0,0 +1,88 @@ +module.exports = { + friendlyName: 'Register', + + description: 'Register auth.', + + inputs: { + fullName: { + type: 'string', + maxLength: 120, + required: true + }, + email: { + type: 'string', + isEmail: true, + required: true + }, + password: { + type: 'string', + required: true, + minLength: 8 + } + }, + + exits: { + badSignupRequest: { + responseType: 'badRequest', + description: + 'The provided fullName, password and/or email address are invalid.', + extendedDescription: + 'If this request was sent from a graphical user interface, the request ' + + 'parameters should have been validated/coerced _before_ they were sent.' + }, + success: { + responseType: 'redirect' + } + }, + + fn: async function ({ fullName, email: userEmail, password }) { + const email = userEmail.toLowerCase() + const emailProofToken = await sails.helpers.strings.random('url-friendly') + try { + unverifiedUser = await User.create({ + email, + password, + fullName, + tosAcceptedByIp: this.req.ip, + emailProofToken, + emailProofTokenExpiresAt: + Date.now() + sails.config.custom.emailProofTokenTTL + }).fetch() + } catch (error) { + if (error.code === 'E_UNIQUE') { + throw { + badSignupRequest: { + problems: [ + { + email: 'An account with this email address already exists.' + } + ] + } + } + } else if (error.name === 'UsageError') { + throw { + badSignupRequest: { + problems: [ + { + signup: + 'Apologies, but something went wrong with signing you up. Please try again.' + } + ] + } + } + } + } + + await sails.helpers.mail.send.with({ + subject: 'Verify your email', + template: 'email-verify-account', + to: unverifiedUser.email, + templateData: { + token: unverifiedUser.emailProofToken, + fullName: unverifiedUser.fullName + } + }) + this.req.session.userEmail = unverifiedUser.email + return '/check-email' + } +} diff --git a/templates/mellow-react/api/controllers/auth/verify-email.js b/templates/mellow-react/api/controllers/auth/verify-email.js new file mode 100644 index 0000000..c3a04e5 --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/verify-email.js @@ -0,0 +1,82 @@ +module.exports = { + friendlyName: 'Verify email', + + description: `Confirm a new user's email address, or an existing user's request for an email address change, + then redirect to either a special landing page (for newly-signed up users), or the account page + (for existing users who just changed their email address).`, + + inputs: { + token: { + description: 'The verification token from the email.', + example: 'lyCap0N9i8wKYz7rhrEPog' + } + }, + + exits: { + success: { + description: + 'Email address confirmed and requesting user logged in. Since this looks like a browser, redirecting...', + responseType: 'redirect' + }, + invalidOrExpiredToken: { + responseType: 'expired', + description: 'The provided token is expired, invalid, or already used up.' + }, + emailAlreadyInUse: { + statusCode: 409, + viewTemplatePath: '500', + description: 'The email address is no longer available.', + extendedDescription: + 'This is an edge case that is not always anticipated by websites and APIs. Since it is pretty rare, the 500 server error page is used as a simple catch-all. If this becomes important in the future, this could easily be expanded into a custom error page or resolution flow. But for context: this behavior of showing the 500 server error page mimics how popular apps like Slack behave under the same circumstances.' + } + }, + + fn: async function ({ token }) { + if (!token) { + throw 'invalidOrExpiredToken' + } + + const user = await User.findOne({ emailProofToken: token }) + + if (!user || user.emailProofTokenExpiresAt <= Date.now()) { + throw 'invalidOrExpiredToken' + } + + if (user.emailStatus == 'unverified') { + await User.updateOne({ id: user.id }).set({ + emailStatus: 'verified', + emailProofToken: '', + emailProofTokenExpiresAt: 0 + }) + + this.req.session.userId = user.id + delete this.req.session.userEmail + + return '/verify-email/success' + } else if (user.emailStatus == 'change-requested') { + if (!user.emailChangeCandidate) { + throw new Error( + `Consistency violation: Could not update user because this user record's emailChangeCandidate ("${user.emailChangeCandidate}") is missing. (This should never happen.)` + ) + } + + if ((await User.count({ email: user.emailChangeCandidate })) > 0) { + throw 'emailAlreadyInUse' + } + + await User.updateOne({ id: user.id }).set({ + emailStatus: 'confirmed', + emailProofToken: '', + emailProofTokenExpiresAt: 0, + email: user.emailChangeCandidate, + emailChangeCandidate: '' + }) + this.req.session.userId = user.id + return '/' + } else { + throw new Error( + `Consistency violation: User ${user.id} has an email proof token, but somehow also has an emailStatus of "${user.emailStatus}"! (This should never happen.)` + ) + } + } +} diff --git a/templates/mellow-react/api/controllers/auth/view-check-email.js b/templates/mellow-react/api/controllers/auth/view-check-email.js new file mode 100644 index 0000000..025df71 --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/view-check-email.js @@ -0,0 +1,21 @@ +module.exports = { + friendlyName: 'View verify email', + + description: 'Display "Verify email" page.', + + exits: { + success: { + responseType: 'inertia' + } + }, + + fn: async function () { + let message = `We sent a link to the email address you provided. Please check your inbox and follow the instructions.` + return { + page: 'auth/check-email', + props: { + message + } + } + } +} diff --git a/templates/mellow-react/api/controllers/auth/view-forgot-password.js b/templates/mellow-react/api/controllers/auth/view-forgot-password.js new file mode 100644 index 0000000..c56d150 --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/view-forgot-password.js @@ -0,0 +1,15 @@ +module.exports = { + friendlyName: 'View forgot password', + + description: 'Display "Forgot password" page.', + + exits: { + success: { + responseType: 'inertia' + } + }, + + fn: async function () { + return { page: 'auth/forgot-password' } + } +} diff --git a/templates/mellow-react/api/controllers/auth/view-link-expired.js b/templates/mellow-react/api/controllers/auth/view-link-expired.js new file mode 100644 index 0000000..a82cf1e --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/view-link-expired.js @@ -0,0 +1,15 @@ +module.exports = { + friendlyName: 'View link expired', + + description: 'Display "Link expired" page.', + + exits: { + success: { + responseType: 'inertia' + } + }, + + fn: async function () { + return { page: 'link-expired' } + } +} diff --git a/templates/mellow-react/api/controllers/auth/view-login.js b/templates/mellow-react/api/controllers/auth/view-login.js new file mode 100644 index 0000000..55acb99 --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/view-login.js @@ -0,0 +1,15 @@ +module.exports = { + friendlyName: 'View login', + + description: 'Display "Login" page.', + + exits: { + success: { + responseType: 'inertia' + } + }, + + fn: async function () { + return { page: 'auth/login' } + } +} diff --git a/templates/mellow-react/api/controllers/auth/view-reset-password.js b/templates/mellow-react/api/controllers/auth/view-reset-password.js new file mode 100644 index 0000000..2b565f4 --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/view-reset-password.js @@ -0,0 +1,33 @@ +module.exports = { + friendlyName: 'View reset password', + + description: 'Display "Reset password" page.', + + inputs: { + token: { + description: 'The reset token from the email.', + example: 'lyCap0N9i8wKYz7rhrEPog' + } + }, + exits: { + success: { + responseType: 'inertia' + }, + invalidOrExpiredToken: { + responseType: 'expired', + description: 'The provided token is expired, invalid, or already used up.' + } + }, + + fn: async function ({ token }) { + if (!token) { + throw 'invalidOrExpiredToken' + } + const user = await User.findOne({ passwordResetToken: token }) + + if (!user || user.passwordResetTokenExpiresAt <= Date.now()) { + throw 'invalidOrExpiredToken' + } + return { page: 'auth/reset-password', props: { token } } + } +} diff --git a/templates/mellow-react/api/controllers/auth/view-signup.js b/templates/mellow-react/api/controllers/auth/view-signup.js new file mode 100644 index 0000000..c63f684 --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/view-signup.js @@ -0,0 +1,14 @@ +module.exports = { + friendlyName: 'View signup', + + description: 'Display "Signup" page.', + exits: { + success: { + responseType: 'inertia' + } + }, + + fn: async function () { + return { page: 'auth/signup' } + } +} diff --git a/templates/mellow-react/api/controllers/auth/view-success.js b/templates/mellow-react/api/controllers/auth/view-success.js new file mode 100644 index 0000000..eec6ef5 --- /dev/null +++ b/templates/mellow-react/api/controllers/auth/view-success.js @@ -0,0 +1,38 @@ +module.exports = { + friendlyName: 'View success email', + + description: 'Display "Success" page.', + inputs: { + operation: { + isIn: ['verify-email', 'reset-password'] + } + }, + exits: { + success: { + responseType: 'inertia' + } + }, + + fn: async function ({ operation }) { + let message + const pageTitle = `${sails.helpers.capitalize(operation)}` + let pageHeading + switch (operation) { + case 'verify-email': + message = 'Email has been successfully verified' + pageHeading = 'Email verification successful' + break + case 'reset-password': + message = 'Password has been successful reset' + pageHeading = 'Password reset successful' + } + return { + page: 'auth/success', + props: { + pageTitle, + pageHeading, + message + } + } + } +} diff --git a/templates/mellow-react/api/controllers/dashboard/view-dashboard.js b/templates/mellow-react/api/controllers/dashboard/view-dashboard.js new file mode 100644 index 0000000..c142087 --- /dev/null +++ b/templates/mellow-react/api/controllers/dashboard/view-dashboard.js @@ -0,0 +1,15 @@ +module.exports = { + friendlyName: 'View dashboard', + + description: 'Display "Dashboard" page.', + + exits: { + success: { + responseType: 'inertia' + } + }, + + fn: async function () { + return { page: 'dashboard/index' } + } +} diff --git a/templates/mellow-react/api/controllers/example/index.js b/templates/mellow-react/api/controllers/example/index.js deleted file mode 100644 index 118af33..0000000 --- a/templates/mellow-react/api/controllers/example/index.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - friendlyName: 'Example', - - description: 'Example index.', - - inputs: {}, - - exits: { - success: { - responseType: 'inertia' - } - }, - - fn: async function () { - return { - page: 'example', - props: { - quote: "You can shine no matter what you're made of - Bigweld" - } - } - } -} diff --git a/templates/mellow-react/api/controllers/home/index.js b/templates/mellow-react/api/controllers/home/view-home.js similarity index 68% rename from templates/mellow-react/api/controllers/home/index.js rename to templates/mellow-react/api/controllers/home/view-home.js index 5aee250..93bdb1d 100644 --- a/templates/mellow-react/api/controllers/home/index.js +++ b/templates/mellow-react/api/controllers/home/view-home.js @@ -12,11 +12,6 @@ module.exports = { }, fn: async function () { - return { - page: 'index', - props: { - name: 'Inertia' - } - } + return { page: 'index' } } } diff --git a/templates/mellow-react/api/controllers/user/delete-profile.js b/templates/mellow-react/api/controllers/user/delete-profile.js new file mode 100644 index 0000000..51448e7 --- /dev/null +++ b/templates/mellow-react/api/controllers/user/delete-profile.js @@ -0,0 +1,52 @@ +module.exports = { + friendlyName: 'Delete profile', + + description: + "Delete the logged-in user's account after verifying the password.", + + inputs: { + password: { + type: 'string', + required: true, + description: 'The current password of the user to verify before deletion.' + } + }, + + exits: { + success: { + responseType: 'inertiaRedirect', + description: 'User account deleted successfully.' + }, + unauthorized: { + responseType: 'inertiaRedirect', + description: 'User is not logged in.' + } + }, + + fn: async function ({ password }) { + const userId = this.req.session.userId + const user = await User.findOne({ id: userId }).intercept( + 'notFound', + () => { + delete this.req.session.userId + return { unauthorized: '/login' } + } + ) + + const passwordMatch = await sails.helpers.passwords + .checkPassword(password, user.password) + .intercept('incorrect', () => { + delete this.req.session.userId + return { unauthorized: '/login' } + }) + + await User.destroy({ id: userId }).intercept('error', (err) => { + sails.log.error('Error deleting account:', err) + throw 'error' + }) + + delete this.req.session.userId + + return '/login' + } +} diff --git a/templates/mellow-react/api/controllers/user/logout.js b/templates/mellow-react/api/controllers/user/logout.js new file mode 100644 index 0000000..73dcb67 --- /dev/null +++ b/templates/mellow-react/api/controllers/user/logout.js @@ -0,0 +1,19 @@ +module.exports = { + friendlyName: 'Logout', + + description: 'Logout user.', + + inputs: {}, + + exits: { + success: { + responseType: 'inertiaRedirect' + } + }, + + fn: async function () { + sails.inertia.flushShared('loggedInUser') + delete this.req.session.userId + return '/login' + } +} diff --git a/templates/mellow-react/api/controllers/user/update-profile.js b/templates/mellow-react/api/controllers/user/update-profile.js new file mode 100644 index 0000000..725d96f --- /dev/null +++ b/templates/mellow-react/api/controllers/user/update-profile.js @@ -0,0 +1,106 @@ +module.exports = { + friendlyName: 'Update profile', + + description: 'Update the profile information of the logged-in user.', + + inputs: { + fullName: { + type: 'string', + required: true, + description: 'The full name of the user.' + }, + email: { + type: 'string', + required: true, + isEmail: true, + description: 'The email address of the user.' + }, + currentPassword: { + type: 'string', + description: 'The current password of the user.', + allowNull: true + }, + password: { + type: 'string', + allowNull: true, + description: 'The new password of the user.' + }, + passwordConfirmation: { + type: 'string', + description: 'The confirmation of the new password.', + allowNull: true + } + }, + + exits: { + success: { + responseType: 'inertiaRedirect', + description: 'Profile updated successfully.' + }, + invalid: { + responseType: 'badRequest', + description: 'The provided inputs are invalid.' + }, + unauthorized: { + responseType: 'inertiaRedirect', + description: 'The provided current password is incorrect.' + } + }, + + fn: async function ({ + fullName, + email, + currentPassword, + password, + passwordConfirmation + }) { + const userId = this.req.session.userId + const user = await User.findOne({ id: userId }).select([ + 'password', + 'email' + ]) + + if (currentPassword) { + await sails.helpers.passwords + .checkPassword(currentPassword, user.password) + .intercept('incorrect', () => { + delete this.req.session.userId + return { unauthorized: '/login' } + }) + } + + const updatedData = { + fullName + } + if (email !== user.email) { + updatedData.emailChangeCandidate = email + updatedData.emailStatus = 'change-requested' + const emailProofToken = sails.helpers.strings.random('url-friendly') + + await sails.helpers.mail.send.with({ + to: email, + subject: 'Confirm your new email address', + template: 'email-verify-new-email', + templateData: { + fullName, + token: emailProofToken + } + }) + } + + if (password) { + if (password !== passwordConfirmation) { + throw { + invalid: { + problems: [{ password: 'Password confirmation does not match.' }] + } + } + } + updatedData.password = password + } + + await User.updateOne({ id: userId }).set(updatedData) + + return 'back' + } +} diff --git a/templates/mellow-react/api/controllers/user/view-profile.js b/templates/mellow-react/api/controllers/user/view-profile.js new file mode 100644 index 0000000..62d6105 --- /dev/null +++ b/templates/mellow-react/api/controllers/user/view-profile.js @@ -0,0 +1,15 @@ +module.exports = { + friendlyName: 'View profile', + + description: 'Display "Profile" page.', + + exits: { + success: { + responseType: 'inertia' + } + }, + + fn: async function () { + return { page: 'user/profile' } + } +} From 9d250e5eb9b1140d2693464857fe15b28e955be2 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:24:39 +0100 Subject: [PATCH 04/81] feat(mellow-react): add helpers --- .../mellow-react/api/helpers/capitalize.js | 26 ++++++++++++++++ .../api/helpers/get-user-initials.js | 30 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 templates/mellow-react/api/helpers/capitalize.js create mode 100644 templates/mellow-react/api/helpers/get-user-initials.js diff --git a/templates/mellow-react/api/helpers/capitalize.js b/templates/mellow-react/api/helpers/capitalize.js new file mode 100644 index 0000000..db6b242 --- /dev/null +++ b/templates/mellow-react/api/helpers/capitalize.js @@ -0,0 +1,26 @@ +module.exports = { + friendlyName: 'Capitalize Words', + description: + 'Capitalizes the first letter of each word in a hyphen-separated string.', + sync: true, + inputs: { + inputString: { + type: 'string', + required: true, + description: 'The input string to be formatted.' + } + }, + exits: { + success: { + description: 'Returns the formatted string.' + } + }, + fn: function (inputs, exits) { + const words = inputs.inputString.split('-') + const capitalizedWords = words.map( + (word) => word.charAt(0).toUpperCase() + word.slice(1) + ) + const formattedString = capitalizedWords.join(' ') + return exits.success(formattedString) + } +} diff --git a/templates/mellow-react/api/helpers/get-user-initials.js b/templates/mellow-react/api/helpers/get-user-initials.js new file mode 100644 index 0000000..5e2886a --- /dev/null +++ b/templates/mellow-react/api/helpers/get-user-initials.js @@ -0,0 +1,30 @@ +module.exports = { + friendlyName: 'Get user initials', + sync: true, + description: + "Extracting initials from user's fullName. Needed to show on the user avatar", + + inputs: { + fullName: { + type: 'string', + required: true + } + }, + + exits: { + success: { + outputFriendlyName: 'User initials' + } + }, + + fn: function ({ fullName }) { + // Get user initials. + const [firstName, lastName] = fullName.split(' ') + + const userInitials = lastName + ? `${firstName.charAt(0)}${lastName.charAt(0)}` + : `${firstName.slice(0, 2)}` + + return userInitials.toUpperCase() + } +} From 73bb85ceb5031b0bcafd76f2538e6a49b8b59a6b Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:25:03 +0100 Subject: [PATCH 05/81] feat(mellow-react): add custom hook --- .../mellow-react/api/hooks/custom/index.js | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 templates/mellow-react/api/hooks/custom/index.js diff --git a/templates/mellow-react/api/hooks/custom/index.js b/templates/mellow-react/api/hooks/custom/index.js new file mode 100644 index 0000000..f40662e --- /dev/null +++ b/templates/mellow-react/api/hooks/custom/index.js @@ -0,0 +1,46 @@ +/** + * custom hook + * + * @description :: A hook definition. Extends Sails by adding shadow routes, implicit actions, and/or initialization logic. + * @docs :: https://sailsjs.com/docs/concepts/extending-sails/hooks + */ + +module.exports = function defineCustomHook(sails) { + return { + /** + * Runs when this Sails app loads/lifts. + */ + initialize: async function () { + sails.log.info('Initializing custom hook (`custom`)') + }, + routes: { + before: { + 'GET /*': { + skipAssets: true, + fn: async function (req, res, next) { + if (req.session.userId) { + const loggedInUser = await User.findOne({ + id: req.session.userId + }).select(['email', 'fullName', 'googleAvatarUrl', 'initials']) + if (!loggedInUser) { + sails.log.warn( + 'Somehow, the user record for the logged-in user (`' + + req.session.userId + + '`) has gone missing....' + ) + delete req.session.userId + return res.redirect('/login') + } + sails.inertia.share('loggedInUser', loggedInUser) + res.setHeader('Cache-Control', 'no-cache, no-store') + return next() + } else { + sails.inertia.flushShared('loggedInUser') + } + return next() + } + } + } + } + } +} From 51555abb992e5390e9bba5ffa6c4368fa7455a6b Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:25:56 +0100 Subject: [PATCH 06/81] feat(mellow-react): add sails mail --- templates/mellow-react/package-lock.json | 7 +++++++ templates/mellow-react/package.json | 1 + 2 files changed, 8 insertions(+) diff --git a/templates/mellow-react/package-lock.json b/templates/mellow-react/package-lock.json index f34c6ba..02eb4b2 100644 --- a/templates/mellow-react/package-lock.json +++ b/templates/mellow-react/package-lock.json @@ -17,6 +17,7 @@ "react-dom": "^18.3.1", "sails": "^1.5.12", "sails-flash": "^0.0.1", + "sails-hook-mail": "^0.1.0", "sails-hook-orm": "^4.0.3", "sails-hook-sockets": "^3.0.1" }, @@ -3802,6 +3803,12 @@ "sails.io.js-dist": "^1.0.0" } }, + "node_modules/sails-hook-mail": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/sails-hook-mail/-/sails-hook-mail-0.1.0.tgz", + "integrity": "sha512-838v/VFlg5lE+/Gb3nsfr/lKIXzqM9fjwoNYnbuUxk2nax+ekEj85qoY0olLX/b2VPNzMRggkeDRXQ/NTdehUQ==", + "license": "MIT" + }, "node_modules/sails-hook-orm": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/sails-hook-orm/-/sails-hook-orm-4.0.3.tgz", diff --git a/templates/mellow-react/package.json b/templates/mellow-react/package.json index 04a1616..6b2aec1 100644 --- a/templates/mellow-react/package.json +++ b/templates/mellow-react/package.json @@ -14,6 +14,7 @@ "react-dom": "^18.3.1", "sails": "^1.5.12", "sails-flash": "^0.0.1", + "sails-hook-mail": "^0.1.0", "sails-hook-orm": "^4.0.3", "sails-hook-sockets": "^3.0.1" }, From 83b5004dffc709b518688dd8674a5d493af9dd32 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:27:07 +0100 Subject: [PATCH 07/81] feat(mellow-react): add mail config --- templates/mellow-react/config/mail.js | 60 +++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 templates/mellow-react/config/mail.js diff --git a/templates/mellow-react/config/mail.js b/templates/mellow-react/config/mail.js new file mode 100644 index 0000000..3ebccaf --- /dev/null +++ b/templates/mellow-react/config/mail.js @@ -0,0 +1,60 @@ +/** + * Mail + * (sails.config.mail) + * + * Use the settings below to configure mail ntegration in your app. + * + * For more information on Mail configuration, visit: + * https://docs.sailscasts.com/mail/ + */ + +module.exports.mail = { + /** + * Default Mailer + * (sails.config.mail.default) + * + * Determines the default mailer used to send email messages from your Sails application. + * You can set up alternative mailers and use them as needed, but this mailer will be + * the default choice. + * + */ + default: process.env.MAIL_MAILER || 'log', + /** + * Mailer Configurations + * (config.mail.mailers) + * + * Configure all the mailers used by your Sails application along with their respective settings. + * Several examples have been provided for you, and you are free to add your own mailers based on + * your application's requirements. + * + * Sails Mail supports various mail "transport" options for sending emails. You can specify which one + * you are using for your mailers below. Feel free to add additional mailers as needed. + * + * Supported transports: "log", "smtp", "resend", + * + */ + mailers: { + smtp: { + transport: 'smtp' + }, + log: { + transport: 'log' + }, + nodemailer: { + transport: 'smtp' + } + }, + /** + * Global "From" Address + * (config.mail.from) + * + * Set a default name and email address to be used as the sender for all emails + * sent by your Sails application. This global "From" address ensures that all + * outgoing emails have a consistent sender identity. + * + */ + from: { + address: 'boring@sailscasts.com', + name: 'The Boring JavaScript Stack' + } +} From cb830790bed0d54e561b8a82dd44bcf07bb88b26 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:36:20 +0100 Subject: [PATCH 08/81] feat(mellow-vue): use integer id --- templates/mellow-vue/api/models/User.js | 1 - templates/mellow-vue/config/models.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/templates/mellow-vue/api/models/User.js b/templates/mellow-vue/api/models/User.js index 67f04ce..15b6847 100644 --- a/templates/mellow-vue/api/models/User.js +++ b/templates/mellow-vue/api/models/User.js @@ -120,7 +120,6 @@ module.exports = { }, {}) }, beforeCreate: async function (valuesToSet, proceed) { - valuesToSet.id = sails.helpers.strings.uuid() valuesToSet.initials = sails.helpers.getUserInitials(valuesToSet.fullName) if (valuesToSet.password) { valuesToSet.password = await sails.helpers.passwords.hashPassword( diff --git a/templates/mellow-vue/config/models.js b/templates/mellow-vue/config/models.js index 89d228d..96f6be9 100644 --- a/templates/mellow-vue/config/models.js +++ b/templates/mellow-vue/config/models.js @@ -67,7 +67,7 @@ module.exports.models = { attributes: { createdAt: { type: 'number', autoCreatedAt: true }, updatedAt: { type: 'number', autoUpdatedAt: true }, - id: { type: 'string' } + id: { type: 'number', autoIncrement: true } //-------------------------------------------------------------------------- // /\ Using MongoDB? // || Replace `id` above with this instead: From 4662061b9086fc72ad45ace601fa9902876f0656 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:38:04 +0100 Subject: [PATCH 09/81] fix(mellow-react): add url back --- templates/mellow-react/api/responses/inertiaRedirect.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/templates/mellow-react/api/responses/inertiaRedirect.js b/templates/mellow-react/api/responses/inertiaRedirect.js index dc44d1f..662b1a6 100644 --- a/templates/mellow-react/api/responses/inertiaRedirect.js +++ b/templates/mellow-react/api/responses/inertiaRedirect.js @@ -9,6 +9,10 @@ module.exports = function inertiaRedirect(url) { const req = this.req const res = this.res + if (url === 'back') { + url = req.get('referer') || '/' + } + if (req.get(inertiaHeaders.INERTIA)) { res.set(inertiaHeaders.LOCATION, url) } From 9ecf66e5c6f177a9e790ff542761905edb4f4087 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:38:14 +0100 Subject: [PATCH 10/81] feat(mellow-react): add User model --- templates/mellow-react/api/models/User.js | 140 ++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 templates/mellow-react/api/models/User.js diff --git a/templates/mellow-react/api/models/User.js b/templates/mellow-react/api/models/User.js new file mode 100644 index 0000000..15b6847 --- /dev/null +++ b/templates/mellow-react/api/models/User.js @@ -0,0 +1,140 @@ +/** + * User.js + * + * @description :: A model definition represents a database table/collection. + * @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models + */ + +module.exports = { + attributes: { + // ╔═╗╦═╗╦╔╦╗╦╔╦╗╦╦ ╦╔═╗╔═╗ + // ╠═╝╠╦╝║║║║║ ║ ║╚╗╔╝║╣ ╚═╗ + // ╩ ╩╚═╩╩ ╩╩ ╩ ╩ ╚╝ ╚═╝╚═╝ + fullName: { + type: 'string', + required: true, + description: "The user's full name.", + maxLength: 120, + example: 'Mike McNeil', + columnName: 'full_name' + }, + initials: { + type: 'string' + }, + email: { + type: 'string', + required: true, + unique: true, + isEmail: true, + maxLength: 200, + example: 'mike@sailsjs.com', + columnName: 'email' + }, + emailStatus: { + type: 'string', + isIn: ['unverified', 'verified', 'change-requested'], + defaultsTo: 'unverified', + description: "The verification status of the user's email address.", + extendedDescription: `Users might be created as "unverified" (e.g. normal signup) or as "verified" (e.g. hard-coded admin users or OAuth flow). If a user signs up via an OAuth provider, this should be set to "verified" if the email has been verified by the OAuth provider`, + columnName: 'email_status' + }, + emailChangeCandidate: { + type: 'string', + isEmail: true, + description: + 'A still-unverified email address that this user wants to change to', + columnName: 'email_change_candidate' + }, + password: { + type: 'string', + description: + "Securely hashed representation of the user's login password", + protect: true, + minLength: 8, + example: '$2a$12$ymX0WdZU9vc0nM3ftCxGn.6p3aIFvI4haSrr/Y8ByW2BfnzqI1M0y' + }, + passwordResetToken: { + type: 'string', + description: + "A unique token used to verify the user's identity when recovering a password. Expires after 1 use, or after a set amount of time has elapsed.", + columnName: 'password_reset_token' + }, + passwordResetTokenExpiresAt: { + type: 'number', + description: + "A JS timestamp (epoch ms) representing the moment when this user's `passwordResetToken` will expire (or 0 if the user currently has no such token).", + example: 1502844074211, + columnName: 'password_reset_token_expires_at' + }, + emailProofToken: { + type: 'string', + description: + 'A pseudorandom, probabilistically-unique token for use in our account verification emails.', + columnName: 'email_proof_token' + }, + emailProofTokenExpiresAt: { + type: 'number', + description: + "A JS timestamp (epoch ms) representing the moment when this user's `emailProofToken` will expire (or 0 if the user currently has no such token).", + example: 1502844074211, + columnName: 'email_proof_token_expires_at' + }, + googleId: { + type: 'string', + description: + 'The unique ID of a user that signs in or register with their Google account.', + columnName: 'google_id' + }, + googleAccessToken: { + type: 'string', + description: 'Access token provided by Google for an OAuth user.', + columnName: 'google_access_token' + }, + googleIdToken: { + type: 'string', + description: 'The ID token provided by Google for an OAuth user.', + columnName: 'google_id_token' + }, + googleAvatarUrl: { + type: 'string', + description: 'The picture URL provided by Google for an OAuth user.', + columnName: 'google_avatar_url' + } + }, + customToJSON: function () { + return Object.keys(this).reduce((result, key) => { + if ( + ![ + 'googleIdToken', + 'googleUserId', + 'googleAccessToken', + 'password', + 'passwordResetTokenExpiresAt', + 'emailProofToken', + 'emailProofTokenExpiresAt' + ].includes(key) + ) { + result[key] = this[key] + } + return result + }, {}) + }, + beforeCreate: async function (valuesToSet, proceed) { + valuesToSet.initials = sails.helpers.getUserInitials(valuesToSet.fullName) + if (valuesToSet.password) { + valuesToSet.password = await sails.helpers.passwords.hashPassword( + valuesToSet.password + ) + } + + return proceed() + }, + beforeUpdate: async function (valuesToSet, proceed) { + if (valuesToSet.password) { + valuesToSet.password = await sails.helpers.passwords.hashPassword( + valuesToSet.password + ) + } + return proceed() + } +} From 4681f4c4405769b3a02ac989b165dcf712ce6f1c Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:38:52 +0100 Subject: [PATCH 11/81] feat(mellow-react): add policies --- templates/mellow-react/api/policies/is-authenticated.js | 4 ++++ templates/mellow-react/api/policies/is-guest.js | 6 ++++++ 2 files changed, 10 insertions(+) create mode 100644 templates/mellow-react/api/policies/is-authenticated.js create mode 100644 templates/mellow-react/api/policies/is-guest.js diff --git a/templates/mellow-react/api/policies/is-authenticated.js b/templates/mellow-react/api/policies/is-authenticated.js new file mode 100644 index 0000000..13bc1e8 --- /dev/null +++ b/templates/mellow-react/api/policies/is-authenticated.js @@ -0,0 +1,4 @@ +module.exports = async function (req, res, proceed) { + if (req.session.userId) return proceed() + return res.redirect('/login') +} diff --git a/templates/mellow-react/api/policies/is-guest.js b/templates/mellow-react/api/policies/is-guest.js new file mode 100644 index 0000000..a51ae58 --- /dev/null +++ b/templates/mellow-react/api/policies/is-guest.js @@ -0,0 +1,6 @@ +module.exports = async function (req, res, proceed) { + if (!req.session.userId) { + return proceed() + } + return res.redirect('/') +} From 8eee3b8478d143873772616edfe25da427b01e1f Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:40:27 +0100 Subject: [PATCH 12/81] feat(mellow-react): register policy mappings --- templates/mellow-react/config/policies.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/templates/mellow-react/config/policies.js b/templates/mellow-react/config/policies.js index 859e0fa..f928148 100644 --- a/templates/mellow-react/config/policies.js +++ b/templates/mellow-react/config/policies.js @@ -15,5 +15,8 @@ module.exports.policies = { * (`true` allows public access) * * * ***************************************************************************/ - // '*': true, + 'auth/*': 'is-guest', + 'auth/view-success': true, + 'user/*': 'is-authenticated', + 'dashboard/*': 'is-authenticated' } From dcd119964e9eb790da5bb08a0a16a72281a6c6e6 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:41:59 +0100 Subject: [PATCH 13/81] feat(mellow-react): add test --- templates/mellow-react/config/env/test.js | 27 +++ .../mellow-react/tests/unit/helpers.test.js | 83 +++++++++ templates/mellow-react/types/index.d.ts | 173 ------------------ 3 files changed, 110 insertions(+), 173 deletions(-) create mode 100644 templates/mellow-react/config/env/test.js create mode 100644 templates/mellow-react/tests/unit/helpers.test.js delete mode 100644 templates/mellow-react/types/index.d.ts diff --git a/templates/mellow-react/config/env/test.js b/templates/mellow-react/config/env/test.js new file mode 100644 index 0000000..5b6a0f8 --- /dev/null +++ b/templates/mellow-react/config/env/test.js @@ -0,0 +1,27 @@ +module.exports = { + port: 3333, + hooks: { + // Uncomment if you have the apianalytics hook and you don't want to see logs + // from it during testing + // apianalytics: false + }, + log: { + level: 'error' + }, + models: { + migrate: 'drop' + }, + datastores: { + default: { + adapter: 'sails-disk' + } + }, + mail: { + default: 'log', + mailers: { + log: { + transport: 'log' + } + } + } +} diff --git a/templates/mellow-react/tests/unit/helpers.test.js b/templates/mellow-react/tests/unit/helpers.test.js new file mode 100644 index 0000000..aa6d7a9 --- /dev/null +++ b/templates/mellow-react/tests/unit/helpers.test.js @@ -0,0 +1,83 @@ +const { describe, it, before, after } = require('node:test') +const assert = require('node:assert/strict') +const Sails = require('sails').constructor + +describe('sails.helpers.capitalize()', () => { + let sails + let sailsApp = new Sails() + + before(async () => { + sails = await new Promise((resolve, reject) => { + sailsApp.load( + { environment: 'test', hooks: { shipwright: false } }, + (err, sailsInstance) => { + if (err) { + return reject(err) + } + resolve(sailsInstance) + } + ) + }) + }) + + after(async () => { + await new Promise((resolve, reject) => { + sailsApp.lower((err) => { + if (err) { + return reject(err) + } + resolve() + }) + }) + }) + + it('capitalizes single word correctly', async () => { + const capitalized = sails.helpers.capitalize('hello') + assert.equal(capitalized, 'Hello') + }) + + it('capitalizes multiple words correctly', async () => { + const capitalized = sails.helpers.capitalize('the quick brown fox') + assert.equal(capitalized, 'The quick brown fox') + }) +}) + +describe('sails.helpers.getUserIntials()', () => { + let sails + let sailsApp = new Sails() + + before(async () => { + sails = await new Promise((resolve, reject) => { + sailsApp.load( + { environment: 'test', hooks: { shipwright: false } }, + (err, sailsInstance) => { + if (err) { + return reject(err) + } + resolve(sailsInstance) + } + ) + }) + }) + + after(async () => { + await new Promise((resolve, reject) => { + sailsApp.lower((err) => { + if (err) { + return reject(err) + } + resolve() + }) + }) + }) + + it('gets user initials from first name and last name', async () => { + const initials = sails.helpers.getUserInitials('Kelvin Omereshone') + assert.equal(initials, 'KO') + }) + + it('gets user initials from just name', async () => { + const initials = sails.helpers.getUserInitials('Kelvin') + assert.equal(initials, 'KE') + }) +}) diff --git a/templates/mellow-react/types/index.d.ts b/templates/mellow-react/types/index.d.ts deleted file mode 100644 index 9168476..0000000 --- a/templates/mellow-react/types/index.d.ts +++ /dev/null @@ -1,173 +0,0 @@ -interface Sails { - log: LogMethod & LogObject - models: { [modelName: string]: Model } - helpers: Helper - on(event: string, listener: (...args: any[]) => void): void - off(event: string, listener: (...args: any[]) => void): void - emit(event: string, ...args: any[]): void - lift(cb?: (err: Error, sails: Sails) => void): Sails - lower(cb?: (err?: Error) => void): void - load(): Sails - getVersion(): string - inertia: Inertia - wish: Wish - hooks: Hook - config: Config - req: { - ip: string - } - renderView: ( - relPathToView: string, - _options: Dictionary, - optionalCb?: (err: Error | null, compiledHtml: string) => void - ) => Sails & Promise - intercept(callback: (err: Error) => Error): Sails & Promise -} - -interface Helper { - passwords: { - hashPassword: (password: string, strength?: number) => Promise - checkPassword: ( - passwordAttempt: string, - hashedPassword: string - ) => Promise - } - strings: { - random: (style?: 'url-friendly' | 'alphanumeric') => string - uuid: () => string - } - mail: { - send: { - with: (params: EmailParams) => Promise - } - } - getUserInitials: (fullName: string) => string - capitalize: (inputString: string) => string -} -interface EmailParams { - mailer?: string - to: string - cc?: string | array - bcc?: string | array - subject?: string - template?: string - templateData?: object - attachments?: EmailAttachment[] -} -interface EmailAttachment { - filename: string - content?: string | Buffer | NodeJS.ReadableStream - path?: string - href?: string - httpHeaders?: { [key: string]: string } - contentType?: string - contentDisposition?: string - cid?: string - encoding?: string - headers?: { [key: string]: string } - raw?: string -} - -interface Hook { - inertia: Inertia -} -interface LogMethod { - (...args: any[]): void -} - -interface LogObject { - info: LogMethod - warn: LogMethod - error: LogMethod - debug: LogMethod - silly: LogMethod - verbose: LogMethod -} - -interface Config { - smtp: { - transport?: 'smtp' - host?: string - port?: number - encryption?: 'tls' | 'ssl' - username: string - password: string - } - google: { - clientId: string - clientSecret: string - redirect: string - } - mail: { - default: string - mailers: { - log: object - smtp: { - transport: 'smtp' - host: string - port: number - encryption: 'tls' | 'ssl' - username?: string - password?: string - } - } - from: { - name: string - address: string - } - } - custom: Custom -} - -interface Custom { - baseUrl: string - passwordResetTokenTTL: number - emailProofTokenTTL: number - rememberMeCookieMaxAge: number - internalEmail: string - verifyEmail: boolean -} -interface Wish { - provider: (provider: string) => Wish - redirect: () => string - user: (code: string) => GoogleUser | GitHubUser -} -interface Inertia { - share: (key: string, value?: any) => void - render: ( - component: string, - props?: Record, - viewData?: Record - ) => any - flushShared: (key?: string) => void - viewData: (key: string, value: any) => void - getViewData: (key: string) => any - setRootView: (newRootView: string) => void - getRootView: () => string - location: (path: string) => void -} - -interface GoogleUser { - id: string - email: string - verified_email: boolean - name: string - given_name: string - family_name: string - picture: string - locale: string - accessToken: string - idToken: string -} - -interface LoggedInUser { - id: string - fullName: string - email: string - initials?: string - googleAvatarUrl?: string - value: LoggedInUser -} -declare const sails: Sails - -declare const User From 78e65231500065e9145aaffdd44ac96ac2328f18 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:44:27 +0100 Subject: [PATCH 14/81] feat(mellow-react): update jsconfig --- templates/mellow-react/jsconfig.json | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/templates/mellow-react/jsconfig.json b/templates/mellow-react/jsconfig.json index 7747679..0c635be 100644 --- a/templates/mellow-react/jsconfig.json +++ b/templates/mellow-react/jsconfig.json @@ -1,6 +1,6 @@ { - "include": ["api/**/*", "assets/js/**/*", "types/index.d.ts"], - "exclude": [".tmp/**/*"], + "include": ["api/**/*", "assets/js/**/*"], + "compilerOptions": { "types": ["node"], "typeRoots": ["./types", "./node_modules/@types"], @@ -8,8 +8,7 @@ // silences wrong TS error, we don't compile, we only typecheck "outDir": "./irrelevant/unused", "allowJs": true, - "checkJs": true, - "jsx": "react-jsx", + "checkJs": false, "noImplicitThis": true, "noUnusedLocals": true, "noUnusedParameters": true, @@ -17,8 +16,7 @@ "noErrorTruncation": true, "baseUrl": ".", "paths": { - "@/*": ["assets/js/*"], - "~/*": ["assets/*"] + "@/*": ["assets/js/*"] } } } From af373ddd6cde66a426c787138cd455066fb2a2f8 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:44:39 +0100 Subject: [PATCH 15/81] feat(mellow-react): add progressbar color --- templates/mellow-react/assets/js/app.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/templates/mellow-react/assets/js/app.js b/templates/mellow-react/assets/js/app.js index e2d30bc..69706bb 100644 --- a/templates/mellow-react/assets/js/app.js +++ b/templates/mellow-react/assets/js/app.js @@ -6,5 +6,8 @@ createInertiaApp({ resolve: (name) => require(`./pages/${name}`), setup({ el, App, props }) { createRoot(el).render() + }, + progress: { + color: '#6C25C1' } }) From 428de2ff6f15ea03e3e08edcb17e5d4ad62acb66 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Wed, 18 Sep 2024 17:49:25 +0100 Subject: [PATCH 16/81] feat(mellow-react): add GoogleButton --- .../assets/js/components/Counter.jsx | 12 ------ .../assets/js/components/GoogleButton.jsx | 38 +++++++++++++++++++ 2 files changed, 38 insertions(+), 12 deletions(-) delete mode 100644 templates/mellow-react/assets/js/components/Counter.jsx create mode 100644 templates/mellow-react/assets/js/components/GoogleButton.jsx diff --git a/templates/mellow-react/assets/js/components/Counter.jsx b/templates/mellow-react/assets/js/components/Counter.jsx deleted file mode 100644 index b0fcd51..0000000 --- a/templates/mellow-react/assets/js/components/Counter.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import { useState } from 'react' -export default function Counter(props) { - const [count, setCount] = useState(0) - return ( - - ) -} diff --git a/templates/mellow-react/assets/js/components/GoogleButton.jsx b/templates/mellow-react/assets/js/components/GoogleButton.jsx new file mode 100644 index 0000000..19c04c0 --- /dev/null +++ b/templates/mellow-react/assets/js/components/GoogleButton.jsx @@ -0,0 +1,38 @@ +export default function GoogleButton() { + return ( + + + + + + + + + + + + + + Continue with Google + + ) +} From e4236ff985dd31cbe9ec9491e1023040d2942603 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Thu, 19 Sep 2024 02:07:23 +0100 Subject: [PATCH 17/81] feat(mellow-react): add homepage --- .../mellow-react/assets/css/homepage.css | 25 +++ .../assets/js/layouts/AppLayout.jsx | 100 +++++++++ .../mellow-react/assets/js/pages/index.jsx | 189 ++++++++++++++---- 3 files changed, 279 insertions(+), 35 deletions(-) create mode 100644 templates/mellow-react/assets/css/homepage.css create mode 100644 templates/mellow-react/assets/js/layouts/AppLayout.jsx diff --git a/templates/mellow-react/assets/css/homepage.css b/templates/mellow-react/assets/css/homepage.css new file mode 100644 index 0000000..1684262 --- /dev/null +++ b/templates/mellow-react/assets/css/homepage.css @@ -0,0 +1,25 @@ +details > summary { + list-style: none; +} +summary::-webkit-details-marker { + display: none; +} + +summary::after { + position: absolute; + right: 0px; + content: ' +'; +} +@keyframes details-show { + from { + opacity: 0; + transform: var(--details-translate, translateY(-0.5em)); + } +} + +details[open] > *:not(summary) { + animation: details-show 150ms ease-in-out; +} +details[open] summary:after { + content: ' −'; +} diff --git a/templates/mellow-react/assets/js/layouts/AppLayout.jsx b/templates/mellow-react/assets/js/layouts/AppLayout.jsx new file mode 100644 index 0000000..863cbb8 --- /dev/null +++ b/templates/mellow-react/assets/js/layouts/AppLayout.jsx @@ -0,0 +1,100 @@ +import { Link, usePage } from '@inertiajs/react' + +export default function AppLayout({ children }) { + const { loggedInUser } = usePage().props + + return ( +
+
+ +
+ +
{children}
+ +
+ + + + + + +

+ Made with love 💚 by + + Kelvin Omereshone + + in Nigeria 🇳🇬 and contributors all over the world 🌍 +

+
+
+ ) +} diff --git a/templates/mellow-react/assets/js/pages/index.jsx b/templates/mellow-react/assets/js/pages/index.jsx index 788c907..4a349f4 100644 --- a/templates/mellow-react/assets/js/pages/index.jsx +++ b/templates/mellow-react/assets/js/pages/index.jsx @@ -1,57 +1,176 @@ import Counter from '@/components/Counter' -import { Link } from '@inertiajs/react' +import { Link, Head } from '@inertiajs/react' +import AppLayout from '@/layouts/AppLayout' +import '~/css/homepage.css' -export default function Index({ name }) { +Index.layout = (page) => +export default function Index() { return ( -
-

- A brand new - {name} app - on Sails -

- + <> + +
+

+ Simplify Authentication, Focus on Shipping 🚀 +

+

+ Mellow handles user management, so you can build what matters. +

+
+
+ +
+ +
+
+

+ Productivity +

+

+ Let Mellow be the starting point of your next SPA. With + authentication and profile management taken care of, you can focus + on your core business logic +

+
+
+

+ Seamless authentication +

+

+ Experience effortless user authentication and simplified profile + management with Mellow, creating a seamless user journey for + developers and users. +

+
+
+

+ Profile management +

+

+ Let users manage their profiles with ease using Mellow. It offers a + simple and secure way to update their name, email address, and + password. +

+
+
+
+

+ Frequently asked questions +

+
+
+ What is Mellow? +

+ Mellow is the default starter template for The Boring JavaScript + Stack. It provides authentication and profile management out of + the box. +

+
+
+ + How do I get started with Mellow? + +

+ Chances are you already have scaffolded a new project using Mellow + if you are seeing this. Just open up the project in your editor + and start coding away. +

+
+
+ + Can I customize Mellow? + +

+ For sure! All the code in Mellow is open source so you can copy + and paste and customize to your heart's content. +

+
+
+
+ ) } From 7fd082383782872c5a266e1bf5c4fb03d9e4b102 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Thu, 19 Sep 2024 02:08:04 +0100 Subject: [PATCH 18/81] feat(mellow-react): setup tailwindcss --- templates/mellow-react/package-lock.json | 44 +++++++--------- templates/mellow-react/package.json | 4 +- templates/mellow-react/tailwind.config.js | 63 ++++++++++++++++++++++- 3 files changed, 83 insertions(+), 28 deletions(-) diff --git a/templates/mellow-react/package-lock.json b/templates/mellow-react/package-lock.json index 02eb4b2..93e599e 100644 --- a/templates/mellow-react/package-lock.json +++ b/templates/mellow-react/package-lock.json @@ -26,8 +26,8 @@ "@types/node": "^22.5.5", "create-sails-generator": "^0.0.3", "playwright": "^1.47.1", - "prettier": "^3.3.3", - "prettier-plugin-tailwindcss": "^0.6.6", + "prettier": "^2.8.8", + "prettier-plugin-tailwindcss": "^0.4.1", "sails-hook-shipwright": "^0.3.0", "sails.io.js": "^1.2.1", "socket.io-client": "^4.7.5", @@ -3228,48 +3228,47 @@ "dev": true }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { - "prettier": "bin/prettier.cjs" + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=14" + "node": ">=10.13.0" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-plugin-tailwindcss": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.6.tgz", - "integrity": "sha512-OPva5S7WAsPLEsOuOWXATi13QrCKACCiIonFgIR6V4lYv4QLp++UXVhZSzRbZxXGimkQtQT86CC6fQqTOybGng==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.4.1.tgz", + "integrity": "sha512-hwn2EiJmv8M+AW4YDkbjJ6HlZCTzLyz1QlySn9sMuKV/Px0fjwldlB7tol8GzdgqtkdPtzT3iJ4UzdnYXP25Ag==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.21.3" + "node": ">=12.17.0" }, "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", + "@shufo/prettier-plugin-blade": "*", "@trivago/prettier-plugin-sort-imports": "*", - "@zackad/prettier-plugin-twig-melody": "*", - "prettier": "^3.0", + "prettier": "^2.2 || ^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-import-sort": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", - "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", - "prettier-plugin-sort-imports": "*", "prettier-plugin-style-order": "*", - "prettier-plugin-svelte": "*" + "prettier-plugin-svelte": "*", + "prettier-plugin-twig-melody": "*" }, "peerDependenciesMeta": { "@ianvs/prettier-plugin-sort-imports": { @@ -3281,10 +3280,10 @@ "@shopify/prettier-plugin-liquid": { "optional": true }, - "@trivago/prettier-plugin-sort-imports": { + "@shufo/prettier-plugin-blade": { "optional": true }, - "@zackad/prettier-plugin-twig-melody": { + "@trivago/prettier-plugin-sort-imports": { "optional": true }, "prettier-plugin-astro": { @@ -3302,23 +3301,20 @@ "prettier-plugin-marko": { "optional": true }, - "prettier-plugin-multiline-arrays": { - "optional": true - }, "prettier-plugin-organize-attributes": { "optional": true }, "prettier-plugin-organize-imports": { "optional": true }, - "prettier-plugin-sort-imports": { - "optional": true - }, "prettier-plugin-style-order": { "optional": true }, "prettier-plugin-svelte": { "optional": true + }, + "prettier-plugin-twig-melody": { + "optional": true } } }, diff --git a/templates/mellow-react/package.json b/templates/mellow-react/package.json index 6b2aec1..9f273e1 100644 --- a/templates/mellow-react/package.json +++ b/templates/mellow-react/package.json @@ -23,8 +23,8 @@ "@types/node": "^22.5.5", "create-sails-generator": "^0.0.3", "playwright": "^1.47.1", - "prettier": "^3.3.3", - "prettier-plugin-tailwindcss": "^0.6.6", + "prettier": "^2.8.8", + "prettier-plugin-tailwindcss": "^0.4.1", "sails-hook-shipwright": "^0.3.0", "sails.io.js": "^1.2.1", "socket.io-client": "^4.7.5", diff --git a/templates/mellow-react/tailwind.config.js b/templates/mellow-react/tailwind.config.js index cc0c401..1b56711 100644 --- a/templates/mellow-react/tailwind.config.js +++ b/templates/mellow-react/tailwind.config.js @@ -1,7 +1,66 @@ module.exports = { - content: ['./views/**/*.ejs', './assets/js/**/*.{js,jsx,ts,tsx}'], + content: ['./views/**/*.ejs', './assets/js/**/*.{js,vue,jsx,ts,tsx}'], theme: { - extend: {} + extend: { + colors: { + brand: { + DEFAULT: '#6C25C1', + 50: '#CCAEEF', + 100: '#C19DEC', + 200: '#AB7BE6', + 300: '#9659DF', + 400: '#8036D9', + 500: '#6C25C1', + 600: '#521C92', + 700: '#371363', + 800: '#1D0A34', + 900: '#030105', + 950: '#000000' + }, + green: { + DEFAULT: '#49D489', + 50: '#DEF7E9', + 100: '#CDF3DF', + 200: '#ACEBC9', + 300: '#8BE4B4', + 400: '#6ADC9E', + 500: '#49D489', + 600: '#2CB96D', + 700: '#218C52', + 800: '#165E37', + 900: '#0C311D', + 950: '#061A0F' + }, + gray: { + DEFAULT: '#878787', + 50: '#E3E3E3', + 100: '#D9D9D9', + 200: '#C4C4C4', + 300: '#B0B0B0', + 400: '#9B9B9B', + 500: '#878787', + 600: '#6B6B6B', + 700: '#4F4F4F', + 800: '#333333', + 900: '#171717', + 950: '#090909' + }, + black: { + DEFAULT: '#333333', + 50: '#8F8F8F', + 100: '#858585', + 200: '#707070', + 300: '#5C5C5C', + 400: '#474747', + 500: '#333333', + 600: '#171717', + 700: '#000000', + 800: '#000000', + 900: '#000000', + 950: '#000000' + } + } + } }, plugins: [] } From b2b7b9c0be86cb1927332808ef0bbc2153921957 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Thu, 19 Sep 2024 02:08:39 +0100 Subject: [PATCH 19/81] chore(mellow-vue): revert to earliest version of prettier --- templates/mellow-vue/package-lock.json | 46 ++++++++++++-------------- templates/mellow-vue/package.json | 4 +-- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/templates/mellow-vue/package-lock.json b/templates/mellow-vue/package-lock.json index 928cab5..ce625b1 100644 --- a/templates/mellow-vue/package-lock.json +++ b/templates/mellow-vue/package-lock.json @@ -28,8 +28,8 @@ "@types/node": "^22.5.5", "create-sails-generator": "^0.0.3", "playwright": "^1.47.1", - "prettier": "^3.3.3", - "prettier-plugin-tailwindcss": "^0.6.6", + "prettier": "^2.8.8", + "prettier-plugin-tailwindcss": "^0.4.1", "sails-hook-dev": "^1.3.0", "sails-hook-shipwright": "^0.3.0", "sails.io.js": "^1.2.1", @@ -4209,46 +4209,47 @@ "dev": true }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, + "license": "MIT", "bin": { - "prettier": "bin/prettier.cjs" + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=14" + "node": ">=10.13.0" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-plugin-tailwindcss": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.6.tgz", - "integrity": "sha512-OPva5S7WAsPLEsOuOWXATi13QrCKACCiIonFgIR6V4lYv4QLp++UXVhZSzRbZxXGimkQtQT86CC6fQqTOybGng==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.4.1.tgz", + "integrity": "sha512-hwn2EiJmv8M+AW4YDkbjJ6HlZCTzLyz1QlySn9sMuKV/Px0fjwldlB7tol8GzdgqtkdPtzT3iJ4UzdnYXP25Ag==", "dev": true, + "license": "MIT", "engines": { - "node": ">=14.21.3" + "node": ">=12.17.0" }, "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", + "@shufo/prettier-plugin-blade": "*", "@trivago/prettier-plugin-sort-imports": "*", - "@zackad/prettier-plugin-twig-melody": "*", - "prettier": "^3.0", + "prettier": "^2.2 || ^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-import-sort": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", - "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", - "prettier-plugin-sort-imports": "*", "prettier-plugin-style-order": "*", - "prettier-plugin-svelte": "*" + "prettier-plugin-svelte": "*", + "prettier-plugin-twig-melody": "*" }, "peerDependenciesMeta": { "@ianvs/prettier-plugin-sort-imports": { @@ -4260,10 +4261,10 @@ "@shopify/prettier-plugin-liquid": { "optional": true }, - "@trivago/prettier-plugin-sort-imports": { + "@shufo/prettier-plugin-blade": { "optional": true }, - "@zackad/prettier-plugin-twig-melody": { + "@trivago/prettier-plugin-sort-imports": { "optional": true }, "prettier-plugin-astro": { @@ -4281,23 +4282,20 @@ "prettier-plugin-marko": { "optional": true }, - "prettier-plugin-multiline-arrays": { - "optional": true - }, "prettier-plugin-organize-attributes": { "optional": true }, "prettier-plugin-organize-imports": { "optional": true }, - "prettier-plugin-sort-imports": { - "optional": true - }, "prettier-plugin-style-order": { "optional": true }, "prettier-plugin-svelte": { "optional": true + }, + "prettier-plugin-twig-melody": { + "optional": true } } }, diff --git a/templates/mellow-vue/package.json b/templates/mellow-vue/package.json index 17be59b..0c2d969 100644 --- a/templates/mellow-vue/package.json +++ b/templates/mellow-vue/package.json @@ -25,8 +25,8 @@ "@types/node": "^22.5.5", "create-sails-generator": "^0.0.3", "playwright": "^1.47.1", - "prettier": "^3.3.3", - "prettier-plugin-tailwindcss": "^0.6.6", + "prettier": "^2.8.8", + "prettier-plugin-tailwindcss": "^0.4.1", "sails-hook-dev": "^1.3.0", "sails-hook-shipwright": "^0.3.0", "sails.io.js": "^1.2.1", From dc667630609704ba6ba7e92577997ebdac331cae Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Thu, 19 Sep 2024 02:10:59 +0100 Subject: [PATCH 20/81] feat(mellow-react): add GoogleButton.jsx --- templates/mellow-react/assets/js/components/GoogleButton.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/mellow-react/assets/js/components/GoogleButton.jsx b/templates/mellow-react/assets/js/components/GoogleButton.jsx index 19c04c0..d2f9ff4 100644 --- a/templates/mellow-react/assets/js/components/GoogleButton.jsx +++ b/templates/mellow-react/assets/js/components/GoogleButton.jsx @@ -2,7 +2,7 @@ export default function GoogleButton() { return ( Date: Thu, 19 Sep 2024 02:12:10 +0100 Subject: [PATCH 21/81] chore(mellow-react): update prettier-config.js --- templates/mellow-react/prettier.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/mellow-react/prettier.config.js b/templates/mellow-react/prettier.config.js index e94a48b..6c8bc81 100644 --- a/templates/mellow-react/prettier.config.js +++ b/templates/mellow-react/prettier.config.js @@ -1,5 +1,6 @@ module.exports = { plugins: [require('prettier-plugin-tailwindcss')], semi: false, - singleQuote: true + singleQuote: true, + trailingComma: 'none' } From c67c691bb46786397fd3efb392ccc9a8f1e28f98 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Thu, 19 Sep 2024 02:12:41 +0100 Subject: [PATCH 22/81] chore(mellow-react): remove typedoc --- templates/mellow-react/api/controllers/auth/callback.js | 1 - 1 file changed, 1 deletion(-) diff --git a/templates/mellow-react/api/controllers/auth/callback.js b/templates/mellow-react/api/controllers/auth/callback.js index 928dc80..167022f 100644 --- a/templates/mellow-react/api/controllers/auth/callback.js +++ b/templates/mellow-react/api/controllers/auth/callback.js @@ -21,7 +21,6 @@ module.exports = { }, fn: async function ({ code, provider }, exits) { const req = this.req - /** @type GoogleUser */ const googleUser = await sails.wish.provider(provider).user(code) User.findOrCreate( From 2dee160c9d3919d11593ec6d732c59b22a76a6d2 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Thu, 19 Sep 2024 02:13:13 +0100 Subject: [PATCH 23/81] chore(mellow-vue): remove trailing space --- templates/mellow-vue/assets/js/pages/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/mellow-vue/assets/js/pages/index.vue b/templates/mellow-vue/assets/js/pages/index.vue index ea2efbf..f28513f 100644 --- a/templates/mellow-vue/assets/js/pages/index.vue +++ b/templates/mellow-vue/assets/js/pages/index.vue @@ -8,7 +8,7 @@ defineOptions({ +

Simplify Authentication, Focus on Shipping 🚀 From 07de4eb21e8b2f9d533be739b834152a59376731 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Thu, 19 Sep 2024 02:13:33 +0100 Subject: [PATCH 24/81] chore(mellow-vue): remove jsdoc --- templates/mellow-vue/api/controllers/auth/callback.js | 1 - 1 file changed, 1 deletion(-) diff --git a/templates/mellow-vue/api/controllers/auth/callback.js b/templates/mellow-vue/api/controllers/auth/callback.js index 928dc80..167022f 100644 --- a/templates/mellow-vue/api/controllers/auth/callback.js +++ b/templates/mellow-vue/api/controllers/auth/callback.js @@ -21,7 +21,6 @@ module.exports = { }, fn: async function ({ code, provider }, exits) { const req = this.req - /** @type GoogleUser */ const googleUser = await sails.wish.provider(provider).user(code) User.findOrCreate( From 948a5a131492dd7fe21e81e4dd07d0091cdcab5d Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Thu, 19 Sep 2024 02:13:55 +0100 Subject: [PATCH 25/81] chore(mellow-vue): prettier --- templates/mellow-vue/config/blueprints.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/mellow-vue/config/blueprints.js b/templates/mellow-vue/config/blueprints.js index c9c82b5..9966546 100644 --- a/templates/mellow-vue/config/blueprints.js +++ b/templates/mellow-vue/config/blueprints.js @@ -28,5 +28,5 @@ module.exports.blueprints = { * (These are enabled by default in development only.) * * * ***************************************************************************/ - shortcuts: false, + shortcuts: false } From e93399e682a71dd00909576791ae7729a289030f Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Thu, 19 Sep 2024 02:14:06 +0100 Subject: [PATCH 26/81] chore(mellow-react): prettier --- templates/mellow-react/config/blueprints.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/mellow-react/config/blueprints.js b/templates/mellow-react/config/blueprints.js index c9c82b5..9966546 100644 --- a/templates/mellow-react/config/blueprints.js +++ b/templates/mellow-react/config/blueprints.js @@ -28,5 +28,5 @@ module.exports.blueprints = { * (These are enabled by default in development only.) * * * ***************************************************************************/ - shortcuts: false, + shortcuts: false } From 31746e611a2d2acb5161c85d7ce9e2c38b195b9f Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Thu, 19 Sep 2024 02:14:29 +0100 Subject: [PATCH 27/81] chore(mellow-react): prettier --- .../mellow-react/assets/js/components/GoogleButton.jsx | 2 +- templates/mellow-react/assets/js/layouts/AppLayout.jsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/templates/mellow-react/assets/js/components/GoogleButton.jsx b/templates/mellow-react/assets/js/components/GoogleButton.jsx index d2f9ff4..19c04c0 100644 --- a/templates/mellow-react/assets/js/components/GoogleButton.jsx +++ b/templates/mellow-react/assets/js/components/GoogleButton.jsx @@ -2,7 +2,7 @@ export default function GoogleButton() { return ( +