From ba9ff0f1ca5f71b3453582bfd472d7bf2f30d7d4 Mon Sep 17 00:00:00 2001 From: Kelvin Oghenerhoro Omereshone Date: Mon, 23 Sep 2024 11:11:23 +0100 Subject: [PATCH] [feat] add svelte template (#115) * chore(mellow-vue): remove .vue in import * feat(mellow-svelte): update dependencies * feat(mellow-svelte): add routes * feat(mellow-svelte): add actions * feat(mellow-svelte): add custom config * feat(mellow-svelte): add policies * feat(mellow-svelte): setup mail * fix(mellow-vue): resolve double wrapping of Link * fix(mellow-vue): remove wrapping with ref * feat(mellow-svelte): add layout page * feat(mellow-svelte): add logic for url 'back' * fix(mellow-react): add Tailwind content config to match project * fix(mellow-vue): add Tailwind content config to match project * fix(mellow-svelte): add Tailwind content config to match project * feat(mellow-svelte): add policies * feat(mellow-react): setup wish * feat(mellow-svelte): setup wish * feat(mellow-svelte): add prettier plugin for svelte * feat(mellow-svelte): remove unneeded pages * feat(mellow-svelte): added homepage * feat(mellow-vue): remove unused Link * feat(mellow-react): remove unused Link * feat(mellow-react): remove duplicate * chore(mellow-react): format * feat(mellow-svelte): add email templates * chore(mellow-svelte): remove deprecated back * feat: update jsconfig * chore(mellow-svelte): remove types * feat(mellow-svelte): add GoogleButton component * feat(mellow-svelte): add button * feat(mellow-svelte): add InputBase * feat(mellow-svelte): add InputText * chore(mellow-vue): add extension in import * chore(mellow-react): add extension in imports * chore(mellow-vue): add missing extension * feat(mellow-svelte): add InputEmail * feat(mellow-svelte): add InputPassword * feat(mellow-svelte): add user model * feat(mellow-svelte): fix form inputs * fix(mellow-svelte): forward props * feat(mellow-vue): remove optional access * feat(mellow-svelte): add login page * feat(mellow-vue): add Vue as dependency * feat(mellow-svelte): add Svelte as dependency * feat(mellow-svelte): setup test * feat(mellow-vue): use testing environment * feat(mellow-svelte): add testing environment * feat: add columnName to global attributes * feat(mellow-svelte): use good ol function declaration * feat(mellow-svelte): add signup page * feat(mellow-svelte): add helpers * chore(mellow-svelte): install sails-hook-organics * feat(mellow-svelte): add custom hook * fix(mellow-svelte): fix wrong identifier * feat(mellow-svelte): add check-email page * feat(mellow-svelte): add success page * feat(mellow-svelte): add link-expired page * feat(mellow-svelte): fix typo * feat: change message on success * feat(mellow-svelte): add forgot-password page * feat(mellow-vue): fix grammar * feat(mellow-vue): remove unused code * feat(mellow-svelte): add reset-password page * feat(mellow-svelte): add dashboard page * feat(mellow-svelte): modify InputButton to have class merge * chore(mellow-svelte): remove ts comments * feat(mellow-svelte): modify component to forward on click event to parent * feat(mellow-svelte): add profile page --- .../api/controllers/auth/view-success.js | 2 +- .../assets/js/pages/auth/forgot-password.jsx | 5 +- .../assets/js/pages/auth/link-expired.jsx | 1 + .../assets/js/pages/auth/login.jsx | 8 +- .../assets/js/pages/auth/reset-password.jsx | 1 + .../assets/js/pages/auth/signup.jsx | 10 +- .../assets/js/pages/auth/success.jsx | 2 +- .../assets/js/pages/dashboard/index.jsx | 2 +- .../assets/js/pages/dashboard/profile.jsx | 10 +- .../mellow-react/assets/js/pages/index.jsx | 6 +- templates/mellow-react/config/models.js | 12 +- templates/mellow-react/jsconfig.json | 5 +- templates/mellow-react/package-lock.json | 68 +- templates/mellow-react/package.json | 4 +- templates/mellow-react/tailwind.config.js | 2 +- .../api/controllers/auth/callback.js | 91 + .../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 + .../mellow-svelte/api/helpers/capitalize.js | 26 + .../api/helpers/get-user-initials.js | 30 + .../mellow-svelte/api/hooks/custom/index.js | 46 + templates/mellow-svelte/api/models/User.js | 140 + .../api/policies/is-authenticated.js | 4 + .../mellow-svelte/api/policies/is-guest.js | 6 + .../mellow-svelte/api/responses/badRequest.js | 2 +- .../mellow-svelte/api/responses/inertia.js | 1 - .../api/responses/inertiaRedirect.js | 6 +- templates/mellow-svelte/assets/js/app.js | 1 - .../assets/js/components/Counter.svelte | 10 - .../assets/js/components/GoogleButton.svelte | 27 + .../assets/js/components/InputBase.svelte | 26 + .../assets/js/components/InputButton.svelte | 37 + .../assets/js/components/InputEmail.svelte | 25 + .../assets/js/components/InputPassword.svelte | 99 + .../assets/js/components/InputText.svelte | 36 + .../assets/js/layouts/AppLayout.svelte | 99 + .../assets/js/pages/auth/check-email.svelte | 80 + .../js/pages/auth/forgot-password.svelte | 98 + .../assets/js/pages/auth/link-expired.svelte | 72 + .../assets/js/pages/auth/login.svelte | 98 + .../js/pages/auth/reset-password.svelte | 181 + .../assets/js/pages/auth/signup.svelte | 173 + .../assets/js/pages/auth/success.svelte | 58 + .../assets/js/pages/dashboard/index.svelte | 31 + .../assets/js/pages/dashboard/profile.svelte | 157 + .../assets/js/pages/example.svelte | 11 - .../assets/js/pages/index.svelte | 239 +- templates/mellow-svelte/config/custom.js | 33 + .../config/env/testing.js} | 0 templates/mellow-svelte/config/mail.js | 60 + templates/mellow-svelte/config/models.js | 12 +- templates/mellow-svelte/config/policies.js | 5 +- templates/mellow-svelte/config/routes.js | 38 +- templates/mellow-svelte/jsconfig.json | 9 +- templates/mellow-svelte/package-lock.json | 3134 +++++++++++------ templates/mellow-svelte/package.json | 49 +- templates/mellow-svelte/prettier.config.js | 9 +- templates/mellow-svelte/tailwind.config.js | 63 +- .../mellow-svelte/tests/unit/helpers.test.js | 83 + templates/mellow-svelte/types/index.d.ts | 173 - .../views/emails/email-reset-password.ejs | 33 + .../views/emails/email-verify-account.ejs | 9 + .../views/emails/email-verify-new-email.ejs | 57 + .../views/layouts/layout-email.ejs | 12 + .../api/controllers/auth/view-success.js | 2 +- .../assets/js/components/InputEmail.vue | 2 +- .../assets/js/components/InputText.vue | 2 +- .../assets/js/layouts/AppLayout.vue | 35 +- .../assets/js/pages/auth/forgot-password.vue | 4 +- .../mellow-vue/assets/js/pages/auth/login.vue | 10 +- .../assets/js/pages/auth/reset-password.vue | 9 +- .../assets/js/pages/auth/signup.vue | 10 +- .../assets/js/pages/auth/success.vue | 2 +- .../assets/js/pages/dashboard/profile.vue | 8 +- .../mellow-vue/assets/js/pages/index.vue | 2 +- templates/mellow-vue/config/env/testing.js | 27 + templates/mellow-vue/config/models.js | 12 +- templates/mellow-vue/jsconfig.json | 5 +- templates/mellow-vue/package-lock.json | 288 +- templates/mellow-vue/package.json | 3 +- templates/mellow-vue/tailwind.config.js | 2 +- .../mellow-vue/tests/unit/helpers.test.js | 4 +- 101 files changed, 5532 insertions(+), 1537 deletions(-) create mode 100644 templates/mellow-svelte/api/controllers/auth/callback.js create mode 100644 templates/mellow-svelte/api/controllers/auth/forgot-password.js create mode 100644 templates/mellow-svelte/api/controllers/auth/login.js create mode 100644 templates/mellow-svelte/api/controllers/auth/redirect.js create mode 100644 templates/mellow-svelte/api/controllers/auth/resend-link.js create mode 100644 templates/mellow-svelte/api/controllers/auth/reset-password.js create mode 100644 templates/mellow-svelte/api/controllers/auth/signup.js create mode 100644 templates/mellow-svelte/api/controllers/auth/verify-email.js create mode 100644 templates/mellow-svelte/api/controllers/auth/view-check-email.js create mode 100644 templates/mellow-svelte/api/controllers/auth/view-forgot-password.js create mode 100644 templates/mellow-svelte/api/controllers/auth/view-link-expired.js create mode 100644 templates/mellow-svelte/api/controllers/auth/view-login.js create mode 100644 templates/mellow-svelte/api/controllers/auth/view-reset-password.js create mode 100644 templates/mellow-svelte/api/controllers/auth/view-signup.js create mode 100644 templates/mellow-svelte/api/controllers/auth/view-success.js create mode 100644 templates/mellow-svelte/api/controllers/dashboard/view-dashboard.js delete mode 100644 templates/mellow-svelte/api/controllers/example/index.js rename templates/mellow-svelte/api/controllers/home/{index.js => view-home.js} (68%) create mode 100644 templates/mellow-svelte/api/controllers/user/delete-profile.js create mode 100644 templates/mellow-svelte/api/controllers/user/logout.js create mode 100644 templates/mellow-svelte/api/controllers/user/update-profile.js create mode 100644 templates/mellow-svelte/api/controllers/user/view-profile.js create mode 100644 templates/mellow-svelte/api/helpers/capitalize.js create mode 100644 templates/mellow-svelte/api/helpers/get-user-initials.js create mode 100644 templates/mellow-svelte/api/hooks/custom/index.js create mode 100644 templates/mellow-svelte/api/models/User.js create mode 100644 templates/mellow-svelte/api/policies/is-authenticated.js create mode 100644 templates/mellow-svelte/api/policies/is-guest.js delete mode 100644 templates/mellow-svelte/assets/js/components/Counter.svelte create mode 100644 templates/mellow-svelte/assets/js/components/GoogleButton.svelte create mode 100644 templates/mellow-svelte/assets/js/components/InputBase.svelte create mode 100644 templates/mellow-svelte/assets/js/components/InputButton.svelte create mode 100644 templates/mellow-svelte/assets/js/components/InputEmail.svelte create mode 100644 templates/mellow-svelte/assets/js/components/InputPassword.svelte create mode 100644 templates/mellow-svelte/assets/js/components/InputText.svelte create mode 100644 templates/mellow-svelte/assets/js/layouts/AppLayout.svelte create mode 100644 templates/mellow-svelte/assets/js/pages/auth/check-email.svelte create mode 100644 templates/mellow-svelte/assets/js/pages/auth/forgot-password.svelte create mode 100644 templates/mellow-svelte/assets/js/pages/auth/link-expired.svelte create mode 100644 templates/mellow-svelte/assets/js/pages/auth/login.svelte create mode 100644 templates/mellow-svelte/assets/js/pages/auth/reset-password.svelte create mode 100644 templates/mellow-svelte/assets/js/pages/auth/signup.svelte create mode 100644 templates/mellow-svelte/assets/js/pages/auth/success.svelte create mode 100644 templates/mellow-svelte/assets/js/pages/dashboard/index.svelte create mode 100644 templates/mellow-svelte/assets/js/pages/dashboard/profile.svelte delete mode 100644 templates/mellow-svelte/assets/js/pages/example.svelte rename templates/{mellow-vue/config/env/test.js => mellow-svelte/config/env/testing.js} (100%) create mode 100644 templates/mellow-svelte/config/mail.js create mode 100644 templates/mellow-svelte/tests/unit/helpers.test.js delete mode 100644 templates/mellow-svelte/types/index.d.ts create mode 100644 templates/mellow-svelte/views/emails/email-reset-password.ejs create mode 100644 templates/mellow-svelte/views/emails/email-verify-account.ejs create mode 100644 templates/mellow-svelte/views/emails/email-verify-new-email.ejs create mode 100644 templates/mellow-svelte/views/layouts/layout-email.ejs create mode 100644 templates/mellow-vue/config/env/testing.js diff --git a/templates/mellow-react/api/controllers/auth/view-success.js b/templates/mellow-react/api/controllers/auth/view-success.js index eec6ef54..da6dc7dd 100644 --- a/templates/mellow-react/api/controllers/auth/view-success.js +++ b/templates/mellow-react/api/controllers/auth/view-success.js @@ -23,7 +23,7 @@ module.exports = { pageHeading = 'Email verification successful' break case 'reset-password': - message = 'Password has been successful reset' + message = 'Password has been successfully reset' pageHeading = 'Password reset successful' } return { diff --git a/templates/mellow-react/assets/js/pages/auth/forgot-password.jsx b/templates/mellow-react/assets/js/pages/auth/forgot-password.jsx index 27c0aa5f..c942b175 100644 --- a/templates/mellow-react/assets/js/pages/auth/forgot-password.jsx +++ b/templates/mellow-react/assets/js/pages/auth/forgot-password.jsx @@ -1,7 +1,8 @@ import { Link, Head, useForm } from '@inertiajs/react' -import InputEmail from '@/components/InputEmail' -import InputButton from '@/components/InputButton' +import InputEmail from '@/components/InputEmail.jsx' +import InputButton from '@/components/InputButton.jsx' import { useMemo } from 'react' + export default function ForgotPassword() { const { data, setData, ...form } = useForm({ email: '' diff --git a/templates/mellow-react/assets/js/pages/auth/link-expired.jsx b/templates/mellow-react/assets/js/pages/auth/link-expired.jsx index 28c60bdd..c0d4456e 100644 --- a/templates/mellow-react/assets/js/pages/auth/link-expired.jsx +++ b/templates/mellow-react/assets/js/pages/auth/link-expired.jsx @@ -1,4 +1,5 @@ import { Link, Head } from '@inertiajs/react' + export default function LinkExpired() { return ( <> diff --git a/templates/mellow-react/assets/js/pages/auth/login.jsx b/templates/mellow-react/assets/js/pages/auth/login.jsx index ec386ddd..2ed80e09 100644 --- a/templates/mellow-react/assets/js/pages/auth/login.jsx +++ b/templates/mellow-react/assets/js/pages/auth/login.jsx @@ -1,10 +1,10 @@ import { Link, Head, useForm } from '@inertiajs/react' import { useState, useMemo } from 'react' -import InputEmail from '@/components/InputEmail' -import InputPassword from '@/components/InputPassword' -import InputButton from '@/components/InputButton' -import GoogleButton from '@/components/GoogleButton' +import InputEmail from '@/components/InputEmail.jsx' +import InputPassword from '@/components/InputPassword.jsx' +import InputButton from '@/components/InputButton.jsx' +import GoogleButton from '@/components/GoogleButton.jsx' export default function Login() { const { data, setData, ...form } = useForm({ diff --git a/templates/mellow-react/assets/js/pages/auth/reset-password.jsx b/templates/mellow-react/assets/js/pages/auth/reset-password.jsx index 12f19691..a0d4100d 100644 --- a/templates/mellow-react/assets/js/pages/auth/reset-password.jsx +++ b/templates/mellow-react/assets/js/pages/auth/reset-password.jsx @@ -2,6 +2,7 @@ import { Link, Head, useForm } from '@inertiajs/react' import { useMemo } from 'react' import InputPassword from '@/components/InputPassword' import InputButton from '@/components/InputButton' + export default function ResetPassword({ token }) { const { data, setData, ...form } = useForm({ token, diff --git a/templates/mellow-react/assets/js/pages/auth/signup.jsx b/templates/mellow-react/assets/js/pages/auth/signup.jsx index 728d4817..a6e2ae71 100644 --- a/templates/mellow-react/assets/js/pages/auth/signup.jsx +++ b/templates/mellow-react/assets/js/pages/auth/signup.jsx @@ -1,11 +1,11 @@ import { Link, Head, useForm } from '@inertiajs/react' import { useMemo } from 'react' -import InputText from '@/components/InputText' -import InputEmail from '@/components/InputEmail' -import InputPassword from '@/components/InputPassword' -import InputButton from '@/components/InputButton' -import GoogleButton from '@/components/GoogleButton' +import InputText from '@/components/InputText.jsx' +import InputEmail from '@/components/InputEmail.jsx' +import InputPassword from '@/components/InputPassword.jsx' +import InputButton from '@/components/InputButton.jsx' +import GoogleButton from '@/components/GoogleButton.jsx' export default function Signup() { const { data, setData, ...form } = useForm({ diff --git a/templates/mellow-react/assets/js/pages/auth/success.jsx b/templates/mellow-react/assets/js/pages/auth/success.jsx index 83091d56..1cf2aa13 100644 --- a/templates/mellow-react/assets/js/pages/auth/success.jsx +++ b/templates/mellow-react/assets/js/pages/auth/success.jsx @@ -35,7 +35,7 @@ export default function Success({ pageTitle, pageHeading, message }) {

{pageHeading}

- {message}. Click continue to go to the homepage + {message}. Click continue to go to your dashboard.

export default function Dashboard() { diff --git a/templates/mellow-react/assets/js/pages/dashboard/profile.jsx b/templates/mellow-react/assets/js/pages/dashboard/profile.jsx index 5855e7d6..b352dcbd 100644 --- a/templates/mellow-react/assets/js/pages/dashboard/profile.jsx +++ b/templates/mellow-react/assets/js/pages/dashboard/profile.jsx @@ -1,11 +1,11 @@ import { Link, Head, usePage, useForm, router } from '@inertiajs/react' -import AppLayout from '@/layouts/AppLayout' +import AppLayout from '@/layouts/AppLayout.jsx' -import InputText from '@/components/InputText' -import InputPassword from '@/components/InputPassword' -import InputEmail from '@/components/InputEmail' -import InputButton from '@/components/InputButton' +import InputText from '@/components/InputText.jsx' +import InputPassword from '@/components/InputPassword.jsx' +import InputEmail from '@/components/InputEmail.jsx' +import InputButton from '@/components/InputButton.jsx' Profile.layout = (page) => export default function Profile() { diff --git a/templates/mellow-react/assets/js/pages/index.jsx b/templates/mellow-react/assets/js/pages/index.jsx index 913d6d72..e8c0a2a5 100644 --- a/templates/mellow-react/assets/js/pages/index.jsx +++ b/templates/mellow-react/assets/js/pages/index.jsx @@ -1,9 +1,7 @@ -import { Link, Head } from '@inertiajs/react' -import AppLayout from '@/layouts/AppLayout' +import { Head } from '@inertiajs/react' +import AppLayout from '@/layouts/AppLayout.jsx' import '~/css/homepage.css' -Index.layout = (page) => - Index.layout = (page) => export default function Index() { return ( diff --git a/templates/mellow-react/config/models.js b/templates/mellow-react/config/models.js index 96f6be96..1e736ce5 100644 --- a/templates/mellow-react/config/models.js +++ b/templates/mellow-react/config/models.js @@ -65,8 +65,16 @@ module.exports.models = { ***************************************************************************/ attributes: { - createdAt: { type: 'number', autoCreatedAt: true }, - updatedAt: { type: 'number', autoUpdatedAt: true }, + createdAt: { + type: 'number', + autoCreatedAt: true, + columnName: 'created_at' + }, + updatedAt: { + type: 'number', + autoUpdatedAt: true, + columnName: 'updated_at' + }, id: { type: 'number', autoIncrement: true } //-------------------------------------------------------------------------- // /\ Using MongoDB? diff --git a/templates/mellow-react/jsconfig.json b/templates/mellow-react/jsconfig.json index 0c635be7..c73d7c20 100644 --- a/templates/mellow-react/jsconfig.json +++ b/templates/mellow-react/jsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "types": ["node"], - "typeRoots": ["./types", "./node_modules/@types"], + "typeRoots": ["./node_modules/@types"], "lib": ["es2016"], // silences wrong TS error, we don't compile, we only typecheck "outDir": "./irrelevant/unused", @@ -16,7 +16,8 @@ "noErrorTruncation": true, "baseUrl": ".", "paths": { - "@/*": ["assets/js/*"] + "@/*": ["assets/js/*"], + "~/*": ["assets/*"] } } } diff --git a/templates/mellow-react/package-lock.json b/templates/mellow-react/package-lock.json index c3a97120..10747f57 100644 --- a/templates/mellow-react/package-lock.json +++ b/templates/mellow-react/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.0", "dependencies": { "@inertiajs/react": "^1.2.0", + "@sailscasts/sails-hook-node-fetch": "^0.0.3", "@sailshq/connect-redis": "^6.1.3", "@sailshq/lodash": "^3.10.6", "@sailshq/socket.io-redis": "^6.1.2", @@ -20,7 +21,8 @@ "sails-hook-mail": "^0.1.0", "sails-hook-organics": "^3.0.0", "sails-hook-orm": "^4.0.3", - "sails-hook-sockets": "^3.0.1" + "sails-hook-sockets": "^3.0.1", + "sails-hook-wish": "^0.0.9" }, "devDependencies": { "@rsbuild/plugin-react": "^1.0.2", @@ -431,6 +433,18 @@ } } }, + "node_modules/@sailscasts/sails-hook-node-fetch": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@sailscasts/sails-hook-node-fetch/-/sails-hook-node-fetch-0.0.3.tgz", + "integrity": "sha512-VuMxcmrWSi6PeJrr8LGAK2PUziNaVf3xhy+m37zvcEZ6daFk/LLYze2iFj+BNaOKDNlYweKUy1NY8TADg0zDGw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@sailshq/binary-search-tree": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/@sailshq/binary-search-tree/-/binary-search-tree-0.2.7.tgz", @@ -3254,6 +3268,26 @@ "node": ">= 0.6" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -4341,6 +4375,16 @@ "node": ">= 0.6" } }, + "node_modules/sails-hook-wish": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/sails-hook-wish/-/sails-hook-wish-0.0.9.tgz", + "integrity": "sha512-0qs3grG78FAieDotwroO1hj5afWn+o5VS6owb6hUrca9caMm408tHGKvydXUWvtw2rARp/hBoTAxyKQ4o49aDw==", + "license": "MIT", + "peerDependencies": { + "@sailscasts/sails-hook-node-fetch": "^0.0.3", + "sails": "^1.5.2" + } + }, "node_modules/sails-stringfile": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/sails-stringfile/-/sails-stringfile-0.3.3.tgz", @@ -5056,6 +5100,12 @@ "node": ">=6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -5282,6 +5332,22 @@ "node": ">=0.6" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/whelk": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/whelk/-/whelk-6.0.1.tgz", diff --git a/templates/mellow-react/package.json b/templates/mellow-react/package.json index a40215e8..888cf35c 100644 --- a/templates/mellow-react/package.json +++ b/templates/mellow-react/package.json @@ -6,6 +6,7 @@ "keywords": [], "dependencies": { "@inertiajs/react": "^1.2.0", + "@sailscasts/sails-hook-node-fetch": "^0.0.3", "@sailshq/connect-redis": "^6.1.3", "@sailshq/lodash": "^3.10.6", "@sailshq/socket.io-redis": "^6.1.2", @@ -17,7 +18,8 @@ "sails-hook-mail": "^0.1.0", "sails-hook-organics": "^3.0.0", "sails-hook-orm": "^4.0.3", - "sails-hook-sockets": "^3.0.1" + "sails-hook-sockets": "^3.0.1", + "sails-hook-wish": "^0.0.9" }, "devDependencies": { "@rsbuild/plugin-react": "^1.0.2", diff --git a/templates/mellow-react/tailwind.config.js b/templates/mellow-react/tailwind.config.js index 1b56711f..cacd8ba0 100644 --- a/templates/mellow-react/tailwind.config.js +++ b/templates/mellow-react/tailwind.config.js @@ -1,5 +1,5 @@ module.exports = { - content: ['./views/**/*.ejs', './assets/js/**/*.{js,vue,jsx,ts,tsx}'], + content: ['./views/**/*.ejs', './assets/js/**/*.{js,ts,jsx,tsx}'], theme: { extend: { colors: { diff --git a/templates/mellow-svelte/api/controllers/auth/callback.js b/templates/mellow-svelte/api/controllers/auth/callback.js new file mode 100644 index 00000000..167022f9 --- /dev/null +++ b/templates/mellow-svelte/api/controllers/auth/callback.js @@ -0,0 +1,91 @@ +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 + 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-svelte/api/controllers/auth/forgot-password.js b/templates/mellow-svelte/api/controllers/auth/forgot-password.js new file mode 100644 index 00000000..5ba541dd --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/login.js b/templates/mellow-svelte/api/controllers/auth/login.js new file mode 100644 index 00000000..b088f7de --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/redirect.js b/templates/mellow-svelte/api/controllers/auth/redirect.js new file mode 100644 index 00000000..f8ce7637 --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/resend-link.js b/templates/mellow-svelte/api/controllers/auth/resend-link.js new file mode 100644 index 00000000..9e29ad72 --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/reset-password.js b/templates/mellow-svelte/api/controllers/auth/reset-password.js new file mode 100644 index 00000000..c66f9a9e --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/signup.js b/templates/mellow-svelte/api/controllers/auth/signup.js new file mode 100644 index 00000000..10d329f1 --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/verify-email.js b/templates/mellow-svelte/api/controllers/auth/verify-email.js new file mode 100644 index 00000000..c3a04e52 --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/view-check-email.js b/templates/mellow-svelte/api/controllers/auth/view-check-email.js new file mode 100644 index 00000000..025df714 --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/view-forgot-password.js b/templates/mellow-svelte/api/controllers/auth/view-forgot-password.js new file mode 100644 index 00000000..c56d150d --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/view-link-expired.js b/templates/mellow-svelte/api/controllers/auth/view-link-expired.js new file mode 100644 index 00000000..a82cf1e3 --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/view-login.js b/templates/mellow-svelte/api/controllers/auth/view-login.js new file mode 100644 index 00000000..55acb996 --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/view-reset-password.js b/templates/mellow-svelte/api/controllers/auth/view-reset-password.js new file mode 100644 index 00000000..2b565f4b --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/view-signup.js b/templates/mellow-svelte/api/controllers/auth/view-signup.js new file mode 100644 index 00000000..c63f6846 --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/auth/view-success.js b/templates/mellow-svelte/api/controllers/auth/view-success.js new file mode 100644 index 00000000..da6dc7dd --- /dev/null +++ b/templates/mellow-svelte/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 successfully reset' + pageHeading = 'Password reset successful' + } + return { + page: 'auth/success', + props: { + pageTitle, + pageHeading, + message + } + } + } +} diff --git a/templates/mellow-svelte/api/controllers/dashboard/view-dashboard.js b/templates/mellow-svelte/api/controllers/dashboard/view-dashboard.js new file mode 100644 index 00000000..c1420876 --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/example/index.js b/templates/mellow-svelte/api/controllers/example/index.js deleted file mode 100644 index 118af332..00000000 --- a/templates/mellow-svelte/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-svelte/api/controllers/home/index.js b/templates/mellow-svelte/api/controllers/home/view-home.js similarity index 68% rename from templates/mellow-svelte/api/controllers/home/index.js rename to templates/mellow-svelte/api/controllers/home/view-home.js index 5aee250e..93bdb1d5 100644 --- a/templates/mellow-svelte/api/controllers/home/index.js +++ b/templates/mellow-svelte/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-svelte/api/controllers/user/delete-profile.js b/templates/mellow-svelte/api/controllers/user/delete-profile.js new file mode 100644 index 00000000..51448e7d --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/user/logout.js b/templates/mellow-svelte/api/controllers/user/logout.js new file mode 100644 index 00000000..73dcb67e --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/controllers/user/update-profile.js b/templates/mellow-svelte/api/controllers/user/update-profile.js new file mode 100644 index 00000000..67aac57e --- /dev/null +++ b/templates/mellow-svelte/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.' + }, + confirmPassword: { + 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, + confirmPassword + }) { + 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 !== confirmPassword) { + 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-svelte/api/controllers/user/view-profile.js b/templates/mellow-svelte/api/controllers/user/view-profile.js new file mode 100644 index 00000000..8d1727ea --- /dev/null +++ b/templates/mellow-svelte/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: 'dashboard/profile' } + } +} diff --git a/templates/mellow-svelte/api/helpers/capitalize.js b/templates/mellow-svelte/api/helpers/capitalize.js new file mode 100644 index 00000000..db6b242b --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/helpers/get-user-initials.js b/templates/mellow-svelte/api/helpers/get-user-initials.js new file mode 100644 index 00000000..5e2886aa --- /dev/null +++ b/templates/mellow-svelte/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() + } +} diff --git a/templates/mellow-svelte/api/hooks/custom/index.js b/templates/mellow-svelte/api/hooks/custom/index.js new file mode 100644 index 00000000..f40662e6 --- /dev/null +++ b/templates/mellow-svelte/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() + } + } + } + } + } +} diff --git a/templates/mellow-svelte/api/models/User.js b/templates/mellow-svelte/api/models/User.js new file mode 100644 index 00000000..15b68476 --- /dev/null +++ b/templates/mellow-svelte/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() + } +} diff --git a/templates/mellow-svelte/api/policies/is-authenticated.js b/templates/mellow-svelte/api/policies/is-authenticated.js new file mode 100644 index 00000000..13bc1e87 --- /dev/null +++ b/templates/mellow-svelte/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-svelte/api/policies/is-guest.js b/templates/mellow-svelte/api/policies/is-guest.js new file mode 100644 index 00000000..a51ae58f --- /dev/null +++ b/templates/mellow-svelte/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('/') +} diff --git a/templates/mellow-svelte/api/responses/badRequest.js b/templates/mellow-svelte/api/responses/badRequest.js index 142fcd6b..0c9aa420 100644 --- a/templates/mellow-svelte/api/responses/badRequest.js +++ b/templates/mellow-svelte/api/responses/badRequest.js @@ -68,7 +68,7 @@ module.exports = function badRequest(optionalData) { } }) req.session.errors = errors - return res.redirect(303, 'back') + return res.redirect(303, req.get('Referrer') || '/') } } diff --git a/templates/mellow-svelte/api/responses/inertia.js b/templates/mellow-svelte/api/responses/inertia.js index f5142989..6ee7ad7e 100644 --- a/templates/mellow-svelte/api/responses/inertia.js +++ b/templates/mellow-svelte/api/responses/inertia.js @@ -1,4 +1,3 @@ -// @ts-nocheck const { encode } = require('querystring') module.exports = function inertia(data) { const req = this.req diff --git a/templates/mellow-svelte/api/responses/inertiaRedirect.js b/templates/mellow-svelte/api/responses/inertiaRedirect.js index dc44d1f2..7a57fd23 100644 --- a/templates/mellow-svelte/api/responses/inertiaRedirect.js +++ b/templates/mellow-svelte/api/responses/inertiaRedirect.js @@ -1,5 +1,3 @@ -// @ts-nocheck - const inertiaHeaders = { INERTIA: 'X-Inertia', LOCATION: 'X-Inertia-Location' @@ -9,6 +7,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) } diff --git a/templates/mellow-svelte/assets/js/app.js b/templates/mellow-svelte/assets/js/app.js index e137c4e5..aeba2d85 100644 --- a/templates/mellow-svelte/assets/js/app.js +++ b/templates/mellow-svelte/assets/js/app.js @@ -1,7 +1,6 @@ import { createInertiaApp } from '@inertiajs/svelte' import '~/css/main.css' -// @ts-ignore createInertiaApp({ resolve: (name) => require(`./pages/${name}`), setup({ el, App, props }) { diff --git a/templates/mellow-svelte/assets/js/components/Counter.svelte b/templates/mellow-svelte/assets/js/components/Counter.svelte deleted file mode 100644 index 631b01c1..00000000 --- a/templates/mellow-svelte/assets/js/components/Counter.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/templates/mellow-svelte/assets/js/components/GoogleButton.svelte b/templates/mellow-svelte/assets/js/components/GoogleButton.svelte new file mode 100644 index 00000000..89aacb69 --- /dev/null +++ b/templates/mellow-svelte/assets/js/components/GoogleButton.svelte @@ -0,0 +1,27 @@ + + + + + + + + + + Continue with Google + diff --git a/templates/mellow-svelte/assets/js/components/InputBase.svelte b/templates/mellow-svelte/assets/js/components/InputBase.svelte new file mode 100644 index 00000000..ea9d9cca --- /dev/null +++ b/templates/mellow-svelte/assets/js/components/InputBase.svelte @@ -0,0 +1,26 @@ + + + + + diff --git a/templates/mellow-svelte/assets/js/components/InputButton.svelte b/templates/mellow-svelte/assets/js/components/InputButton.svelte new file mode 100644 index 00000000..3ec3706c --- /dev/null +++ b/templates/mellow-svelte/assets/js/components/InputButton.svelte @@ -0,0 +1,37 @@ + + + diff --git a/templates/mellow-svelte/assets/js/components/InputEmail.svelte b/templates/mellow-svelte/assets/js/components/InputEmail.svelte new file mode 100644 index 00000000..45a65961 --- /dev/null +++ b/templates/mellow-svelte/assets/js/components/InputEmail.svelte @@ -0,0 +1,25 @@ + + + + + + + diff --git a/templates/mellow-svelte/assets/js/components/InputPassword.svelte b/templates/mellow-svelte/assets/js/components/InputPassword.svelte new file mode 100644 index 00000000..822912f8 --- /dev/null +++ b/templates/mellow-svelte/assets/js/components/InputPassword.svelte @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + diff --git a/templates/mellow-svelte/assets/js/components/InputText.svelte b/templates/mellow-svelte/assets/js/components/InputText.svelte new file mode 100644 index 00000000..ed2571d9 --- /dev/null +++ b/templates/mellow-svelte/assets/js/components/InputText.svelte @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + diff --git a/templates/mellow-svelte/assets/js/layouts/AppLayout.svelte b/templates/mellow-svelte/assets/js/layouts/AppLayout.svelte new file mode 100644 index 00000000..756ebd2c --- /dev/null +++ b/templates/mellow-svelte/assets/js/layouts/AppLayout.svelte @@ -0,0 +1,99 @@ + + +
+
+ +
+ +
+ +
+ +
+ + + + + + +

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

+
+
diff --git a/templates/mellow-svelte/assets/js/pages/auth/check-email.svelte b/templates/mellow-svelte/assets/js/pages/auth/check-email.svelte new file mode 100644 index 00000000..339307c3 --- /dev/null +++ b/templates/mellow-svelte/assets/js/pages/auth/check-email.svelte @@ -0,0 +1,80 @@ + + + + Check your email | Mellow + +
+
+
+ + + + + + + + + + + + +

Check your email

+ {#if message} +

+ {message} +

+ {/if} + + +

+ Didn't receive email? + Resend +

+
+
+
+ + + + + Back to sign up + +
+
diff --git a/templates/mellow-svelte/assets/js/pages/auth/forgot-password.svelte b/templates/mellow-svelte/assets/js/pages/auth/forgot-password.svelte new file mode 100644 index 00000000..4a48a705 --- /dev/null +++ b/templates/mellow-svelte/assets/js/pages/auth/forgot-password.svelte @@ -0,0 +1,98 @@ + + + + Forgot password | Mellow + +
+
+
+ + + + + + + + + + + + +

Forgot password?

+

+ We'll send reset instructions to your email +

+
+
+ + {#if $form.email} +

+ {$form.errors.email} +

+ {/if} +
+ Forgot password +
+
+
+ + + + + Back to login + +
+
diff --git a/templates/mellow-svelte/assets/js/pages/auth/link-expired.svelte b/templates/mellow-svelte/assets/js/pages/auth/link-expired.svelte new file mode 100644 index 00000000..3b8d6a2f --- /dev/null +++ b/templates/mellow-svelte/assets/js/pages/auth/link-expired.svelte @@ -0,0 +1,72 @@ + + + + Verification expired | Mellow + +
+
+
+ + + + + + + + + + + + +

Token expired

+

+ The token sent to your email has expired or been used. +

+ + Resend link + +
+
+
+ + + + + Back to sign up + +
+
diff --git a/templates/mellow-svelte/assets/js/pages/auth/login.svelte b/templates/mellow-svelte/assets/js/pages/auth/login.svelte new file mode 100644 index 00000000..407d237f --- /dev/null +++ b/templates/mellow-svelte/assets/js/pages/auth/login.svelte @@ -0,0 +1,98 @@ + + + + Login | Mellow + +
+
+
+ + + + + + +

Log into your account

+

Welcome back, please enter your details

+ {#if $form.errors.email || $form.errors.login} +

+ {$form.errors.login || $form.errors.email} +

+ {/if} +
+
+ + +
+ + + Forgot Password +
+ Login + + +
+
+

+ Don't have an account yet? + Sign up +

+
+
diff --git a/templates/mellow-svelte/assets/js/pages/auth/reset-password.svelte b/templates/mellow-svelte/assets/js/pages/auth/reset-password.svelte new file mode 100644 index 00000000..52d33ba9 --- /dev/null +++ b/templates/mellow-svelte/assets/js/pages/auth/reset-password.svelte @@ -0,0 +1,181 @@ + + + + Reset password | Mellow + +
+
+
+ + + + + + + + + + + + + +

Create a new password

+

Set a new password

+
+
+ + {#if $form.errors.password} +

+ {$form.errors.password} +

+ {/if} +
+ + {#if $form.errors.confirmPassword} +

+ {$form.errors.confirmPassword} +

+ {/if} +
+
    +
  • + + + + + + + + + + + At least 8 characters +
  • +
  • + + + + + + + + + + + At least 1 special characters +
  • +
+ Reset password + +
+
+
+ + + + + Back to login + +
+
diff --git a/templates/mellow-svelte/assets/js/pages/auth/signup.svelte b/templates/mellow-svelte/assets/js/pages/auth/signup.svelte new file mode 100644 index 00000000..2dc535c7 --- /dev/null +++ b/templates/mellow-svelte/assets/js/pages/auth/signup.svelte @@ -0,0 +1,173 @@ + + + + Sign up | Mellow + +
+
+
+ + + + + + + +

Create your account

+

+ Welcome! Please enter your details to sign up +

+
+ {#if $form.errors.signup} +

+ {$form.errors.signup} +

+ {/if} +
+ + {#if $form.errors.fullName} +

+ {$form.errors.fullName} +

+ {/if} +
+ + {#if $form.errors.email} +

+ {$form.errors.email} +

+ {/if} +
+ +

+ {$form.errors.password} +

+
+
    +
  • + + + + + + + + + + + At least 8 characters +
  • +
  • + + + + + + + + + + + At least 1 special characters +
  • +
+

+ You agree to our + Terms Of Use + and + Privacy Policy +

+ Sign up +
+ +
+
+

+ Already have an account? + Login +

+
+
diff --git a/templates/mellow-svelte/assets/js/pages/auth/success.svelte b/templates/mellow-svelte/assets/js/pages/auth/success.svelte new file mode 100644 index 00000000..08b45693 --- /dev/null +++ b/templates/mellow-svelte/assets/js/pages/auth/success.svelte @@ -0,0 +1,58 @@ + + + + {`${pageTitle} | Mellow`} + +
+
+
+ + + + + + + + + + + + +

{pageHeading}

+

+ {message}. Click continue to go to your dashboard. +

+ + Continue + +
+
+
diff --git a/templates/mellow-svelte/assets/js/pages/dashboard/index.svelte b/templates/mellow-svelte/assets/js/pages/dashboard/index.svelte new file mode 100644 index 00000000..9d51e984 --- /dev/null +++ b/templates/mellow-svelte/assets/js/pages/dashboard/index.svelte @@ -0,0 +1,31 @@ + + + + + + Dashboard | Mellow + +
+
+

+ Welcome, {loggedInUser.fullName} +

+

+ You are logged in as {loggedInUser.email} +

+ + Edit Profile + +
+
diff --git a/templates/mellow-svelte/assets/js/pages/dashboard/profile.svelte b/templates/mellow-svelte/assets/js/pages/dashboard/profile.svelte new file mode 100644 index 00000000..2318609d --- /dev/null +++ b/templates/mellow-svelte/assets/js/pages/dashboard/profile.svelte @@ -0,0 +1,157 @@ + + + + + + Profile | Mellow + +
+
+
+

Profile Information

+

+ Update your account's profile information and email address. +

+
+ +
+ + +
+ + Save changes + +
+ {#if $form.recentlySuccessful} +

Profile updated successfully!

+ {/if} + +
+ +
+
+

Change Password

+

+ Ensure your account is using a long, random password to stay secure. +

+
+ +
+ + + + {#if $form.errors.password} +

+ {$form.errors.password} +

+ {/if} +
+ +
+ + Update Password + +
+ {#if $form.recentlySuccessful} +

Profile updated successfully!

+ {/if} + +
+ +
+
+

Delete Account

+

+ Once your account is deleted, all of its resources and data will be + permanently deleted. Before deleting your account, please download any + data or information that you wish to retain. +

+
+ +
+ +
+ + Delete Account + +
+ +
+ + router.delete('/logout')} + class="w-full border-red-600 bg-red-600" + > + Logout + +
diff --git a/templates/mellow-svelte/assets/js/pages/example.svelte b/templates/mellow-svelte/assets/js/pages/example.svelte deleted file mode 100644 index a20e3c56..00000000 --- a/templates/mellow-svelte/assets/js/pages/example.svelte +++ /dev/null @@ -1,11 +0,0 @@ - - -
-

{quote}

- Back to Home -
diff --git a/templates/mellow-svelte/assets/js/pages/index.svelte b/templates/mellow-svelte/assets/js/pages/index.svelte index d9a54837..eb51a022 100644 --- a/templates/mellow-svelte/assets/js/pages/index.svelte +++ b/templates/mellow-svelte/assets/js/pages/index.svelte @@ -1,60 +1,197 @@ - -
-

- A brand new - {name} app on Sails + + Simplify Authentication, Focus on Shipping | Mellow + +
+

+ Simplify Authentication, Focus on Shipping 🚀

- - - - Go to example page - +

+ 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. +

+
+
+
+ + diff --git a/templates/mellow-svelte/config/custom.js b/templates/mellow-svelte/config/custom.js index 3bb077da..0a668dbf 100644 --- a/templates/mellow-svelte/config/custom.js +++ b/templates/mellow-svelte/config/custom.js @@ -9,6 +9,39 @@ */ module.exports.custom = { + /************************************************************************** + * * + * The base URL to use during development. * + * * + * • No trailing slash at the end * + * • `http://` or `https://` at the beginning. * + * * + * > This is for use in custom logic that builds URLs. * + * > It is particularly handy for building dynamic links in emails, * + * > but it can also be used for user-uploaded images, webhooks, etc. * + * * + **************************************************************************/ + baseUrl: 'http://localhost:1337', + + /************************************************************************** + * * + * The TTL (time-to-live) for various sorts of tokens before they expire. * + * * + **************************************************************************/ + passwordResetTokenTTL: 24 * 60 * 60 * 1000, // 24 hours + emailProofTokenTTL: 24 * 60 * 60 * 1000, // 24 hours + + /************************************************************************** + * * + * The extended length that browsers should retain the session cookie * + * if "Remember Me" was checked while logging in. * + * * + **************************************************************************/ + rememberMeCookieMaxAge: 30 * 24 * 60 * 60 * 1000, // 30 days + + // Email address for receiving support messages & other correspondences. + internalEmail: 'support+development@example.com' + /*************************************************************************** * * * Any other custom config this Sails app should use during development. * diff --git a/templates/mellow-vue/config/env/test.js b/templates/mellow-svelte/config/env/testing.js similarity index 100% rename from templates/mellow-vue/config/env/test.js rename to templates/mellow-svelte/config/env/testing.js diff --git a/templates/mellow-svelte/config/mail.js b/templates/mellow-svelte/config/mail.js new file mode 100644 index 00000000..3ebccaf9 --- /dev/null +++ b/templates/mellow-svelte/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' + } +} diff --git a/templates/mellow-svelte/config/models.js b/templates/mellow-svelte/config/models.js index 96f6be96..1e736ce5 100644 --- a/templates/mellow-svelte/config/models.js +++ b/templates/mellow-svelte/config/models.js @@ -65,8 +65,16 @@ module.exports.models = { ***************************************************************************/ attributes: { - createdAt: { type: 'number', autoCreatedAt: true }, - updatedAt: { type: 'number', autoUpdatedAt: true }, + createdAt: { + type: 'number', + autoCreatedAt: true, + columnName: 'created_at' + }, + updatedAt: { + type: 'number', + autoUpdatedAt: true, + columnName: 'updated_at' + }, id: { type: 'number', autoIncrement: true } //-------------------------------------------------------------------------- // /\ Using MongoDB? diff --git a/templates/mellow-svelte/config/policies.js b/templates/mellow-svelte/config/policies.js index 859e0fa6..f928148b 100644 --- a/templates/mellow-svelte/config/policies.js +++ b/templates/mellow-svelte/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' } diff --git a/templates/mellow-svelte/config/routes.js b/templates/mellow-svelte/config/routes.js index 4961d3e5..6293d9c3 100644 --- a/templates/mellow-svelte/config/routes.js +++ b/templates/mellow-svelte/config/routes.js @@ -17,7 +17,39 @@ module.exports.routes = { * is matched against Sails route blueprints. See `config/blueprints.js` * * 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' } diff --git a/templates/mellow-svelte/jsconfig.json b/templates/mellow-svelte/jsconfig.json index 40de32cc..c73d7c20 100644 --- a/templates/mellow-svelte/jsconfig.json +++ b/templates/mellow-svelte/jsconfig.json @@ -1,14 +1,14 @@ { - "include": ["api/**/*", "assets/js/**/*", "types/index.d.ts"], + "include": ["api/**/*", "assets/js/**/*"], "compilerOptions": { "types": ["node"], - "typeRoots": ["./types", "./node_modules/@types"], + "typeRoots": ["./node_modules/@types"], "lib": ["es2016"], // silences wrong TS error, we don't compile, we only typecheck "outDir": "./irrelevant/unused", "allowJs": true, - "checkJs": true, + "checkJs": false, "noImplicitThis": true, "noUnusedLocals": true, "noUnusedParameters": true, @@ -16,7 +16,8 @@ "noErrorTruncation": true, "baseUrl": ".", "paths": { - "@/*": ["assets/js/*"] + "@/*": ["assets/js/*"], + "~/*": ["assets/*"] } } } diff --git a/templates/mellow-svelte/package-lock.json b/templates/mellow-svelte/package-lock.json index ce15044d..1076c912 100644 --- a/templates/mellow-svelte/package-lock.json +++ b/templates/mellow-svelte/package-lock.json @@ -8,27 +8,35 @@ "name": "mellow-svelte", "version": "0.0.0", "dependencies": { - "@inertiajs/svelte": "^1.1.0", - "@sailshq/connect-redis": "^3.2.1", - "@sailshq/lodash": "^3.10.3", - "@sailshq/socket.io-redis": "^5.2.0", + "@inertiajs/svelte": "^1.2.0", + "@sailscasts/sails-hook-node-fetch": "^0.0.3", + "@sailshq/connect-redis": "^6.1.3", + "@sailshq/lodash": "^3.10.6", + "@sailshq/socket.io-redis": "^6.1.2", "inertia-sails": "^0.2.2", - "sails": "^1.5.2", + "nodemailer": "^6.9.15", + "sails": "^1.5.12", "sails-flash": "^0.0.1", - "sails-hook-orm": "^4.0.0", - "sails-hook-sockets": "^2.0.0", - "svelte": "^4.2.14" + "sails-hook-mail": "^0.1.0", + "sails-hook-organics": "^3.0.0", + "sails-hook-orm": "^4.0.3", + "sails-hook-sockets": "^3.0.1", + "sails-hook-wish": "^0.0.9", + "svelte": "^4.2.19" }, "devDependencies": { - "@rsbuild/plugin-svelte": "^0.7.3", - "create-sails-generator": "^0.0.1", - "postcss": "^8.4.13", - "prettier": "^2.6.2", - "prettier-plugin-tailwindcss": "^0.1.11", - "sails-hook-shipwright": "^0.2.0", + "@rsbuild/plugin-svelte": "^1.0.1", + "@types/node": "^22.5.5", + "create-sails-generator": "^0.0.3", + "postcss": "^8.4.47", + "prettier": "^3.3.3", + "prettier-plugin-svelte": "^3.2.6", + "prettier-plugin-tailwindcss": "^0.4.1", + "sails-hook-dev": "^1.3.0", + "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.8.0", + "tailwindcss": "^3.4.12" }, "engines": { "node": ">=18.0" @@ -59,9 +67,10 @@ } }, "node_modules/@inertiajs/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-1.1.0.tgz", - "integrity": "sha512-BTf7LWaJQY9LTZ2P1Z6Y+zmR9X2ndWBxD/dOqWw6nMMjfYulSy6eyEw7iEHSKmu5aVdEO+7yX6pUbRGX5Bog6g==", + "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", @@ -70,11 +79,12 @@ } }, "node_modules/@inertiajs/svelte": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@inertiajs/svelte/-/svelte-1.1.0.tgz", - "integrity": "sha512-NpXDcN4CGnj91rgCGjOF6iYFHzZG4tSxrvLeM7594i0KqAGa72RIEfDrPzJP5J13agg8NfGglWby2cUnbg+K8w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@inertiajs/svelte/-/svelte-1.2.0.tgz", + "integrity": "sha512-oDjKdvTg6Io8rBuSE/tz/YBTKa7S4NPAzEe3mjS/r8/RwBDpknhdrAR4d8VTkBuOC3UNrwyxX6dlSGpCbmGEwg==", + "license": "MIT", "dependencies": { - "@inertiajs/core": "1.1.0", + "@inertiajs/core": "1.2.0", "lodash.clonedeep": "^4.5.0", "lodash.isequal": "^4.5.0" }, @@ -126,38 +136,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": { @@ -196,199 +210,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.5", + "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.0.5.tgz", + "integrity": "sha512-yUWs4k9X9C661P0kwe3Om1GMJKAxliXDMnBV5hHoaEuAovdp/pOG3pk2fVsRrxcwMn3i6FyMGSVB7g0WmQpeHA==", "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.30001660", + "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-svelte": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@rsbuild/plugin-svelte/-/plugin-svelte-0.7.3.tgz", - "integrity": "sha512-cJ/qWpO+ED0aYiAMzh8HmttMKJSzqlkbKBIwMe7EhdOvapbtO/FCqOlDx2skr+WiKv4beWHvPmtoeFjqnfBJjA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rsbuild/plugin-svelte/-/plugin-svelte-1.0.1.tgz", + "integrity": "sha512-O/8bplyHjZu0K/2B0UiFREPVEZjwL3inYN4xhSAhkClOjsHbh4klFTUo7/w7qhdQhu4bTbCAujmyvzgcN2PCFw==", "dev": true, + "license": "MIT", "dependencies": { - "@rsbuild/shared": "0.7.3", - "svelte-loader": "3.2.0", - "svelte-preprocess": "^5.1.4" + "svelte-loader": "3.2.3", + "svelte-preprocess": "^6.0.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" @@ -402,6 +414,28 @@ } } }, + "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/@sailscasts/sails-hook-node-fetch": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@sailscasts/sails-hook-node-fetch/-/sails-hook-node-fetch-0.0.3.tgz", + "integrity": "sha512-VuMxcmrWSi6PeJrr8LGAK2PUziNaVf3xhy+m37zvcEZ6daFk/LLYze2iFj+BNaOKDNlYweKUy1NY8TADg0zDGw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@sailshq/binary-search-tree": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/@sailshq/binary-search-tree/-/binary-search-tree-0.2.7.tgz", @@ -411,34 +445,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", @@ -457,30 +476,153 @@ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" }, - "node_modules/@sailshq/socket.io-redis": { + "node_modules/@sailshq/request": { + "version": "2.88.3", + "resolved": "https://registry.npmjs.org/@sailshq/request/-/request-2.88.3.tgz", + "integrity": "sha512-hjWZxn/yVU7G/N9OwglSmCPyZqBb6hBqGAAR8GDX5IEIXrBSOb5rhcMI4zYQ802VE6F36YWauDswv+lu8TjPug==", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "4.1.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@sailshq/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/@sailshq/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/@sailshq/request/node_modules/safe-buffer": { "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==", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/@sailshq/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "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", @@ -511,25 +653,50 @@ "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/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, - "node_modules/@types/pug": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", - "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", - "dev": true + "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", @@ -554,10 +721,21 @@ "node": ">=0.4.0" } }, - "node_modules/after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==" + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } }, "node_modules/anchor": { "version": "1.4.1", @@ -620,21 +798,45 @@ "dequal": "^2.0.3" } }, - "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/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "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==" + "node_modules/array-flatten": { + "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", "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", "integrity": "sha512-Ej9qjcXY+8Tuy1cNqiwNMwFRXOy9UwgTeMA8LxreodygIPV48lx8PU1ecFxb5ZeU1DpMKxiq6vGLTxcitWZPbA==" }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -646,12 +848,29 @@ "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/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "license": "MIT" }, "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "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", @@ -666,37 +885,41 @@ "dequal": "^2.0.3" } }, - "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" } }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcryptjs": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.3.0.tgz", + "integrity": "sha512-cEPr8jwWSB7xk73mbJYuWxyM9EMKomNlv51da7j+xa9Go2pyRU/Hml8v/WX9doW87b7a2ph18G+xsp7bQcliwg==", + "license": "MIT" + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -710,40 +933,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" } @@ -752,45 +975,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" } @@ -816,13 +1062,24 @@ "node": ">=8" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" + "node_modules/browserify-transform-machinepack": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/browserify-transform-machinepack/-/browserify-transform-machinepack-1.0.4.tgz", + "integrity": "sha512-pru/JMQm1CeRQvubPE6bHRwp17r9cZQzYwhQ6/3weXWWupzxehl9te221n3R+/DhgfBTXOlaBxPLMd0S17GQwA==", + "license": "MIT", + "dependencies": { + "@sailshq/lodash": "^3.10.3", + "browserify-transform-tools": "^1.4.2" + } + }, + "node_modules/browserify-transform-tools": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/browserify-transform-tools/-/browserify-transform-tools-1.7.0.tgz", + "integrity": "sha512-D4/vMGx4ILHI/+Qokdo2x7cxPJqy7uXt0zugOBbDvnCcrQL9/WrgK71GJgrNHF/L4XLErA4cMGlTVmc2sICRnA==", + "license": "MIT", + "dependencies": { + "falafel": "^2.0.0", + "through": "^2.3.7" } }, "node_modules/bytes": { @@ -837,6 +1094,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", @@ -868,10 +1126,34 @@ "node": ">= 6" } }, + "node_modules/camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "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.30001662", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001662.tgz", + "integrity": "sha512-sgMUVwLmGseH8ZIrm1d51UbrhqMCH3jvS7gF/M6byuHOnKyLOBL7W8yz5V02OHwgLGA36o/AFhWzzh4uc5aqTA==", "dev": true, "funding": [ { @@ -886,46 +1168,26 @@ "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==", + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -937,6 +1199,7 @@ "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" }, @@ -947,18 +1210,31 @@ "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_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==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "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": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + }, + "engines": { + "node": ">=4" + } }, "node_modules/chokidar": { "version": "3.5.3", @@ -1036,6 +1312,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" }, @@ -1053,24 +1330,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", @@ -1156,6 +1415,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" }, @@ -1180,12 +1440,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" } @@ -1232,21 +1494,42 @@ } }, "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/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "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" } @@ -1255,25 +1538,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", @@ -1338,6 +1608,19 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/cycle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", @@ -1346,6 +1629,35 @@ "node": ">=0.4.0" } }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "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", @@ -1358,6 +1670,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" } @@ -1366,6 +1679,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" } @@ -1374,6 +1688,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", @@ -1390,6 +1705,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" } @@ -1419,17 +1735,13 @@ } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/didyoumean": { @@ -1444,10 +1756,15 @@ "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/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } }, "node_modules/ee-first": { "version": "1.1.1", @@ -1455,9 +1772,10 @@ "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" }, @@ -1473,6 +1791,7 @@ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -1497,85 +1816,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.6.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz", + "integrity": "sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==", + "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.1.1" } }, - "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-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "is-arrayish": "^0.2.1" } }, "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" }, @@ -1587,16 +1894,11 @@ "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" } }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", - "dev": true - }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1627,37 +1929,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" @@ -1723,10 +2027,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" } @@ -1734,61 +2045,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", @@ -1807,30 +2159,87 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" + }, + "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" + } + }, + "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/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "engines": { + "node": "> 0.1.90" + } }, - "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==", + "node_modules/falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.2" + "acorn": "^7.1.1", + "isarray": "^2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.4.0" } }, - "node_modules/eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "node_modules/falafel/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": "> 0.1.90" + "node": ">=0.4.0" } }, + "node_modules/falafel/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -1859,6 +2268,12 @@ "node": ">= 6" } }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -1872,6 +2287,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" } @@ -1880,6 +2296,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" } @@ -1888,6 +2305,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" } @@ -1896,6 +2314,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" }, @@ -1953,6 +2372,20 @@ "node": ">= 0.6" } }, + "node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/flaverr": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/flaverr/-/flaverr-1.10.0.tgz", @@ -1962,15 +2395,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" }, @@ -1980,10 +2414,20 @@ } } }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, "node_modules/form-data": { "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", @@ -1997,6 +2441,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" } @@ -2052,6 +2497,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", @@ -2066,6 +2512,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2101,6 +2566,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" }, @@ -2118,6 +2584,29 @@ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -2129,28 +2618,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-flag": { + "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": ">=0.10.0" } }, - "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-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" }, @@ -2162,6 +2643,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" }, @@ -2173,6 +2655,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" }, @@ -2191,27 +2674,12 @@ "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/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "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 - } - } + "license": "ISC" }, "node_modules/http-errors": { "version": "1.7.3", @@ -2233,6 +2701,21 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, "node_modules/i18n-2": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/i18n-2/-/i18n-2-0.7.3.tgz", @@ -2257,6 +2740,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" }, @@ -2281,10 +2765,18 @@ "@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/indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/inertia-sails": { "version": "0.2.2", @@ -2312,16 +2804,25 @@ "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" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2355,6 +2856,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2384,10 +2898,24 @@ "@types/estree": "*" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true, + "license": "MIT" + }, "node_modules/is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "license": "MIT", "engines": { "node": ">=4" } @@ -2395,12 +2923,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", @@ -2408,9 +2938,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", @@ -2428,6 +2959,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" }, @@ -2439,14 +2971,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" @@ -2462,6 +2996,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" }, @@ -2472,12 +3007,14 @@ "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" } @@ -2486,6 +3023,7 @@ "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" }, @@ -2502,11 +3040,36 @@ "jiti": "bin/jiti.js" } }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -2522,6 +3085,21 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", @@ -2545,11 +3123,29 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -2587,11 +3183,41 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, "node_modules/lodash.issafeinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.issafeinteger/-/lodash.issafeinteger-4.0.4.tgz", "integrity": "sha512-VyybxpvKqtJKs4+RibsKP1qqbFsTZ6aKDsJfzqrobfMrzMRCHhXAMlKWGKD7QHy2OwGSuKuzSAv8pDyi62huWQ==" }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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", @@ -2629,10 +3255,27 @@ "walker": "1.0.7" } }, + "node_modules/machinepack-http": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/machinepack-http/-/machinepack-http-9.0.0.tgz", + "integrity": "sha512-CfAbgkCcHzwS8ZHPsE0RrnJSluD5rVESzMTYh/mk8U5ZJaXiPsOpcOHRyvRvjfxA68vdVCBDp2+ci7FN9/UhIA==", + "license": "MIT", + "dependencies": { + "@sailshq/lodash": "^3.10.2", + "@sailshq/request": "^2.88.2", + "machine": "^15.0.0-0", + "machinepack-urls": "^6.0.2-0", + "rttc": "^10.0.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/machinepack-process": { "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", @@ -2683,6 +3326,25 @@ "node": ">=4" } }, + "node_modules/machinepack-strings": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/machinepack-strings/-/machinepack-strings-6.1.1.tgz", + "integrity": "sha512-XrnVwTBqFtfF7Ot/J0n0JNOOggScSMlFzKnRPezzMClVKcgQdmCYAHdxhBcxsvhcVAKnTcHNCk2YIA3gUNd3zg==", + "license": "MIT", + "dependencies": { + "@sailshq/lodash": "^3.10.2", + "browserify-transform-machinepack": "^1.0.3", + "machine": "^15.0.0-2", + "uuid": "2.0.2" + } + }, + "node_modules/machinepack-strings/node_modules/uuid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.2.tgz", + "integrity": "sha512-BooSif/UQWXwaQme+4z32duvmtUUz/nlHsyGrrSCgsGf6snMrp9q/n1nGHwQzU12kaCeceODmAiRZA8TCK06jA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT" + }, "node_modules/machinepack-urls": { "version": "6.0.2-0", "resolved": "https://registry.npmjs.org/machinepack-urls/-/machinepack-urls-6.0.2-0.tgz", @@ -2711,6 +3373,16 @@ "tmpl": "1.0.5" } }, + "node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", @@ -2720,10 +3392,33 @@ "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" } }, + "node_modules/meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/merge-defaults": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/merge-defaults/-/merge-defaults-0.2.2.tgz", @@ -2733,9 +3428,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", @@ -2758,6 +3457,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" } @@ -2779,6 +3479,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" }, @@ -2805,15 +3506,6 @@ "node": ">= 0.6" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2842,14 +3534,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" }, @@ -2899,6 +3593,48 @@ "node": ">= 0.6" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nodemailer": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.15.tgz", + "integrity": "sha512-AHf04ySLC6CIfuRtRiEYtGEXgRfa6INgWGluDhnxTZhHSKvrBu7lc1VVchQ0d8nPc4cFaZoPq8vkyNoZr0TpGQ==", + "license": "MIT-0", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2909,20 +3645,30 @@ } }, "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/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } }, "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" } @@ -2937,9 +3683,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" } @@ -2975,6 +3725,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" }, @@ -2985,7 +3736,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", @@ -2997,15 +3749,18 @@ "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/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/parseurl": { "version": "1.3.2", @@ -3015,6 +3770,19 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3030,17 +3798,40 @@ "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" } }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "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/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" }, "node_modules/periscopic": { "version": "3.1.0", @@ -3053,10 +3844,11 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -3064,10 +3856,43 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { - "node": ">=8.6" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": ">=0.10.0" } }, "node_modules/pirates": { @@ -3085,9 +3910,9 @@ "integrity": "sha512-TH+BeeL6Ct98C7as35JbZLf8lgsRzlNJb5gklRIGHKaPkGl1esOKBc5ALUMd+q08Sr6tiEKM+Icbsxg5vuhMKQ==" }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "dev": true, "funding": [ { @@ -3103,10 +3928,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3240,30 +4066,122 @@ "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-svelte": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.2.6.tgz", + "integrity": "sha512-Y1XWLw7vXUQQZmgv1JAEiLcErqUniAF2wO7QJsw8BVMvpLET2dI5WpEIEJx1r11iHVdSMzQxivyfrH9On9t2IQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "prettier": "^3.0.0", + "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" + } + }, "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.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": ">=12.17.0" }, "peerDependencies": { - "prettier": ">=2.2.0" + "@ianvs/prettier-plugin-sort-imports": "*", + "@prettier/plugin-pug": "*", + "@shopify/prettier-plugin-liquid": "*", + "@shufo/prettier-plugin-blade": "*", + "@trivago/prettier-plugin-sort-imports": "*", + "prettier": "^2.2 || ^3.0", + "prettier-plugin-astro": "*", + "prettier-plugin-css-order": "*", + "prettier-plugin-import-sort": "*", + "prettier-plugin-jsdoc": "*", + "prettier-plugin-marko": "*", + "prettier-plugin-organize-attributes": "*", + "prettier-plugin-organize-imports": "*", + "prettier-plugin-style-order": "*", + "prettier-plugin-svelte": "*", + "prettier-plugin-twig-melody": "*" + }, + "peerDependenciesMeta": { + "@ianvs/prettier-plugin-sort-imports": { + "optional": true + }, + "@prettier/plugin-pug": { + "optional": true + }, + "@shopify/prettier-plugin-liquid": { + "optional": true + }, + "@shufo/prettier-plugin-blade": { + "optional": true + }, + "@trivago/prettier-plugin-sort-imports": { + "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-organize-attributes": { + "optional": true + }, + "prettier-plugin-organize-imports": { + "optional": true + }, + "prettier-plugin-style-order": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + }, + "prettier-plugin-twig-melody": { + "optional": true + } + } + }, + "node_modules/pretty-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha512-LNisJvAjy+hruxp3GV4IkZZscTI34+ISfeM1hesB9V6ezIDfXYrBi9TIXVjjMcEB4QFN7tL+dFDEk4s8jMBMyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-stdin": "^4.0.1", + "meow": "^3.1.0" + }, + "bin": { + "pretty-bytes": "cli.js" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/promise": { @@ -3298,6 +4216,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" @@ -3309,17 +4228,35 @@ "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/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } }, "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" }, @@ -3330,6 +4267,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3362,17 +4305,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" }, @@ -3384,29 +4329,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" } @@ -3415,6 +4381,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", @@ -3445,11 +4412,31 @@ "pify": "^2.3.0" } }, - "node_modules/read-cache/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, "engines": { "node": ">=0.10.0" } @@ -3466,14 +4453,15 @@ "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==", + "node_modules/redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "dev": true, + "license": "MIT", "dependencies": { - "double-ended-queue": "^2.1.0-0", - "redis-commands": "^1.2.0", - "redis-parser": "^2.6.0" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" }, "engines": { "node": ">=0.10.0" @@ -3492,10 +4480,15 @@ "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==", + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-finite": "^1.0.0" + }, "engines": { "node": ">=0.10.0" } @@ -3504,11 +4497,18 @@ "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" } }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -3560,51 +4560,6 @@ "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==", - "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", @@ -3648,16 +4603,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", @@ -3667,8 +4625,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", @@ -3683,18 +4641,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", @@ -3729,13 +4686,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", @@ -3746,45 +4704,53 @@ "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-hook-dev": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sails-hook-dev/-/sails-hook-dev-1.3.0.tgz", + "integrity": "sha512-DTm4RKx4Elk+xCYYXxTKykOF4MTjOtQzM5reLjJmLs7WDqA3xcrUQ9fGtpHyP4gyNNKREtf3FRzpQSMcZMGCfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sailshq/lodash": "^3.10.3", + "fs-extra": "0.30.0", + "pretty-bytes": "1.0.4", + "rttc": "^10.0.0-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==", + "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-organics": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sails-hook-organics/-/sails-hook-organics-3.0.0.tgz", + "integrity": "sha512-GpzWqRaEV4H2nyVFj+IzJJ1L70Gj/jZT4NQ9GXuiMlKe+xDh7bZJiQuQMqBZAX6PscdFuEjswWdT+zJR/jtuLg==", + "license": "MIT", "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" + "@sailshq/lodash": "^3.10.2", + "async": "2.6.4", + "bcryptjs": "2.3.0", + "machinepack-fs": "^12.0.0", + "machinepack-http": "^9.0.0", + "machinepack-process": "^4.0.0-0", + "machinepack-strings": "^6.0.1", + "stripe": "5.4.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": ">=8" } }, "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", @@ -3793,50 +4759,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", @@ -3845,7 +4782,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" } }, @@ -3907,6 +4844,16 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/sails-hook-wish": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/sails-hook-wish/-/sails-hook-wish-0.0.9.tgz", + "integrity": "sha512-0qs3grG78FAieDotwroO1hj5afWn+o5VS6owb6hUrca9caMm408tHGKvydXUWvtw2rARp/hBoTAxyKQ4o49aDw==", + "license": "MIT", + "peerDependencies": { + "@sailscasts/sails-hook-node-fetch": "^0.0.3", + "sails": "^1.5.2" + } + }, "node_modules/sails-stringfile": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/sails-stringfile/-/sails-stringfile-0.3.3.tgz", @@ -3925,20 +4872,8 @@ "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", @@ -3956,14 +4891,6 @@ "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", @@ -3989,52 +4916,40 @@ "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==", - "dependencies": { - "has-flag": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/sails/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/sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "dependencies": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, "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" @@ -4044,6 +4959,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" } @@ -4051,32 +4967,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" } @@ -4102,99 +5046,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", @@ -4210,12 +5098,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", @@ -4229,14 +5119,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "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", @@ -4252,6 +5150,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", @@ -4262,6 +5161,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" } @@ -4269,12 +5169,14 @@ "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" } @@ -4283,6 +5185,7 @@ "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": { "yallist": "^4.0.0" }, @@ -4293,12 +5196,14 @@ "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==", + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -4312,126 +5217,70 @@ "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==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" }, "node_modules/socket.io": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.5.0.tgz", - "integrity": "sha512-gGunfS0od3VpwDBpGwVkzSZx6Aqo9uOcf1afJj2cKnKFAoyl16fvhpsUhmUFd4Ldbvl5JvRQed6eQw6oQp6n8w==", + "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": { - "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" + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" } }, "node_modules/socket.io-adapter": { - "version": "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.8.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.0.tgz", + "integrity": "sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==", + "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.6.1", + "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)", - "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" - } - }, - "node_modules/sorcery": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", - "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", - "dev": true, + "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": { - "@jridgewell/sourcemap-codec": "^1.4.14", - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0" - }, - "bin": { - "sorcery": "bin/sorcery" + "debug": "~4.3.4", + "ws": "~8.17.1" } }, "node_modules/sort-route-addresses": { @@ -4443,18 +5292,80 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -4482,7 +5393,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", @@ -4495,26 +5407,74 @@ "node": ">=0.10.0" } }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", "dev": true, + "license": "MIT", "dependencies": { - "min-indent": "^1.0.0" + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/strip-json-comments": { "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" } }, + "node_modules/stripe": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-5.4.0.tgz", + "integrity": "sha512-VCDFp4oQu1uOcOLHIwRIznH8ikLJcpDsHahWN48V/QuV6y2Bm281cq5wnkjqv+LPdUpqXVp9pjlb+SfN6dnyZg==", + "license": "MIT", + "dependencies": { + "bluebird": "^3.5.0", + "lodash.isplainobject": "^4.0.6", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stripe/node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/stripe/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, "node_modules/sucrase": { "version": "3.34.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", @@ -4566,6 +5526,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "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==", + "license": "MIT", + "dependencies": { + "has-flag": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -4579,9 +5551,10 @@ } }, "node_modules/svelte": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.14.tgz", - "integrity": "sha512-ry3+YlWqZpHxLy45MW4MZIxNdvB+Wl7p2nnstWKbOAewaJyNJuOtivSbRChcfIej6wFBjWqyKmf/NgK1uW2JAA==", + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", + "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", @@ -4606,13 +5579,15 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/svelte-dev-helper/-/svelte-dev-helper-1.1.9.tgz", "integrity": "sha512-oU+Xv7Dl4kRU2kdFjsoPLfJfnt5hUhsFUZtuzI3Ku/f2iAFZqBoEuXOqK3N9ngD4dxQOmN4OKWPHVi3NeAeAfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/svelte-hmr": { "version": "0.14.12", "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.12.tgz", "integrity": "sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w==", "dev": true, + "license": "ISC", "engines": { "node": "^12.20 || ^14.13.1 || >= 16" }, @@ -4621,10 +5596,11 @@ } }, "node_modules/svelte-loader": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/svelte-loader/-/svelte-loader-3.2.0.tgz", - "integrity": "sha512-pxsNMC/1JHdQ63M0Zw5cS8dN299nvMiU2ze8yWPLlov/xBNXElEEM22so2q/vJDUyP0ZCrCVMV1d/tlWwxMRLA==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/svelte-loader/-/svelte-loader-3.2.3.tgz", + "integrity": "sha512-ntitVuO0EneIlw5Zsn/GNnxu8+KkqbfrsjEGvk7qrd67IA24OBVqY9p0NjUGlpewPxGL3iD4z/8VA+hM9AsZxA==", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.4", "svelte-dev-helper": "^1.1.9", @@ -4635,33 +5611,27 @@ } }, "node_modules/svelte-preprocess": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.4.tgz", - "integrity": "sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.2.tgz", + "integrity": "sha512-OvDTLfaOkkhjprbDKO0SOCkjNYuHy16dbD4SpqbIi6QiabOMHxRT4km5/dzbFFkmW1L0E2INF3MFltG2pgOyKQ==", "dev": true, "hasInstallScript": true, - "dependencies": { - "@types/pug": "^2.0.6", - "detect-indent": "^6.1.0", - "magic-string": "^0.30.5", - "sorcery": "^0.11.0", - "strip-indent": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">= 16.0.0" + "node": ">= 18.0.0" }, "peerDependencies": { "@babel/core": "^7.10.2", "coffeescript": "^2.5.1", "less": "^3.11.3 || ^4.0.0", "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "postcss-load-config": ">=3", "pug": "^3.0.0", "sass": "^1.26.8", - "stylus": "^0.55.0", + "stylus": ">=0.55", "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", - "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" + "svelte": "^4.0.0 || ^5.0.0-next.100 || ^5.0.0", + "typescript": "^5.0.0" }, "peerDependenciesMeta": { "@babel/core": { @@ -4700,15 +5670,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", @@ -4718,7 +5690,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", @@ -4741,15 +5713,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", @@ -4771,16 +5734,17 @@ "node": ">=0.8" } }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, "node_modules/tmpl": { "version": "1.0.5", "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", @@ -4801,6 +5765,37 @@ "node": ">=0.6" } }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -4808,10 +5803,11 @@ "dev": true }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "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", @@ -4821,10 +5817,29 @@ "node": ">=0.6.x" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, "node_modules/type-is": { "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" @@ -4854,6 +5869,21 @@ "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/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -4862,6 +5892,25 @@ "node": ">= 0.8" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4880,10 +5929,22 @@ "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" } }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/validator": { "version": "13.7.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", @@ -4900,6 +5961,20 @@ "node": ">= 0.8" } }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "node_modules/walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", @@ -4958,13 +6033,20 @@ "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/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, "node_modules/whelk": { @@ -5027,6 +6109,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" }, @@ -5080,15 +6163,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": { @@ -5100,13 +6184,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.1.1", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz", + "integrity": "sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==", + "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", @@ -5117,11 +6208,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-svelte/package.json b/templates/mellow-svelte/package.json index 77341898..d5918884 100644 --- a/templates/mellow-svelte/package.json +++ b/templates/mellow-svelte/package.json @@ -5,34 +5,43 @@ "description": "a Sails application", "keywords": [], "dependencies": { - "@inertiajs/svelte": "^1.1.0", - "@sailshq/connect-redis": "^3.2.1", - "@sailshq/lodash": "^3.10.3", - "@sailshq/socket.io-redis": "^5.2.0", + "@inertiajs/svelte": "^1.2.0", + "@sailscasts/sails-hook-node-fetch": "^0.0.3", + "@sailshq/connect-redis": "^6.1.3", + "@sailshq/lodash": "^3.10.6", + "@sailshq/socket.io-redis": "^6.1.2", "inertia-sails": "^0.2.2", - "sails": "^1.5.2", + "nodemailer": "^6.9.15", + "sails": "^1.5.12", "sails-flash": "^0.0.1", - "sails-hook-orm": "^4.0.0", - "sails-hook-sockets": "^2.0.0", - "svelte": "^4.2.14" + "sails-hook-mail": "^0.1.0", + "sails-hook-organics": "^3.0.0", + "sails-hook-orm": "^4.0.3", + "sails-hook-sockets": "^3.0.1", + "sails-hook-wish": "^0.0.9", + "svelte": "^4.2.19" }, "devDependencies": { - "@rsbuild/plugin-svelte": "^0.7.3", - "create-sails-generator": "^0.0.1", - "postcss": "^8.4.13", - "prettier": "^2.6.2", - "prettier-plugin-tailwindcss": "^0.1.11", - "sails-hook-shipwright": "^0.2.0", + "@rsbuild/plugin-svelte": "^1.0.1", + "@types/node": "^22.5.5", + "create-sails-generator": "^0.0.3", + "postcss": "^8.4.47", + "prettier": "^3.3.3", + "prettier-plugin-svelte": "^3.2.6", + "prettier-plugin-tailwindcss": "^0.4.1", + "sails-hook-dev": "^1.3.0", + "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.8.0", + "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": { diff --git a/templates/mellow-svelte/prettier.config.js b/templates/mellow-svelte/prettier.config.js index e94a48b6..ee8b8b73 100644 --- a/templates/mellow-svelte/prettier.config.js +++ b/templates/mellow-svelte/prettier.config.js @@ -1,5 +1,10 @@ module.exports = { - plugins: [require('prettier-plugin-tailwindcss')], + plugins: [ + require('prettier-plugin-tailwindcss'), + require('prettier-plugin-svelte') + ], + overrides: [{ files: '*.svelte', options: { parser: 'svelte' } }], semi: false, - singleQuote: true + singleQuote: true, + trailingComma: 'none' } diff --git a/templates/mellow-svelte/tailwind.config.js b/templates/mellow-svelte/tailwind.config.js index 78975a1b..6022768a 100644 --- a/templates/mellow-svelte/tailwind.config.js +++ b/templates/mellow-svelte/tailwind.config.js @@ -1,7 +1,66 @@ module.exports = { - content: ['./assets/js/**/*.{html,js,svelte,ts}'], + content: ['./views/**/*.ejs', './assets/js/**/*.{js,ts,html,svelte}'], 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: [] } diff --git a/templates/mellow-svelte/tests/unit/helpers.test.js b/templates/mellow-svelte/tests/unit/helpers.test.js new file mode 100644 index 00000000..b0195052 --- /dev/null +++ b/templates/mellow-svelte/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: 'testing', 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: 'testing', 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-svelte/types/index.d.ts b/templates/mellow-svelte/types/index.d.ts deleted file mode 100644 index 9168476c..00000000 --- a/templates/mellow-svelte/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 diff --git a/templates/mellow-svelte/views/emails/email-reset-password.ejs b/templates/mellow-svelte/views/emails/email-reset-password.ejs new file mode 100644 index 00000000..e2628795 --- /dev/null +++ b/templates/mellow-svelte/views/emails/email-reset-password.ejs @@ -0,0 +1,33 @@ +

Dear <%= fullName %>,

+

+ Someone requested a password reset for your account. If this was not you, + please disregard this email. Otherwise, simply click the button below: +

+ +

+ If you have any trouble, try pasting this link in your browser: + <%= + url.resolve(sails.config.custom.baseUrl,'/reset-password')+'?token='+encodeURIComponent(token) + %> +

+

Sincerely,

+

The Boring JavaScript Stack Team

diff --git a/templates/mellow-svelte/views/emails/email-verify-account.ejs b/templates/mellow-svelte/views/emails/email-verify-account.ejs new file mode 100644 index 00000000..e989d578 --- /dev/null +++ b/templates/mellow-svelte/views/emails/email-verify-account.ejs @@ -0,0 +1,9 @@ +<% /* Note: This is injected into `views/layouts/layout-email.ejs` */ %> +

Welcome, <%= fullName %>!

+

You're almost ready to get started. Just click the button below to verify the email address for your account:

+ +

If you have any trouble, try pasting this link in your browser: <%= url.resolve(sails.config.custom.baseUrl,'/verify-email')+'?token='+encodeURIComponent(token) %>

+

Sincerely,

+

The Boring JavaScript Stack Team

diff --git a/templates/mellow-svelte/views/emails/email-verify-new-email.ejs b/templates/mellow-svelte/views/emails/email-verify-new-email.ejs new file mode 100644 index 00000000..173aa1ea --- /dev/null +++ b/templates/mellow-svelte/views/emails/email-verify-new-email.ejs @@ -0,0 +1,57 @@ +

+ Confirm Your New Email, <%= fullName %>! +

+

+ We've received a request to change your email address. To complete this + process, please click the button below to verify your new email address: +

+ +

+ If you have any trouble, try pasting this link in your browser: + <%= + url.resolve(sails.config.custom.baseUrl,'/verify-email')+'?token='+encodeURIComponent(token) + %> +

+

+ If you didn't request this change, please ignore this email or contact our + support team if you have any concerns. +

+

Sincerely,

+

The Mellow Team

diff --git a/templates/mellow-svelte/views/layouts/layout-email.ejs b/templates/mellow-svelte/views/layouts/layout-email.ejs new file mode 100644 index 00000000..9ff8bd40 --- /dev/null +++ b/templates/mellow-svelte/views/layouts/layout-email.ejs @@ -0,0 +1,12 @@ +<% /* Default layout for email templates */ %> +
+
+
+
+ <%- body %> +
+
+

© 2023 The Boring JavaScript Stack
All trademarks, service marks, and company names are the property of their respective owners.

+
+
+
diff --git a/templates/mellow-vue/api/controllers/auth/view-success.js b/templates/mellow-vue/api/controllers/auth/view-success.js index eec6ef54..da6dc7dd 100644 --- a/templates/mellow-vue/api/controllers/auth/view-success.js +++ b/templates/mellow-vue/api/controllers/auth/view-success.js @@ -23,7 +23,7 @@ module.exports = { pageHeading = 'Email verification successful' break case 'reset-password': - message = 'Password has been successful reset' + message = 'Password has been successfully reset' pageHeading = 'Password reset successful' } return { diff --git a/templates/mellow-vue/assets/js/components/InputEmail.vue b/templates/mellow-vue/assets/js/components/InputEmail.vue index 965d078d..51aba772 100644 --- a/templates/mellow-vue/assets/js/components/InputEmail.vue +++ b/templates/mellow-vue/assets/js/components/InputEmail.vue @@ -1,5 +1,5 @@