From 028048917685934ca644fe238bae747a7d2504e6 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Tue, 27 Aug 2024 16:28:52 +0200 Subject: [PATCH 01/31] Bump React Router DOM to v6 Signed-off-by: Mihovil Ilakovac --- .../src/auth/pages/OAuthCallback.tsx | 4 +- .../src/auth/pages/createAuthRequiredPage.jsx | 4 +- .../templates/react-app/src/index.tsx | 2 +- .../templates/react-app/src/router.tsx | 68 +++---- .../forms/internal/common/LoginSignupForm.tsx | 8 +- waspc/examples/todoApp/package-lock.json | 175 ++++-------------- waspc/examples/todoApp/src/pages/Task.tsx | 6 +- waspc/src/Wasp/Generator/SdkGenerator.hs | 12 +- waspc/src/Wasp/Generator/WebAppGenerator.hs | 3 +- waspc/src/Wasp/Util/WebRouterPath.hs | 1 + 10 files changed, 95 insertions(+), 188 deletions(-) diff --git a/waspc/data/Generator/templates/react-app/src/auth/pages/OAuthCallback.tsx b/waspc/data/Generator/templates/react-app/src/auth/pages/OAuthCallback.tsx index f723628c59..1fdeaf68f2 100644 --- a/waspc/data/Generator/templates/react-app/src/auth/pages/OAuthCallback.tsx +++ b/waspc/data/Generator/templates/react-app/src/auth/pages/OAuthCallback.tsx @@ -1,7 +1,7 @@ {{={= =}=}} import { useEffect, useRef, useState } from "react"; import { type AxiosResponse } from "axios"; -import { Redirect, useLocation } from 'react-router-dom' +import { Navigate, useLocation } from 'react-router-dom' import { useAuth } from 'wasp/client/auth' import { api } from 'wasp/client/api' import { initSession } from 'wasp/auth/helpers/user' @@ -14,7 +14,7 @@ export function OAuthCallbackPage() { const { error, user } = useOAuthCallbackHandler(); if (user !== undefined && user !== null) { - return ; + return ; } diff --git a/waspc/data/Generator/templates/react-app/src/auth/pages/createAuthRequiredPage.jsx b/waspc/data/Generator/templates/react-app/src/auth/pages/createAuthRequiredPage.jsx index 52e69bf4d2..5afb3991f7 100644 --- a/waspc/data/Generator/templates/react-app/src/auth/pages/createAuthRequiredPage.jsx +++ b/waspc/data/Generator/templates/react-app/src/auth/pages/createAuthRequiredPage.jsx @@ -1,7 +1,7 @@ {{={= =}=}} import React from 'react' -import { Redirect } from 'react-router-dom' +import { Navigate } from 'react-router-dom' import { useAuth } from 'wasp/client/auth' import { Loader } from '../../components/Loader' @@ -17,7 +17,7 @@ const createAuthRequiredPage = (Page) => { if (user) { return } else { - return + return } case 'loading': return ( diff --git a/waspc/data/Generator/templates/react-app/src/index.tsx b/waspc/data/Generator/templates/react-app/src/index.tsx index 9a7a3241e8..076e97c7d3 100644 --- a/waspc/data/Generator/templates/react-app/src/index.tsx +++ b/waspc/data/Generator/templates/react-app/src/index.tsx @@ -3,7 +3,7 @@ import React from 'react' import ReactDOM from 'react-dom/client' import { QueryClientProvider } from '@tanstack/react-query' -import router from './router' +import { router } from './router' import { initializeQueryClient, queryClientInitialized, diff --git a/waspc/data/Generator/templates/react-app/src/router.tsx b/waspc/data/Generator/templates/react-app/src/router.tsx index 35c0a7f8b1..c0c2928c30 100644 --- a/waspc/data/Generator/templates/react-app/src/router.tsx +++ b/waspc/data/Generator/templates/react-app/src/router.tsx @@ -1,6 +1,6 @@ {{={= =}=}} import React from 'react' -import { Route, Switch, BrowserRouter as Router } from 'react-router-dom' +import { useRoutes, BrowserRouter } from 'react-router-dom' {=# rootComponent.isDefined =} {=& rootComponent.importStatement =} {=/ rootComponent.isDefined =} @@ -25,35 +25,39 @@ export const routeNameToRouteComponent = { {=/ routes =} } as const; -const router = ( - - {=# rootComponent.isDefined =} - <{= rootComponent.importIdentifier =}> - {=/ rootComponent.isDefined =} - - {=# isExternalAuthEnabled =} - {/* - Wasp specific routes *must* go first to prevent user - defined routes from overriding them. - Details in https://github.com/wasp-lang/wasp/issues/2029 - */} - - - - {=/ isExternalAuthEnabled =} - {Object.entries(routes).map(([routeKey, route]) => ( - - ))} - - {=# rootComponent.isDefined =} - - {=/ rootComponent.isDefined =} - -) +export function RouterRoutes() { + const routerRoutes = useRoutes([ + {=# isExternalAuthEnabled =} + /* + Wasp specific routes *must* go first to prevent user + defined routes from overriding them. + Details in https://github.com/wasp-lang/wasp/issues/2029 + */ + { + path: "{= oAuthCallbackPath =}", + element: + }, + {=/ isExternalAuthEnabled =} + ...(Object.entries(routes).map(([routeKey, route]) => { + const Component = routeNameToRouteComponent[routeKey] + return { + path: route.to, + element: + } + })) + ]) + + return routerRoutes +} -export default router +export const router = ( + + {=# rootComponent.isDefined =} + <{= rootComponent.importIdentifier =}> + {=/ rootComponent.isDefined =} + + {=# rootComponent.isDefined =} + + {=/ rootComponent.isDefined =} + +) diff --git a/waspc/data/Generator/templates/sdk/wasp/auth/forms/internal/common/LoginSignupForm.tsx b/waspc/data/Generator/templates/sdk/wasp/auth/forms/internal/common/LoginSignupForm.tsx index 97e2e8ac1e..71970f86bb 100644 --- a/waspc/data/Generator/templates/sdk/wasp/auth/forms/internal/common/LoginSignupForm.tsx +++ b/waspc/data/Generator/templates/sdk/wasp/auth/forms/internal/common/LoginSignupForm.tsx @@ -25,7 +25,7 @@ import * as SocialIcons from '../social/SocialIcons' import { SocialButton } from '../social/SocialButton' {=/ isSocialAuthEnabled =} {=# isAnyPasswordBasedAuthEnabled =} -import { useHistory } from 'react-router-dom' +import { useNavigate } from 'react-router-dom' {=/ isAnyPasswordBasedAuthEnabled =} {=# enabledProviders.isUsernameAndPasswordAuthEnabled =} import { useUsernameAndPassword } from '../usernameAndPassword/useUsernameAndPassword' @@ -147,7 +147,7 @@ export const LoginSignupForm = ({ const isLogin = state === 'login' const cta = isLogin ? 'Log in' : 'Sign up'; {=# isAnyPasswordBasedAuthEnabled =} - const history = useHistory(); + const navigate = useNavigate(); const onErrorHandler = (error) => { setErrorMessage({ title: error.message, description: error.data?.data?.message }) }; @@ -159,7 +159,7 @@ export const LoginSignupForm = ({ isLogin, onError: onErrorHandler, onSuccess() { - history.push('{= onAuthSucceededRedirectTo =}') + navigate('{= onAuthSucceededRedirectTo =}') }, }); {=/ enabledProviders.isUsernameAndPasswordAuthEnabled =} @@ -172,7 +172,7 @@ export const LoginSignupForm = ({ setSuccessMessage(`You've signed up successfully! Check your email for the confirmation link.`) }, onLoginSuccess() { - history.push('{= onAuthSucceededRedirectTo =}') + navigate('{= onAuthSucceededRedirectTo =}') }, }); {=/ enabledProviders.isEmailAuthEnabled =} diff --git a/waspc/examples/todoApp/package-lock.json b/waspc/examples/todoApp/package-lock.json index e944c46469..1712242b4e 100644 --- a/waspc/examples/todoApp/package-lock.json +++ b/waspc/examples/todoApp/package-lock.json @@ -32,8 +32,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "arctic": "^1.2.1", "autoprefixer": "^10.4.13", @@ -51,7 +49,7 @@ "prisma": "4.16.2", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "socket.io": "^4.6.1", "socket.io-client": "^4.6.1", "superjson": "^1.12.2", @@ -59,7 +57,8 @@ "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, ".wasp/out/sdk/wasp/node_modules/@napi-rs/wasm-runtime": { @@ -2126,6 +2125,14 @@ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81.tgz", "integrity": "sha512-q617EUWfRIDTriWADZ4YiWRZXCa/WuhNgLTVd+HqWLffjMSPzyM5uOWoauX91wvQClSKZU4pzI4JJLQ9Kl62Qg==" }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", @@ -2570,6 +2577,7 @@ "version": "4.17.43", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2577,11 +2585,6 @@ "@types/send": "*" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -2596,7 +2599,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -2619,12 +2623,14 @@ "node_modules/@types/qs": { "version": "6.9.11", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.56", @@ -2644,25 +2650,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", @@ -2672,6 +2659,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -5752,32 +5740,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -7689,21 +7651,6 @@ "node": ">=14.17" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -7839,59 +7786,35 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "dependencies": { + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "dependencies": { + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/react-router/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==" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-router/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -7987,11 +7910,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -8765,16 +8683,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -9041,11 +8949,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/waspc/examples/todoApp/src/pages/Task.tsx b/waspc/examples/todoApp/src/pages/Task.tsx index c066ca088e..0470816694 100644 --- a/waspc/examples/todoApp/src/pages/Task.tsx +++ b/waspc/examples/todoApp/src/pages/Task.tsx @@ -11,11 +11,13 @@ import { } from 'wasp/client/operations' import React from 'react' +import { useParams } from 'react-router-dom' type TaskPayload = Pick -const Todo = (props: any) => { - const taskId = parseInt(props.match.params.id) +const Todo = () => { + const { id } = useParams() + const taskId = parseInt(id!) const { data: task, diff --git a/waspc/src/Wasp/Generator/SdkGenerator.hs b/waspc/src/Wasp/Generator/SdkGenerator.hs index 11dc7ac956..30178dc41b 100644 --- a/waspc/src/Wasp/Generator/SdkGenerator.hs +++ b/waspc/src/Wasp/Generator/SdkGenerator.hs @@ -187,13 +187,9 @@ npmDepsForSdk spec = ("mitt", "3.0.0"), ("react", "^18.2.0"), ("lodash.merge", "^4.6.2"), - ("react-router-dom", "^5.3.3"), + ("react-router-dom", "^6.26.1"), ("react-hook-form", "^7.45.4"), - ("superjson", "^1.12.2"), - -- Todo: why is this in dependencies, should it be in dev dependencies? - -- Should it go into their package.json - ("@types/express-serve-static-core", "^4.17.13"), - ("@types/react-router-dom", "^5.3.3") + ("superjson", "^1.12.2") ] ++ depsRequiredForAuth spec ++ depsRequiredByOAuth spec @@ -214,7 +210,9 @@ npmDepsForSdk spec = ++ depsRequiredByTailwind spec, N.devDependencies = AS.Dependency.fromList - [ ("@tsconfig/node" <> majorNodeVersionStr, "latest") + [ ("@tsconfig/node" <> majorNodeVersionStr, "latest"), + -- Should @types/* go into their package.json? + ("@types/express-serve-static-core", "^4.17.13") ] } where diff --git a/waspc/src/Wasp/Generator/WebAppGenerator.hs b/waspc/src/Wasp/Generator/WebAppGenerator.hs index 427e3b905e..e7365c6504 100644 --- a/waspc/src/Wasp/Generator/WebAppGenerator.hs +++ b/waspc/src/Wasp/Generator/WebAppGenerator.hs @@ -122,7 +122,7 @@ npmDepsForWasp _spec = ("react", "^18.2.0"), ("react-dom", "^18.2.0"), ("@tanstack/react-query", "^4.29.0"), - ("react-router-dom", "^5.3.3"), + ("react-router-dom", "^6.26.1"), ("superjson", "^1.12.2"), ("mitt", "3.0.0"), -- Used for Auth UI @@ -135,7 +135,6 @@ npmDepsForWasp _spec = ("typescript", "^5.1.0"), ("@types/react", "^18.0.37"), ("@types/react-dom", "^18.0.11"), - ("@types/react-router-dom", "^5.3.3"), ("@vitejs/plugin-react", "^4.2.1"), ("dotenv", "^16.0.3"), -- NOTE: Make sure to bump the version of the tsconfig diff --git a/waspc/src/Wasp/Util/WebRouterPath.hs b/waspc/src/Wasp/Util/WebRouterPath.hs index 2cec64f935..e1c5dd51fe 100644 --- a/waspc/src/Wasp/Util/WebRouterPath.hs +++ b/waspc/src/Wasp/Util/WebRouterPath.hs @@ -6,6 +6,7 @@ import Data.Maybe (mapMaybe) data Param = Optional String | Required String deriving (Show, Eq) +-- TODO: upgrade to work with React Router v6: https://reactrouter.com/en/main/route/route#splats extractPathParams :: String -> [Param] extractPathParams = mapMaybe parseParam . splitOn "/" where From 0e712fca145faffc3a68c3ac543ae11050914c6b Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Tue, 27 Aug 2024 16:31:35 +0200 Subject: [PATCH 02/31] e2e tests Signed-off-by: Mihovil Ilakovac --- .../waspBuild/.wasp/build/.waspchecksums | 8 +-- .../.wasp/build/installedNpmDepsLog.json | 2 +- .../.wasp/build/sdk/wasp/package.json | 7 +-- .../.wasp/build/web-app/package.json | 3 +- .../.wasp/build/web-app/src/index.tsx | 2 +- .../.wasp/build/web-app/src/router.tsx | 35 ++++++------ .../waspBuild/.wasp/out/sdk/wasp/package.json | 7 +-- .../waspCompile/.wasp/out/.waspchecksums | 8 +-- .../.wasp/out/installedNpmDepsLog.json | 2 +- .../.wasp/out/sdk/wasp/package.json | 7 +-- .../.wasp/out/web-app/package.json | 3 +- .../.wasp/out/web-app/src/index.tsx | 2 +- .../.wasp/out/web-app/src/router.tsx | 35 ++++++------ .../waspComplexTest/.wasp/out/.waspchecksums | 12 ++-- .../.wasp/out/installedNpmDepsLog.json | 2 +- .../.wasp/out/sdk/wasp/package.json | 7 +-- .../.wasp/out/web-app/package.json | 3 +- .../web-app/src/auth/pages/OAuthCallback.tsx | 4 +- .../src/auth/pages/createAuthRequiredPage.jsx | 4 +- .../.wasp/out/web-app/src/index.tsx | 2 +- .../.wasp/out/web-app/src/router.tsx | 56 ++++++++++--------- .../waspJob/.wasp/out/.waspchecksums | 8 +-- .../.wasp/out/installedNpmDepsLog.json | 2 +- .../wasp/dist/server/jobs/mySpecialJob.d.ts | 2 +- .../waspJob/.wasp/out/sdk/wasp/package.json | 7 +-- .../waspJob/.wasp/out/web-app/package.json | 3 +- .../waspJob/.wasp/out/web-app/src/index.tsx | 2 +- .../waspJob/.wasp/out/web-app/src/router.tsx | 35 ++++++------ .../waspMigrate/.wasp/out/.waspchecksums | 8 +-- .../.wasp/out/installedNpmDepsLog.json | 2 +- .../.wasp/out/sdk/wasp/package.json | 7 +-- .../.wasp/out/web-app/package.json | 3 +- .../.wasp/out/web-app/src/index.tsx | 2 +- .../.wasp/out/web-app/src/router.tsx | 35 ++++++------ 34 files changed, 166 insertions(+), 161 deletions(-) diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums index a4e2599aee..10d66ffd58 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums @@ -200,7 +200,7 @@ "file", "../out/sdk/wasp/package.json" ], - "995eabb6d01fa0da18e4b83c6686003fc6fcc1b69acc6a6e989281b1b678621a" + "2cc606472b051688741cc5c7045a08e26b62aea573df70d89eb4862d7c1c37b8" ], [ [ @@ -529,7 +529,7 @@ "file", "web-app/package.json" ], - "c9ec6110684c2e6c76392fc93458756ca636fa30f2b6c23db1507c0cc910e8b8" + "104ef42603d3a213f1cb3b8ba24e31cf819e36484579d490316129b65e094ef4" ], [ [ @@ -592,7 +592,7 @@ "file", "web-app/src/index.tsx" ], - "ff83778b7f03a8f15116bc73adce607c2c13fc9cbd4228626980a530541aaeb2" + "61265d54c480ce94df81fdd0c65fa2e3c154e7d9fb9621c87a2d81e32ecd2adf" ], [ [ @@ -606,7 +606,7 @@ "file", "web-app/src/router.tsx" ], - "5641aec64e4771fde7aaedb217fbb726103c9859de65f2b6bdc51fbb2e970a3e" + "332f183ee063738189f25e0c3a94427c18e5df74a4de90448394a5f416e724c1" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/installedNpmDepsLog.json index 7880e96505..39d0eb4658 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"4.16.2"},{"name":"prisma","version":"4.16.2"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^5.3.3"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/react-router-dom","version":"^5.3.3"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"4.16.2"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^5.3.3"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@types/react-router-dom","version":"^5.3.3"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"4.16.2"},{"name":"prisma","version":"4.16.2"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"4.16.2"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/package.json b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/package.json index b5eda22d32..c6c32f8002 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/package.json +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/package.json @@ -4,8 +4,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "axios": "^1.4.0", "express": "~4.18.1", @@ -16,13 +14,14 @@ "prisma": "4.16.2", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" }, "exports": { "./api/events": "./dist/api/events.js", diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/package.json b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/package.json index 5950070455..2006a6a418 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/package.json @@ -17,13 +17,12 @@ "mitt": "3.0.0", "react-dom": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2" }, "devDependencies": { "@tsconfig/vite-react": "^2.0.0", "@types/react-dom": "^18.0.11", - "@types/react-router-dom": "^5.3.3", "@vitejs/plugin-react": "^4.2.1", "dotenv": "^16.0.3" }, diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/index.tsx b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/index.tsx index 0b7f1d9854..50044cc494 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/index.tsx +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/index.tsx @@ -2,7 +2,7 @@ import React from 'react' import ReactDOM from 'react-dom/client' import { QueryClientProvider } from '@tanstack/react-query' -import router from './router' +import { router } from './router' import { initializeQueryClient, queryClientInitialized, diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx index 9ecd93cb0f..0018d3e53d 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { Route, Switch, BrowserRouter as Router } from 'react-router-dom' +import { useRoutes, BrowserRouter } from 'react-router-dom' import { MainPage } from '../../../../src/MainPage' @@ -11,19 +11,22 @@ export const routeNameToRouteComponent = { RootRoute: MainPage, } as const; -const router = ( - - - {Object.entries(routes).map(([routeKey, route]) => ( - - ))} - - -) +export function RouterRoutes() { + const routerRoutes = useRoutes([ + ...(Object.entries(routes).map(([routeKey, route]) => { + const Component = routeNameToRouteComponent[routeKey] + return { + path: route.to, + element: + } + })) + ]) + + return routerRoutes +} -export default router +export const router = ( + + + +) diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/package.json b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/package.json index b5eda22d32..c6c32f8002 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/package.json +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/package.json @@ -4,8 +4,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "axios": "^1.4.0", "express": "~4.18.1", @@ -16,13 +14,14 @@ "prisma": "4.16.2", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" }, "exports": { "./api/events": "./dist/api/events.js", diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums index 66d5550294..4fd5d3deda 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums @@ -200,7 +200,7 @@ "file", "../out/sdk/wasp/package.json" ], - "995eabb6d01fa0da18e4b83c6686003fc6fcc1b69acc6a6e989281b1b678621a" + "2cc606472b051688741cc5c7045a08e26b62aea573df70d89eb4862d7c1c37b8" ], [ [ @@ -543,7 +543,7 @@ "file", "web-app/package.json" ], - "58b50932dadb8d0eadd20132f39dc1871eb9dfc026978fe7db217be58eb73a51" + "c37018e6645a8e0a9204054d3564a272c55ed6ef3d379cf9f05b52b31eb617cb" ], [ [ @@ -606,7 +606,7 @@ "file", "web-app/src/index.tsx" ], - "ff83778b7f03a8f15116bc73adce607c2c13fc9cbd4228626980a530541aaeb2" + "61265d54c480ce94df81fdd0c65fa2e3c154e7d9fb9621c87a2d81e32ecd2adf" ], [ [ @@ -620,7 +620,7 @@ "file", "web-app/src/router.tsx" ], - "5641aec64e4771fde7aaedb217fbb726103c9859de65f2b6bdc51fbb2e970a3e" + "332f183ee063738189f25e0c3a94427c18e5df74a4de90448394a5f416e724c1" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/installedNpmDepsLog.json index 7880e96505..39d0eb4658 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"4.16.2"},{"name":"prisma","version":"4.16.2"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^5.3.3"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/react-router-dom","version":"^5.3.3"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"4.16.2"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^5.3.3"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@types/react-router-dom","version":"^5.3.3"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"4.16.2"},{"name":"prisma","version":"4.16.2"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"4.16.2"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/package.json b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/package.json index b5eda22d32..c6c32f8002 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/package.json +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/package.json @@ -4,8 +4,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "axios": "^1.4.0", "express": "~4.18.1", @@ -16,13 +14,14 @@ "prisma": "4.16.2", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" }, "exports": { "./api/events": "./dist/api/events.js", diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/package.json b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/package.json index f177c39597..298e6def9d 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/package.json @@ -17,13 +17,12 @@ "mitt": "3.0.0", "react-dom": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2" }, "devDependencies": { "@tsconfig/vite-react": "^2.0.0", "@types/react-dom": "^18.0.11", - "@types/react-router-dom": "^5.3.3", "@vitejs/plugin-react": "^4.2.1", "dotenv": "^16.0.3" }, diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/index.tsx b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/index.tsx index 0b7f1d9854..50044cc494 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/index.tsx +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/index.tsx @@ -2,7 +2,7 @@ import React from 'react' import ReactDOM from 'react-dom/client' import { QueryClientProvider } from '@tanstack/react-query' -import router from './router' +import { router } from './router' import { initializeQueryClient, queryClientInitialized, diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx index 9ecd93cb0f..0018d3e53d 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { Route, Switch, BrowserRouter as Router } from 'react-router-dom' +import { useRoutes, BrowserRouter } from 'react-router-dom' import { MainPage } from '../../../../src/MainPage' @@ -11,19 +11,22 @@ export const routeNameToRouteComponent = { RootRoute: MainPage, } as const; -const router = ( - - - {Object.entries(routes).map(([routeKey, route]) => ( - - ))} - - -) +export function RouterRoutes() { + const routerRoutes = useRoutes([ + ...(Object.entries(routes).map(([routeKey, route]) => { + const Component = routeNameToRouteComponent[routeKey] + return { + path: route.to, + element: + } + })) + ]) + + return routerRoutes +} -export default router +export const router = ( + + + +) diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums index 0d9eb6a1ec..f98408691f 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums @@ -487,7 +487,7 @@ "file", "../out/sdk/wasp/package.json" ], - "cb651813806e472b31ebc0691b88efd7361439781c6e10dc47363f15567294a3" + "59b474c5e5b7c201183bdf281cc3a617093f82637d726e3ddab69a41fbbed209" ], [ [ @@ -1173,7 +1173,7 @@ "file", "web-app/package.json" ], - "1b0855b401aae4ceb6eca959600a1fde84e9f7590beb8362a7d2fad40bcb6fef" + "9f4c02ceb58c568b2cadb5cd167cc86c04852bcfa8e1d5a07c749d125d5e29f8" ], [ [ @@ -1208,14 +1208,14 @@ "file", "web-app/src/auth/pages/OAuthCallback.tsx" ], - "f5f1214036b335cd000d49e89908d35bdffd1878887d15877b699a78154c7852" + "6414299e9cb46702b8daca23563991a46e70ef8e9ea985bc5d4fe48d2c646132" ], [ [ "file", "web-app/src/auth/pages/createAuthRequiredPage.jsx" ], - "011b5851a168fc4280b68a57a6ac2379fdbfb50d81f1fe0917be218ff9dba420" + "be2f872a6465690dec32a0d2a0c3b15d941846cc0059a9ec13d09650daccda7f" ], [ [ @@ -1250,7 +1250,7 @@ "file", "web-app/src/index.tsx" ], - "46b4cde819de4048b82feb249ae662fb60de2297c6a740f49da239011848458d" + "27e9b6e82ad360f481cc4883b4321e18871b7c6d9be5abbaa4613c0a6faebbcd" ], [ [ @@ -1264,7 +1264,7 @@ "file", "web-app/src/router.tsx" ], - "8dc5955b5a640cbae8836cc227e6ade562b8e7ba9eda5ce076436955807fe0fe" + "059c8f5095546f080724acacbc790ab09c2fa1c45e1db86b1b3257b6593682ee" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/installedNpmDepsLog.json index 208cc81108..e2bb8a98f9 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"4.16.2"},{"name":"prisma","version":"4.16.2"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^5.3.3"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/react-router-dom","version":"^5.3.3"},{"name":"@stitches/react","version":"^1.2.8"},{"name":"@node-rs/argon2","version":"^1.8.3"},{"name":"arctic","version":"^1.2.1"},{"name":"lucia","version":"^3.0.1"},{"name":"oslo","version":"^1.1.2"},{"name":"@lucia-auth/adapter-prisma","version":"^4.0.0"},{"name":"@sendgrid/mail","version":"^7.7.0"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"pg-boss","version":"^8.4.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"4.16.2"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^5.3.3"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@types/react-router-dom","version":"^5.3.3"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"4.16.2"},{"name":"prisma","version":"4.16.2"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"@stitches/react","version":"^1.2.8"},{"name":"@node-rs/argon2","version":"^1.8.3"},{"name":"arctic","version":"^1.2.1"},{"name":"lucia","version":"^3.0.1"},{"name":"oslo","version":"^1.1.2"},{"name":"@lucia-auth/adapter-prisma","version":"^4.0.0"},{"name":"@sendgrid/mail","version":"^7.7.0"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"pg-boss","version":"^8.4.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"4.16.2"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/package.json b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/package.json index 01bd69e2b5..924001b5bb 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/package.json +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/package.json @@ -8,8 +8,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "arctic": "^1.2.1", "axios": "^1.4.0", @@ -24,13 +22,14 @@ "prisma": "4.16.2", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" }, "exports": { "./api/events": "./dist/api/events.js", diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/package.json b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/package.json index 1b275ba8c4..d3ee0e3163 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/package.json @@ -17,13 +17,12 @@ "mitt": "3.0.0", "react-dom": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2" }, "devDependencies": { "@tsconfig/vite-react": "^2.0.0", "@types/react-dom": "^18.0.11", - "@types/react-router-dom": "^5.3.3", "@vitejs/plugin-react": "^4.2.1", "dotenv": "^16.0.3" }, diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/auth/pages/OAuthCallback.tsx b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/auth/pages/OAuthCallback.tsx index 79cd4117d7..83e121f9e1 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/auth/pages/OAuthCallback.tsx +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/auth/pages/OAuthCallback.tsx @@ -1,6 +1,6 @@ import { useEffect, useRef, useState } from "react"; import { type AxiosResponse } from "axios"; -import { Redirect, useLocation } from 'react-router-dom' +import { Navigate, useLocation } from 'react-router-dom' import { useAuth } from 'wasp/client/auth' import { api } from 'wasp/client/api' import { initSession } from 'wasp/auth/helpers/user' @@ -13,7 +13,7 @@ export function OAuthCallbackPage() { const { error, user } = useOAuthCallbackHandler(); if (user !== undefined && user !== null) { - return ; + return ; } diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/auth/pages/createAuthRequiredPage.jsx b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/auth/pages/createAuthRequiredPage.jsx index 8136654fef..a4041992f2 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/auth/pages/createAuthRequiredPage.jsx +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/auth/pages/createAuthRequiredPage.jsx @@ -1,6 +1,6 @@ import React from 'react' -import { Redirect } from 'react-router-dom' +import { Navigate } from 'react-router-dom' import { useAuth } from 'wasp/client/auth' import { Loader } from '../../components/Loader' @@ -16,7 +16,7 @@ const createAuthRequiredPage = (Page) => { if (user) { return } else { - return + return } case 'loading': return ( diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/index.tsx b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/index.tsx index dceb898183..7814cd9853 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/index.tsx +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/index.tsx @@ -2,7 +2,7 @@ import React from 'react' import ReactDOM from 'react-dom/client' import { QueryClientProvider } from '@tanstack/react-query' -import router from './router' +import { router } from './router' import { initializeQueryClient, queryClientInitialized, diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx index 0b38010a28..a3787362e6 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { Route, Switch, BrowserRouter as Router } from 'react-router-dom' +import { useRoutes, BrowserRouter } from 'react-router-dom' import App from '../../../../src/client/App.jsx' import createAuthRequiredPage from "./auth/pages/createAuthRequiredPage" @@ -14,29 +14,33 @@ export const routeNameToRouteComponent = { RootRoute: MainPage, } as const; -const router = ( - - - - {/* - Wasp specific routes *must* go first to prevent user - defined routes from overriding them. - Details in https://github.com/wasp-lang/wasp/issues/2029 - */} - - - - {Object.entries(routes).map(([routeKey, route]) => ( - - ))} - - - -) +export function RouterRoutes() { + const routerRoutes = useRoutes([ + /* + Wasp specific routes *must* go first to prevent user + defined routes from overriding them. + Details in https://github.com/wasp-lang/wasp/issues/2029 + */ + { + path: "/oauth/callback", + element: + }, + ...(Object.entries(routes).map(([routeKey, route]) => { + const Component = routeNameToRouteComponent[routeKey] + return { + path: route.to, + element: + } + })) + ]) + + return routerRoutes +} -export default router +export const router = ( + + + + + +) diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums index 93a9abf612..495d1197bb 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums @@ -207,7 +207,7 @@ "file", "../out/sdk/wasp/package.json" ], - "77f20065f4a21450ba6d7e146b4fb0c25a5abb1c616dc7a50723c80021ebe13f" + "0f47dc4eb41bfc93d1b147b643d1c70111616524abdfaf7db22b508be536499a" ], [ [ @@ -613,7 +613,7 @@ "file", "web-app/package.json" ], - "018f64a891479362d528211d2e52a038fa8948d392dd61fb9532712202d2340b" + "784e08eec90cd536aae419328acdeaa2cf7eb8fe5524fe6704fa7c65bea284cd" ], [ [ @@ -676,7 +676,7 @@ "file", "web-app/src/index.tsx" ], - "ff83778b7f03a8f15116bc73adce607c2c13fc9cbd4228626980a530541aaeb2" + "61265d54c480ce94df81fdd0c65fa2e3c154e7d9fb9621c87a2d81e32ecd2adf" ], [ [ @@ -690,7 +690,7 @@ "file", "web-app/src/router.tsx" ], - "5641aec64e4771fde7aaedb217fbb726103c9859de65f2b6bdc51fbb2e970a3e" + "332f183ee063738189f25e0c3a94427c18e5df74a4de90448394a5f416e724c1" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/installedNpmDepsLog.json index 91b719d429..b526800b84 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"4.16.2"},{"name":"prisma","version":"4.16.2"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^5.3.3"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/react-router-dom","version":"^5.3.3"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"pg-boss","version":"^8.4.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"4.16.2"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^5.3.3"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@types/react-router-dom","version":"^5.3.3"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"4.16.2"},{"name":"prisma","version":"4.16.2"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"pg-boss","version":"^8.4.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"4.16.2"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/server/jobs/mySpecialJob.d.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/server/jobs/mySpecialJob.d.ts index 0b1d0b120a..627567f57f 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/server/jobs/mySpecialJob.d.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/server/jobs/mySpecialJob.d.ts @@ -16,7 +16,7 @@ export declare const mySpecialJob: { readonly pgBoss: { readonly cancel: () => ReturnType; readonly resume: () => ReturnType; - readonly details: () => Promise, "output" | "state"> & { + readonly details: () => Promise, "state" | "output"> & { data: JSONObject; } & ({ state: "failed"; diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/package.json b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/package.json index 433a8f95b8..541c2b7581 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/package.json +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/package.json @@ -4,8 +4,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "axios": "^1.4.0", "express": "~4.18.1", @@ -17,13 +15,14 @@ "prisma": "4.16.2", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" }, "exports": { "./api/events": "./dist/api/events.js", diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/package.json b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/package.json index 5a226845a2..aabbc68d5f 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/package.json @@ -17,13 +17,12 @@ "mitt": "3.0.0", "react-dom": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2" }, "devDependencies": { "@tsconfig/vite-react": "^2.0.0", "@types/react-dom": "^18.0.11", - "@types/react-router-dom": "^5.3.3", "@vitejs/plugin-react": "^4.2.1", "dotenv": "^16.0.3" }, diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/index.tsx b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/index.tsx index 0b7f1d9854..50044cc494 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/index.tsx +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/index.tsx @@ -2,7 +2,7 @@ import React from 'react' import ReactDOM from 'react-dom/client' import { QueryClientProvider } from '@tanstack/react-query' -import router from './router' +import { router } from './router' import { initializeQueryClient, queryClientInitialized, diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx index 9ecd93cb0f..0018d3e53d 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { Route, Switch, BrowserRouter as Router } from 'react-router-dom' +import { useRoutes, BrowserRouter } from 'react-router-dom' import { MainPage } from '../../../../src/MainPage' @@ -11,19 +11,22 @@ export const routeNameToRouteComponent = { RootRoute: MainPage, } as const; -const router = ( - - - {Object.entries(routes).map(([routeKey, route]) => ( - - ))} - - -) +export function RouterRoutes() { + const routerRoutes = useRoutes([ + ...(Object.entries(routes).map(([routeKey, route]) => { + const Component = routeNameToRouteComponent[routeKey] + return { + path: route.to, + element: + } + })) + ]) + + return routerRoutes +} -export default router +export const router = ( + + + +) diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums index 0e01ccf24d..48e8ba7a83 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums @@ -200,7 +200,7 @@ "file", "../out/sdk/wasp/package.json" ], - "995eabb6d01fa0da18e4b83c6686003fc6fcc1b69acc6a6e989281b1b678621a" + "2cc606472b051688741cc5c7045a08e26b62aea573df70d89eb4862d7c1c37b8" ], [ [ @@ -543,7 +543,7 @@ "file", "web-app/package.json" ], - "19a5d3854b7614748db2af7b574afc66951d5b6eff128ca3eab36445b331686f" + "110ad3bc2c8b78a8ad20e9e84ea22fca41f5d20c31e62f69d27204fb5753ef28" ], [ [ @@ -606,7 +606,7 @@ "file", "web-app/src/index.tsx" ], - "ff83778b7f03a8f15116bc73adce607c2c13fc9cbd4228626980a530541aaeb2" + "61265d54c480ce94df81fdd0c65fa2e3c154e7d9fb9621c87a2d81e32ecd2adf" ], [ [ @@ -620,7 +620,7 @@ "file", "web-app/src/router.tsx" ], - "5641aec64e4771fde7aaedb217fbb726103c9859de65f2b6bdc51fbb2e970a3e" + "332f183ee063738189f25e0c3a94427c18e5df74a4de90448394a5f416e724c1" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/installedNpmDepsLog.json index 7880e96505..39d0eb4658 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"4.16.2"},{"name":"prisma","version":"4.16.2"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^5.3.3"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/react-router-dom","version":"^5.3.3"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"4.16.2"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^5.3.3"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@types/react-router-dom","version":"^5.3.3"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"4.16.2"},{"name":"prisma","version":"4.16.2"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"4.16.2"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/package.json b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/package.json index b5eda22d32..c6c32f8002 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/package.json +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/package.json @@ -4,8 +4,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "axios": "^1.4.0", "express": "~4.18.1", @@ -16,13 +14,14 @@ "prisma": "4.16.2", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" }, "exports": { "./api/events": "./dist/api/events.js", diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/package.json b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/package.json index b21fe30bf4..ace8509aeb 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/package.json @@ -17,13 +17,12 @@ "mitt": "3.0.0", "react-dom": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2" }, "devDependencies": { "@tsconfig/vite-react": "^2.0.0", "@types/react-dom": "^18.0.11", - "@types/react-router-dom": "^5.3.3", "@vitejs/plugin-react": "^4.2.1", "dotenv": "^16.0.3" }, diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/index.tsx b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/index.tsx index 0b7f1d9854..50044cc494 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/index.tsx +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/index.tsx @@ -2,7 +2,7 @@ import React from 'react' import ReactDOM from 'react-dom/client' import { QueryClientProvider } from '@tanstack/react-query' -import router from './router' +import { router } from './router' import { initializeQueryClient, queryClientInitialized, diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx index 9ecd93cb0f..0018d3e53d 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { Route, Switch, BrowserRouter as Router } from 'react-router-dom' +import { useRoutes, BrowserRouter } from 'react-router-dom' import { MainPage } from '../../../../src/MainPage' @@ -11,19 +11,22 @@ export const routeNameToRouteComponent = { RootRoute: MainPage, } as const; -const router = ( - - - {Object.entries(routes).map(([routeKey, route]) => ( - - ))} - - -) +export function RouterRoutes() { + const routerRoutes = useRoutes([ + ...(Object.entries(routes).map(([routeKey, route]) => { + const Component = routeNameToRouteComponent[routeKey] + return { + path: route.to, + element: + } + })) + ]) + + return routerRoutes +} -export default router +export const router = ( + + + +) From 6ac1c85ed3368318c4e01591725f0811035fbf79 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Tue, 27 Aug 2024 16:39:14 +0200 Subject: [PATCH 03/31] Update headless tests --- .../templates/react-app/src/router.tsx | 45 +- .../waspBuild/.wasp/build/.waspchecksums | 2 +- .../.wasp/build/web-app/src/router.tsx | 11 +- .../waspCompile/.wasp/out/.waspchecksums | 2 +- .../.wasp/out/web-app/src/router.tsx | 11 +- .../waspComplexTest/.wasp/out/.waspchecksums | 2 +- .../.wasp/out/web-app/src/router.tsx | 33 +- .../waspJob/.wasp/out/.waspchecksums | 2 +- .../waspJob/.wasp/out/web-app/src/router.tsx | 11 +- .../waspMigrate/.wasp/out/.waspchecksums | 2 +- .../.wasp/out/web-app/src/router.tsx | 11 +- .../examples/todoApp/package-lock.json | 1434 ++++++++++++----- .../todoApp/src/client/pages/Task.tsx | 6 +- 13 files changed, 1131 insertions(+), 441 deletions(-) diff --git a/waspc/data/Generator/templates/react-app/src/router.tsx b/waspc/data/Generator/templates/react-app/src/router.tsx index c0c2928c30..ba4a2442c7 100644 --- a/waspc/data/Generator/templates/react-app/src/router.tsx +++ b/waspc/data/Generator/templates/react-app/src/router.tsx @@ -26,25 +26,26 @@ export const routeNameToRouteComponent = { } as const; export function RouterRoutes() { - const routerRoutes = useRoutes([ - {=# isExternalAuthEnabled =} - /* - Wasp specific routes *must* go first to prevent user - defined routes from overriding them. - Details in https://github.com/wasp-lang/wasp/issues/2029 - */ - { - path: "{= oAuthCallbackPath =}", - element: - }, - {=/ isExternalAuthEnabled =} - ...(Object.entries(routes).map(([routeKey, route]) => { + const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const Component = routeNameToRouteComponent[routeKey] return { path: route.to, element: } - })) + }) + const routerRoutes = useRoutes([ + {=# isExternalAuthEnabled =} + /* + Wasp specific routes *must* go first to prevent user + defined routes from overriding them. + Details in https://github.com/wasp-lang/wasp/issues/2029 + */ + { + path: "{= oAuthCallbackPath =}", + element: + }, + {=/ isExternalAuthEnabled =} + ...userDefinedRoutes, ]) return routerRoutes @@ -52,12 +53,12 @@ export function RouterRoutes() { export const router = ( - {=# rootComponent.isDefined =} - <{= rootComponent.importIdentifier =}> - {=/ rootComponent.isDefined =} - - {=# rootComponent.isDefined =} - - {=/ rootComponent.isDefined =} - + {=# rootComponent.isDefined =} + <{= rootComponent.importIdentifier =}> + {=/ rootComponent.isDefined =} + + {=# rootComponent.isDefined =} + + {=/ rootComponent.isDefined =} + ) diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums index 10d66ffd58..6cd6220740 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums @@ -606,7 +606,7 @@ "file", "web-app/src/router.tsx" ], - "332f183ee063738189f25e0c3a94427c18e5df74a4de90448394a5f416e724c1" + "044ab50597ebc8777b8353c865a115ef8ff8f43f8f29da85df1a7cd25db16c8c" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx index 0018d3e53d..b0e0c5230c 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx @@ -12,14 +12,15 @@ export const routeNameToRouteComponent = { } as const; export function RouterRoutes() { - const routerRoutes = useRoutes([ - ...(Object.entries(routes).map(([routeKey, route]) => { + const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const Component = routeNameToRouteComponent[routeKey] return { path: route.to, element: } - })) + }) + const routerRoutes = useRoutes([ + ...userDefinedRoutes, ]) return routerRoutes @@ -27,6 +28,6 @@ export function RouterRoutes() { export const router = ( - - + + ) diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums index 4fd5d3deda..4437afe4bc 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums @@ -620,7 +620,7 @@ "file", "web-app/src/router.tsx" ], - "332f183ee063738189f25e0c3a94427c18e5df74a4de90448394a5f416e724c1" + "044ab50597ebc8777b8353c865a115ef8ff8f43f8f29da85df1a7cd25db16c8c" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx index 0018d3e53d..b0e0c5230c 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx @@ -12,14 +12,15 @@ export const routeNameToRouteComponent = { } as const; export function RouterRoutes() { - const routerRoutes = useRoutes([ - ...(Object.entries(routes).map(([routeKey, route]) => { + const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const Component = routeNameToRouteComponent[routeKey] return { path: route.to, element: } - })) + }) + const routerRoutes = useRoutes([ + ...userDefinedRoutes, ]) return routerRoutes @@ -27,6 +28,6 @@ export function RouterRoutes() { export const router = ( - - + + ) diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums index f98408691f..d81b3bbb67 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums @@ -1264,7 +1264,7 @@ "file", "web-app/src/router.tsx" ], - "059c8f5095546f080724acacbc790ab09c2fa1c45e1db86b1b3257b6593682ee" + "df04a13b506c2d5e55d06494ecae37fe2976ff568bcb282692d98656a7ff3f37" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx index a3787362e6..2c72b00c48 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx @@ -15,23 +15,24 @@ export const routeNameToRouteComponent = { } as const; export function RouterRoutes() { - const routerRoutes = useRoutes([ - /* - Wasp specific routes *must* go first to prevent user - defined routes from overriding them. - Details in https://github.com/wasp-lang/wasp/issues/2029 - */ - { - path: "/oauth/callback", - element: - }, - ...(Object.entries(routes).map(([routeKey, route]) => { + const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const Component = routeNameToRouteComponent[routeKey] return { path: route.to, element: } - })) + }) + const routerRoutes = useRoutes([ + /* + Wasp specific routes *must* go first to prevent user + defined routes from overriding them. + Details in https://github.com/wasp-lang/wasp/issues/2029 + */ + { + path: "/oauth/callback", + element: + }, + ...userDefinedRoutes, ]) return routerRoutes @@ -39,8 +40,8 @@ export function RouterRoutes() { export const router = ( - - - - + + + + ) diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums index 495d1197bb..92730d0548 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums @@ -690,7 +690,7 @@ "file", "web-app/src/router.tsx" ], - "332f183ee063738189f25e0c3a94427c18e5df74a4de90448394a5f416e724c1" + "044ab50597ebc8777b8353c865a115ef8ff8f43f8f29da85df1a7cd25db16c8c" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx index 0018d3e53d..b0e0c5230c 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx @@ -12,14 +12,15 @@ export const routeNameToRouteComponent = { } as const; export function RouterRoutes() { - const routerRoutes = useRoutes([ - ...(Object.entries(routes).map(([routeKey, route]) => { + const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const Component = routeNameToRouteComponent[routeKey] return { path: route.to, element: } - })) + }) + const routerRoutes = useRoutes([ + ...userDefinedRoutes, ]) return routerRoutes @@ -27,6 +28,6 @@ export function RouterRoutes() { export const router = ( - - + + ) diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums index 48e8ba7a83..2fb893faca 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums @@ -620,7 +620,7 @@ "file", "web-app/src/router.tsx" ], - "332f183ee063738189f25e0c3a94427c18e5df74a4de90448394a5f416e724c1" + "044ab50597ebc8777b8353c865a115ef8ff8f43f8f29da85df1a7cd25db16c8c" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx index 0018d3e53d..b0e0c5230c 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx @@ -12,14 +12,15 @@ export const routeNameToRouteComponent = { } as const; export function RouterRoutes() { - const routerRoutes = useRoutes([ - ...(Object.entries(routes).map(([routeKey, route]) => { + const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const Component = routeNameToRouteComponent[routeKey] return { path: route.to, element: } - })) + }) + const routerRoutes = useRoutes([ + ...userDefinedRoutes, ]) return routerRoutes @@ -27,6 +28,6 @@ export function RouterRoutes() { export const router = ( - - + + ) diff --git a/waspc/headless-test/examples/todoApp/package-lock.json b/waspc/headless-test/examples/todoApp/package-lock.json index cd6954c063..80ced7117e 100644 --- a/waspc/headless-test/examples/todoApp/package-lock.json +++ b/waspc/headless-test/examples/todoApp/package-lock.json @@ -25,14 +25,14 @@ "license": "ISC", "dependencies": { "@lucia-auth/adapter-prisma": "^4.0.0", + "@node-rs/argon2": "^1.8.3", "@prisma/client": "4.16.2", "@stitches/react": "^1.2.8", "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", + "arctic": "^1.2.1", "autoprefixer": "^10.4.13", "axios": "^1.4.0", "express": "~4.18.1", @@ -48,44 +48,84 @@ "prisma": "4.16.2", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "tailwindcss": "^3.2.7", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" + } + }, + ".wasp/out/sdk/wasp/node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", + "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" + } + }, + ".wasp/out/sdk/wasp/node_modules/@napi-rs/wasm-runtime/node_modules/@emnapi/core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.2.0.tgz", + "integrity": "sha512-E7Vgw78I93we4ZWdYCb4DGAwRROGkMIXk7/y87UmANR+J6qsWusmC3gLt0H+O0KOt5e6O38U8oJamgbudrES/w==", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.1", + "tslib": "^2.4.0" + } + }, + ".wasp/out/sdk/wasp/node_modules/@napi-rs/wasm-runtime/node_modules/@emnapi/runtime": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", + "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + ".wasp/out/sdk/wasp/node_modules/@napi-rs/wasm-runtime/node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2/-/argon2-1.7.0.tgz", - "integrity": "sha512-zfULc+/tmcWcxn+nHkbyY8vP3+MpEqKORbszt4UkpqZgBgDAAIYvuDN/zukfTgdmo6tmJKKVfzigZOPk4LlIog==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2/-/argon2-1.8.3.tgz", + "integrity": "sha512-sf/QAEI59hsMEEE2J8vO4hKrXrv4Oplte3KI2N4MhMDYpytH0drkVfErmHBfWFZxxIEK03fX1WsBNswS2nIZKg==", "engines": { "node": ">= 10" }, "optionalDependencies": { - "@node-rs/argon2-android-arm-eabi": "1.7.0", - "@node-rs/argon2-android-arm64": "1.7.0", - "@node-rs/argon2-darwin-arm64": "1.7.0", - "@node-rs/argon2-darwin-x64": "1.7.0", - "@node-rs/argon2-freebsd-x64": "1.7.0", - "@node-rs/argon2-linux-arm-gnueabihf": "1.7.0", - "@node-rs/argon2-linux-arm64-gnu": "1.7.0", - "@node-rs/argon2-linux-arm64-musl": "1.7.0", - "@node-rs/argon2-linux-x64-gnu": "1.7.0", - "@node-rs/argon2-linux-x64-musl": "1.7.0", - "@node-rs/argon2-wasm32-wasi": "1.7.0", - "@node-rs/argon2-win32-arm64-msvc": "1.7.0", - "@node-rs/argon2-win32-ia32-msvc": "1.7.0", - "@node-rs/argon2-win32-x64-msvc": "1.7.0" + "@node-rs/argon2-android-arm-eabi": "1.8.3", + "@node-rs/argon2-android-arm64": "1.8.3", + "@node-rs/argon2-darwin-arm64": "1.8.3", + "@node-rs/argon2-darwin-x64": "1.8.3", + "@node-rs/argon2-freebsd-x64": "1.8.3", + "@node-rs/argon2-linux-arm-gnueabihf": "1.8.3", + "@node-rs/argon2-linux-arm64-gnu": "1.8.3", + "@node-rs/argon2-linux-arm64-musl": "1.8.3", + "@node-rs/argon2-linux-x64-gnu": "1.8.3", + "@node-rs/argon2-linux-x64-musl": "1.8.3", + "@node-rs/argon2-wasm32-wasi": "1.8.3", + "@node-rs/argon2-win32-arm64-msvc": "1.8.3", + "@node-rs/argon2-win32-ia32-msvc": "1.8.3", + "@node-rs/argon2-win32-x64-msvc": "1.8.3" } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-android-arm-eabi": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-android-arm-eabi/-/argon2-android-arm-eabi-1.7.0.tgz", - "integrity": "sha512-udDqkr5P9E+wYX1SZwAVPdyfYvaF4ry9Tm+R9LkfSHbzWH0uhU6zjIwNRp7m+n4gx691rk+lqqDAIP8RLKwbhg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-android-arm-eabi/-/argon2-android-arm-eabi-1.8.3.tgz", + "integrity": "sha512-JFZPlNM0A8Og+Tncb8UZsQrhEMlbHBXPsT3hRoKImzVmTmq28Os0ucFWow0AACp2coLHBSydXH3Dh0lZup3rWw==", "cpu": [ "arm" ], @@ -98,9 +138,9 @@ } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-android-arm64": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-android-arm64/-/argon2-android-arm64-1.7.0.tgz", - "integrity": "sha512-s9j/G30xKUx8WU50WIhF0fIl1EdhBGq0RQ06lEhZ0Gi0ap8lhqbE2Bn5h3/G2D1k0Dx+yjeVVNmt/xOQIRG38A==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-android-arm64/-/argon2-android-arm64-1.8.3.tgz", + "integrity": "sha512-zaf8P3T92caeW2xnMA7P1QvRA4pIt/04oilYP44XlTCtMye//vwXDMeK53sl7dvYiJKnzAWDRx41k8vZvpZazg==", "cpu": [ "arm64" ], @@ -113,9 +153,9 @@ } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-darwin-arm64": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-darwin-arm64/-/argon2-darwin-arm64-1.7.0.tgz", - "integrity": "sha512-ZIz4L6HGOB9U1kW23g+m7anGNuTZ0RuTw0vNp3o+2DWpb8u8rODq6A8tH4JRL79S+Co/Nq608m9uackN2pe0Rw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-darwin-arm64/-/argon2-darwin-arm64-1.8.3.tgz", + "integrity": "sha512-DV/IbmLGdNXBtXb5o2UI5ba6kvqXqPAJgmMOTUCuHeBSp992GlLHdfU4rzGu0dNrxudBnunNZv+crd0YdEQSUA==", "cpu": [ "arm64" ], @@ -128,9 +168,9 @@ } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-darwin-x64": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-darwin-x64/-/argon2-darwin-x64-1.7.0.tgz", - "integrity": "sha512-5oi/pxqVhODW/pj1+3zElMTn/YukQeywPHHYDbcAW3KsojFjKySfhcJMd1DjKTc+CHQI+4lOxZzSUzK7mI14Hw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-darwin-x64/-/argon2-darwin-x64-1.8.3.tgz", + "integrity": "sha512-YMjmBGFZhLfYjfQ2gll9A+BZu/zAMV7lWZIbKxb7ZgEofILQwuGmExjDtY3Jplido/6leCEdpmlk2oIsME00LA==", "cpu": [ "x64" ], @@ -143,9 +183,9 @@ } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-freebsd-x64": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-freebsd-x64/-/argon2-freebsd-x64-1.7.0.tgz", - "integrity": "sha512-Ify08683hA4QVXYoIm5SUWOY5DPIT/CMB0CQT+IdxQAg/F+qp342+lUkeAtD5bvStQuCx/dFO3bnnzoe2clMhA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-freebsd-x64/-/argon2-freebsd-x64-1.8.3.tgz", + "integrity": "sha512-Hq3Rj5Yb2RolTG/luRPnv+XiGCbi5nAK25Pc8ou/tVapwX+iktEm/NXbxc5zsMxraYVkCvfdwBjweC5O+KqCGw==", "cpu": [ "x64" ], @@ -158,9 +198,9 @@ } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-linux-arm-gnueabihf": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm-gnueabihf/-/argon2-linux-arm-gnueabihf-1.7.0.tgz", - "integrity": "sha512-7DjDZ1h5AUHAtRNjD19RnQatbhL+uuxBASuuXIBu4/w6Dx8n7YPxwTP4MXfsvuRgKuMWiOb/Ub/HJ3kXVCXRkg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm-gnueabihf/-/argon2-linux-arm-gnueabihf-1.8.3.tgz", + "integrity": "sha512-x49l8RgzKoG0/V0IXa5rrEl1TcJEc936ctlYFvqcunSOyowZ6kiWtrp1qrbOR8gbaNILl11KTF52vF6+h8UlEQ==", "cpu": [ "arm" ], @@ -173,9 +213,9 @@ } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-linux-arm64-gnu": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm64-gnu/-/argon2-linux-arm64-gnu-1.7.0.tgz", - "integrity": "sha512-nJDoMP4Y3YcqGswE4DvP080w6O24RmnFEDnL0emdI8Nou17kNYBzP2546Nasx9GCyLzRcYQwZOUjrtUuQ+od2g==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm64-gnu/-/argon2-linux-arm64-gnu-1.8.3.tgz", + "integrity": "sha512-gJesam/qA63reGkb9qJ2TjFSLBtY41zQh2oei7nfnYsmVQPuHHWItJxEa1Bm21SPW53gZex4jFJbDIgj0+PxIw==", "cpu": [ "arm64" ], @@ -188,9 +228,9 @@ } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-linux-arm64-musl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm64-musl/-/argon2-linux-arm64-musl-1.7.0.tgz", - "integrity": "sha512-BKWS8iVconhE3jrb9mj6t1J9vwUqQPpzCbUKxfTGJfc+kNL58F1SXHBoe2cDYGnHrFEHTY0YochzXoAfm4Dm/A==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm64-musl/-/argon2-linux-arm64-musl-1.8.3.tgz", + "integrity": "sha512-7O6kQdSKzB4Tjx/EBa8zKIxnmLkQE8VdJgPm6Ksrpn+ueo0mx2xf76fIDnbbTCtm3UbB+y+FkTo2wLA7tOqIKg==", "cpu": [ "arm64" ], @@ -203,9 +243,9 @@ } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-linux-x64-gnu": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-x64-gnu/-/argon2-linux-x64-gnu-1.7.0.tgz", - "integrity": "sha512-EmgqZOlf4Jurk/szW1iTsVISx25bKksVC5uttJDUloTgsAgIGReCpUUO1R24pBhu9ESJa47iv8NSf3yAfGv6jQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-x64-gnu/-/argon2-linux-x64-gnu-1.8.3.tgz", + "integrity": "sha512-OBH+EFG7BGjFyldaao2H2gSCLmjtrrwf420B1L+lFn7JLW9UAjsIPFKAcWsYwPa/PwYzIge9Y7SGcpqlsSEX0w==", "cpu": [ "x64" ], @@ -218,9 +258,9 @@ } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-linux-x64-musl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-x64-musl/-/argon2-linux-x64-musl-1.7.0.tgz", - "integrity": "sha512-/o1efYCYIxjfuoRYyBTi2Iy+1iFfhqHCvvVsnjNSgO1xWiWrX0Rrt/xXW5Zsl7vS2Y+yu8PL8KFWRzZhaVxfKA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-x64-musl/-/argon2-linux-x64-musl-1.8.3.tgz", + "integrity": "sha512-bDbMuyekIxZaN7NaX+gHVkOyABB8bcMEJYeRPW1vCXKHj3brJns1wiUFSxqeUXreupifNVJlQfPt1Y5B/vFXgQ==", "cpu": [ "x64" ], @@ -233,27 +273,24 @@ } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-wasm32-wasi": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-wasm32-wasi/-/argon2-wasm32-wasi-1.7.0.tgz", - "integrity": "sha512-Evmk9VcxqnuwQftfAfYEr6YZYSPLzmKUsbFIMep5nTt9PT4XYRFAERj7wNYp+rOcBenF3X4xoB+LhwcOMTNE5w==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-wasm32-wasi/-/argon2-wasm32-wasi-1.8.3.tgz", + "integrity": "sha512-NBf2cMCDbNKMzp13Pog8ZPmI0M9U4Ak5b95EUjkp17kdKZFds12dwW67EMnj7Zy+pRqby2QLECaWebDYfNENTg==", "cpu": [ "wasm32" ], "optional": true, "dependencies": { - "@emnapi/core": "^0.45.0", - "@emnapi/runtime": "^0.45.0", - "@tybys/wasm-util": "^0.8.1", - "memfs-browser": "^3.4.13000" + "@napi-rs/wasm-runtime": "^0.2.3" }, "engines": { "node": ">=14.0.0" } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-win32-arm64-msvc": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-arm64-msvc/-/argon2-win32-arm64-msvc-1.7.0.tgz", - "integrity": "sha512-qgsU7T004COWWpSA0tppDqDxbPLgg8FaU09krIJ7FBl71Sz8SFO40h7fDIjfbTT5w7u6mcaINMQ5bSHu75PCaA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-arm64-msvc/-/argon2-win32-arm64-msvc-1.8.3.tgz", + "integrity": "sha512-AHpPo7UbdW5WWjwreVpgFSY0o1RY4A7cUFaqDXZB2OqEuyrhMxBdZct9PX7PQKI18D85pLsODnR+gvVuTwJ6rQ==", "cpu": [ "arm64" ], @@ -266,9 +303,9 @@ } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-win32-ia32-msvc": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-ia32-msvc/-/argon2-win32-ia32-msvc-1.7.0.tgz", - "integrity": "sha512-JGafwWYQ/HpZ3XSwP4adQ6W41pRvhcdXvpzIWtKvX+17+xEXAe2nmGWM6s27pVkg1iV2ZtoYLRDkOUoGqZkCcg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-ia32-msvc/-/argon2-win32-ia32-msvc-1.8.3.tgz", + "integrity": "sha512-bqzn2rcQkEwCINefhm69ttBVVkgHJb/V03DdBKsPFtiX6H47axXKz62d1imi26zFXhOEYxhKbu3js03GobJOLw==", "cpu": [ "ia32" ], @@ -281,9 +318,9 @@ } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2-win32-x64-msvc": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-x64-msvc/-/argon2-win32-x64-msvc-1.7.0.tgz", - "integrity": "sha512-9oq4ShyFakw8AG3mRls0AoCpxBFcimYx7+jvXeAf2OqKNO+mSA6eZ9z7KQeVCi0+SOEUYxMGf5UiGiDb9R6+9Q==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-x64-msvc/-/argon2-win32-x64-msvc-1.8.3.tgz", + "integrity": "sha512-ILlrRThdbp5xNR5gwYM2ic1n/vG5rJ8dQZ+YMRqksl+lnTJ/6FDe5BOyIhiPtiDwlCiCtUA+1NxpDB9KlUCAIA==", "cpu": [ "x64" ], @@ -545,104 +582,341 @@ "@node-rs/bcrypt": "1.9.0" } }, - "node_modules/@adobe/css-tools": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", - "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==" - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2/-/argon2-1.7.0.tgz", + "integrity": "sha512-zfULc+/tmcWcxn+nHkbyY8vP3+MpEqKORbszt4UkpqZgBgDAAIYvuDN/zukfTgdmo6tmJKKVfzigZOPk4LlIog==", "engines": { - "node": ">=10" + "node": ">= 10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@node-rs/argon2-android-arm-eabi": "1.7.0", + "@node-rs/argon2-android-arm64": "1.7.0", + "@node-rs/argon2-darwin-arm64": "1.7.0", + "@node-rs/argon2-darwin-x64": "1.7.0", + "@node-rs/argon2-freebsd-x64": "1.7.0", + "@node-rs/argon2-linux-arm-gnueabihf": "1.7.0", + "@node-rs/argon2-linux-arm64-gnu": "1.7.0", + "@node-rs/argon2-linux-arm64-musl": "1.7.0", + "@node-rs/argon2-linux-x64-gnu": "1.7.0", + "@node-rs/argon2-linux-x64-musl": "1.7.0", + "@node-rs/argon2-wasm32-wasi": "1.7.0", + "@node-rs/argon2-win32-arm64-msvc": "1.7.0", + "@node-rs/argon2-win32-ia32-msvc": "1.7.0", + "@node-rs/argon2-win32-x64-msvc": "1.7.0" } }, - "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-android-arm-eabi": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-android-arm-eabi/-/argon2-android-arm-eabi-1.7.0.tgz", + "integrity": "sha512-udDqkr5P9E+wYX1SZwAVPdyfYvaF4ry9Tm+R9LkfSHbzWH0uhU6zjIwNRp7m+n4gx691rk+lqqDAIP8RLKwbhg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" + "node": ">= 10" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-android-arm64": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-android-arm64/-/argon2-android-arm64-1.7.0.tgz", + "integrity": "sha512-s9j/G30xKUx8WU50WIhF0fIl1EdhBGq0RQ06lEhZ0Gi0ap8lhqbE2Bn5h3/G2D1k0Dx+yjeVVNmt/xOQIRG38A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=4" + "node": ">= 10" } }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-darwin-arm64": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-darwin-arm64/-/argon2-darwin-arm64-1.7.0.tgz", + "integrity": "sha512-ZIz4L6HGOB9U1kW23g+m7anGNuTZ0RuTw0vNp3o+2DWpb8u8rODq6A8tH4JRL79S+Co/Nq608m9uackN2pe0Rw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4" + "node": ">= 10" } }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-darwin-x64": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-darwin-x64/-/argon2-darwin-x64-1.7.0.tgz", + "integrity": "sha512-5oi/pxqVhODW/pj1+3zElMTn/YukQeywPHHYDbcAW3KsojFjKySfhcJMd1DjKTc+CHQI+4lOxZzSUzK7mI14Hw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-freebsd-x64": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-freebsd-x64/-/argon2-freebsd-x64-1.7.0.tgz", + "integrity": "sha512-Ify08683hA4QVXYoIm5SUWOY5DPIT/CMB0CQT+IdxQAg/F+qp342+lUkeAtD5bvStQuCx/dFO3bnnzoe2clMhA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=4" + "node": ">= 10" } }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-linux-arm-gnueabihf": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm-gnueabihf/-/argon2-linux-arm-gnueabihf-1.7.0.tgz", + "integrity": "sha512-7DjDZ1h5AUHAtRNjD19RnQatbhL+uuxBASuuXIBu4/w6Dx8n7YPxwTP4MXfsvuRgKuMWiOb/Ub/HJ3kXVCXRkg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">= 10" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-linux-arm64-gnu": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm64-gnu/-/argon2-linux-arm64-gnu-1.7.0.tgz", + "integrity": "sha512-nJDoMP4Y3YcqGswE4DvP080w6O24RmnFEDnL0emdI8Nou17kNYBzP2546Nasx9GCyLzRcYQwZOUjrtUuQ+od2g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">= 10" } }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-linux-arm64-musl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm64-musl/-/argon2-linux-arm64-musl-1.7.0.tgz", + "integrity": "sha512-BKWS8iVconhE3jrb9mj6t1J9vwUqQPpzCbUKxfTGJfc+kNL58F1SXHBoe2cDYGnHrFEHTY0YochzXoAfm4Dm/A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-linux-x64-gnu": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-x64-gnu/-/argon2-linux-x64-gnu-1.7.0.tgz", + "integrity": "sha512-EmgqZOlf4Jurk/szW1iTsVISx25bKksVC5uttJDUloTgsAgIGReCpUUO1R24pBhu9ESJa47iv8NSf3yAfGv6jQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-linux-x64-musl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-x64-musl/-/argon2-linux-x64-musl-1.7.0.tgz", + "integrity": "sha512-/o1efYCYIxjfuoRYyBTi2Iy+1iFfhqHCvvVsnjNSgO1xWiWrX0Rrt/xXW5Zsl7vS2Y+yu8PL8KFWRzZhaVxfKA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-wasm32-wasi": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-wasm32-wasi/-/argon2-wasm32-wasi-1.7.0.tgz", + "integrity": "sha512-Evmk9VcxqnuwQftfAfYEr6YZYSPLzmKUsbFIMep5nTt9PT4XYRFAERj7wNYp+rOcBenF3X4xoB+LhwcOMTNE5w==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/core": "^0.45.0", + "@emnapi/runtime": "^0.45.0", + "@tybys/wasm-util": "^0.8.1", + "memfs-browser": "^3.4.13000" + }, + "engines": { + "node": ">=14.0.0" + } + }, + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-win32-arm64-msvc": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-arm64-msvc/-/argon2-win32-arm64-msvc-1.7.0.tgz", + "integrity": "sha512-qgsU7T004COWWpSA0tppDqDxbPLgg8FaU09krIJ7FBl71Sz8SFO40h7fDIjfbTT5w7u6mcaINMQ5bSHu75PCaA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-win32-ia32-msvc": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-ia32-msvc/-/argon2-win32-ia32-msvc-1.7.0.tgz", + "integrity": "sha512-JGafwWYQ/HpZ3XSwP4adQ6W41pRvhcdXvpzIWtKvX+17+xEXAe2nmGWM6s27pVkg1iV2ZtoYLRDkOUoGqZkCcg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + ".wasp/out/sdk/wasp/node_modules/oslo/node_modules/@node-rs/argon2-win32-x64-msvc": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-x64-msvc/-/argon2-win32-x64-msvc-1.7.0.tgz", + "integrity": "sha512-9oq4ShyFakw8AG3mRls0AoCpxBFcimYx7+jvXeAf2OqKNO+mSA6eZ9z7KQeVCi0+SOEUYxMGf5UiGiDb9R6+9Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", + "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -735,6 +1009,15 @@ "tslib": "^2.4.0" } }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", + "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.19.12", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", @@ -1805,6 +2088,14 @@ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81.tgz", "integrity": "sha512-q617EUWfRIDTriWADZ4YiWRZXCa/WuhNgLTVd+HqWLffjMSPzyM5uOWoauX91wvQClSKZU4pzI4JJLQ9Kl62Qg==" }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.10.0.tgz", @@ -2245,6 +2536,7 @@ "version": "4.17.43", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2252,11 +2544,6 @@ "@types/send": "*" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -2271,7 +2558,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -2294,12 +2582,14 @@ "node_modules/@types/qs": { "version": "6.9.11", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.55", @@ -2319,25 +2609,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", @@ -2347,6 +2618,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -2542,143 +2814,638 @@ "negotiator": "0.6.3" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arctic": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/arctic/-/arctic-1.9.2.tgz", + "integrity": "sha512-VTnGpYx+ypboJdNrWnK17WeD7zN/xSCHnpecd5QYsBfVZde/5i+7DJ1wrf/ioSDMiEjagXmyNWAE3V2C9f1hNg==", + "dependencies": { + "oslo": "1.2.0" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2/-/argon2-1.7.0.tgz", + "integrity": "sha512-zfULc+/tmcWcxn+nHkbyY8vP3+MpEqKORbszt4UkpqZgBgDAAIYvuDN/zukfTgdmo6tmJKKVfzigZOPk4LlIog==", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@node-rs/argon2-android-arm-eabi": "1.7.0", + "@node-rs/argon2-android-arm64": "1.7.0", + "@node-rs/argon2-darwin-arm64": "1.7.0", + "@node-rs/argon2-darwin-x64": "1.7.0", + "@node-rs/argon2-freebsd-x64": "1.7.0", + "@node-rs/argon2-linux-arm-gnueabihf": "1.7.0", + "@node-rs/argon2-linux-arm64-gnu": "1.7.0", + "@node-rs/argon2-linux-arm64-musl": "1.7.0", + "@node-rs/argon2-linux-x64-gnu": "1.7.0", + "@node-rs/argon2-linux-x64-musl": "1.7.0", + "@node-rs/argon2-wasm32-wasi": "1.7.0", + "@node-rs/argon2-win32-arm64-msvc": "1.7.0", + "@node-rs/argon2-win32-ia32-msvc": "1.7.0", + "@node-rs/argon2-win32-x64-msvc": "1.7.0" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-android-arm-eabi": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-android-arm-eabi/-/argon2-android-arm-eabi-1.7.0.tgz", + "integrity": "sha512-udDqkr5P9E+wYX1SZwAVPdyfYvaF4ry9Tm+R9LkfSHbzWH0uhU6zjIwNRp7m+n4gx691rk+lqqDAIP8RLKwbhg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-android-arm64": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-android-arm64/-/argon2-android-arm64-1.7.0.tgz", + "integrity": "sha512-s9j/G30xKUx8WU50WIhF0fIl1EdhBGq0RQ06lEhZ0Gi0ap8lhqbE2Bn5h3/G2D1k0Dx+yjeVVNmt/xOQIRG38A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-darwin-arm64": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-darwin-arm64/-/argon2-darwin-arm64-1.7.0.tgz", + "integrity": "sha512-ZIz4L6HGOB9U1kW23g+m7anGNuTZ0RuTw0vNp3o+2DWpb8u8rODq6A8tH4JRL79S+Co/Nq608m9uackN2pe0Rw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-darwin-x64": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-darwin-x64/-/argon2-darwin-x64-1.7.0.tgz", + "integrity": "sha512-5oi/pxqVhODW/pj1+3zElMTn/YukQeywPHHYDbcAW3KsojFjKySfhcJMd1DjKTc+CHQI+4lOxZzSUzK7mI14Hw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-freebsd-x64": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-freebsd-x64/-/argon2-freebsd-x64-1.7.0.tgz", + "integrity": "sha512-Ify08683hA4QVXYoIm5SUWOY5DPIT/CMB0CQT+IdxQAg/F+qp342+lUkeAtD5bvStQuCx/dFO3bnnzoe2clMhA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-linux-arm-gnueabihf": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm-gnueabihf/-/argon2-linux-arm-gnueabihf-1.7.0.tgz", + "integrity": "sha512-7DjDZ1h5AUHAtRNjD19RnQatbhL+uuxBASuuXIBu4/w6Dx8n7YPxwTP4MXfsvuRgKuMWiOb/Ub/HJ3kXVCXRkg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-linux-arm64-gnu": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm64-gnu/-/argon2-linux-arm64-gnu-1.7.0.tgz", + "integrity": "sha512-nJDoMP4Y3YcqGswE4DvP080w6O24RmnFEDnL0emdI8Nou17kNYBzP2546Nasx9GCyLzRcYQwZOUjrtUuQ+od2g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-linux-arm64-musl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm64-musl/-/argon2-linux-arm64-musl-1.7.0.tgz", + "integrity": "sha512-BKWS8iVconhE3jrb9mj6t1J9vwUqQPpzCbUKxfTGJfc+kNL58F1SXHBoe2cDYGnHrFEHTY0YochzXoAfm4Dm/A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-linux-x64-gnu": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-x64-gnu/-/argon2-linux-x64-gnu-1.7.0.tgz", + "integrity": "sha512-EmgqZOlf4Jurk/szW1iTsVISx25bKksVC5uttJDUloTgsAgIGReCpUUO1R24pBhu9ESJa47iv8NSf3yAfGv6jQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-linux-x64-musl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-x64-musl/-/argon2-linux-x64-musl-1.7.0.tgz", + "integrity": "sha512-/o1efYCYIxjfuoRYyBTi2Iy+1iFfhqHCvvVsnjNSgO1xWiWrX0Rrt/xXW5Zsl7vS2Y+yu8PL8KFWRzZhaVxfKA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-wasm32-wasi": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-wasm32-wasi/-/argon2-wasm32-wasi-1.7.0.tgz", + "integrity": "sha512-Evmk9VcxqnuwQftfAfYEr6YZYSPLzmKUsbFIMep5nTt9PT4XYRFAERj7wNYp+rOcBenF3X4xoB+LhwcOMTNE5w==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/core": "^0.45.0", + "@emnapi/runtime": "^0.45.0", + "@tybys/wasm-util": "^0.8.1", + "memfs-browser": "^3.4.13000" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-win32-arm64-msvc": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-arm64-msvc/-/argon2-win32-arm64-msvc-1.7.0.tgz", + "integrity": "sha512-qgsU7T004COWWpSA0tppDqDxbPLgg8FaU09krIJ7FBl71Sz8SFO40h7fDIjfbTT5w7u6mcaINMQ5bSHu75PCaA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-win32-ia32-msvc": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-ia32-msvc/-/argon2-win32-ia32-msvc-1.7.0.tgz", + "integrity": "sha512-JGafwWYQ/HpZ3XSwP4adQ6W41pRvhcdXvpzIWtKvX+17+xEXAe2nmGWM6s27pVkg1iV2ZtoYLRDkOUoGqZkCcg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/argon2-win32-x64-msvc": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-x64-msvc/-/argon2-win32-x64-msvc-1.7.0.tgz", + "integrity": "sha512-9oq4ShyFakw8AG3mRls0AoCpxBFcimYx7+jvXeAf2OqKNO+mSA6eZ9z7KQeVCi0+SOEUYxMGf5UiGiDb9R6+9Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/bcrypt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt/-/bcrypt-1.9.0.tgz", + "integrity": "sha512-u2OlIxW264bFUfvbFqDz9HZKFjwe8FHFtn7T/U8mYjPZ7DWYpbUB+/dkW/QgYfMSfR0ejkyuWaBBe0coW7/7ig==", + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@node-rs/bcrypt-android-arm-eabi": "1.9.0", + "@node-rs/bcrypt-android-arm64": "1.9.0", + "@node-rs/bcrypt-darwin-arm64": "1.9.0", + "@node-rs/bcrypt-darwin-x64": "1.9.0", + "@node-rs/bcrypt-freebsd-x64": "1.9.0", + "@node-rs/bcrypt-linux-arm-gnueabihf": "1.9.0", + "@node-rs/bcrypt-linux-arm64-gnu": "1.9.0", + "@node-rs/bcrypt-linux-arm64-musl": "1.9.0", + "@node-rs/bcrypt-linux-x64-gnu": "1.9.0", + "@node-rs/bcrypt-linux-x64-musl": "1.9.0", + "@node-rs/bcrypt-wasm32-wasi": "1.9.0", + "@node-rs/bcrypt-win32-arm64-msvc": "1.9.0", + "@node-rs/bcrypt-win32-ia32-msvc": "1.9.0", + "@node-rs/bcrypt-win32-x64-msvc": "1.9.0" + } + }, + "node_modules/arctic/node_modules/@node-rs/bcrypt-android-arm-eabi": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-android-arm-eabi/-/bcrypt-android-arm-eabi-1.9.0.tgz", + "integrity": "sha512-nOCFISGtnodGHNiLrG0WYLWr81qQzZKYfmwHc7muUeq+KY0sQXyHOwZk9OuNQAWv/lnntmtbwkwT0QNEmOyLvA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/bcrypt-android-arm64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-android-arm64/-/bcrypt-android-arm64-1.9.0.tgz", + "integrity": "sha512-+ZrIAtigVmjYkqZQTThHVlz0+TG6D+GDHWhVKvR2DifjtqJ0i+mb9gjo++hN+fWEQdWNGxKCiBBjwgT4EcXd6A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/bcrypt-darwin-arm64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-darwin-arm64/-/bcrypt-darwin-arm64-1.9.0.tgz", + "integrity": "sha512-CQiS+F9Pa0XozvkXR1g7uXE9QvBOPOplDg0iCCPRYTN9PqA5qYxhwe48G3o+v2UeQceNRrbnEtWuANm7JRqIhw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/arctic/node_modules/@node-rs/bcrypt-darwin-x64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-darwin-x64/-/bcrypt-darwin-x64-1.9.0.tgz", + "integrity": "sha512-4pTKGawYd7sNEjdJ7R/R67uwQH1VvwPZ0SSUMmeNHbxD5QlwAPXdDH11q22uzVXsvNFZ6nGQBg8No5OUGpx6Ug==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, + "node_modules/arctic/node_modules/@node-rs/bcrypt-freebsd-x64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-freebsd-x64/-/bcrypt-freebsd-x64-1.9.0.tgz", + "integrity": "sha512-UmWzySX4BJhT/B8xmTru6iFif3h0Rpx3TqxRLCcbgmH43r7k5/9QuhpiyzpvKGpKHJCFNm4F3rC2wghvw5FCIg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=0.4.0" + "node": ">= 10" } }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" + "node_modules/arctic/node_modules/@node-rs/bcrypt-linux-arm-gnueabihf": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-linux-arm-gnueabihf/-/bcrypt-linux-arm-gnueabihf-1.9.0.tgz", + "integrity": "sha512-8qoX4PgBND2cVwsbajoAWo3NwdfJPEXgpCsZQZURz42oMjbGyhhSYbovBCskGU3EBLoC8RA2B1jFWooeYVn5BA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "node_modules/arctic/node_modules/@node-rs/bcrypt-linux-arm64-gnu": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-linux-arm64-gnu/-/bcrypt-linux-arm64-gnu-1.9.0.tgz", + "integrity": "sha512-TuAC6kx0SbcIA4mSEWPi+OCcDjTQUMl213v5gMNlttF+D4ieIZx6pPDGTaMO6M2PDHTeCG0CBzZl0Lu+9b0c7Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.4.0" + "node": ">= 10" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, + "node_modules/arctic/node_modules/@node-rs/bcrypt-linux-arm64-musl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-linux-arm64-musl/-/bcrypt-linux-arm64-musl-1.9.0.tgz", + "integrity": "sha512-/sIvKDABOI8QOEnLD7hIj02BVaNOuCIWBKvxcJOt8+TuwJ6zmY1UI5kSv9d99WbiHjTp97wtAUbZQwauU4b9ew==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 6.0.0" + "node": ">= 10" } }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, + "node_modules/arctic/node_modules/@node-rs/bcrypt-linux-x64-gnu": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-linux-x64-gnu/-/bcrypt-linux-x64-gnu-1.9.0.tgz", + "integrity": "sha512-DyyhDHDsLBsCKz1tZ1hLvUZSc1DK0FU0v52jK6IBQxrj24WscSU9zZe7ie/V9kdmA4Ep57BfpWX8Dsa2JxGdgQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 10" } }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, + "node_modules/arctic/node_modules/@node-rs/bcrypt-linux-x64-musl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-linux-x64-musl/-/bcrypt-linux-x64-musl-1.9.0.tgz", + "integrity": "sha512-duIiuqQ+Lew8ASSAYm6ZRqcmfBGWwsi81XLUwz86a2HR7Qv6V4yc3ZAUQovAikhjCsIqe8C11JlAZSK6+PlXYg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/arctic/node_modules/@node-rs/bcrypt-wasm32-wasi": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-wasm32-wasi/-/bcrypt-wasm32-wasi-1.9.0.tgz", + "integrity": "sha512-ylaGmn9Wjwv/D5lxtawttx3H6Uu2WTTR7lWlRHGT6Ga/MB1Vj4OjSGUW8G8zIVnKuXpGbZ92pgHlt4HUpSLctw==", + "cpu": [ + "wasm32" + ], + "optional": true, "dependencies": { - "type-fest": "^0.21.3" + "@emnapi/core": "^0.45.0", + "@emnapi/runtime": "^0.45.0", + "@tybys/wasm-util": "^0.8.1", + "memfs-browser": "^3.4.13000" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.0.0" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/arctic/node_modules/@node-rs/bcrypt-win32-arm64-msvc": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-win32-arm64-msvc/-/bcrypt-win32-arm64-msvc-1.9.0.tgz", + "integrity": "sha512-2h86gF7QFyEzODuDFml/Dp1MSJoZjxJ4yyT2Erf4NkwsiA5MqowUhUsorRwZhX6+2CtlGa7orbwi13AKMsYndw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10" } }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/arctic/node_modules/@node-rs/bcrypt-win32-ia32-msvc": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-win32-ia32-msvc/-/bcrypt-win32-ia32-msvc-1.9.0.tgz", + "integrity": "sha512-kqxalCvhs4FkN0+gWWfa4Bdy2NQAkfiqq/CEf6mNXC13RSV673Ev9V8sRlQyNpCHCNkeXfOT9pgoBdJmMs9muA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">= 10" } }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/arctic/node_modules/@node-rs/bcrypt-win32-x64-msvc": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@node-rs/bcrypt-win32-x64-msvc/-/bcrypt-win32-x64-msvc-1.9.0.tgz", + "integrity": "sha512-2y0Tuo6ZAT2Cz8V7DHulSlv1Bip3zbzeXyeur+uR25IRNYXKvI/P99Zl85Fbuu/zzYAZRLLlGTRe6/9IHofe/w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 10" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/arctic/node_modules/oslo": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/oslo/-/oslo-1.2.0.tgz", + "integrity": "sha512-OoFX6rDsNcOQVAD2gQD/z03u4vEjWZLzJtwkmgfRF+KpQUXwdgEXErD7zNhyowmHwHefP+PM9Pw13pgpHMRlzw==", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" + "@node-rs/argon2": "1.7.0", + "@node-rs/bcrypt": "1.9.0" } }, "node_modules/arg": { @@ -4225,32 +4992,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -6147,21 +6888,6 @@ "node": ">=14.17" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -6297,59 +7023,35 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "dependencies": { + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "dependencies": { + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/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==" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/react-router/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -6445,11 +7147,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -7069,16 +7766,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -7326,11 +8013,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/waspc/headless-test/examples/todoApp/src/client/pages/Task.tsx b/waspc/headless-test/examples/todoApp/src/client/pages/Task.tsx index f7b0c24ca3..2f3910240d 100644 --- a/waspc/headless-test/examples/todoApp/src/client/pages/Task.tsx +++ b/waspc/headless-test/examples/todoApp/src/client/pages/Task.tsx @@ -1,4 +1,5 @@ import React from 'react' +import { useParams } from 'react-router-dom' import { Link } from 'wasp/client/router' import { type Task } from 'wasp/entities' @@ -14,8 +15,9 @@ import { type TaskPayload = Pick -const Todo = (props: any) => { - const taskId = parseInt(props.match.params.id) +const Todo = () => { + const { id } = useParams() + const taskId = parseInt(id!) const { data: task, isFetching, error } = useQuery(getTask, { id: taskId }) From 5ef793dff02cef3cc104e47092dd6ca84a3a5d3c Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Tue, 27 Aug 2024 16:47:20 +0200 Subject: [PATCH 04/31] Add routing headless test --- .../Generator/templates/react-app/src/router.tsx | 15 +++++++++------ .../waspBuild/.wasp/build/.waspchecksums | 2 +- .../waspBuild/.wasp/build/web-app/src/router.tsx | 8 ++++++++ .../waspCompile/.wasp/out/.waspchecksums | 2 +- .../waspCompile/.wasp/out/web-app/src/router.tsx | 8 ++++++++ .../waspComplexTest/.wasp/out/.waspchecksums | 2 +- .../.wasp/out/web-app/src/router.tsx | 11 +++++++---- .../waspJob/.wasp/out/.waspchecksums | 2 +- .../waspJob/.wasp/out/web-app/src/router.tsx | 8 ++++++++ .../waspMigrate/.wasp/out/.waspchecksums | 2 +- .../waspMigrate/.wasp/out/web-app/src/router.tsx | 8 ++++++++ waspc/headless-test/tests/simple.spec.ts | 6 ++++++ 12 files changed, 59 insertions(+), 15 deletions(-) diff --git a/waspc/data/Generator/templates/react-app/src/router.tsx b/waspc/data/Generator/templates/react-app/src/router.tsx index ba4a2442c7..534e1f5132 100644 --- a/waspc/data/Generator/templates/react-app/src/router.tsx +++ b/waspc/data/Generator/templates/react-app/src/router.tsx @@ -26,6 +26,14 @@ export const routeNameToRouteComponent = { } as const; export function RouterRoutes() { + const waspDefinedRoutes = [ + {=# isExternalAuthEnabled =} + { + path: "{= oAuthCallbackPath =}", + element: + }, + {=/ isExternalAuthEnabled =} + ] const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const Component = routeNameToRouteComponent[routeKey] return { @@ -34,17 +42,12 @@ export function RouterRoutes() { } }) const routerRoutes = useRoutes([ - {=# isExternalAuthEnabled =} /* Wasp specific routes *must* go first to prevent user defined routes from overriding them. Details in https://github.com/wasp-lang/wasp/issues/2029 */ - { - path: "{= oAuthCallbackPath =}", - element: - }, - {=/ isExternalAuthEnabled =} + ...waspDefinedRoutes, ...userDefinedRoutes, ]) diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums index 6cd6220740..7c27e9934f 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums @@ -606,7 +606,7 @@ "file", "web-app/src/router.tsx" ], - "044ab50597ebc8777b8353c865a115ef8ff8f43f8f29da85df1a7cd25db16c8c" + "83e5c0672c28f1afbb48117f2a8c41836640ab48639687f8b479dce77e8265ed" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx index b0e0c5230c..578af5b487 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx @@ -12,6 +12,8 @@ export const routeNameToRouteComponent = { } as const; export function RouterRoutes() { + const waspDefinedRoutes = [ + ] const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const Component = routeNameToRouteComponent[routeKey] return { @@ -20,6 +22,12 @@ export function RouterRoutes() { } }) const routerRoutes = useRoutes([ + /* + Wasp specific routes *must* go first to prevent user + defined routes from overriding them. + Details in https://github.com/wasp-lang/wasp/issues/2029 + */ + ...waspDefinedRoutes, ...userDefinedRoutes, ]) diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums index 4437afe4bc..2f36df17be 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums @@ -620,7 +620,7 @@ "file", "web-app/src/router.tsx" ], - "044ab50597ebc8777b8353c865a115ef8ff8f43f8f29da85df1a7cd25db16c8c" + "83e5c0672c28f1afbb48117f2a8c41836640ab48639687f8b479dce77e8265ed" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx index b0e0c5230c..578af5b487 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx @@ -12,6 +12,8 @@ export const routeNameToRouteComponent = { } as const; export function RouterRoutes() { + const waspDefinedRoutes = [ + ] const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const Component = routeNameToRouteComponent[routeKey] return { @@ -20,6 +22,12 @@ export function RouterRoutes() { } }) const routerRoutes = useRoutes([ + /* + Wasp specific routes *must* go first to prevent user + defined routes from overriding them. + Details in https://github.com/wasp-lang/wasp/issues/2029 + */ + ...waspDefinedRoutes, ...userDefinedRoutes, ]) diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums index d81b3bbb67..e6930e4a50 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums @@ -1264,7 +1264,7 @@ "file", "web-app/src/router.tsx" ], - "df04a13b506c2d5e55d06494ecae37fe2976ff568bcb282692d98656a7ff3f37" + "76b35b35d911aff62e8b9b7c8467c46a210ea3d27c0a95bb06ffcabe217c58fd" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx index 2c72b00c48..3ee73891b6 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx @@ -15,6 +15,12 @@ export const routeNameToRouteComponent = { } as const; export function RouterRoutes() { + const waspDefinedRoutes = [ + { + path: "/oauth/callback", + element: + }, + ] const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const Component = routeNameToRouteComponent[routeKey] return { @@ -28,10 +34,7 @@ export function RouterRoutes() { defined routes from overriding them. Details in https://github.com/wasp-lang/wasp/issues/2029 */ - { - path: "/oauth/callback", - element: - }, + ...waspDefinedRoutes, ...userDefinedRoutes, ]) diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums index 92730d0548..df1d3f08d2 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums @@ -690,7 +690,7 @@ "file", "web-app/src/router.tsx" ], - "044ab50597ebc8777b8353c865a115ef8ff8f43f8f29da85df1a7cd25db16c8c" + "83e5c0672c28f1afbb48117f2a8c41836640ab48639687f8b479dce77e8265ed" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx index b0e0c5230c..578af5b487 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx @@ -12,6 +12,8 @@ export const routeNameToRouteComponent = { } as const; export function RouterRoutes() { + const waspDefinedRoutes = [ + ] const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const Component = routeNameToRouteComponent[routeKey] return { @@ -20,6 +22,12 @@ export function RouterRoutes() { } }) const routerRoutes = useRoutes([ + /* + Wasp specific routes *must* go first to prevent user + defined routes from overriding them. + Details in https://github.com/wasp-lang/wasp/issues/2029 + */ + ...waspDefinedRoutes, ...userDefinedRoutes, ]) diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums index 2fb893faca..4641c13bb5 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums @@ -620,7 +620,7 @@ "file", "web-app/src/router.tsx" ], - "044ab50597ebc8777b8353c865a115ef8ff8f43f8f29da85df1a7cd25db16c8c" + "83e5c0672c28f1afbb48117f2a8c41836640ab48639687f8b479dce77e8265ed" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx index b0e0c5230c..578af5b487 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx @@ -12,6 +12,8 @@ export const routeNameToRouteComponent = { } as const; export function RouterRoutes() { + const waspDefinedRoutes = [ + ] const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const Component = routeNameToRouteComponent[routeKey] return { @@ -20,6 +22,12 @@ export function RouterRoutes() { } }) const routerRoutes = useRoutes([ + /* + Wasp specific routes *must* go first to prevent user + defined routes from overriding them. + Details in https://github.com/wasp-lang/wasp/issues/2029 + */ + ...waspDefinedRoutes, ...userDefinedRoutes, ]) diff --git a/waspc/headless-test/tests/simple.spec.ts b/waspc/headless-test/tests/simple.spec.ts index ad0188257b..637310fff4 100644 --- a/waspc/headless-test/tests/simple.spec.ts +++ b/waspc/headless-test/tests/simple.spec.ts @@ -53,6 +53,7 @@ test.describe("signup and login", () => { await page.goto("/"); + // Create a new task const randomTask = `New Task ${Math.random().toString(36).substring(7)}`; await page.locator("input[type='text']").fill(randomTask); await page.getByText("Create new task").click(); @@ -61,5 +62,10 @@ test.describe("signup and login", () => { await page.waitForSelector(`text=${fullTaskText}`); await expect(page.locator("body")).toContainText(fullTaskText); + + // Navigate to task page + await page.locator(`text=${fullTaskText}`).click(); + const taskPageText = `description: ${randomTask}`; + await page.waitForSelector(`text=${taskPageText}`); }); }); From 8d6a544686026e4bb2917d3d9b8857f02a373fda Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Thu, 29 Aug 2024 17:01:47 +0200 Subject: [PATCH 05/31] Use hook for router. Use for root component. --- .../templates/react-app/src/router.tsx | 62 ++++++++----------- waspc/examples/todoApp/src/App.tsx | 5 +- 2 files changed, 29 insertions(+), 38 deletions(-) diff --git a/waspc/data/Generator/templates/react-app/src/router.tsx b/waspc/data/Generator/templates/react-app/src/router.tsx index 534e1f5132..d3d12743d8 100644 --- a/waspc/data/Generator/templates/react-app/src/router.tsx +++ b/waspc/data/Generator/templates/react-app/src/router.tsx @@ -1,6 +1,6 @@ {{={= =}=}} import React from 'react' -import { useRoutes, BrowserRouter } from 'react-router-dom' +import { createBrowserRouter, RouterProvider } from 'react-router-dom' {=# rootComponent.isDefined =} {=& rootComponent.importStatement =} {=/ rootComponent.isDefined =} @@ -25,43 +25,31 @@ export const routeNameToRouteComponent = { {=/ routes =} } as const; -export function RouterRoutes() { - const waspDefinedRoutes = [ - {=# isExternalAuthEnabled =} - { - path: "{= oAuthCallbackPath =}", - element: - }, - {=/ isExternalAuthEnabled =} - ] - const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { - const Component = routeNameToRouteComponent[routeKey] - return { - path: route.to, - element: - } - }) - const routerRoutes = useRoutes([ - /* - Wasp specific routes *must* go first to prevent user - defined routes from overriding them. - Details in https://github.com/wasp-lang/wasp/issues/2029 - */ +const waspDefinedRoutes = [ + {=# isExternalAuthEnabled =} + { + path: "{= oAuthCallbackPath =}", + Component: OAuthCallbackPage, + }, + {=/ isExternalAuthEnabled =} +] +const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { + return { + path: route.to, + Component: routeNameToRouteComponent[routeKey], + } +}) + +const browserRouter = createBrowserRouter([{ + path: '/', + {=# rootComponent.isDefined =} + element: <{= rootComponent.importIdentifier =} />, + {=/ rootComponent.isDefined =} + children: [ ...waspDefinedRoutes, ...userDefinedRoutes, - ]) + ], +}]) - return routerRoutes -} -export const router = ( - - {=# rootComponent.isDefined =} - <{= rootComponent.importIdentifier =}> - {=/ rootComponent.isDefined =} - - {=# rootComponent.isDefined =} - - {=/ rootComponent.isDefined =} - -) +export const router = \ No newline at end of file diff --git a/waspc/examples/todoApp/src/App.tsx b/waspc/examples/todoApp/src/App.tsx index a7f5b7f26f..35b1b4442d 100644 --- a/waspc/examples/todoApp/src/App.tsx +++ b/waspc/examples/todoApp/src/App.tsx @@ -1,3 +1,4 @@ +import { Outlet } from 'react-router-dom' import { useSocket } from 'wasp/client/webSocket' import { Link } from 'wasp/client/router' import { logout, useAuth } from 'wasp/client/auth' @@ -41,7 +42,9 @@ export function App({ children }: any) { )} -
{children}
+
+ +
Created with Wasp
) From 8b16709a99cfaf79be66ef5967fb079a956287a8 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Tue, 3 Sep 2024 10:29:45 +0200 Subject: [PATCH 06/31] Cleanup --- waspc/data/Generator/templates/react-app/src/router.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/waspc/data/Generator/templates/react-app/src/router.tsx b/waspc/data/Generator/templates/react-app/src/router.tsx index d3d12743d8..da35e8a231 100644 --- a/waspc/data/Generator/templates/react-app/src/router.tsx +++ b/waspc/data/Generator/templates/react-app/src/router.tsx @@ -52,4 +52,4 @@ const browserRouter = createBrowserRouter([{ }]) -export const router = \ No newline at end of file +export const router = From dce8f8c99d19d52f03a17d3dd8b5ee08651357cc Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Thu, 5 Sep 2024 10:25:15 +0200 Subject: [PATCH 07/31] Fix headless tests --- waspc/headless-test/examples/todoApp/src/client/App.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/waspc/headless-test/examples/todoApp/src/client/App.tsx b/waspc/headless-test/examples/todoApp/src/client/App.tsx index eaaea2a65d..1c0e690c4d 100644 --- a/waspc/headless-test/examples/todoApp/src/client/App.tsx +++ b/waspc/headless-test/examples/todoApp/src/client/App.tsx @@ -1,3 +1,5 @@ +import { Outlet } from 'react-router-dom' + import { Link } from 'wasp/client/router' import { logout, useAuth } from 'wasp/client/auth' import { useQuery, getDate } from 'wasp/client/operations' @@ -5,7 +7,7 @@ import { useQuery, getDate } from 'wasp/client/operations' import './Main.css' import { getName } from './user' -export function App({ children }: { children: React.ReactNode }) { +export function App() { const { data: user } = useAuth() const { data: date } = useQuery(getDate) @@ -31,7 +33,9 @@ export function App({ children }: { children: React.ReactNode }) { )} -
{children}
+
+ +
Created with Wasp
) From 666f017e636ececd7cdc5f4bdff095ca9d11dfa4 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Thu, 5 Sep 2024 15:19:20 +0200 Subject: [PATCH 08/31] WIP optional static segments and splat paths --- .../sdk/wasp/client/router/linkHelpers.ts | 3 ++ .../templates/sdk/wasp/client/router/types.ts | 41 ++++++++++++++++++- waspc/examples/todoApp/main.wasp | 2 +- waspc/examples/todoApp/src/App.tsx | 6 ++- .../SdkGenerator/Client/RouterGenerator.hs | 6 +-- waspc/src/Wasp/Util/WebRouterPath.hs | 3 ++ 6 files changed, 55 insertions(+), 6 deletions(-) diff --git a/waspc/data/Generator/templates/sdk/wasp/client/router/linkHelpers.ts b/waspc/data/Generator/templates/sdk/wasp/client/router/linkHelpers.ts index e10cba9281..c12c36125e 100644 --- a/waspc/data/Generator/templates/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/data/Generator/templates/sdk/wasp/client/router/linkHelpers.ts @@ -17,6 +17,9 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts b/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts index 71c6a3812d..4de10febd6 100644 --- a/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts +++ b/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to'] + to: GenerateRoute } & ParamsFromBuildFn } @@ -39,3 +39,42 @@ type ParamsFromBuildFn = Parameters[0] extends { } ? { params: Params } : { params?: never } + +// Optional static segments handling + + +type SplitPath = S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S] + +type DropEmptyStrings = T extends [infer Head, ...infer Tail] + ? Head extends '' + ? [...DropEmptyStrings] + : [ExplodeOptionalStatic, ...DropEmptyStrings] + : T + +type ExplodeOptionalStatic = T extends `:${infer P}` + ? T + : T extends `${infer S}?` + ? [S, ''] + : T + +type Elem = string | [string, string] + +type JoinSegments = T extends [] + ? [] + : T extends [infer First extends Elem, ...infer Rest extends Elem[]] + ? First extends string + ? [First, ...JoinSegments] + : [First[0], ...JoinSegments] | JoinSegments + : [] + +type JoinPath = T extends [infer Only extends string] + ? Only + : T extends [infer First extends string, ...infer Rest extends string[]] + ? `${First}/${JoinPath}` + : never + +type GenerateRoute = S extends '/' + ? '/' + : `/${JoinPath>>>>}` diff --git a/waspc/examples/todoApp/main.wasp b/waspc/examples/todoApp/main.wasp index 0043e397b4..9fa9f246bf 100644 --- a/waspc/examples/todoApp/main.wasp +++ b/waspc/examples/todoApp/main.wasp @@ -109,7 +109,7 @@ page AboutPage { component: import About from "@src/pages/About" } -route ProfileRoute { path: "/profile", to: ProfilePage } +route ProfileRoute { path: "/profile/extra?", to: ProfilePage } page ProfilePage { authRequired: true, component: import { ProfilePage } from "@src/pages/ProfilePage" diff --git a/waspc/examples/todoApp/src/App.tsx b/waspc/examples/todoApp/src/App.tsx index 35b1b4442d..acec24e80e 100644 --- a/waspc/examples/todoApp/src/App.tsx +++ b/waspc/examples/todoApp/src/App.tsx @@ -24,7 +24,11 @@ export function App({ children }: any) {

- {appName} + + {appName} + + + {/* Filip */}

Your site was loaded at: {date?.toLocaleString()} {connectionIcon} diff --git a/waspc/src/Wasp/Generator/SdkGenerator/Client/RouterGenerator.hs b/waspc/src/Wasp/Generator/SdkGenerator/Client/RouterGenerator.hs index 57875a355f..e84384fd91 100644 --- a/waspc/src/Wasp/Generator/SdkGenerator/Client/RouterGenerator.hs +++ b/waspc/src/Wasp/Generator/SdkGenerator/Client/RouterGenerator.hs @@ -17,7 +17,7 @@ import Wasp.Util.WebRouterPath (Param (Optional, Required), extractPathParams) genNewClientRouterApi :: AppSpec -> Generator [FileDraft] genNewClientRouterApi spec = sequence - [ genRouterTsx spec, + [ genIndexTs spec, genFileCopy [relfile|client/router/types.ts|], genFileCopy [relfile|client/router/linkHelpers.ts|], genFileCopy [relfile|client/router/Link.tsx|] @@ -25,8 +25,8 @@ genNewClientRouterApi spec = where genFileCopy = return . C.mkTmplFd -genRouterTsx :: AppSpec -> Generator FileDraft -genRouterTsx spec = return $ C.mkTmplFdWithData [relfile|client/router/index.ts|] tmplData +genIndexTs :: AppSpec -> Generator FileDraft +genIndexTs spec = return $ C.mkTmplFdWithData [relfile|client/router/index.ts|] tmplData where tmplData = object ["routes" .= map createRouteTemplateData (AS.getRoutes spec)] diff --git a/waspc/src/Wasp/Util/WebRouterPath.hs b/waspc/src/Wasp/Util/WebRouterPath.hs index e1c5dd51fe..5f22943549 100644 --- a/waspc/src/Wasp/Util/WebRouterPath.hs +++ b/waspc/src/Wasp/Util/WebRouterPath.hs @@ -7,10 +7,13 @@ import Data.Maybe (mapMaybe) data Param = Optional String | Required String deriving (Show, Eq) -- TODO: upgrade to work with React Router v6: https://reactrouter.com/en/main/route/route#splats +-- Maybe explode all optional segments and then compute the routes for the Link component +-- This would mean we have two different lists: routes and links? extractPathParams :: String -> [Param] extractPathParams = mapMaybe parseParam . splitOn "/" where parseParam :: String -> Maybe Param + parseParam "*" = Just $ Required "splat" parseParam (':' : xs) = Just $ if "?" `isSuffixOf` xs From aa7f002157cdd8206b9addda2a88598b5ab750e6 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Thu, 5 Sep 2024 15:34:55 +0200 Subject: [PATCH 09/31] Update naming --- .../templates/sdk/wasp/client/router/types.ts | 47 +++++++++++-------- waspc/examples/todoApp/main.wasp | 2 +- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts b/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts index 4de10febd6..fb87a803a5 100644 --- a/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts +++ b/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts @@ -41,40 +41,47 @@ type ParamsFromBuildFn = Parameters[0] extends { : { params?: never } // Optional static segments handling +type GenerateRoute = S extends '/' + ? '/' + : `/${JoinPath>>>}` - -type SplitPath = S extends `${infer T}/${infer U}` - ? [T, ...SplitPath] - : [S] - -type DropEmptyStrings = T extends [infer Head, ...infer Tail] +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' - ? [...DropEmptyStrings] - : [ExplodeOptionalStatic, ...DropEmptyStrings] + ? [...ExplodeOptionalSegments] + : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T -type ExplodeOptionalStatic = T extends `:${infer P}` - ? T +type _ExplodeOptionalSegment = T extends `:${infer P}` + // Param segment + ? { segment: T } : T extends `${infer S}?` - ? [S, ''] - : T + // Optional segment + ? { optionalSegment: S } + // Regular segment + : { segment: T } -type Elem = string | [string, string] +type Segment = { segment: string } +type OptionalSegment = { optionalSegment: string } + +type Elem = Segment | OptionalSegment type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] - ? First extends string - ? [First, ...JoinSegments] - : [First[0], ...JoinSegments] | JoinSegments + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] : [] +type SplitPath = S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S] + type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never - -type GenerateRoute = S extends '/' - ? '/' - : `/${JoinPath>>>>}` + \ No newline at end of file diff --git a/waspc/examples/todoApp/main.wasp b/waspc/examples/todoApp/main.wasp index 9fa9f246bf..0043e397b4 100644 --- a/waspc/examples/todoApp/main.wasp +++ b/waspc/examples/todoApp/main.wasp @@ -109,7 +109,7 @@ page AboutPage { component: import About from "@src/pages/About" } -route ProfileRoute { path: "/profile/extra?", to: ProfilePage } +route ProfileRoute { path: "/profile", to: ProfilePage } page ProfilePage { authRequired: true, component: import { ProfilePage } from "@src/pages/ProfilePage" From f366600b079a7b88e2075071fd5d53ab441a13b6 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Thu, 5 Sep 2024 16:48:28 +0200 Subject: [PATCH 10/31] Fixes example apps --- .../hackathon-submissions/package-lock.json | 227 +++--------- examples/streaming/package-lock.json | 186 +++------- examples/thoughts/package-lock.json | 163 +++------ examples/thoughts/src/client/MainPage.jsx | 8 +- examples/todo-typescript/package-lock.json | 186 +++------- examples/tutorials/TodoApp/package-lock.json | 190 ++-------- .../tutorials/TodoAppTs/package-lock.json | 190 ++-------- examples/waspello/package-lock.json | 140 +++----- examples/waspello/src/auth/LoginPage.jsx | 6 +- examples/waspello/src/auth/SignupPage.jsx | 6 +- examples/waspleau/package-lock.json | 186 +++------- .../package-lock.json | 339 ++++-------------- .../websockets-realtime-voting/src/Layout.tsx | 13 +- waspc/examples/crud-testing/package-lock.json | 186 +++------- .../pg-vector-example/package-lock.json | 235 +++--------- .../examples/pg-vector-example/src/Layout.tsx | 5 +- .../todo-typescript/package-lock.json | 178 +++------ 17 files changed, 553 insertions(+), 1891 deletions(-) diff --git a/examples/hackathon-submissions/package-lock.json b/examples/hackathon-submissions/package-lock.json index 5449b0059c..edb0eeab39 100644 --- a/examples/hackathon-submissions/package-lock.json +++ b/examples/hackathon-submissions/package-lock.json @@ -21,12 +21,10 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@prisma/client": "5.18.0", + "@prisma/client": "5.19.1", "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "autoprefixer": "^10.4.13", "axios": "^1.4.0", @@ -36,33 +34,18 @@ "mitt": "3.0.0", "msw": "^1.1.0", "postcss": "^8.4.21", - "prisma": "5.18.0", + "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "tailwindcss": "^3.2.7", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" - } - }, - ".wasp/out/sdk/wasp/node_modules/prisma": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.18.0.tgz", - "integrity": "sha512-+TrSIxZsh64OPOmaSgVPH7ALL9dfU0jceYaMJXsNrTkFHO7/3RANi5K2ZiPB1De9+KDxCWn7jvRq8y8pvk+o9g==", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@prisma/engines": "5.18.0" - }, - "bin": { - "prisma": "build/index.js" - }, - "engines": { - "node": ">=16.13" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, "node_modules/@adobe/css-tools": { @@ -858,10 +841,11 @@ "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==" }, "node_modules/@prisma/client": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.18.0.tgz", - "integrity": "sha512-BWivkLh+af1kqC89zCJYkHsRcyWsM8/JHpsDMM76DjP3ZdEquJhXa4IeX+HkWPnwJ5FanxEJFZZDTWiDs/Kvyw==", + "version": "5.19.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.19.1.tgz", + "integrity": "sha512-x30GFguInsgt+4z5I4WbkZP2CGpotJMUXy+Gl/aaUjHn2o1DnLYNTA+q9XdYmAQZM8fIIkvUiA2NpgosM3fneg==", "hasInstallScript": true, + "license": "Apache-2.0", "engines": { "node": ">=16.13" }, @@ -874,49 +858,13 @@ } } }, - "node_modules/@prisma/debug": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.18.0.tgz", - "integrity": "sha512-f+ZvpTLidSo3LMJxQPVgAxdAjzv5OpzAo/eF8qZqbwvgi2F5cTOI9XCpdRzJYA0iGfajjwjOKKrVq64vkxEfUw==", - "license": "Apache-2.0" - }, - "node_modules/@prisma/engines": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.18.0.tgz", - "integrity": "sha512-ofmpGLeJ2q2P0wa/XaEgTnX/IsLnvSp/gZts0zjgLNdBhfuj2lowOOPmDcfKljLQUXMvAek3lw5T01kHmCG8rg==", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "5.18.0", - "@prisma/engines-version": "5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169", - "@prisma/fetch-engine": "5.18.0", - "@prisma/get-platform": "5.18.0" - } - }, - "node_modules/@prisma/engines-version": { - "version": "5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169.tgz", - "integrity": "sha512-a/+LpJj8vYU3nmtkg+N3X51ddbt35yYrRe8wqHTJtYQt7l1f8kjIBcCs6sHJvodW/EK5XGvboOiwm47fmNrbgg==", - "license": "Apache-2.0" - }, - "node_modules/@prisma/fetch-engine": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.18.0.tgz", - "integrity": "sha512-I/3u0x2n31rGaAuBRx2YK4eB7R/1zCuayo2DGwSpGyrJWsZesrV7QVw7ND0/Suxeo/vLkJ5OwuBqHoCxvTHpOg==", - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "5.18.0", - "@prisma/engines-version": "5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169", - "@prisma/get-platform": "5.18.0" - } - }, - "node_modules/@prisma/get-platform": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.18.0.tgz", - "integrity": "sha512-Tk+m7+uhqcKDgnMnFN0lRiH7Ewea0OEsZZs9pqXa7i3+7svS3FSCqDBCaM9x5fmhhkufiG0BtunJVDka+46DlA==", - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "5.18.0" + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, "node_modules/@rollup/rollup-android-arm-eabi": { @@ -1263,6 +1211,7 @@ "version": "4.17.43", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -1270,11 +1219,6 @@ "@types/send": "*" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/js-levenshtein": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz", @@ -1283,7 +1227,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -1306,12 +1251,14 @@ "node_modules/@types/qs": { "version": "6.9.11", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.60", @@ -1331,25 +1278,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", @@ -1359,6 +1287,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -3107,27 +3036,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -4655,7 +4563,6 @@ "version": "5.19.1", "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.19.1.tgz", "integrity": "sha512-c5K9MiDaa+VAAyh1OiYk76PXOme9s3E992D7kvvIOhCrNsBQfy2mP2QAQtX0WNj140IgG++12kwZpYB9iIydNQ==", - "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -4675,14 +4582,12 @@ "version": "5.19.1", "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.19.1.tgz", "integrity": "sha512-lAG6A6QnG2AskAukIEucYJZxxcSqKsMK74ZFVfCTOM/7UiyJQi48v6TQ47d6qKG3LbMslqOvnTX25dj/qvclGg==", - "devOptional": true, "license": "Apache-2.0" }, "node_modules/prisma/node_modules/@prisma/engines": { "version": "5.19.1", "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.19.1.tgz", "integrity": "sha512-kR/PoxZDrfUmbbXqqb8SlBBgCjvGaJYMCOe189PEYzq9rKqitQ2fvT/VJ8PDSe8tTNxhc2KzsCfCAL+Iwm/7Cg==", - "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -4696,14 +4601,12 @@ "version": "5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3", "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3.tgz", "integrity": "sha512-xR6rt+z5LnNqTP5BBc+8+ySgf4WNMimOKXRn6xfNRDSpHvbOEmd7+qAOmzCrddEc4Cp8nFC0txU14dstjH7FXA==", - "devOptional": true, "license": "Apache-2.0" }, "node_modules/prisma/node_modules/@prisma/fetch-engine": { "version": "5.19.1", "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.19.1.tgz", "integrity": "sha512-pCq74rtlOVJfn4pLmdJj+eI4P7w2dugOnnTXpRilP/6n5b2aZiA4ulJlE0ddCbTPkfHmOL9BfaRgA8o+1rfdHw==", - "devOptional": true, "license": "Apache-2.0", "dependencies": { "@prisma/debug": "5.19.1", @@ -4715,7 +4618,6 @@ "version": "5.19.1", "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.19.1.tgz", "integrity": "sha512-sCeoJ+7yt0UjnR+AXZL7vXlg5eNxaFOwC23h0KvW1YIXUoa7+W2ZcAUhoEQBmJTW4GrFqCuZ8YSP0mkDa4k3Zg==", - "devOptional": true, "license": "Apache-2.0", "dependencies": { "@prisma/debug": "5.19.1" @@ -4877,52 +4779,35 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/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==" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" + "react": ">=16.8", + "react-dom": ">=16.8" } }, "node_modules/read-cache": { @@ -5020,11 +4905,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -5567,16 +5447,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -5824,11 +5694,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/examples/streaming/package-lock.json b/examples/streaming/package-lock.json index 5df18d67b4..480ead3d59 100644 --- a/examples/streaming/package-lock.json +++ b/examples/streaming/package-lock.json @@ -24,8 +24,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "axios": "^1.4.0", "express": "~4.18.1", @@ -36,13 +34,14 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, "node_modules/@adobe/css-tools": { @@ -708,6 +707,15 @@ } } }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.9.6", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", @@ -1052,6 +1060,7 @@ "version": "4.17.43", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -1059,11 +1068,6 @@ "@types/send": "*" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/js-levenshtein": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz", @@ -1072,7 +1076,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -1095,12 +1100,14 @@ "node_modules/@types/qs": { "version": "6.9.11", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.55", @@ -1120,25 +1127,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", @@ -1148,6 +1136,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -2664,32 +2653,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -3670,14 +3633,6 @@ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -4001,21 +3956,6 @@ "@prisma/debug": "5.19.1" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -4151,59 +4091,37 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/react-router/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==" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-router/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -4274,11 +4192,6 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -4691,16 +4604,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -4914,11 +4817,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/examples/thoughts/package-lock.json b/examples/thoughts/package-lock.json index d221abcd5f..91cf5c2203 100644 --- a/examples/thoughts/package-lock.json +++ b/examples/thoughts/package-lock.json @@ -29,8 +29,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "axios": "^1.4.0", "express": "~4.18.1", @@ -43,13 +41,14 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, ".wasp/out/sdk/wasp/node_modules/@emnapi/core": { @@ -1526,6 +1525,15 @@ } } }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", @@ -1887,6 +1895,7 @@ "version": "4.17.43", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -1902,11 +1911,6 @@ "@types/unist": "^2" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/js-levenshtein": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz", @@ -1923,7 +1927,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -1946,12 +1951,14 @@ "node_modules/@types/qs": { "version": "6.9.11", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.57", @@ -1971,25 +1978,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", @@ -1999,6 +1987,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -3683,32 +3672,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -5882,59 +5845,37 @@ } }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/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==" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/react-router/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -6030,11 +5971,6 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -6488,16 +6424,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -6831,11 +6757,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/examples/thoughts/src/client/MainPage.jsx b/examples/thoughts/src/client/MainPage.jsx index 5a35e53bca..05af75e664 100644 --- a/examples/thoughts/src/client/MainPage.jsx +++ b/examples/thoughts/src/client/MainPage.jsx @@ -1,7 +1,7 @@ import { createThought } from "wasp/client/operations"; import React, { useState, useRef } from 'react' import ReactMarkdown from 'react-markdown' -import { useHistory } from 'react-router-dom' +import { useNavigate } from 'react-router-dom' import Tag from './Tag' import './Main.css' @@ -35,7 +35,7 @@ const MainPage = ({ user }) => { ) } -const Thought = (props) => { +const Thought = () => { const defaultTextMd = '' const defaultNewTagName = '' const defaultTagNames = [] @@ -44,7 +44,7 @@ const Thought = (props) => { const [tagNames, setTagNames] = useState(defaultTagNames) const [newTagName, setNewTagName] = useState(defaultNewTagName) const [inPreviewMode, setInPreviewMode] = useState(defaultInPreviewMode) - const history = useHistory() + const navigate = useNavigate() const formRef = useRef(null) // TODO: Why do I have this ref? I don't seem to use it anywhere? const setNewTagNameIfValid = (tagName) => { @@ -61,7 +61,7 @@ const Thought = (props) => { } try { await createThought({ textMarkdown: textMd.trim(), tagNames }) - history.push('/thoughts') // TODO: Would be cool if this was type checked somehow or if string was coming from the Wasp API. + navigate('/thoughts') // TODO: Would be cool if this was type checked somehow or if string was coming from the Wasp API. } catch (err) { return window.alert('Error: ' + err.message) } diff --git a/examples/todo-typescript/package-lock.json b/examples/todo-typescript/package-lock.json index e54d69add3..679728b313 100644 --- a/examples/todo-typescript/package-lock.json +++ b/examples/todo-typescript/package-lock.json @@ -27,8 +27,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "axios": "^1.4.0", "express": "~4.18.1", @@ -41,13 +39,14 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, ".wasp/out/sdk/wasp/node_modules/@napi-rs/wasm-runtime": { @@ -2037,6 +2036,15 @@ "@prisma/debug": "5.19.1" } }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.9.6", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", @@ -2398,6 +2406,7 @@ "version": "4.17.43", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2405,11 +2414,6 @@ "@types/send": "*" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/js-levenshtein": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz", @@ -2418,7 +2422,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -2441,12 +2446,14 @@ "node_modules/@types/qs": { "version": "6.9.11", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.55", @@ -2466,25 +2473,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", @@ -2494,6 +2482,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -4016,32 +4005,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -5051,14 +5014,6 @@ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -5346,21 +5301,6 @@ "fsevents": "2.3.3" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -5496,59 +5436,37 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/react-router/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==" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-router/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -5619,11 +5537,6 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -6036,16 +5949,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -6259,11 +6162,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/examples/tutorials/TodoApp/package-lock.json b/examples/tutorials/TodoApp/package-lock.json index b8c924d7c8..840e3c753c 100644 --- a/examples/tutorials/TodoApp/package-lock.json +++ b/examples/tutorials/TodoApp/package-lock.json @@ -27,8 +27,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "axios": "^1.4.0", "express": "~4.18.1", @@ -41,13 +39,14 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2": { @@ -1576,6 +1575,15 @@ "@prisma/debug": "5.19.1" } }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.18.1", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz", @@ -2006,6 +2014,7 @@ "version": "4.19.5", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -2014,12 +2023,6 @@ "@types/send": "*" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", - "license": "MIT" - }, "node_modules/@types/js-levenshtein": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz", @@ -2030,6 +2033,7 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, "license": "MIT" }, "node_modules/@types/ms": { @@ -2057,12 +2061,14 @@ "version": "6.9.15", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true, "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, "license": "MIT" }, "node_modules/@types/react": { @@ -2084,31 +2090,11 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "license": "MIT", "dependencies": { "@types/mime": "^1", @@ -3798,35 +3784,6 @@ "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==", "license": "MIT" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -4945,15 +4902,6 @@ "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", "license": "MIT" }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", @@ -5296,23 +5244,6 @@ "integrity": "sha512-xR6rt+z5LnNqTP5BBc+8+ySgf4WNMimOKXRn6xfNRDSpHvbOEmd7+qAOmzCrddEc4Cp8nFC0txU14dstjH7FXA==", "license": "Apache-2.0" }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -5461,64 +5392,37 @@ "license": "MIT" }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/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==", - "license": "MIT" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/react-router/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -5597,12 +5501,6 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "license": "MIT" }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", - "license": "MIT" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -6063,18 +5961,6 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "license": "MIT" }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT" - }, "node_modules/tinybench": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", @@ -6312,12 +6198,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", - "license": "MIT" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/examples/tutorials/TodoAppTs/package-lock.json b/examples/tutorials/TodoAppTs/package-lock.json index 3beced35bc..ee33302b6d 100644 --- a/examples/tutorials/TodoAppTs/package-lock.json +++ b/examples/tutorials/TodoAppTs/package-lock.json @@ -27,8 +27,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "axios": "^1.4.0", "express": "~4.18.1", @@ -41,13 +39,14 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, ".wasp/out/sdk/wasp/node_modules/@node-rs/argon2": { @@ -1569,6 +1568,15 @@ "@prisma/debug": "5.19.1" } }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.18.1", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz", @@ -1999,6 +2007,7 @@ "version": "4.19.5", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -2007,12 +2016,6 @@ "@types/send": "*" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", - "license": "MIT" - }, "node_modules/@types/js-levenshtein": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz", @@ -2023,6 +2026,7 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, "license": "MIT" }, "node_modules/@types/ms": { @@ -2050,12 +2054,14 @@ "version": "6.9.15", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true, "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, "license": "MIT" }, "node_modules/@types/react": { @@ -2077,31 +2083,11 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "license": "MIT", "dependencies": { "@types/mime": "^1", @@ -3791,35 +3777,6 @@ "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==", "license": "MIT" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -4938,15 +4895,6 @@ "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", "license": "MIT" }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", @@ -5270,23 +5218,6 @@ "fsevents": "2.3.3" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -5435,64 +5366,37 @@ "license": "MIT" }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/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==", - "license": "MIT" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/react-router/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -5571,12 +5475,6 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "license": "MIT" }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", - "license": "MIT" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -6037,18 +5935,6 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "license": "MIT" }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT" - }, "node_modules/tinybench": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", @@ -6286,12 +6172,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", - "license": "MIT" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/examples/waspello/package-lock.json b/examples/waspello/package-lock.json index 1cc3f53264..94eb239381 100644 --- a/examples/waspello/package-lock.json +++ b/examples/waspello/package-lock.json @@ -31,8 +31,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "arctic": "^1.2.1", "autoprefixer": "^10.4.13", @@ -48,14 +46,15 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "tailwindcss": "^3.2.7", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, ".wasp/out/sdk/wasp/node_modules/@emnapi/core": { @@ -1711,6 +1710,15 @@ "@prisma/debug": "5.19.1" } }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", @@ -2072,6 +2080,7 @@ "version": "4.17.43", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2079,11 +2088,6 @@ "@types/send": "*" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", @@ -2101,7 +2105,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -2124,12 +2129,14 @@ "node_modules/@types/qs": { "version": "6.9.11", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.60", @@ -2160,25 +2167,6 @@ "redux": "^4.0.0" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", @@ -2188,6 +2176,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -3964,19 +3953,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -6260,52 +6236,35 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/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==" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" + "react": ">=16.8", + "react-dom": ">=16.8" } }, "node_modules/react-tiny-popover": { @@ -6420,11 +6379,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -6972,11 +6926,6 @@ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -7232,11 +7181,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/examples/waspello/src/auth/LoginPage.jsx b/examples/waspello/src/auth/LoginPage.jsx index af13171189..a32ccfe847 100644 --- a/examples/waspello/src/auth/LoginPage.jsx +++ b/examples/waspello/src/auth/LoginPage.jsx @@ -1,6 +1,6 @@ import React, { useState } from 'react' -import { Link, useHistory } from 'react-router-dom' +import { Link, useNavigate } from 'react-router-dom' import EmailAndPassForm from './components/EmailAndPassForm' import GoogleAuthButton from './components/GoogleAuthButton' @@ -11,7 +11,7 @@ import './Signup.css' import { login } from "wasp/client/auth"; const LoginPage = (props) => { - const history = useHistory() + const navigate = useNavigate() const [usernameFieldVal, setUsernameFieldVal] = useState('') const [passwordFieldVal, setPasswordFieldVal] = useState('') @@ -24,7 +24,7 @@ const LoginPage = (props) => { setUsernameFieldVal('') setPasswordFieldVal('') - history.push('/') + navigate('/') } catch (err) { console.log(err) window.alert(err) diff --git a/examples/waspello/src/auth/SignupPage.jsx b/examples/waspello/src/auth/SignupPage.jsx index 767be5d443..ba33f8f473 100644 --- a/examples/waspello/src/auth/SignupPage.jsx +++ b/examples/waspello/src/auth/SignupPage.jsx @@ -1,5 +1,5 @@ import React, { useState } from 'react' -import { Link, useHistory } from 'react-router-dom' +import { Link, useNavigate } from 'react-router-dom' import EmailAndPassForm from './components/EmailAndPassForm' import GoogleAuthButton from './components/GoogleAuthButton' @@ -12,7 +12,7 @@ import { login, signup } from "wasp/client/auth"; const SignupPage = (props) => { - const history = useHistory() + const navigate = useNavigate() const [usernameFieldVal, setUsernameFieldVal] = useState('') const [passwordFieldVal, setPasswordFieldVal] = useState('') @@ -26,7 +26,7 @@ const SignupPage = (props) => { setUsernameFieldVal('') setPasswordFieldVal('') - history.push('/') + navigate('/') } catch (err) { console.log(err) window.alert(err) diff --git a/examples/waspleau/package-lock.json b/examples/waspleau/package-lock.json index e9e60107bc..fb987d6f0d 100644 --- a/examples/waspleau/package-lock.json +++ b/examples/waspleau/package-lock.json @@ -25,8 +25,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "axios": "^1.4.0", "express": "~4.18.1", @@ -38,13 +36,14 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, "node_modules/@adobe/css-tools": { @@ -755,6 +754,15 @@ "@prisma/debug": "5.19.1" } }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", @@ -1099,6 +1107,7 @@ "version": "4.17.43", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -1106,11 +1115,6 @@ "@types/send": "*" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/js-levenshtein": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz", @@ -1119,7 +1123,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -1142,12 +1147,14 @@ "node_modules/@types/qs": { "version": "6.9.11", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.60", @@ -1167,25 +1174,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", @@ -1195,6 +1183,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -2778,32 +2767,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -3800,14 +3763,6 @@ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -4248,21 +4203,6 @@ "fsevents": "2.3.3" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -4398,59 +4338,37 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/react-router/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==" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-router/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -4522,11 +4440,6 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -4978,16 +4891,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -5201,11 +5104,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/examples/websockets-realtime-voting/package-lock.json b/examples/websockets-realtime-voting/package-lock.json index 6624eaff45..9aedaa84a9 100644 --- a/examples/websockets-realtime-voting/package-lock.json +++ b/examples/websockets-realtime-voting/package-lock.json @@ -30,8 +30,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "autoprefixer": "^10.4.13", "axios": "^1.4.0", @@ -46,7 +44,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "socket.io": "^4.6.1", "socket.io-client": "^4.6.1", "superjson": "^1.12.2", @@ -54,7 +52,8 @@ "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, ".wasp/out/sdk/wasp/node_modules/@napi-rs/wasm-runtime": { @@ -2175,6 +2174,15 @@ "@prisma/debug": "5.19.1" } }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.11.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.11.0.tgz", @@ -2563,6 +2571,7 @@ "version": "4.17.43", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2570,11 +2579,6 @@ "@types/send": "*" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/js-levenshtein": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz", @@ -2583,7 +2587,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -2606,12 +2611,14 @@ "node_modules/@types/qs": { "version": "6.9.11", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.55", @@ -2631,25 +2638,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", @@ -2659,6 +2647,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -4682,32 +4671,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -6413,21 +6376,6 @@ "fsevents": "2.3.3" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -6589,59 +6537,37 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/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==" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/react-router/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -6737,11 +6663,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -7474,16 +7395,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -7719,11 +7630,6 @@ "node": ">= 0.4.0" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -9980,6 +9886,11 @@ "@prisma/debug": "5.19.1" } }, + "@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==" + }, "@rollup/rollup-android-arm-eabi": { "version": "4.11.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.11.0.tgz", @@ -10215,6 +10126,7 @@ "version": "4.17.43", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, "requires": { "@types/node": "*", "@types/qs": "*", @@ -10222,11 +10134,6 @@ "@types/send": "*" } }, - "@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "@types/js-levenshtein": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz", @@ -10235,7 +10142,8 @@ "@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "@types/ms": { "version": "0.7.34", @@ -10258,12 +10166,14 @@ "@types/qs": { "version": "6.9.11", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true }, "@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "@types/react": { "version": "18.2.55", @@ -10283,25 +10193,6 @@ "@types/react": "*" } }, - "@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", @@ -10311,6 +10202,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "requires": { "@types/mime": "^1", "@types/node": "*" @@ -11707,34 +11599,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, "html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -12868,23 +12732,6 @@ "fsevents": "2.3.3" } }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -12989,53 +12836,20 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "dependencies": { - "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==" - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "requires": { + "@remix-run/router": "1.19.1" } }, "react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" } }, "read-cache": { @@ -13109,11 +12923,6 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -13648,16 +13457,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -13819,11 +13618,6 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -14322,7 +14116,6 @@ "@testing-library/react": "^14.1.2", "@tsconfig/node18": "latest", "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "autoprefixer": "^10.4.13", "axios": "^1.4.0", @@ -14337,7 +14130,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "socket.io": "^4.6.1", "socket.io-client": "^4.6.1", "superjson": "^1.12.2", diff --git a/examples/websockets-realtime-voting/src/Layout.tsx b/examples/websockets-realtime-voting/src/Layout.tsx index ecf49aa4e5..55593e6ec3 100644 --- a/examples/websockets-realtime-voting/src/Layout.tsx +++ b/examples/websockets-realtime-voting/src/Layout.tsx @@ -1,6 +1,5 @@ -import { ReactNode } from "react"; +import { Outlet } from "react-router-dom"; import { logout, useAuth } from "wasp/client/auth"; -// @ts-check import "./Main.css"; import { Flowbite, Dropdown, Navbar, Avatar } from "flowbite-react"; @@ -14,7 +13,7 @@ const customTheme = { }, }; -export const Layout = ({ children }: { children: ReactNode }) => { +export const Layout = () => { const { data: user } = useAuth(); return ( @@ -40,7 +39,9 @@ export const Layout = ({ children }: { children: ReactNode }) => { } > - {user.getFirstProviderUserId()} + + {user.getFirstProviderUserId()} + Dashboard Settings @@ -61,7 +62,9 @@ export const Layout = ({ children }: { children: ReactNode }) => { Contact */} -
{children}
+
+ +

); diff --git a/waspc/examples/crud-testing/package-lock.json b/waspc/examples/crud-testing/package-lock.json index 6b21af5c38..14a1a3518d 100644 --- a/waspc/examples/crud-testing/package-lock.json +++ b/waspc/examples/crud-testing/package-lock.json @@ -28,8 +28,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "axios": "^1.4.0", "express": "~4.18.1", @@ -43,13 +41,14 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, ".wasp/out/sdk/wasp/node_modules/@emnapi/core": { @@ -1558,6 +1557,15 @@ "@prisma/debug": "5.19.1" } }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.13.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", @@ -1919,6 +1927,7 @@ "version": "4.17.43", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -1926,11 +1935,6 @@ "@types/send": "*" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/js-levenshtein": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz", @@ -1939,7 +1943,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -1962,12 +1967,14 @@ "node_modules/@types/qs": { "version": "6.9.12", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.12.tgz", - "integrity": "sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==" + "integrity": "sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.67", @@ -1987,25 +1994,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", @@ -2015,6 +2003,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -3607,32 +3596,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -5151,14 +5114,6 @@ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -5608,21 +5563,6 @@ "fsevents": "2.3.3" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -5758,59 +5698,37 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/react-router/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==" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-router/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -5882,11 +5800,6 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -6338,16 +6251,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -6561,11 +6464,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/waspc/examples/pg-vector-example/package-lock.json b/waspc/examples/pg-vector-example/package-lock.json index 2626bd9b56..23d3c16d80 100644 --- a/waspc/examples/pg-vector-example/package-lock.json +++ b/waspc/examples/pg-vector-example/package-lock.json @@ -32,8 +32,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "autoprefixer": "^10.4.13", "axios": "^1.4.0", @@ -46,14 +44,15 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "superjson": "^1.12.2", "tailwindcss": "^3.2.7", "uuid": "^9.0.0", "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, "node_modules/@adobe/css-tools": { @@ -3200,6 +3199,15 @@ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.13.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", @@ -3566,6 +3574,7 @@ "version": "4.17.43", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -3581,11 +3590,6 @@ "@types/unist": "^2" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/js-levenshtein": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz", @@ -3602,7 +3606,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -3632,14 +3637,16 @@ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/qs": { - "version": "6.9.12", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.12.tgz", - "integrity": "sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==" + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.67", @@ -3659,25 +3666,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", @@ -3687,6 +3675,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -4114,11 +4103,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base-64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", - "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -4391,14 +4375,6 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "engines": { - "node": "*" - } - }, "node_modules/check-error": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", @@ -4740,14 +4716,6 @@ "node": ">= 8" } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "engines": { - "node": "*" - } - }, "node_modules/css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", @@ -5040,15 +5008,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/digest-fetch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz", - "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==", - "dependencies": { - "base-64": "^0.1.0", - "md5": "^2.3.0" - } - }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", @@ -5923,32 +5882,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -6298,11 +6231,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -6881,16 +6809,6 @@ "node": ">=12" } }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, "node_modules/mdast-util-definitions": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", @@ -7847,22 +7765,31 @@ } }, "node_modules/openai": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.29.1.tgz", - "integrity": "sha512-vvKRIgB4/7w48PGVbeR8OceH/PT6fRo4sTIjRC7+y7WoK7by1R0cXs2SZRx4KsEh0ZB8J0eqdVIdRgs8XzeoEg==", + "version": "4.57.3", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.57.3.tgz", + "integrity": "sha512-mTz5/SmulkkeSpqbSr6WNLRU6krkyhnbfRUC8XfaXbj1T6xUorKEELjZvbRSzI714JLOk1MeFkqYS9H4WHhqDQ==", + "license": "Apache-2.0", "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", + "@types/qs": "^6.9.15", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", - "digest-fetch": "^1.3.0", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7", - "web-streams-polyfill": "^3.2.1" + "qs": "^6.10.3" }, "bin": { "openai": "bin/cli" + }, + "peerDependencies": { + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } } }, "node_modules/ora": { @@ -8528,59 +8455,37 @@ } }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/react-router/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==" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-router/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/react-style-singleton": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", @@ -8743,11 +8648,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -9409,16 +9309,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinybench": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", @@ -9885,11 +9775,6 @@ "node": ">=8" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -11026,14 +10911,6 @@ "@zxing/text-encoding": "0.9.0" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "engines": { - "node": ">= 8" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/waspc/examples/pg-vector-example/src/Layout.tsx b/waspc/examples/pg-vector-example/src/Layout.tsx index dc5e3c2947..67b0c63cf1 100644 --- a/waspc/examples/pg-vector-example/src/Layout.tsx +++ b/waspc/examples/pg-vector-example/src/Layout.tsx @@ -1,11 +1,12 @@ import { NextUIProvider } from "@nextui-org/react"; import "./Main.css"; +import { Outlet } from "react-router-dom"; -export function Layout({ children }: React.PropsWithChildren<{}>) { +export function Layout() { return (
- {children} +
); diff --git a/waspc/examples/todo-typescript/package-lock.json b/waspc/examples/todo-typescript/package-lock.json index 94008137a1..61587bc923 100644 --- a/waspc/examples/todo-typescript/package-lock.json +++ b/waspc/examples/todo-typescript/package-lock.json @@ -31,8 +31,6 @@ "@tanstack/react-query": "^4.29.0", "@testing-library/jest-dom": "^6.3.0", "@testing-library/react": "^14.1.2", - "@types/express-serve-static-core": "^4.17.13", - "@types/react-router-dom": "^5.3.3", "@vitest/ui": "^1.2.1", "autoprefixer": "^10.4.13", "axios": "^1.4.0", @@ -48,7 +46,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^5.3.3", + "react-router-dom": "^6.26.1", "socket.io": "^4.6.1", "socket.io-client": "^4.6.1", "superjson": "^1.12.2", @@ -56,7 +54,8 @@ "vitest": "^1.2.1" }, "devDependencies": { - "@tsconfig/node18": "latest" + "@tsconfig/node18": "latest", + "@types/express-serve-static-core": "^4.17.13" } }, ".wasp/out/sdk/wasp/node_modules/@emnapi/core": { @@ -1675,6 +1674,15 @@ "@prisma/debug": "5.19.1" } }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.14.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.2.tgz", @@ -2104,6 +2112,7 @@ "version": "4.19.0", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2111,11 +2120,6 @@ "@types/send": "*" } }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -2130,7 +2134,8 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", @@ -2153,12 +2158,14 @@ "node_modules/@types/qs": { "version": "6.9.14", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", - "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==" + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/react": { "version": "18.2.78", @@ -2177,29 +2184,11 @@ "@types/react": "*" } }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -4165,32 +4154,6 @@ "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==" }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -6419,21 +6382,6 @@ "fsevents": "2.3.3" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -6569,59 +6517,37 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/react-router/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==" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-router/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -6717,11 +6643,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -7463,16 +7384,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinybench": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.7.0.tgz", @@ -7720,11 +7631,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", From da359a2682cfe06446a6e0fa61e98bad7c04ba01 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Fri, 6 Sep 2024 15:03:17 +0200 Subject: [PATCH 11/31] e2e tests Signed-off-by: Mihovil Ilakovac --- .../waspBuild/.wasp/build/.waspchecksums | 4 +- .../sdk/wasp/client/router/linkHelpers.ts | 3 ++ .../build/sdk/wasp/client/router/types.ts | 48 ++++++++++++++++++- .../wasp/dist/client/router/linkHelpers.js | 3 ++ .../dist/client/router/linkHelpers.js.map | 2 +- .../sdk/wasp/dist/client/router/types.d.ts | 21 +++++++- .../out/sdk/wasp/client/router/linkHelpers.ts | 3 ++ .../.wasp/out/sdk/wasp/client/router/types.ts | 48 ++++++++++++++++++- .../wasp/dist/client/router/linkHelpers.js | 3 ++ .../dist/client/router/linkHelpers.js.map | 2 +- .../sdk/wasp/dist/client/router/types.d.ts | 21 +++++++- .../waspCompile/.wasp/out/.waspchecksums | 4 +- .../out/sdk/wasp/client/router/linkHelpers.ts | 3 ++ .../.wasp/out/sdk/wasp/client/router/types.ts | 48 ++++++++++++++++++- .../wasp/dist/client/router/linkHelpers.js | 3 ++ .../dist/client/router/linkHelpers.js.map | 2 +- .../sdk/wasp/dist/client/router/types.d.ts | 21 +++++++- .../waspComplexTest/.wasp/out/.waspchecksums | 4 +- .../out/sdk/wasp/client/router/linkHelpers.ts | 3 ++ .../.wasp/out/sdk/wasp/client/router/types.ts | 48 ++++++++++++++++++- .../wasp/dist/client/router/linkHelpers.js | 3 ++ .../dist/client/router/linkHelpers.js.map | 2 +- .../sdk/wasp/dist/client/router/types.d.ts | 21 +++++++- .../waspJob/.wasp/out/.waspchecksums | 4 +- .../out/sdk/wasp/client/router/linkHelpers.ts | 3 ++ .../.wasp/out/sdk/wasp/client/router/types.ts | 48 ++++++++++++++++++- .../wasp/dist/client/router/linkHelpers.js | 3 ++ .../dist/client/router/linkHelpers.js.map | 2 +- .../sdk/wasp/dist/client/router/types.d.ts | 21 +++++++- .../waspMigrate/.wasp/out/.waspchecksums | 4 +- .../out/sdk/wasp/client/router/linkHelpers.ts | 3 ++ .../.wasp/out/sdk/wasp/client/router/types.ts | 48 ++++++++++++++++++- .../wasp/dist/client/router/linkHelpers.js | 3 ++ .../dist/client/router/linkHelpers.js.map | 2 +- .../sdk/wasp/dist/client/router/types.d.ts | 21 +++++++- 35 files changed, 454 insertions(+), 28 deletions(-) diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums index 29ce45eb98..ebb0bd9ac8 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums @@ -123,14 +123,14 @@ "file", "../out/sdk/wasp/client/router/linkHelpers.ts" ], - "62e48c724070c59a95c837288112922326e1351ee1defa4759bdc47f7361ce9e" + "7def2dcb41d0d0a3f123645cdb913f593b92fd35694783a753cba37c5deb84a2" ], [ [ "file", "../out/sdk/wasp/client/router/types.ts" ], - "9bfaabe92126b641e6b939c26bac121dbbe1bb495392a5d40474ef4981432b5f" + "c4aaf60fe2a920d32937aaf56d422ad77444d0afb14ed5396112896d55c974e2" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/linkHelpers.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/linkHelpers.ts index e10cba9281..c12c36125e 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/linkHelpers.ts @@ -17,6 +17,9 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts index 71c6a3812d..fb87a803a5 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to'] + to: GenerateRoute } & ParamsFromBuildFn } @@ -39,3 +39,49 @@ type ParamsFromBuildFn = Parameters[0] extends { } ? { params: Params } : { params?: never } + +// Optional static segments handling +type GenerateRoute = S extends '/' + ? '/' + : `/${JoinPath>>>}` + +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] + ? Head extends '' + ? [...ExplodeOptionalSegments] + : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + : T + +type _ExplodeOptionalSegment = T extends `:${infer P}` + // Param segment + ? { segment: T } + : T extends `${infer S}?` + // Optional segment + ? { optionalSegment: S } + // Regular segment + : { segment: T } + +type Segment = { segment: string } +type OptionalSegment = { optionalSegment: string } + +type Elem = Segment | OptionalSegment + +type JoinSegments = T extends [] + ? [] + : T extends [infer First extends Elem, ...infer Rest extends Elem[]] + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] + : [] + +type SplitPath = S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S] + +type JoinPath = T extends [infer Only extends string] + ? Only + : T extends [infer First extends string, ...infer Rest extends string[]] + ? `${First}/${JoinPath}` + : never + \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js index 144c9efc7c..b281dd1032 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js @@ -9,6 +9,9 @@ export function interpolatePath(path, params, search, hash) { } function interpolatePathParams(path, params) { function mapPathPart(part) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js.map b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js.map index c532d39f5e..4da8ff70fd 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js.map +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js.map @@ -1 +1 @@ -{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file +{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts index d80cec9aac..1fe681a98b 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts @@ -10,7 +10,7 @@ export type Params = { export type Search = string[][] | Record | string | URLSearchParams; type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to']; + to: GenerateRoute; } & ParamsFromBuildFn; }; type RoutesDefinition = { @@ -27,4 +27,23 @@ type ParamsFromBuildFn = Parameters[0] extends { } : { params?: never; }; +type GenerateRoute = S extends '/' ? '/' : `/${JoinPath>>>}`; +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExplodeOptionalSegments] : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T; +type _ExplodeOptionalSegment = T extends `:${infer P}` ? { + segment: T; +} : T extends `${infer S}?` ? { + optionalSegment: S; +} : { + segment: T; +}; +type Segment = { + segment: string; +}; +type OptionalSegment = { + optionalSegment: string; +}; +type Elem = Segment | OptionalSegment; +type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First['segment'], ...JoinSegments] : First extends OptionalSegment ? [First['optionalSegment'], ...JoinSegments] | JoinSegments : [] : []; +type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; +type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; export {}; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/linkHelpers.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/linkHelpers.ts index e10cba9281..c12c36125e 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/linkHelpers.ts @@ -17,6 +17,9 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts index 71c6a3812d..fb87a803a5 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to'] + to: GenerateRoute } & ParamsFromBuildFn } @@ -39,3 +39,49 @@ type ParamsFromBuildFn = Parameters[0] extends { } ? { params: Params } : { params?: never } + +// Optional static segments handling +type GenerateRoute = S extends '/' + ? '/' + : `/${JoinPath>>>}` + +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] + ? Head extends '' + ? [...ExplodeOptionalSegments] + : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + : T + +type _ExplodeOptionalSegment = T extends `:${infer P}` + // Param segment + ? { segment: T } + : T extends `${infer S}?` + // Optional segment + ? { optionalSegment: S } + // Regular segment + : { segment: T } + +type Segment = { segment: string } +type OptionalSegment = { optionalSegment: string } + +type Elem = Segment | OptionalSegment + +type JoinSegments = T extends [] + ? [] + : T extends [infer First extends Elem, ...infer Rest extends Elem[]] + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] + : [] + +type SplitPath = S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S] + +type JoinPath = T extends [infer Only extends string] + ? Only + : T extends [infer First extends string, ...infer Rest extends string[]] + ? `${First}/${JoinPath}` + : never + \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js index 144c9efc7c..b281dd1032 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js @@ -9,6 +9,9 @@ export function interpolatePath(path, params, search, hash) { } function interpolatePathParams(path, params) { function mapPathPart(part) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map index c532d39f5e..4da8ff70fd 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map @@ -1 +1 @@ -{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file +{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index d80cec9aac..1fe681a98b 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -10,7 +10,7 @@ export type Params = { export type Search = string[][] | Record | string | URLSearchParams; type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to']; + to: GenerateRoute; } & ParamsFromBuildFn; }; type RoutesDefinition = { @@ -27,4 +27,23 @@ type ParamsFromBuildFn = Parameters[0] extends { } : { params?: never; }; +type GenerateRoute = S extends '/' ? '/' : `/${JoinPath>>>}`; +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExplodeOptionalSegments] : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T; +type _ExplodeOptionalSegment = T extends `:${infer P}` ? { + segment: T; +} : T extends `${infer S}?` ? { + optionalSegment: S; +} : { + segment: T; +}; +type Segment = { + segment: string; +}; +type OptionalSegment = { + optionalSegment: string; +}; +type Elem = Segment | OptionalSegment; +type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First['segment'], ...JoinSegments] : First extends OptionalSegment ? [First['optionalSegment'], ...JoinSegments] | JoinSegments : [] : []; +type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; +type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; export {}; diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums index cc794433fa..69aaf8ed12 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums @@ -123,14 +123,14 @@ "file", "../out/sdk/wasp/client/router/linkHelpers.ts" ], - "62e48c724070c59a95c837288112922326e1351ee1defa4759bdc47f7361ce9e" + "7def2dcb41d0d0a3f123645cdb913f593b92fd35694783a753cba37c5deb84a2" ], [ [ "file", "../out/sdk/wasp/client/router/types.ts" ], - "9bfaabe92126b641e6b939c26bac121dbbe1bb495392a5d40474ef4981432b5f" + "c4aaf60fe2a920d32937aaf56d422ad77444d0afb14ed5396112896d55c974e2" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/linkHelpers.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/linkHelpers.ts index e10cba9281..c12c36125e 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/linkHelpers.ts @@ -17,6 +17,9 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts index 71c6a3812d..fb87a803a5 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to'] + to: GenerateRoute } & ParamsFromBuildFn } @@ -39,3 +39,49 @@ type ParamsFromBuildFn = Parameters[0] extends { } ? { params: Params } : { params?: never } + +// Optional static segments handling +type GenerateRoute = S extends '/' + ? '/' + : `/${JoinPath>>>}` + +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] + ? Head extends '' + ? [...ExplodeOptionalSegments] + : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + : T + +type _ExplodeOptionalSegment = T extends `:${infer P}` + // Param segment + ? { segment: T } + : T extends `${infer S}?` + // Optional segment + ? { optionalSegment: S } + // Regular segment + : { segment: T } + +type Segment = { segment: string } +type OptionalSegment = { optionalSegment: string } + +type Elem = Segment | OptionalSegment + +type JoinSegments = T extends [] + ? [] + : T extends [infer First extends Elem, ...infer Rest extends Elem[]] + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] + : [] + +type SplitPath = S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S] + +type JoinPath = T extends [infer Only extends string] + ? Only + : T extends [infer First extends string, ...infer Rest extends string[]] + ? `${First}/${JoinPath}` + : never + \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js index 144c9efc7c..b281dd1032 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js @@ -9,6 +9,9 @@ export function interpolatePath(path, params, search, hash) { } function interpolatePathParams(path, params) { function mapPathPart(part) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map index c532d39f5e..4da8ff70fd 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map @@ -1 +1 @@ -{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file +{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index d80cec9aac..1fe681a98b 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -10,7 +10,7 @@ export type Params = { export type Search = string[][] | Record | string | URLSearchParams; type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to']; + to: GenerateRoute; } & ParamsFromBuildFn; }; type RoutesDefinition = { @@ -27,4 +27,23 @@ type ParamsFromBuildFn = Parameters[0] extends { } : { params?: never; }; +type GenerateRoute = S extends '/' ? '/' : `/${JoinPath>>>}`; +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExplodeOptionalSegments] : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T; +type _ExplodeOptionalSegment = T extends `:${infer P}` ? { + segment: T; +} : T extends `${infer S}?` ? { + optionalSegment: S; +} : { + segment: T; +}; +type Segment = { + segment: string; +}; +type OptionalSegment = { + optionalSegment: string; +}; +type Elem = Segment | OptionalSegment; +type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First['segment'], ...JoinSegments] : First extends OptionalSegment ? [First['optionalSegment'], ...JoinSegments] | JoinSegments : [] : []; +type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; +type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; export {}; diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums index 0ec301f51e..a5efeb0245 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums @@ -326,14 +326,14 @@ "file", "../out/sdk/wasp/client/router/linkHelpers.ts" ], - "62e48c724070c59a95c837288112922326e1351ee1defa4759bdc47f7361ce9e" + "7def2dcb41d0d0a3f123645cdb913f593b92fd35694783a753cba37c5deb84a2" ], [ [ "file", "../out/sdk/wasp/client/router/types.ts" ], - "9bfaabe92126b641e6b939c26bac121dbbe1bb495392a5d40474ef4981432b5f" + "c4aaf60fe2a920d32937aaf56d422ad77444d0afb14ed5396112896d55c974e2" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/linkHelpers.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/linkHelpers.ts index e10cba9281..c12c36125e 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/linkHelpers.ts @@ -17,6 +17,9 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts index 71c6a3812d..fb87a803a5 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to'] + to: GenerateRoute } & ParamsFromBuildFn } @@ -39,3 +39,49 @@ type ParamsFromBuildFn = Parameters[0] extends { } ? { params: Params } : { params?: never } + +// Optional static segments handling +type GenerateRoute = S extends '/' + ? '/' + : `/${JoinPath>>>}` + +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] + ? Head extends '' + ? [...ExplodeOptionalSegments] + : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + : T + +type _ExplodeOptionalSegment = T extends `:${infer P}` + // Param segment + ? { segment: T } + : T extends `${infer S}?` + // Optional segment + ? { optionalSegment: S } + // Regular segment + : { segment: T } + +type Segment = { segment: string } +type OptionalSegment = { optionalSegment: string } + +type Elem = Segment | OptionalSegment + +type JoinSegments = T extends [] + ? [] + : T extends [infer First extends Elem, ...infer Rest extends Elem[]] + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] + : [] + +type SplitPath = S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S] + +type JoinPath = T extends [infer Only extends string] + ? Only + : T extends [infer First extends string, ...infer Rest extends string[]] + ? `${First}/${JoinPath}` + : never + \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js index 144c9efc7c..b281dd1032 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js @@ -9,6 +9,9 @@ export function interpolatePath(path, params, search, hash) { } function interpolatePathParams(path, params) { function mapPathPart(part) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map index c532d39f5e..4da8ff70fd 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map @@ -1 +1 @@ -{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file +{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index d80cec9aac..1fe681a98b 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -10,7 +10,7 @@ export type Params = { export type Search = string[][] | Record | string | URLSearchParams; type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to']; + to: GenerateRoute; } & ParamsFromBuildFn; }; type RoutesDefinition = { @@ -27,4 +27,23 @@ type ParamsFromBuildFn = Parameters[0] extends { } : { params?: never; }; +type GenerateRoute = S extends '/' ? '/' : `/${JoinPath>>>}`; +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExplodeOptionalSegments] : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T; +type _ExplodeOptionalSegment = T extends `:${infer P}` ? { + segment: T; +} : T extends `${infer S}?` ? { + optionalSegment: S; +} : { + segment: T; +}; +type Segment = { + segment: string; +}; +type OptionalSegment = { + optionalSegment: string; +}; +type Elem = Segment | OptionalSegment; +type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First['segment'], ...JoinSegments] : First extends OptionalSegment ? [First['optionalSegment'], ...JoinSegments] | JoinSegments : [] : []; +type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; +type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; export {}; diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums index f763e4af81..7ed27ca94d 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums @@ -123,14 +123,14 @@ "file", "../out/sdk/wasp/client/router/linkHelpers.ts" ], - "62e48c724070c59a95c837288112922326e1351ee1defa4759bdc47f7361ce9e" + "7def2dcb41d0d0a3f123645cdb913f593b92fd35694783a753cba37c5deb84a2" ], [ [ "file", "../out/sdk/wasp/client/router/types.ts" ], - "9bfaabe92126b641e6b939c26bac121dbbe1bb495392a5d40474ef4981432b5f" + "c4aaf60fe2a920d32937aaf56d422ad77444d0afb14ed5396112896d55c974e2" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/linkHelpers.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/linkHelpers.ts index e10cba9281..c12c36125e 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/linkHelpers.ts @@ -17,6 +17,9 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts index 71c6a3812d..fb87a803a5 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to'] + to: GenerateRoute } & ParamsFromBuildFn } @@ -39,3 +39,49 @@ type ParamsFromBuildFn = Parameters[0] extends { } ? { params: Params } : { params?: never } + +// Optional static segments handling +type GenerateRoute = S extends '/' + ? '/' + : `/${JoinPath>>>}` + +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] + ? Head extends '' + ? [...ExplodeOptionalSegments] + : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + : T + +type _ExplodeOptionalSegment = T extends `:${infer P}` + // Param segment + ? { segment: T } + : T extends `${infer S}?` + // Optional segment + ? { optionalSegment: S } + // Regular segment + : { segment: T } + +type Segment = { segment: string } +type OptionalSegment = { optionalSegment: string } + +type Elem = Segment | OptionalSegment + +type JoinSegments = T extends [] + ? [] + : T extends [infer First extends Elem, ...infer Rest extends Elem[]] + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] + : [] + +type SplitPath = S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S] + +type JoinPath = T extends [infer Only extends string] + ? Only + : T extends [infer First extends string, ...infer Rest extends string[]] + ? `${First}/${JoinPath}` + : never + \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js index 144c9efc7c..b281dd1032 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js @@ -9,6 +9,9 @@ export function interpolatePath(path, params, search, hash) { } function interpolatePathParams(path, params) { function mapPathPart(part) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map index c532d39f5e..4da8ff70fd 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map @@ -1 +1 @@ -{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file +{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index d80cec9aac..1fe681a98b 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -10,7 +10,7 @@ export type Params = { export type Search = string[][] | Record | string | URLSearchParams; type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to']; + to: GenerateRoute; } & ParamsFromBuildFn; }; type RoutesDefinition = { @@ -27,4 +27,23 @@ type ParamsFromBuildFn = Parameters[0] extends { } : { params?: never; }; +type GenerateRoute = S extends '/' ? '/' : `/${JoinPath>>>}`; +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExplodeOptionalSegments] : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T; +type _ExplodeOptionalSegment = T extends `:${infer P}` ? { + segment: T; +} : T extends `${infer S}?` ? { + optionalSegment: S; +} : { + segment: T; +}; +type Segment = { + segment: string; +}; +type OptionalSegment = { + optionalSegment: string; +}; +type Elem = Segment | OptionalSegment; +type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First['segment'], ...JoinSegments] : First extends OptionalSegment ? [First['optionalSegment'], ...JoinSegments] | JoinSegments : [] : []; +type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; +type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; export {}; diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums index a6ffdfc7de..523538bdc1 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums @@ -123,14 +123,14 @@ "file", "../out/sdk/wasp/client/router/linkHelpers.ts" ], - "62e48c724070c59a95c837288112922326e1351ee1defa4759bdc47f7361ce9e" + "7def2dcb41d0d0a3f123645cdb913f593b92fd35694783a753cba37c5deb84a2" ], [ [ "file", "../out/sdk/wasp/client/router/types.ts" ], - "9bfaabe92126b641e6b939c26bac121dbbe1bb495392a5d40474ef4981432b5f" + "c4aaf60fe2a920d32937aaf56d422ad77444d0afb14ed5396112896d55c974e2" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/linkHelpers.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/linkHelpers.ts index e10cba9281..c12c36125e 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/linkHelpers.ts @@ -17,6 +17,9 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts index 71c6a3812d..fb87a803a5 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to'] + to: GenerateRoute } & ParamsFromBuildFn } @@ -39,3 +39,49 @@ type ParamsFromBuildFn = Parameters[0] extends { } ? { params: Params } : { params?: never } + +// Optional static segments handling +type GenerateRoute = S extends '/' + ? '/' + : `/${JoinPath>>>}` + +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] + ? Head extends '' + ? [...ExplodeOptionalSegments] + : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + : T + +type _ExplodeOptionalSegment = T extends `:${infer P}` + // Param segment + ? { segment: T } + : T extends `${infer S}?` + // Optional segment + ? { optionalSegment: S } + // Regular segment + : { segment: T } + +type Segment = { segment: string } +type OptionalSegment = { optionalSegment: string } + +type Elem = Segment | OptionalSegment + +type JoinSegments = T extends [] + ? [] + : T extends [infer First extends Elem, ...infer Rest extends Elem[]] + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] + : [] + +type SplitPath = S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S] + +type JoinPath = T extends [infer Only extends string] + ? Only + : T extends [infer First extends string, ...infer Rest extends string[]] + ? `${First}/${JoinPath}` + : never + \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js index 144c9efc7c..b281dd1032 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js @@ -9,6 +9,9 @@ export function interpolatePath(path, params, search, hash) { } function interpolatePathParams(path, params) { function mapPathPart(part) { + if (part === '*') { + return params.splat; + } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); return params[paramName]; diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map index c532d39f5e..4da8ff70fd 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map @@ -1 +1 @@ -{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file +{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index d80cec9aac..1fe681a98b 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -10,7 +10,7 @@ export type Params = { export type Search = string[][] | Record | string | URLSearchParams; type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: Routes[K]['to']; + to: GenerateRoute; } & ParamsFromBuildFn; }; type RoutesDefinition = { @@ -27,4 +27,23 @@ type ParamsFromBuildFn = Parameters[0] extends { } : { params?: never; }; +type GenerateRoute = S extends '/' ? '/' : `/${JoinPath>>>}`; +type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExplodeOptionalSegments] : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T; +type _ExplodeOptionalSegment = T extends `:${infer P}` ? { + segment: T; +} : T extends `${infer S}?` ? { + optionalSegment: S; +} : { + segment: T; +}; +type Segment = { + segment: string; +}; +type OptionalSegment = { + optionalSegment: string; +}; +type Elem = Segment | OptionalSegment; +type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First['segment'], ...JoinSegments] : First extends OptionalSegment ? [First['optionalSegment'], ...JoinSegments] | JoinSegments : [] : []; +type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; +type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; export {}; From f29a9767e21d81d374e4f6e1c3a1c4f28280c839 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Fri, 6 Sep 2024 22:44:41 +0200 Subject: [PATCH 12/31] Update types --- .../templates/sdk/wasp/client/router/types.ts | 50 +++++++++++-------- .../waspBuild/.wasp/build/.waspchecksums | 2 +- .../build/sdk/wasp/client/router/types.ts | 50 +++++++++++-------- .../sdk/wasp/dist/client/router/types.d.ts | 16 ++++-- .../.wasp/out/sdk/wasp/client/router/types.ts | 50 +++++++++++-------- .../sdk/wasp/dist/client/router/types.d.ts | 16 ++++-- .../waspCompile/.wasp/out/.waspchecksums | 2 +- .../.wasp/out/sdk/wasp/client/router/types.ts | 50 +++++++++++-------- .../sdk/wasp/dist/client/router/types.d.ts | 16 ++++-- .../waspComplexTest/.wasp/out/.waspchecksums | 2 +- .../.wasp/out/sdk/wasp/client/router/types.ts | 50 +++++++++++-------- .../sdk/wasp/dist/client/router/types.d.ts | 16 ++++-- .../waspJob/.wasp/out/.waspchecksums | 2 +- .../.wasp/out/sdk/wasp/client/router/types.ts | 50 +++++++++++-------- .../sdk/wasp/dist/client/router/types.d.ts | 16 ++++-- .../waspMigrate/.wasp/out/.waspchecksums | 2 +- .../.wasp/out/sdk/wasp/client/router/types.ts | 50 +++++++++++-------- .../sdk/wasp/dist/client/router/types.d.ts | 16 ++++-- 18 files changed, 273 insertions(+), 183 deletions(-) diff --git a/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts b/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts index fb87a803a5..283e21d832 100644 --- a/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts +++ b/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute + to: ExpandRouteOnOptionalStaticSegments } & ParamsFromBuildFn } @@ -40,25 +40,32 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } -// Optional static segments handling -type GenerateRoute = S extends '/' +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' - : `/${JoinPath>>>}` + : `/${JoinPath>>>}` -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' - ? [...ExplodeOptionalSegments] - : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + ? [...ExpandOptionalSegments] + : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T -type _ExplodeOptionalSegment = T extends `:${infer P}` - // Param segment - ? { segment: T } +type _ExpandOptionalSegment = T extends `:${infer P}` + ? // Param segment + { segment: T } : T extends `${infer S}?` - // Optional segment - ? { optionalSegment: S } - // Regular segment - : { segment: T } + ? // Optional segment + { optionalSegment: S } + : // Regular segment + { segment: T } type Segment = { segment: string } type OptionalSegment = { optionalSegment: string } @@ -68,12 +75,12 @@ type Elem = Segment | OptionalSegment type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] - ? First extends Segment - ? [First['segment'], ...JoinSegments] - : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] : [] - : [] type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] @@ -82,6 +89,5 @@ type SplitPath = S extends `${infer T}/${infer U}` type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] - ? `${First}/${JoinPath}` - : never - \ No newline at end of file + ? `${First}/${JoinPath}` + : never diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums index ebb0bd9ac8..69162894a1 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums @@ -130,7 +130,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "c4aaf60fe2a920d32937aaf56d422ad77444d0afb14ed5396112896d55c974e2" + "c5b95d3525fa7d266b1d2a8f32aa0ab1e93d36a5d5bcc62c7dabc225151d4f73" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts index fb87a803a5..283e21d832 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute + to: ExpandRouteOnOptionalStaticSegments } & ParamsFromBuildFn } @@ -40,25 +40,32 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } -// Optional static segments handling -type GenerateRoute = S extends '/' +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' - : `/${JoinPath>>>}` + : `/${JoinPath>>>}` -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' - ? [...ExplodeOptionalSegments] - : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + ? [...ExpandOptionalSegments] + : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T -type _ExplodeOptionalSegment = T extends `:${infer P}` - // Param segment - ? { segment: T } +type _ExpandOptionalSegment = T extends `:${infer P}` + ? // Param segment + { segment: T } : T extends `${infer S}?` - // Optional segment - ? { optionalSegment: S } - // Regular segment - : { segment: T } + ? // Optional segment + { optionalSegment: S } + : // Regular segment + { segment: T } type Segment = { segment: string } type OptionalSegment = { optionalSegment: string } @@ -68,12 +75,12 @@ type Elem = Segment | OptionalSegment type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] - ? First extends Segment - ? [First['segment'], ...JoinSegments] - : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] : [] - : [] type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] @@ -82,6 +89,5 @@ type SplitPath = S extends `${infer T}/${infer U}` type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] - ? `${First}/${JoinPath}` - : never - \ No newline at end of file + ? `${First}/${JoinPath}` + : never diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts index 1fe681a98b..8f9b8d95fd 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts @@ -10,7 +10,7 @@ export type Params = { export type Search = string[][] | Record | string | URLSearchParams; type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute; + to: ExpandRouteOnOptionalStaticSegments; } & ParamsFromBuildFn; }; type RoutesDefinition = { @@ -27,9 +27,17 @@ type ParamsFromBuildFn = Parameters[0] extends { } : { params?: never; }; -type GenerateRoute = S extends '/' ? '/' : `/${JoinPath>>>}`; -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExplodeOptionalSegments] : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T; -type _ExplodeOptionalSegment = T extends `:${infer P}` ? { +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; +type _ExpandOptionalSegment = T extends `:${infer P}` ? { segment: T; } : T extends `${infer S}?` ? { optionalSegment: S; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts index fb87a803a5..283e21d832 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute + to: ExpandRouteOnOptionalStaticSegments } & ParamsFromBuildFn } @@ -40,25 +40,32 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } -// Optional static segments handling -type GenerateRoute = S extends '/' +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' - : `/${JoinPath>>>}` + : `/${JoinPath>>>}` -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' - ? [...ExplodeOptionalSegments] - : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + ? [...ExpandOptionalSegments] + : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T -type _ExplodeOptionalSegment = T extends `:${infer P}` - // Param segment - ? { segment: T } +type _ExpandOptionalSegment = T extends `:${infer P}` + ? // Param segment + { segment: T } : T extends `${infer S}?` - // Optional segment - ? { optionalSegment: S } - // Regular segment - : { segment: T } + ? // Optional segment + { optionalSegment: S } + : // Regular segment + { segment: T } type Segment = { segment: string } type OptionalSegment = { optionalSegment: string } @@ -68,12 +75,12 @@ type Elem = Segment | OptionalSegment type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] - ? First extends Segment - ? [First['segment'], ...JoinSegments] - : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] : [] - : [] type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] @@ -82,6 +89,5 @@ type SplitPath = S extends `${infer T}/${infer U}` type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] - ? `${First}/${JoinPath}` - : never - \ No newline at end of file + ? `${First}/${JoinPath}` + : never diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 1fe681a98b..8f9b8d95fd 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -10,7 +10,7 @@ export type Params = { export type Search = string[][] | Record | string | URLSearchParams; type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute; + to: ExpandRouteOnOptionalStaticSegments; } & ParamsFromBuildFn; }; type RoutesDefinition = { @@ -27,9 +27,17 @@ type ParamsFromBuildFn = Parameters[0] extends { } : { params?: never; }; -type GenerateRoute = S extends '/' ? '/' : `/${JoinPath>>>}`; -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExplodeOptionalSegments] : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T; -type _ExplodeOptionalSegment = T extends `:${infer P}` ? { +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; +type _ExpandOptionalSegment = T extends `:${infer P}` ? { segment: T; } : T extends `${infer S}?` ? { optionalSegment: S; diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums index 69aaf8ed12..77ed774736 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums @@ -130,7 +130,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "c4aaf60fe2a920d32937aaf56d422ad77444d0afb14ed5396112896d55c974e2" + "c5b95d3525fa7d266b1d2a8f32aa0ab1e93d36a5d5bcc62c7dabc225151d4f73" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts index fb87a803a5..283e21d832 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute + to: ExpandRouteOnOptionalStaticSegments } & ParamsFromBuildFn } @@ -40,25 +40,32 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } -// Optional static segments handling -type GenerateRoute = S extends '/' +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' - : `/${JoinPath>>>}` + : `/${JoinPath>>>}` -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' - ? [...ExplodeOptionalSegments] - : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + ? [...ExpandOptionalSegments] + : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T -type _ExplodeOptionalSegment = T extends `:${infer P}` - // Param segment - ? { segment: T } +type _ExpandOptionalSegment = T extends `:${infer P}` + ? // Param segment + { segment: T } : T extends `${infer S}?` - // Optional segment - ? { optionalSegment: S } - // Regular segment - : { segment: T } + ? // Optional segment + { optionalSegment: S } + : // Regular segment + { segment: T } type Segment = { segment: string } type OptionalSegment = { optionalSegment: string } @@ -68,12 +75,12 @@ type Elem = Segment | OptionalSegment type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] - ? First extends Segment - ? [First['segment'], ...JoinSegments] - : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] : [] - : [] type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] @@ -82,6 +89,5 @@ type SplitPath = S extends `${infer T}/${infer U}` type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] - ? `${First}/${JoinPath}` - : never - \ No newline at end of file + ? `${First}/${JoinPath}` + : never diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 1fe681a98b..8f9b8d95fd 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -10,7 +10,7 @@ export type Params = { export type Search = string[][] | Record | string | URLSearchParams; type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute; + to: ExpandRouteOnOptionalStaticSegments; } & ParamsFromBuildFn; }; type RoutesDefinition = { @@ -27,9 +27,17 @@ type ParamsFromBuildFn = Parameters[0] extends { } : { params?: never; }; -type GenerateRoute = S extends '/' ? '/' : `/${JoinPath>>>}`; -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExplodeOptionalSegments] : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T; -type _ExplodeOptionalSegment = T extends `:${infer P}` ? { +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; +type _ExpandOptionalSegment = T extends `:${infer P}` ? { segment: T; } : T extends `${infer S}?` ? { optionalSegment: S; diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums index a5efeb0245..a95e12d720 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums @@ -333,7 +333,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "c4aaf60fe2a920d32937aaf56d422ad77444d0afb14ed5396112896d55c974e2" + "c5b95d3525fa7d266b1d2a8f32aa0ab1e93d36a5d5bcc62c7dabc225151d4f73" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts index fb87a803a5..283e21d832 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute + to: ExpandRouteOnOptionalStaticSegments } & ParamsFromBuildFn } @@ -40,25 +40,32 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } -// Optional static segments handling -type GenerateRoute = S extends '/' +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' - : `/${JoinPath>>>}` + : `/${JoinPath>>>}` -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' - ? [...ExplodeOptionalSegments] - : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + ? [...ExpandOptionalSegments] + : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T -type _ExplodeOptionalSegment = T extends `:${infer P}` - // Param segment - ? { segment: T } +type _ExpandOptionalSegment = T extends `:${infer P}` + ? // Param segment + { segment: T } : T extends `${infer S}?` - // Optional segment - ? { optionalSegment: S } - // Regular segment - : { segment: T } + ? // Optional segment + { optionalSegment: S } + : // Regular segment + { segment: T } type Segment = { segment: string } type OptionalSegment = { optionalSegment: string } @@ -68,12 +75,12 @@ type Elem = Segment | OptionalSegment type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] - ? First extends Segment - ? [First['segment'], ...JoinSegments] - : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] : [] - : [] type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] @@ -82,6 +89,5 @@ type SplitPath = S extends `${infer T}/${infer U}` type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] - ? `${First}/${JoinPath}` - : never - \ No newline at end of file + ? `${First}/${JoinPath}` + : never diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 1fe681a98b..8f9b8d95fd 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -10,7 +10,7 @@ export type Params = { export type Search = string[][] | Record | string | URLSearchParams; type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute; + to: ExpandRouteOnOptionalStaticSegments; } & ParamsFromBuildFn; }; type RoutesDefinition = { @@ -27,9 +27,17 @@ type ParamsFromBuildFn = Parameters[0] extends { } : { params?: never; }; -type GenerateRoute = S extends '/' ? '/' : `/${JoinPath>>>}`; -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExplodeOptionalSegments] : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T; -type _ExplodeOptionalSegment = T extends `:${infer P}` ? { +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; +type _ExpandOptionalSegment = T extends `:${infer P}` ? { segment: T; } : T extends `${infer S}?` ? { optionalSegment: S; diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums index 7ed27ca94d..8ab6f058ee 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums @@ -130,7 +130,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "c4aaf60fe2a920d32937aaf56d422ad77444d0afb14ed5396112896d55c974e2" + "c5b95d3525fa7d266b1d2a8f32aa0ab1e93d36a5d5bcc62c7dabc225151d4f73" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts index fb87a803a5..283e21d832 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute + to: ExpandRouteOnOptionalStaticSegments } & ParamsFromBuildFn } @@ -40,25 +40,32 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } -// Optional static segments handling -type GenerateRoute = S extends '/' +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' - : `/${JoinPath>>>}` + : `/${JoinPath>>>}` -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' - ? [...ExplodeOptionalSegments] - : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + ? [...ExpandOptionalSegments] + : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T -type _ExplodeOptionalSegment = T extends `:${infer P}` - // Param segment - ? { segment: T } +type _ExpandOptionalSegment = T extends `:${infer P}` + ? // Param segment + { segment: T } : T extends `${infer S}?` - // Optional segment - ? { optionalSegment: S } - // Regular segment - : { segment: T } + ? // Optional segment + { optionalSegment: S } + : // Regular segment + { segment: T } type Segment = { segment: string } type OptionalSegment = { optionalSegment: string } @@ -68,12 +75,12 @@ type Elem = Segment | OptionalSegment type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] - ? First extends Segment - ? [First['segment'], ...JoinSegments] - : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] : [] - : [] type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] @@ -82,6 +89,5 @@ type SplitPath = S extends `${infer T}/${infer U}` type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] - ? `${First}/${JoinPath}` - : never - \ No newline at end of file + ? `${First}/${JoinPath}` + : never diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 1fe681a98b..8f9b8d95fd 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -10,7 +10,7 @@ export type Params = { export type Search = string[][] | Record | string | URLSearchParams; type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute; + to: ExpandRouteOnOptionalStaticSegments; } & ParamsFromBuildFn; }; type RoutesDefinition = { @@ -27,9 +27,17 @@ type ParamsFromBuildFn = Parameters[0] extends { } : { params?: never; }; -type GenerateRoute = S extends '/' ? '/' : `/${JoinPath>>>}`; -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExplodeOptionalSegments] : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T; -type _ExplodeOptionalSegment = T extends `:${infer P}` ? { +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; +type _ExpandOptionalSegment = T extends `:${infer P}` ? { segment: T; } : T extends `${infer S}?` ? { optionalSegment: S; diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums index 523538bdc1..c41232aa5b 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums @@ -130,7 +130,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "c4aaf60fe2a920d32937aaf56d422ad77444d0afb14ed5396112896d55c974e2" + "c5b95d3525fa7d266b1d2a8f32aa0ab1e93d36a5d5bcc62c7dabc225151d4f73" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts index fb87a803a5..283e21d832 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts @@ -21,7 +21,7 @@ export type Search = type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute + to: ExpandRouteOnOptionalStaticSegments } & ParamsFromBuildFn } @@ -40,25 +40,32 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } -// Optional static segments handling -type GenerateRoute = S extends '/' +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' - : `/${JoinPath>>>}` + : `/${JoinPath>>>}` -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' - ? [...ExplodeOptionalSegments] - : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] + ? [...ExpandOptionalSegments] + : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T -type _ExplodeOptionalSegment = T extends `:${infer P}` - // Param segment - ? { segment: T } +type _ExpandOptionalSegment = T extends `:${infer P}` + ? // Param segment + { segment: T } : T extends `${infer S}?` - // Optional segment - ? { optionalSegment: S } - // Regular segment - : { segment: T } + ? // Optional segment + { optionalSegment: S } + : // Regular segment + { segment: T } type Segment = { segment: string } type OptionalSegment = { optionalSegment: string } @@ -68,12 +75,12 @@ type Elem = Segment | OptionalSegment type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] - ? First extends Segment - ? [First['segment'], ...JoinSegments] - : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? First extends Segment + ? [First['segment'], ...JoinSegments] + : First extends OptionalSegment + ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + : [] : [] - : [] type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] @@ -82,6 +89,5 @@ type SplitPath = S extends `${infer T}/${infer U}` type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] - ? `${First}/${JoinPath}` - : never - \ No newline at end of file + ? `${First}/${JoinPath}` + : never diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 1fe681a98b..8f9b8d95fd 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -10,7 +10,7 @@ export type Params = { export type Search = string[][] | Record | string | URLSearchParams; type RouteDefinitionsToRoutesObj = { [K in keyof Routes]: { - to: GenerateRoute; + to: ExpandRouteOnOptionalStaticSegments; } & ParamsFromBuildFn; }; type RoutesDefinition = { @@ -27,9 +27,17 @@ type ParamsFromBuildFn = Parameters[0] extends { } : { params?: never; }; -type GenerateRoute = S extends '/' ? '/' : `/${JoinPath>>>}`; -type ExplodeOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExplodeOptionalSegments] : [_ExplodeOptionalSegment, ...ExplodeOptionalSegments] : T; -type _ExplodeOptionalSegment = T extends `:${infer P}` ? { +/** + * Optional static segments handling: expands routes with optional segments + * into multiple routes, one for each possible combination of optional segments. + * + * For example: /users/tasks?/:id? will be expanded into two routes: + * - /users/:id + * - /users/tasks/:id + */ +type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; +type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; +type _ExpandOptionalSegment = T extends `:${infer P}` ? { segment: T; } : T extends `${infer S}?` ? { optionalSegment: S; From fc541ab861fa0aba40ff4667481466c630fb156f Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Mon, 9 Sep 2024 15:30:14 +0200 Subject: [PATCH 13/31] Update docs --- web/docs/advanced/links.md | 5 +- web/docs/auth/social-auth/overview.md | 10 +-- web/docs/auth/username-and-pass.md | 113 ++++++++++++++------------ web/docs/tutorial/03-pages.md | 28 +++---- 4 files changed, 80 insertions(+), 76 deletions(-) diff --git a/web/docs/advanced/links.md b/web/docs/advanced/links.md index 165b9cb18e..6748b89833 100644 --- a/web/docs/advanced/links.md +++ b/web/docs/advanced/links.md @@ -71,12 +71,12 @@ This will result in a link like this: `/task/1`. You can also pass `search` and `hash` props to the `build` function. Check out the [API Reference](#routes-object) for more details. - ## API Reference ### `Link` Component The `Link` component accepts the following props: + - `to` - A valid Wasp Route path from your `main.wasp` file. @@ -92,8 +92,7 @@ The `Link` component accepts the following props: - For example, the object `{ sortBy: 'date' }` becomes `?sortBy=date`. - `hash: string` -- all other props that the `react-router-dom`'s [Link](https://v5.reactrouter.com/web/api/Link) component accepts - +- all other props that the `react-router-dom`'s [Link](https://reactrouter.com/en/6.26.1/components/link) component accepts ### `routes` Object diff --git a/web/docs/auth/social-auth/overview.md b/web/docs/auth/social-auth/overview.md index 35987b1d6d..7abdac288f 100644 --- a/web/docs/auth/social-auth/overview.md +++ b/web/docs/auth/social-auth/overview.md @@ -228,13 +228,13 @@ For example: ```jsx title=src/HomePage.jsx import { useAuth } from 'wasp/client/auth' -import { Redirect } from 'react-router-dom' +import { Navigate } from 'react-router-dom' export function HomePage() { const { data: user } = useAuth() if (user.isSignupComplete === false) { - return + return } // ... @@ -246,13 +246,13 @@ export function HomePage() { ```tsx title=src/HomePage.tsx import { useAuth } from 'wasp/client/auth' -import { Redirect } from 'react-router-dom' +import { Navigate } from 'react-router-dom' export function HomePage() { const { data: user } = useAuth() if (user.isSignupComplete === false) { - return + return } // ... @@ -348,4 +348,4 @@ For more information on: Check the provider-specific API References: - \ No newline at end of file + diff --git a/web/docs/auth/username-and-pass.md b/web/docs/auth/username-and-pass.md index 5418f66e1a..d530440930 100644 --- a/web/docs/auth/username-and-pass.md +++ b/web/docs/auth/username-and-pass.md @@ -15,6 +15,7 @@ Wasp supports username & password authentication out of the box with login and s ## Setting Up Username & Password Authentication To set up username authentication we need to: + 1. Enable username authentication in the Wasp file 1. Add the `User` entity 1. Add the auth routes and pages @@ -58,6 +59,7 @@ app myApp { } } ``` + @@ -78,6 +80,7 @@ app myApp { } } ``` + @@ -99,6 +102,7 @@ model User { // ... } ``` + @@ -111,6 +115,7 @@ model User { // ... } ``` + @@ -136,6 +141,7 @@ page SignupPage { component: import { Signup } from "@src/pages/auth.jsx" } ``` + @@ -150,6 +156,7 @@ page SignupPage { component: import { Signup } from "@src/pages/auth.tsx" } ``` + @@ -179,7 +186,7 @@ export function Login() { Don't have an account yet? go to signup. - ); + ) } export function Signup() { @@ -191,22 +198,23 @@ export function Signup() { I already have an account (go to login). - ); + ) } // A layout component to center the content export function Layout({ children }) { return ( -
-
-
+
+
+
{children}
- ); + ) } ``` + @@ -223,7 +231,7 @@ export function Login() { Don't have an account yet? go to signup. - ); + ) } export function Signup() { @@ -235,22 +243,23 @@ export function Signup() { I already have an account (go to login). - ); + ) } // A layout component to center the content export function Layout({ children }: { children: React.ReactNode }) { return ( -
-
-
+
+
+
{children}
- ); + ) } ``` + @@ -271,23 +280,25 @@ The login and signup flows are pretty standard: they allow the user to sign up a Read more about the default username and password validation rules in the [auth overview docs](../auth/overview#default-validations). If you require more control in your authentication flow, you can achieve that in the following ways: + 1. Create your UI and use `signup` and `login` actions. 1. Create your custom sign-up action which uses the lower-level API, along with your custom code. ### 1. Using the `signup` and `login` actions #### `login()` + An action for logging in the user. It takes two arguments: - - `username: string` +- `username: string` - Username of the user logging in. +Username of the user logging in. - - `password: string` +- `password: string` - Password of the user logging in. +Password of the user logging in. You can use it like this: @@ -298,31 +309,28 @@ You can use it like this: import { login } from 'wasp/client/auth' import { useState } from 'react' -import { useHistory, Link } from 'react-router-dom' +import { useNavigate, Link } from 'react-router-dom' export function LoginPage() { const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [error, setError] = useState(null) - const history = useHistory() + const navigate = useNavigate() async function handleSubmit(event) { event.preventDefault() try { await login(username, password) - history.push('/') + navigate('/') } catch (error) { setError(error) } } - return ( -
- {/* ... */} -
- ); + return
{/* ... */}
} ``` + @@ -330,31 +338,28 @@ export function LoginPage() { import { login } from 'wasp/client/auth' import { useState } from 'react' -import { useHistory, Link } from 'react-router-dom' +import { useNavigate, Link } from 'react-router-dom' export function LoginPage() { const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [error, setError] = useState(null) - const history = useHistory() + const navigate = useNavigate() async function handleSubmit(event: React.FormEvent) { event.preventDefault() try { await login(username, password) - history.push('/') + navigate('/') } catch (error: unknown) { setError(error as Error) } } - return ( -
- {/* ... */} -
- ); + return
{/* ... */}
} ``` +
@@ -363,12 +368,15 @@ When using the exposed `login()` function, make sure to implement your redirect ::: #### `signup()` + An action for signing up the user. This action does not log in the user, you still need to call `login()`. It takes one argument: + - `userFields: object` It has the following fields: + - `username: string` - `password: string` @@ -386,14 +394,13 @@ You can use it like this: import { signup, login } from 'wasp/client/auth' import { useState } from 'react' -import { useHistory } from 'react-router-dom' -import { Link } from 'react-router-dom' +import { useNavigate, Link } from 'react-router-dom' export function Signup() { const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [error, setError] = useState(null) - const history = useHistory() + const navigate = useNavigate() async function handleSubmit(event) { event.preventDefault() @@ -403,19 +410,16 @@ export function Signup() { password, }) await login(username, password) - history.push("/") + navigate('/') } catch (error) { setError(error) } } - return ( -
- {/* ... */} -
- ); + return
{/* ... */}
} ``` + @@ -423,14 +427,13 @@ export function Signup() { import { signup, login } from 'wasp/client/auth' import { useState } from 'react' -import { useHistory } from 'react-router-dom' -import { Link } from 'react-router-dom' +import { useNavigate, Link } from 'react-router-dom' export function Signup() { const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [error, setError] = useState(null) - const history = useHistory() + const navigate = useNavigate() async function handleSubmit(event: React.FormEvent) { event.preventDefault() @@ -440,19 +443,16 @@ export function Signup() { password, }) await login(username, password) - history.push("/") + navigate('/') } catch (error: unknown) { setError(error as Error) } } - return ( -
- {/* ... */} -
- ); + return
{/* ... */}
} ``` +
@@ -471,7 +471,6 @@ action customSignup { } ``` - ```js title="src/auth/signup.js" import { ensurePasswordIsPresent, @@ -497,7 +496,7 @@ export const signup = async (args, _context) => { providerId, providerData, // Any additional data you want to store on the User entity - {}, + {} ) } catch (e) { return { @@ -515,6 +514,7 @@ export const signup = async (args, _context) => { } } ``` + @@ -564,7 +564,7 @@ export const signup: CustomSignup< providerId, providerData, // Any additional data you want to store on the User entity - {}, + {} ) } catch (e) { return { @@ -582,6 +582,7 @@ export const signup: CustomSignup< } } ``` + @@ -603,7 +604,7 @@ We suggest using the built-in field validators for your authentication flow. You Checks if the password is valid and throws an error if it's not. Read more about the validation rules [here](../auth/overview#default-validations). -## Using Auth +## Using Auth To read more about how to set up the logout button and how to get access to the logged-in user in our client and server code, read the [auth overview docs](../auth/overview). @@ -641,6 +642,7 @@ model User { id Int @id @default(autoincrement()) } ``` + @@ -665,6 +667,7 @@ model User { id Int @id @default(autoincrement()) } ``` + @@ -693,6 +696,7 @@ app myApp { } // ... ``` + @@ -714,6 +718,7 @@ app myApp { } // ... ``` + diff --git a/web/docs/tutorial/03-pages.md b/web/docs/tutorial/03-pages.md index bfea88d2ec..f6fa2fa473 100644 --- a/web/docs/tutorial/03-pages.md +++ b/web/docs/tutorial/03-pages.md @@ -4,8 +4,8 @@ title: 3. Pages & Routes import useBaseUrl from '@docusaurus/useBaseUrl'; import { ShowForTs } from '@site/src/components/TsJsHelpers'; -import WaspStartNote from '../_WaspStartNote.md' -import TypescriptServerNote from '../_TypescriptServerNote.md' +import WaspStartNote from '../\_WaspStartNote.md' +import TypescriptServerNote from '../\_TypescriptServerNote.md' In the default `main.wasp` file created by `wasp new`, there is a **page** and a **route** declaration: @@ -15,7 +15,7 @@ In the default `main.wasp` file created by `wasp new`, there is a **page** and a ```wasp title="main.wasp" route RootRoute { path: "/", to: MainPage } page MainPage { - // We specify that the React implementation of the page is exported from + // We specify that the React implementation of the page is exported from // `src/MainPage.jsx`. This statement uses standard JS import syntax. // Use `@src` to reference files inside the `src` folder. component: import { MainPage } from "@src/MainPage" @@ -83,7 +83,7 @@ That is all the code you need! Wasp takes care of everything else necessary to d ## Adding a Second Page -To add more pages, you can create another set of **page** and **route** declarations. You can even add parameters to the URL path, using the same syntax as [React Router](https://reactrouter.com/web/). Let's test this out by adding a new page: +To add more pages, you can create another set of **page** and **route** declarations. You can even add parameters to the URL path, using the same syntax as [React Router](https://reactrouter.com/en/6.26.1). Let's test this out by adding a new page: @@ -108,28 +108,29 @@ page HelloPage { -When a user visits `/hello/their-name`, Wasp will render the component exported from `src/HelloPage.{jsx,tsx}` and pass the URL parameter the same way as in React Router: +When a user visits `/hello/their-name`, Wasp renders the component exported from `src/HelloPage.{jsx,tsx}` and you can use the `useParams` hook from `react-router-dom` to access the `name` parameter: ```jsx title="src/HelloPage.jsx" -export const HelloPage = (props) => { - return
Here's {props.match.params.name}!
+import { useParams } from 'react-router-dom' + +export const HelloPage = () => { + const { name } = useParams() + return
Here's {name}!
} ```
- ```tsx title="src/HelloPage.tsx" -import { RouteComponentProps } from 'react-router-dom' +import { useParams } from 'react-router-dom' -export const HelloPage = ( - props: RouteComponentProps<{ name: string }> -) => { - return
Here's {props.match.params.name}!
+export const HelloPage = () => { + const { name } = useParams<'name'>() + return
Here's {name}!
} ``` @@ -181,7 +182,6 @@ src={useBaseUrl('img/todo-app-hello-world.png')} style={{ border: "1px solid black" }} /> - You can now delete redundant files: `src/Main.css`, `src/waspLogo.png`, and `src/HelloPage.{jsx,tsx}` (we won't need this page for the rest of the tutorial). Since `src/HelloPage.{jsx,tsx}` no longer exists, remove its `route` and `page` declarations from the `main.wasp` file. From 8584aa4225bec17c6c9105a932a13dcbe2c85ba7 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Mon, 9 Sep 2024 16:24:21 +0200 Subject: [PATCH 14/31] Update .build route helper --- .../templates/sdk/wasp/client/router/index.ts | 17 +++---- .../templates/sdk/wasp/client/router/types.ts | 5 +- .../waspBuild/.wasp/build/.waspchecksums | 4 +- .../build/sdk/wasp/client/router/index.ts | 6 ++- .../build/sdk/wasp/client/router/types.ts | 5 +- .../sdk/wasp/dist/client/router/index.js.map | 2 +- .../sdk/wasp/dist/client/router/types.d.ts | 2 +- .../.wasp/out/sdk/wasp/client/router/index.ts | 6 ++- .../.wasp/out/sdk/wasp/client/router/types.ts | 5 +- .../sdk/wasp/dist/client/router/index.js.map | 2 +- .../sdk/wasp/dist/client/router/types.d.ts | 2 +- .../waspCompile/.wasp/out/.waspchecksums | 4 +- .../.wasp/out/sdk/wasp/client/router/index.ts | 6 ++- .../.wasp/out/sdk/wasp/client/router/types.ts | 5 +- .../sdk/wasp/dist/client/router/index.js.map | 2 +- .../sdk/wasp/dist/client/router/types.d.ts | 2 +- .../waspComplexTest/.wasp/out/.waspchecksums | 4 +- .../.wasp/out/sdk/wasp/client/router/index.ts | 6 ++- .../.wasp/out/sdk/wasp/client/router/types.ts | 5 +- .../sdk/wasp/dist/client/router/index.js.map | 2 +- .../sdk/wasp/dist/client/router/types.d.ts | 2 +- .../wasp/dist/server/jobs/mySpecialJob.d.ts | 4 +- .../wasp/dist/server/jobs/returnHelloJob.d.ts | 4 +- .../waspJob/.wasp/out/.waspchecksums | 4 +- .../.wasp/out/sdk/wasp/client/router/index.ts | 6 ++- .../.wasp/out/sdk/wasp/client/router/types.ts | 5 +- .../sdk/wasp/dist/client/router/index.js.map | 2 +- .../sdk/wasp/dist/client/router/types.d.ts | 2 +- .../wasp/dist/server/jobs/mySpecialJob.d.ts | 4 +- .../waspMigrate/.wasp/out/.waspchecksums | 4 +- .../.wasp/out/sdk/wasp/client/router/index.ts | 6 ++- .../.wasp/out/sdk/wasp/client/router/types.ts | 5 +- .../sdk/wasp/dist/client/router/index.js.map | 2 +- .../sdk/wasp/dist/client/router/types.d.ts | 2 +- .../SdkGenerator/Client/RouterGenerator.hs | 15 +++--- waspc/src/Wasp/Util/WebRouterPath.hs | 49 +++++++++++++------ 36 files changed, 128 insertions(+), 80 deletions(-) diff --git a/waspc/data/Generator/templates/sdk/wasp/client/router/index.ts b/waspc/data/Generator/templates/sdk/wasp/client/router/index.ts index 91e2ccb954..972d03fad4 100644 --- a/waspc/data/Generator/templates/sdk/wasp/client/router/index.ts +++ b/waspc/data/Generator/templates/sdk/wasp/client/router/index.ts @@ -4,6 +4,7 @@ import type { RouteDefinitionsToRoutes, OptionalRouteOptions, ParamValue, + ExpandRouteOnOptionalStaticSegments, } from './types' // PUBLIC API @@ -11,18 +12,14 @@ export const routes = { {=# routes =} {= name =}: { to: "{= urlPath =}", - {=# hasUrlParams =} build: ( - options: { + options{=^ hasUrlParams =}?{=/ hasUrlParams =}: + OptionalRouteOptions + {=# hasUrlParams =}& { params: {{=# urlParams =}{= name =}{=# isOptional =}?{=/ isOptional =}: ParamValue;{=/ urlParams =}} - } & OptionalRouteOptions, - ) => interpolatePath("{= urlPath =}", options.params, options?.search, options?.hash), - {=/ hasUrlParams =} - {=^ hasUrlParams =} - build: ( - options?: OptionalRouteOptions, - ) => interpolatePath("{= urlPath =}", undefined, options?.search, options?.hash), - {=/ hasUrlParams =} + }{=/ hasUrlParams =} + {=# hasOptionalStaticSegments =}& { path: ExpandRouteOnOptionalStaticSegments<"{= urlPath =}"> }{=/ hasOptionalStaticSegments =} + ) => interpolatePath({=# hasOptionalStaticSegments =}options.path{=/ hasOptionalStaticSegments =}{=^ hasOptionalStaticSegments =}"{= urlPath =}"{=/ hasOptionalStaticSegments =}, {=^ hasUrlParams =}undefined{=/ hasUrlParams =}{=# hasUrlParams =}options.params{=/ hasUrlParams =}, options?.search, options?.hash), }, {=/ routes =} } as const; diff --git a/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts b/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts index 283e21d832..784d240eb2 100644 --- a/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts +++ b/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts @@ -2,7 +2,7 @@ export type RouteDefinitionsToRoutes = RouteDefinitionsToRoutesObj[keyof RouteDefinitionsToRoutesObj] - // PRIVATE API +// PRIVATE API export type OptionalRouteOptions = { search?: Search hash?: string @@ -40,6 +40,7 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } +// PRIVATE API (sdk) /** * Optional static segments handling: expands routes with optional segments * into multiple routes, one for each possible combination of optional segments. @@ -48,7 +49,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}` diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums index 69162894a1..61d0cd4936 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums @@ -116,7 +116,7 @@ "file", "../out/sdk/wasp/client/router/index.ts" ], - "6fe430c2956c25c3833d6893c695523a7b2a5f1cb9eceb0bed26429c2e33e6a0" + "d9757da6e7c2aca636925f13093f17e8ee4528de93c7e53e88f2b535910723a2" ], [ [ @@ -130,7 +130,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "c5b95d3525fa7d266b1d2a8f32aa0ab1e93d36a5d5bcc62c7dabc225151d4f73" + "b3524e4b61f19a0385cbe97e471b44fed26f2418bdea52d40441dd0cc9b10a56" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/index.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/index.ts index 90f93b35f2..ad6d2ee8cd 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/index.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/index.ts @@ -3,6 +3,7 @@ import type { RouteDefinitionsToRoutes, OptionalRouteOptions, ParamValue, + ExpandRouteOnOptionalStaticSegments, } from './types' // PUBLIC API @@ -10,7 +11,10 @@ export const routes = { RootRoute: { to: "/", build: ( - options?: OptionalRouteOptions, + options?: + OptionalRouteOptions + + ) => interpolatePath("/", undefined, options?.search, options?.hash), }, } as const; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts index 283e21d832..784d240eb2 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts @@ -2,7 +2,7 @@ export type RouteDefinitionsToRoutes = RouteDefinitionsToRoutesObj[keyof RouteDefinitionsToRoutesObj] - // PRIVATE API +// PRIVATE API export type OptionalRouteOptions = { search?: Search hash?: string @@ -40,6 +40,7 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } +// PRIVATE API (sdk) /** * Optional static segments handling: expands routes with optional segments * into multiple routes, one for each possible combination of optional segments. @@ -48,7 +49,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}` diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/index.js.map b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/index.js.map index 35eeff35e4..c292f4f080 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/index.js.map +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAO/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OAA8B,EAC9B,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EAGpB,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts index 8f9b8d95fd..2920aa1efa 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts @@ -35,7 +35,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; type _ExpandOptionalSegment = T extends `:${infer P}` ? { segment: T; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/index.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/index.ts index 90f93b35f2..ad6d2ee8cd 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/index.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/index.ts @@ -3,6 +3,7 @@ import type { RouteDefinitionsToRoutes, OptionalRouteOptions, ParamValue, + ExpandRouteOnOptionalStaticSegments, } from './types' // PUBLIC API @@ -10,7 +11,10 @@ export const routes = { RootRoute: { to: "/", build: ( - options?: OptionalRouteOptions, + options?: + OptionalRouteOptions + + ) => interpolatePath("/", undefined, options?.search, options?.hash), }, } as const; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts index 283e21d832..784d240eb2 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts @@ -2,7 +2,7 @@ export type RouteDefinitionsToRoutes = RouteDefinitionsToRoutesObj[keyof RouteDefinitionsToRoutesObj] - // PRIVATE API +// PRIVATE API export type OptionalRouteOptions = { search?: Search hash?: string @@ -40,6 +40,7 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } +// PRIVATE API (sdk) /** * Optional static segments handling: expands routes with optional segments * into multiple routes, one for each possible combination of optional segments. @@ -48,7 +49,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}` diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/index.js.map b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/index.js.map index 35eeff35e4..c292f4f080 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/index.js.map +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAO/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OAA8B,EAC9B,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EAGpB,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 8f9b8d95fd..2920aa1efa 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -35,7 +35,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; type _ExpandOptionalSegment = T extends `:${infer P}` ? { segment: T; diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums index 77ed774736..c0d42e94c4 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums @@ -116,7 +116,7 @@ "file", "../out/sdk/wasp/client/router/index.ts" ], - "6fe430c2956c25c3833d6893c695523a7b2a5f1cb9eceb0bed26429c2e33e6a0" + "d9757da6e7c2aca636925f13093f17e8ee4528de93c7e53e88f2b535910723a2" ], [ [ @@ -130,7 +130,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "c5b95d3525fa7d266b1d2a8f32aa0ab1e93d36a5d5bcc62c7dabc225151d4f73" + "b3524e4b61f19a0385cbe97e471b44fed26f2418bdea52d40441dd0cc9b10a56" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/index.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/index.ts index 90f93b35f2..ad6d2ee8cd 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/index.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/index.ts @@ -3,6 +3,7 @@ import type { RouteDefinitionsToRoutes, OptionalRouteOptions, ParamValue, + ExpandRouteOnOptionalStaticSegments, } from './types' // PUBLIC API @@ -10,7 +11,10 @@ export const routes = { RootRoute: { to: "/", build: ( - options?: OptionalRouteOptions, + options?: + OptionalRouteOptions + + ) => interpolatePath("/", undefined, options?.search, options?.hash), }, } as const; diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts index 283e21d832..784d240eb2 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts @@ -2,7 +2,7 @@ export type RouteDefinitionsToRoutes = RouteDefinitionsToRoutesObj[keyof RouteDefinitionsToRoutesObj] - // PRIVATE API +// PRIVATE API export type OptionalRouteOptions = { search?: Search hash?: string @@ -40,6 +40,7 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } +// PRIVATE API (sdk) /** * Optional static segments handling: expands routes with optional segments * into multiple routes, one for each possible combination of optional segments. @@ -48,7 +49,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}` diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/index.js.map b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/index.js.map index 35eeff35e4..c292f4f080 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/index.js.map +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAO/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OAA8B,EAC9B,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EAGpB,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 8f9b8d95fd..2920aa1efa 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -35,7 +35,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; type _ExpandOptionalSegment = T extends `:${infer P}` ? { segment: T; diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums index a95e12d720..3a2f313b1b 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums @@ -319,7 +319,7 @@ "file", "../out/sdk/wasp/client/router/index.ts" ], - "6fe430c2956c25c3833d6893c695523a7b2a5f1cb9eceb0bed26429c2e33e6a0" + "d9757da6e7c2aca636925f13093f17e8ee4528de93c7e53e88f2b535910723a2" ], [ [ @@ -333,7 +333,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "c5b95d3525fa7d266b1d2a8f32aa0ab1e93d36a5d5bcc62c7dabc225151d4f73" + "b3524e4b61f19a0385cbe97e471b44fed26f2418bdea52d40441dd0cc9b10a56" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/index.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/index.ts index 90f93b35f2..ad6d2ee8cd 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/index.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/index.ts @@ -3,6 +3,7 @@ import type { RouteDefinitionsToRoutes, OptionalRouteOptions, ParamValue, + ExpandRouteOnOptionalStaticSegments, } from './types' // PUBLIC API @@ -10,7 +11,10 @@ export const routes = { RootRoute: { to: "/", build: ( - options?: OptionalRouteOptions, + options?: + OptionalRouteOptions + + ) => interpolatePath("/", undefined, options?.search, options?.hash), }, } as const; diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts index 283e21d832..784d240eb2 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts @@ -2,7 +2,7 @@ export type RouteDefinitionsToRoutes = RouteDefinitionsToRoutesObj[keyof RouteDefinitionsToRoutesObj] - // PRIVATE API +// PRIVATE API export type OptionalRouteOptions = { search?: Search hash?: string @@ -40,6 +40,7 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } +// PRIVATE API (sdk) /** * Optional static segments handling: expands routes with optional segments * into multiple routes, one for each possible combination of optional segments. @@ -48,7 +49,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}` diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/index.js.map b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/index.js.map index 35eeff35e4..c292f4f080 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/index.js.map +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAO/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OAA8B,EAC9B,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EAGpB,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 8f9b8d95fd..2920aa1efa 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -35,7 +35,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; type _ExpandOptionalSegment = T extends `:${infer P}` ? { segment: T; diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/server/jobs/mySpecialJob.d.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/server/jobs/mySpecialJob.d.ts index 0b1d0b120a..5bfe012bf8 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/server/jobs/mySpecialJob.d.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/server/jobs/mySpecialJob.d.ts @@ -16,7 +16,7 @@ export declare const mySpecialJob: { readonly pgBoss: { readonly cancel: () => ReturnType; readonly resume: () => ReturnType; - readonly details: () => Promise, "output" | "state"> & { + readonly details: () => Promise, "output" | "state"> & ({ data: JSONObject; } & ({ state: "failed"; @@ -35,7 +35,7 @@ export declare const mySpecialJob: { } | { value: true; }; - })>; + }))>; }; readonly job: import("./core/job").Job; readonly jobId: string; diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/server/jobs/returnHelloJob.d.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/server/jobs/returnHelloJob.d.ts index 391dcfc649..94411dc1df 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/server/jobs/returnHelloJob.d.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/server/jobs/returnHelloJob.d.ts @@ -20,7 +20,7 @@ export declare const returnHelloJob: { readonly pgBoss: { readonly cancel: () => ReturnType; readonly resume: () => ReturnType; - readonly details: () => Promise, "output" | "state"> & { + readonly details: () => Promise, "output" | "state"> & ({ data: JSONObject; } & ({ state: "failed"; @@ -39,7 +39,7 @@ export declare const returnHelloJob: { } | { value: true; }; - })>; + }))>; }; readonly job: import("./core/job").Job; readonly jobId: string; diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums index 8ab6f058ee..1f0bd89449 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums @@ -116,7 +116,7 @@ "file", "../out/sdk/wasp/client/router/index.ts" ], - "6fe430c2956c25c3833d6893c695523a7b2a5f1cb9eceb0bed26429c2e33e6a0" + "d9757da6e7c2aca636925f13093f17e8ee4528de93c7e53e88f2b535910723a2" ], [ [ @@ -130,7 +130,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "c5b95d3525fa7d266b1d2a8f32aa0ab1e93d36a5d5bcc62c7dabc225151d4f73" + "b3524e4b61f19a0385cbe97e471b44fed26f2418bdea52d40441dd0cc9b10a56" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/index.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/index.ts index 90f93b35f2..ad6d2ee8cd 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/index.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/index.ts @@ -3,6 +3,7 @@ import type { RouteDefinitionsToRoutes, OptionalRouteOptions, ParamValue, + ExpandRouteOnOptionalStaticSegments, } from './types' // PUBLIC API @@ -10,7 +11,10 @@ export const routes = { RootRoute: { to: "/", build: ( - options?: OptionalRouteOptions, + options?: + OptionalRouteOptions + + ) => interpolatePath("/", undefined, options?.search, options?.hash), }, } as const; diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts index 283e21d832..784d240eb2 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts @@ -2,7 +2,7 @@ export type RouteDefinitionsToRoutes = RouteDefinitionsToRoutesObj[keyof RouteDefinitionsToRoutesObj] - // PRIVATE API +// PRIVATE API export type OptionalRouteOptions = { search?: Search hash?: string @@ -40,6 +40,7 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } +// PRIVATE API (sdk) /** * Optional static segments handling: expands routes with optional segments * into multiple routes, one for each possible combination of optional segments. @@ -48,7 +49,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}` diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/index.js.map b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/index.js.map index 35eeff35e4..c292f4f080 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/index.js.map +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAO/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OAA8B,EAC9B,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EAGpB,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 8f9b8d95fd..2920aa1efa 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -35,7 +35,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; type _ExpandOptionalSegment = T extends `:${infer P}` ? { segment: T; diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/server/jobs/mySpecialJob.d.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/server/jobs/mySpecialJob.d.ts index 627567f57f..f3b9836c2d 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/server/jobs/mySpecialJob.d.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/server/jobs/mySpecialJob.d.ts @@ -16,7 +16,7 @@ export declare const mySpecialJob: { readonly pgBoss: { readonly cancel: () => ReturnType; readonly resume: () => ReturnType; - readonly details: () => Promise, "state" | "output"> & { + readonly details: () => Promise, "state" | "output"> & ({ data: JSONObject; } & ({ state: "failed"; @@ -35,7 +35,7 @@ export declare const mySpecialJob: { } | { value: true; }; - })>; + }))>; }; readonly job: import("./core/job").Job; readonly jobId: string; diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums index c41232aa5b..556d0e0823 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums @@ -116,7 +116,7 @@ "file", "../out/sdk/wasp/client/router/index.ts" ], - "6fe430c2956c25c3833d6893c695523a7b2a5f1cb9eceb0bed26429c2e33e6a0" + "d9757da6e7c2aca636925f13093f17e8ee4528de93c7e53e88f2b535910723a2" ], [ [ @@ -130,7 +130,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "c5b95d3525fa7d266b1d2a8f32aa0ab1e93d36a5d5bcc62c7dabc225151d4f73" + "b3524e4b61f19a0385cbe97e471b44fed26f2418bdea52d40441dd0cc9b10a56" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/index.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/index.ts index 90f93b35f2..ad6d2ee8cd 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/index.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/index.ts @@ -3,6 +3,7 @@ import type { RouteDefinitionsToRoutes, OptionalRouteOptions, ParamValue, + ExpandRouteOnOptionalStaticSegments, } from './types' // PUBLIC API @@ -10,7 +11,10 @@ export const routes = { RootRoute: { to: "/", build: ( - options?: OptionalRouteOptions, + options?: + OptionalRouteOptions + + ) => interpolatePath("/", undefined, options?.search, options?.hash), }, } as const; diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts index 283e21d832..784d240eb2 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts @@ -2,7 +2,7 @@ export type RouteDefinitionsToRoutes = RouteDefinitionsToRoutesObj[keyof RouteDefinitionsToRoutesObj] - // PRIVATE API +// PRIVATE API export type OptionalRouteOptions = { search?: Search hash?: string @@ -40,6 +40,7 @@ type ParamsFromBuildFn = Parameters[0] extends { ? { params: Params } : { params?: never } +// PRIVATE API (sdk) /** * Optional static segments handling: expands routes with optional segments * into multiple routes, one for each possible combination of optional segments. @@ -48,7 +49,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}` diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/index.js.map b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/index.js.map index 35eeff35e4..c292f4f080 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/index.js.map +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAO/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OAA8B,EAC9B,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EAGpB,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 8f9b8d95fd..2920aa1efa 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -35,7 +35,7 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id * - /users/tasks/:id */ -type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; +export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; type _ExpandOptionalSegment = T extends `:${infer P}` ? { segment: T; diff --git a/waspc/src/Wasp/Generator/SdkGenerator/Client/RouterGenerator.hs b/waspc/src/Wasp/Generator/SdkGenerator/Client/RouterGenerator.hs index e84384fd91..a6fa5c2833 100644 --- a/waspc/src/Wasp/Generator/SdkGenerator/Client/RouterGenerator.hs +++ b/waspc/src/Wasp/Generator/SdkGenerator/Client/RouterGenerator.hs @@ -12,7 +12,7 @@ import qualified Wasp.AppSpec.Route as AS.Route import Wasp.Generator.FileDraft (FileDraft) import Wasp.Generator.Monad (Generator) import qualified Wasp.Generator.SdkGenerator.Common as C -import Wasp.Util.WebRouterPath (Param (Optional, Required), extractPathParams) +import qualified Wasp.Util.WebRouterPath as WebRouterPath genNewClientRouterApi :: AppSpec -> Generator [FileDraft] genNewClientRouterApi spec = @@ -37,13 +37,16 @@ createRouteTemplateData (name, route) = [ "name" .= name, "urlPath" .= path, "urlParams" .= map mapPathParamToJson urlParams, - "hasUrlParams" .= (not . null $ urlParams) + "hasUrlParams" .= (not . null $ urlParams), + "hasOptionalStaticSegments" .= (not . null $ optionalStaticSegments) ] where path = AS.Route.path route - urlParams = extractPathParams path + routeSegments = WebRouterPath.getRouteSegments path + urlParams = [param | WebRouterPath.ParamSegment param <- routeSegments] + optionalStaticSegments = [segment | (WebRouterPath.StaticSegment (WebRouterPath.OptionalStaticSegment segment)) <- routeSegments] - mapPathParamToJson :: Param -> Aeson.Value - mapPathParamToJson (Required paramName) = object ["name" .= paramName, "isOptional" .= False] - mapPathParamToJson (Optional paramName) = object ["name" .= paramName, "isOptional" .= True] + mapPathParamToJson :: WebRouterPath.ParamSegment -> Aeson.Value + mapPathParamToJson (WebRouterPath.RequiredParamSegment paramName) = object ["name" .= paramName, "isOptional" .= False] + mapPathParamToJson (WebRouterPath.OptionalParamSegment paramName) = object ["name" .= paramName, "isOptional" .= True] diff --git a/waspc/src/Wasp/Util/WebRouterPath.hs b/waspc/src/Wasp/Util/WebRouterPath.hs index 5f22943549..59c190042b 100644 --- a/waspc/src/Wasp/Util/WebRouterPath.hs +++ b/waspc/src/Wasp/Util/WebRouterPath.hs @@ -1,22 +1,39 @@ -module Wasp.Util.WebRouterPath where +module Wasp.Util.WebRouterPath + ( Segment (StaticSegment, ParamSegment), + StaticSegment (RequiredStaticSegment, OptionalStaticSegment), + ParamSegment (RequiredParamSegment, OptionalParamSegment), + getRouteSegments, + ) +where import Data.List (isSuffixOf) import Data.List.Split (splitOn) -import Data.Maybe (mapMaybe) -data Param = Optional String | Required String deriving (Show, Eq) +data Segment = StaticSegment StaticSegment | ParamSegment ParamSegment deriving (Show, Eq) --- TODO: upgrade to work with React Router v6: https://reactrouter.com/en/main/route/route#splats --- Maybe explode all optional segments and then compute the routes for the Link component --- This would mean we have two different lists: routes and links? -extractPathParams :: String -> [Param] -extractPathParams = mapMaybe parseParam . splitOn "/" +data StaticSegment = RequiredStaticSegment StaticSegmentValue | OptionalStaticSegment StaticSegmentValue deriving (Show, Eq) + +data ParamSegment = RequiredParamSegment ParamName | OptionalParamSegment ParamName deriving (Show, Eq) + +type StaticSegmentValue = String + +type ParamName = String + +getRouteSegments :: String -> [Segment] +getRouteSegments = map parseSegment . splitOn "/" where - parseParam :: String -> Maybe Param - parseParam "*" = Just $ Required "splat" - parseParam (':' : xs) = - Just $ - if "?" `isSuffixOf` xs - then Optional (take (length xs - 1) xs) - else Required xs - parseParam _ = Nothing + parseSegment :: String -> Segment + parseSegment "*" = ParamSegment $ RequiredParamSegment "splat" + parseSegment (':' : xs) = + ParamSegment $ + if isSegmentOptional xs + then OptionalParamSegment (take (length xs - 1) xs) + else RequiredParamSegment xs + parseSegment x = + StaticSegment $ + if isSegmentOptional x + then OptionalStaticSegment x + else RequiredStaticSegment x + +isSegmentOptional :: String -> Bool +isSegmentOptional = isSuffixOf "?" From d2b9176e0f1a3c026ccddbbbe96324fe2d0df267 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Tue, 10 Sep 2024 16:37:33 +0200 Subject: [PATCH 15/31] Update docs --- web/docs/advanced/links.md | 92 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 3 deletions(-) diff --git a/web/docs/advanced/links.md b/web/docs/advanced/links.md index 6748b89833..4ded83f9aa 100644 --- a/web/docs/advanced/links.md +++ b/web/docs/advanced/links.md @@ -40,6 +40,44 @@ export const TaskList = () => { } ``` +### Catch-all Routes + +If a route path ends with a `/*` pattern (also known as [splat](https://reactrouter.com/en/main/route/route#splats)), you can use the `Link` component like this: + +```wasp title="main.wasp" +route CatchAllRoute { path: "/pages/*", to: CatchAllPage } +page CatchAllPage { ... } +``` + +```jsx title="TaskList.tsx" + + About + +``` + +This will result in a link like this: `/pages/about`. + +### Optional Static Segments + +If a route contains optional static segments, you'll need to specify one of the possible paths: + +```wasp title="main.wasp" +route OptionalRoute { path: "/task/:id/details?", to: OptionalPage } +page OptionalPage { ... } +``` + +```jsx title="TaskList.tsx" +/* You can include ... */ + + Task 1 + + +/* ... or exclude the optional segment */ + + Task 1 + +``` + ### Using Search Query & Hash You can also pass `search` and `hash` props to the `Link` component: @@ -69,6 +107,22 @@ const linkToTask = routes.TaskRoute.build({ params: { id: 1 } }) This will result in a link like this: `/task/1`. +### Optional Static Segments + +If a route contains optional static segments, you'll need to specify one of the possible paths: + +```wasp title="main.wasp" +route OptionalRoute { path: "/task/:id/details?", to: OptionalPage } +page OptionalPage { ... } +``` + +```tsx title="TaskList.tsx" +const linkToOptional = routes.OptionalRoute.build({ + path: '/task/:id/details', // or '/task/:id' + params: { id: 1 }, +}) +``` + You can also pass `search` and `hash` props to the `build` function. Check out the [API Reference](#routes-object) for more details. ## API Reference @@ -81,6 +135,8 @@ The `Link` component accepts the following props: - A valid Wasp Route path from your `main.wasp` file. + In the case of optional static segments, you must provide one of the possible paths which include or exclude the optional segment. For example, if the path is `/task/:id/details?`, you must provide either `/task/:id/details` or `/task/:id`. + - `params: { [name: string]: string | number }` (if the path contains params) - An object with keys and values for each param in the path. @@ -108,16 +164,39 @@ export const routes = { }) => // ... }, - // DetailRoute has a path like "/task/:id/:something?" + // DetailRoute has a path like "/task/:id/:userId?" DetailRoute: { build: ( options: { - params: { id: ParamValue; something?: ParamValue; }, + params: { id: ParamValue; userId?: ParamValue; }, search?: string[][] | Record | string | URLSearchParams hash?: string } ) => // ... - } + }, + + // OptionalRoute has a path like "/task/:id/details?" + OptionalRoute: { + build: ( + options: { + path: '/task/:id/details' | '/task/:id', + params: { id: ParamValue }, + search?: string[][] | Record | string | URLSearchParams + hash?: string + } + ) => // ... + }, + + // CatchAllRoute has a path like "/pages/*" + CatchAllRoute: { + build: ( + options: { + params: { splat: ParamValue }, + search?: string[][] | Record | string | URLSearchParams + hash?: string + } + ) => // ... + }, } ``` @@ -130,4 +209,11 @@ import { routes } from 'wasp/client/router' const linkToRoot = routes.RootRoute.build() const linkToTask = routes.DetailRoute.build({ params: { id: 1 } }) +const linkToOptional = routes.DetailRoute.build({ + path: '/task/:id/details', + params: { id: 1 }, +}) +const linkToCatchAll = routes.CatchAllRoute.build({ + params: { splat: 'about' }, +}) ``` From 9a429d03129aba0d72bcc71168b6fd1c5e5850f5 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Wed, 11 Sep 2024 14:40:51 +0200 Subject: [PATCH 16/31] Update root component docs --- web/docs/project/client-config.md | 65 +++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/web/docs/project/client-config.md b/web/docs/project/client-config.md index c138d12987..728eb32261 100644 --- a/web/docs/project/client-config.md +++ b/web/docs/project/client-config.md @@ -2,7 +2,7 @@ title: Client Config --- -import BaseDirEnvNote from './_baseDirEnvNote.md' +import BaseDirEnvNote from './\_baseDirEnvNote.md' import { ShowForTs, ShowForJs } from '@site/src/components/TsJsHelpers' @@ -66,13 +66,16 @@ app MyApp { ``` ```jsx title="src/Root.jsx" -export default function Root({ children }) { +import { Outlet } from 'react-router-dom' + +export default function Root() { return (

My App

- {children} + // highlight-next-line +

My App footer

@@ -95,13 +98,16 @@ app MyApp { ``` ```tsx title="src/Root.tsx" -export default function Root({ children }: { children: React.ReactNode }) { +import { Outlet } from 'react-router-dom' + +export default function Root() { return (

My App

- {children} + // highlight-next-line +

My App footer

@@ -113,6 +119,8 @@ export default function Root({ children }: { children: React.ReactNode }) { +You need to import the [`Outlet`](https://reactrouter.com/en/main/components/outlet#outlet) component from `react-router-dom` and put it where you want the current page to be rendered. + ### Setting up a Provider This is how to set up various providers that your application needs: @@ -131,11 +139,16 @@ app MyApp { ``` ```jsx title="src/Root.jsx" +import { Outlet } from 'react-router-dom' import store from './store' import { Provider } from 'react-redux' -export default function Root({ children }) { - return {children} +export default function Root() { + return ( + + + + ) } ``` @@ -153,19 +166,23 @@ app MyApp { ``` ```tsx title="src/Root.tsx" +import { Outlet } from 'react-router-dom' import store from './store' import { Provider } from 'react-redux' -export default function Root({ children }: { children: React.ReactNode }) { - return {children} +export default function Root() { + return ( + + + + ) } ``` -As long as you render the children, you can do whatever you want in your root -component. +As long as you render the `Outlet` component, you can put what ever you want in the root component. Read more about the root component in the [API Reference](#rootcomponent-extimport). @@ -326,8 +343,10 @@ Client has the following options: - #### `rootComponent: ExtImport` `rootComponent` defines the root component of your client application. It is - expected to be a React component, and Wasp will use it to wrap your entire app. - It must render its children, which are the actual pages of your application. + expected to be a React component, and Wasp will use it as the root of the + client application. + It must render the `Outlet` component from `react-router-dom` to render the + current page. Here's an example of a root component that both sets up a provider and renders a custom layout: @@ -336,24 +355,26 @@ Client has the following options: ```jsx title="src/Root.jsx" + import { Outlet } from 'react-router-dom' import store from './store' import { Provider } from 'react-redux' - export default function Root({ children }) { + export default function Root() { return ( - {children} + ) } - function Layout({ children }) { + function Layout() { return (

My App

- {children} + // highlight-next-line +

My App footer

@@ -366,24 +387,26 @@ Client has the following options: ```tsx title="src/Root.tsx" + import { Outlet } from 'react-router-dom' import store from './store' import { Provider } from 'react-redux' - export default function Root({ children }: { children: React.ReactNode }) { + export default function Root() { return ( - {children} + ) } - function Layout({ children }: { children: React.ReactNode }) { + function Layout() { return (

My App

- {children} + // highlight-next-line +

My App footer

From 1bfef24a1a7d1781b9f6072dd2c67c15f19e569c Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Wed, 11 Sep 2024 15:05:25 +0200 Subject: [PATCH 17/31] Set a default error boundry --- .../src/components/DefaultRootErrorBoundary.tsx | 13 +++++++++++++ .../Generator/templates/react-app/src/router.tsx | 4 +++- .../test-outputs/waspBuild-golden/files.manifest | 1 + .../waspBuild/.wasp/build/.waspchecksums | 9 ++++++++- .../src/components/DefaultRootErrorBoundary.tsx | 13 +++++++++++++ .../waspBuild/.wasp/build/web-app/src/router.tsx | 4 +++- .../test-outputs/waspCompile-golden/files.manifest | 1 + .../waspCompile/.wasp/out/.waspchecksums | 9 ++++++++- .../src/components/DefaultRootErrorBoundary.tsx | 13 +++++++++++++ .../waspCompile/.wasp/out/web-app/src/router.tsx | 4 +++- .../waspComplexTest-golden/files.manifest | 1 + .../waspComplexTest/.wasp/out/.waspchecksums | 9 ++++++++- .../src/components/DefaultRootErrorBoundary.tsx | 13 +++++++++++++ .../.wasp/out/web-app/src/router.tsx | 4 +++- .../test-outputs/waspJob-golden/files.manifest | 1 + .../waspJob-golden/waspJob/.wasp/out/.waspchecksums | 9 ++++++++- .../src/components/DefaultRootErrorBoundary.tsx | 13 +++++++++++++ .../waspJob/.wasp/out/web-app/src/router.tsx | 4 +++- .../test-outputs/waspMigrate-golden/files.manifest | 1 + .../waspMigrate/.wasp/out/.waspchecksums | 9 ++++++++- .../src/components/DefaultRootErrorBoundary.tsx | 13 +++++++++++++ .../waspMigrate/.wasp/out/web-app/src/router.tsx | 4 +++- waspc/src/Wasp/Generator/WebAppGenerator.hs | 1 + 23 files changed, 142 insertions(+), 11 deletions(-) create mode 100644 waspc/data/Generator/templates/react-app/src/components/DefaultRootErrorBoundary.tsx create mode 100644 waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/components/DefaultRootErrorBoundary.tsx create mode 100644 waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx create mode 100644 waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx create mode 100644 waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx create mode 100644 waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx diff --git a/waspc/data/Generator/templates/react-app/src/components/DefaultRootErrorBoundary.tsx b/waspc/data/Generator/templates/react-app/src/components/DefaultRootErrorBoundary.tsx new file mode 100644 index 0000000000..7af24e15d6 --- /dev/null +++ b/waspc/data/Generator/templates/react-app/src/components/DefaultRootErrorBoundary.tsx @@ -0,0 +1,13 @@ +import { useRouteError } from 'react-router-dom' + +import { FullPageWrapper } from './FullPageWrapper' + +export function DefaultRootErrorBoundary() { + const error = useRouteError() + console.error(error) + return ( + +
There was an error rendering this page. Check the browser console for more information.
+
+ ) +} diff --git a/waspc/data/Generator/templates/react-app/src/router.tsx b/waspc/data/Generator/templates/react-app/src/router.tsx index da35e8a231..010a9d31a3 100644 --- a/waspc/data/Generator/templates/react-app/src/router.tsx +++ b/waspc/data/Generator/templates/react-app/src/router.tsx @@ -17,6 +17,8 @@ import createAuthRequiredPage from "./auth/pages/createAuthRequiredPage" import { OAuthCallbackPage } from "./auth/pages/OAuthCallback" {=/ isExternalAuthEnabled =} +import { DefaultRootErrorBoundary } from './components/DefaultRootErrorBoundary' + import { routes } from 'wasp/client/router' export const routeNameToRouteComponent = { @@ -45,11 +47,11 @@ const browserRouter = createBrowserRouter([{ {=# rootComponent.isDefined =} element: <{= rootComponent.importIdentifier =} />, {=/ rootComponent.isDefined =} + ErrorBoundary: DefaultRootErrorBoundary, children: [ ...waspDefinedRoutes, ...userDefinedRoutes, ], }]) - export const router = diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/files.manifest b/waspc/e2e-test/test-outputs/waspBuild-golden/files.manifest index c9a5e57b6c..1ef46f2f24 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/files.manifest +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/files.manifest @@ -219,6 +219,7 @@ waspBuild/.wasp/build/web-app/public/.gitkeep waspBuild/.wasp/build/web-app/public/favicon.ico waspBuild/.wasp/build/web-app/public/manifest.json waspBuild/.wasp/build/web-app/scripts/validate-env.mjs +waspBuild/.wasp/build/web-app/src/components/DefaultRootErrorBoundary.tsx waspBuild/.wasp/build/web-app/src/components/FullPageWrapper.tsx waspBuild/.wasp/build/web-app/src/components/Loader.module.css waspBuild/.wasp/build/web-app/src/components/Loader.tsx diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums index 61d0cd4936..7466f52b48 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums @@ -566,6 +566,13 @@ ], "a9a3a7eb6bc3ead49d8e3850a70737c93c789098beb3b40196bf145fd38893cd" ], + [ + [ + "file", + "web-app/src/components/DefaultRootErrorBoundary.tsx" + ], + "4a141a28ca7aed9daddd75c156f7bae5eec50f3e5a85b6a43a28fa2648f34c44" + ], [ [ "file", @@ -613,7 +620,7 @@ "file", "web-app/src/router.tsx" ], - "7228b4f5e531208f4049a6076597c6cfa4ebf2bef89509ff58833c1f4a01ccbe" + "72f880dba47672ec9fb112a8b88cc8d831458cccddcc891b853a6dc9809a5752" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/components/DefaultRootErrorBoundary.tsx b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/components/DefaultRootErrorBoundary.tsx new file mode 100644 index 0000000000..7af24e15d6 --- /dev/null +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/components/DefaultRootErrorBoundary.tsx @@ -0,0 +1,13 @@ +import { useRouteError } from 'react-router-dom' + +import { FullPageWrapper } from './FullPageWrapper' + +export function DefaultRootErrorBoundary() { + const error = useRouteError() + console.error(error) + return ( + +
There was an error rendering this page. Check the browser console for more information.
+
+ ) +} diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx index bb1ec0a88f..9f1e1b46b2 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/src/router.tsx @@ -5,6 +5,8 @@ import { createBrowserRouter, RouterProvider } from 'react-router-dom' import { MainPage } from '../../../../src/MainPage' +import { DefaultRootErrorBoundary } from './components/DefaultRootErrorBoundary' + import { routes } from 'wasp/client/router' export const routeNameToRouteComponent = { @@ -22,11 +24,11 @@ const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const browserRouter = createBrowserRouter([{ path: '/', + ErrorBoundary: DefaultRootErrorBoundary, children: [ ...waspDefinedRoutes, ...userDefinedRoutes, ], }]) - export const router = diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/files.manifest b/waspc/e2e-test/test-outputs/waspCompile-golden/files.manifest index ec7c412b7c..be6525f517 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/files.manifest +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/files.manifest @@ -216,6 +216,7 @@ waspCompile/.wasp/out/web-app/public/.gitkeep waspCompile/.wasp/out/web-app/public/favicon.ico waspCompile/.wasp/out/web-app/public/manifest.json waspCompile/.wasp/out/web-app/scripts/validate-env.mjs +waspCompile/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx waspCompile/.wasp/out/web-app/src/components/FullPageWrapper.tsx waspCompile/.wasp/out/web-app/src/components/Loader.module.css waspCompile/.wasp/out/web-app/src/components/Loader.tsx diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums index c0d42e94c4..fdce9dd08f 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums @@ -580,6 +580,13 @@ ], "a9a3a7eb6bc3ead49d8e3850a70737c93c789098beb3b40196bf145fd38893cd" ], + [ + [ + "file", + "web-app/src/components/DefaultRootErrorBoundary.tsx" + ], + "4a141a28ca7aed9daddd75c156f7bae5eec50f3e5a85b6a43a28fa2648f34c44" + ], [ [ "file", @@ -627,7 +634,7 @@ "file", "web-app/src/router.tsx" ], - "7228b4f5e531208f4049a6076597c6cfa4ebf2bef89509ff58833c1f4a01ccbe" + "72f880dba47672ec9fb112a8b88cc8d831458cccddcc891b853a6dc9809a5752" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx new file mode 100644 index 0000000000..7af24e15d6 --- /dev/null +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx @@ -0,0 +1,13 @@ +import { useRouteError } from 'react-router-dom' + +import { FullPageWrapper } from './FullPageWrapper' + +export function DefaultRootErrorBoundary() { + const error = useRouteError() + console.error(error) + return ( + +
There was an error rendering this page. Check the browser console for more information.
+
+ ) +} diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx index bb1ec0a88f..9f1e1b46b2 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/src/router.tsx @@ -5,6 +5,8 @@ import { createBrowserRouter, RouterProvider } from 'react-router-dom' import { MainPage } from '../../../../src/MainPage' +import { DefaultRootErrorBoundary } from './components/DefaultRootErrorBoundary' + import { routes } from 'wasp/client/router' export const routeNameToRouteComponent = { @@ -22,11 +24,11 @@ const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const browserRouter = createBrowserRouter([{ path: '/', + ErrorBoundary: DefaultRootErrorBoundary, children: [ ...waspDefinedRoutes, ...userDefinedRoutes, ], }]) - export const router = diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/files.manifest b/waspc/e2e-test/test-outputs/waspComplexTest-golden/files.manifest index 6f80170dcd..022dd0bf88 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/files.manifest +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/files.manifest @@ -508,6 +508,7 @@ waspComplexTest/.wasp/out/web-app/public/manifest.json waspComplexTest/.wasp/out/web-app/scripts/validate-env.mjs waspComplexTest/.wasp/out/web-app/src/auth/pages/OAuthCallback.tsx waspComplexTest/.wasp/out/web-app/src/auth/pages/createAuthRequiredPage.jsx +waspComplexTest/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx waspComplexTest/.wasp/out/web-app/src/components/FullPageWrapper.tsx waspComplexTest/.wasp/out/web-app/src/components/Loader.module.css waspComplexTest/.wasp/out/web-app/src/components/Loader.tsx diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums index 3a2f313b1b..b9e6d55430 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums @@ -1224,6 +1224,13 @@ ], "be2f872a6465690dec32a0d2a0c3b15d941846cc0059a9ec13d09650daccda7f" ], + [ + [ + "file", + "web-app/src/components/DefaultRootErrorBoundary.tsx" + ], + "4a141a28ca7aed9daddd75c156f7bae5eec50f3e5a85b6a43a28fa2648f34c44" + ], [ [ "file", @@ -1271,7 +1278,7 @@ "file", "web-app/src/router.tsx" ], - "9687e7af18a16abbde9b12548a9ede38a8dcc0d8d0872aeb951d8171b6eb20b2" + "8160ffecec82dde31d889825cf0a2d605e2b729be555c650b8accca2252ed613" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx new file mode 100644 index 0000000000..7af24e15d6 --- /dev/null +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx @@ -0,0 +1,13 @@ +import { useRouteError } from 'react-router-dom' + +import { FullPageWrapper } from './FullPageWrapper' + +export function DefaultRootErrorBoundary() { + const error = useRouteError() + console.error(error) + return ( + +
There was an error rendering this page. Check the browser console for more information.
+
+ ) +} diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx index c66dc4cd21..820e47b75f 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/src/router.tsx @@ -8,6 +8,8 @@ import { MainPage } from '../../../../src/MainPage' import { OAuthCallbackPage } from "./auth/pages/OAuthCallback" +import { DefaultRootErrorBoundary } from './components/DefaultRootErrorBoundary' + import { routes } from 'wasp/client/router' export const routeNameToRouteComponent = { @@ -30,11 +32,11 @@ const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const browserRouter = createBrowserRouter([{ path: '/', element: , + ErrorBoundary: DefaultRootErrorBoundary, children: [ ...waspDefinedRoutes, ...userDefinedRoutes, ], }]) - export const router = diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/files.manifest b/waspc/e2e-test/test-outputs/waspJob-golden/files.manifest index 414cb3516b..7f7ab93dbc 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/files.manifest +++ b/waspc/e2e-test/test-outputs/waspJob-golden/files.manifest @@ -251,6 +251,7 @@ waspJob/.wasp/out/web-app/public/.gitkeep waspJob/.wasp/out/web-app/public/favicon.ico waspJob/.wasp/out/web-app/public/manifest.json waspJob/.wasp/out/web-app/scripts/validate-env.mjs +waspJob/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx waspJob/.wasp/out/web-app/src/components/FullPageWrapper.tsx waspJob/.wasp/out/web-app/src/components/Loader.module.css waspJob/.wasp/out/web-app/src/components/Loader.tsx diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums index 1f0bd89449..37e2f34825 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums @@ -650,6 +650,13 @@ ], "a9a3a7eb6bc3ead49d8e3850a70737c93c789098beb3b40196bf145fd38893cd" ], + [ + [ + "file", + "web-app/src/components/DefaultRootErrorBoundary.tsx" + ], + "4a141a28ca7aed9daddd75c156f7bae5eec50f3e5a85b6a43a28fa2648f34c44" + ], [ [ "file", @@ -697,7 +704,7 @@ "file", "web-app/src/router.tsx" ], - "7228b4f5e531208f4049a6076597c6cfa4ebf2bef89509ff58833c1f4a01ccbe" + "72f880dba47672ec9fb112a8b88cc8d831458cccddcc891b853a6dc9809a5752" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx new file mode 100644 index 0000000000..7af24e15d6 --- /dev/null +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx @@ -0,0 +1,13 @@ +import { useRouteError } from 'react-router-dom' + +import { FullPageWrapper } from './FullPageWrapper' + +export function DefaultRootErrorBoundary() { + const error = useRouteError() + console.error(error) + return ( + +
There was an error rendering this page. Check the browser console for more information.
+
+ ) +} diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx index bb1ec0a88f..9f1e1b46b2 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/src/router.tsx @@ -5,6 +5,8 @@ import { createBrowserRouter, RouterProvider } from 'react-router-dom' import { MainPage } from '../../../../src/MainPage' +import { DefaultRootErrorBoundary } from './components/DefaultRootErrorBoundary' + import { routes } from 'wasp/client/router' export const routeNameToRouteComponent = { @@ -22,11 +24,11 @@ const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const browserRouter = createBrowserRouter([{ path: '/', + ErrorBoundary: DefaultRootErrorBoundary, children: [ ...waspDefinedRoutes, ...userDefinedRoutes, ], }]) - export const router = diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/files.manifest b/waspc/e2e-test/test-outputs/waspMigrate-golden/files.manifest index d13ce87b9f..5cd0312ecc 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/files.manifest +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/files.manifest @@ -220,6 +220,7 @@ waspMigrate/.wasp/out/web-app/public/.gitkeep waspMigrate/.wasp/out/web-app/public/favicon.ico waspMigrate/.wasp/out/web-app/public/manifest.json waspMigrate/.wasp/out/web-app/scripts/validate-env.mjs +waspMigrate/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx waspMigrate/.wasp/out/web-app/src/components/FullPageWrapper.tsx waspMigrate/.wasp/out/web-app/src/components/Loader.module.css waspMigrate/.wasp/out/web-app/src/components/Loader.tsx diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums index 556d0e0823..d413cb67b7 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums @@ -580,6 +580,13 @@ ], "a9a3a7eb6bc3ead49d8e3850a70737c93c789098beb3b40196bf145fd38893cd" ], + [ + [ + "file", + "web-app/src/components/DefaultRootErrorBoundary.tsx" + ], + "4a141a28ca7aed9daddd75c156f7bae5eec50f3e5a85b6a43a28fa2648f34c44" + ], [ [ "file", @@ -627,7 +634,7 @@ "file", "web-app/src/router.tsx" ], - "7228b4f5e531208f4049a6076597c6cfa4ebf2bef89509ff58833c1f4a01ccbe" + "72f880dba47672ec9fb112a8b88cc8d831458cccddcc891b853a6dc9809a5752" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx new file mode 100644 index 0000000000..7af24e15d6 --- /dev/null +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/components/DefaultRootErrorBoundary.tsx @@ -0,0 +1,13 @@ +import { useRouteError } from 'react-router-dom' + +import { FullPageWrapper } from './FullPageWrapper' + +export function DefaultRootErrorBoundary() { + const error = useRouteError() + console.error(error) + return ( + +
There was an error rendering this page. Check the browser console for more information.
+
+ ) +} diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx index bb1ec0a88f..9f1e1b46b2 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/src/router.tsx @@ -5,6 +5,8 @@ import { createBrowserRouter, RouterProvider } from 'react-router-dom' import { MainPage } from '../../../../src/MainPage' +import { DefaultRootErrorBoundary } from './components/DefaultRootErrorBoundary' + import { routes } from 'wasp/client/router' export const routeNameToRouteComponent = { @@ -22,11 +24,11 @@ const userDefinedRoutes = Object.entries(routes).map(([routeKey, route]) => { const browserRouter = createBrowserRouter([{ path: '/', + ErrorBoundary: DefaultRootErrorBoundary, children: [ ...waspDefinedRoutes, ...userDefinedRoutes, ], }]) - export const router = diff --git a/waspc/src/Wasp/Generator/WebAppGenerator.hs b/waspc/src/Wasp/Generator/WebAppGenerator.hs index e7365c6504..8eac159814 100644 --- a/waspc/src/Wasp/Generator/WebAppGenerator.hs +++ b/waspc/src/Wasp/Generator/WebAppGenerator.hs @@ -198,6 +198,7 @@ genSrcDir spec = genFileCopy [relfile|components/Loader.tsx|], genFileCopy [relfile|components/Loader.module.css|], genFileCopy [relfile|components/FullPageWrapper.tsx|], + genFileCopy [relfile|components/DefaultRootErrorBoundary.tsx|], getIndexTs spec ] <++> genAuth spec From c571ea79488e8c9247613b5c3fb0b2f3bb015ee5 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Thu, 12 Sep 2024 14:04:25 +0200 Subject: [PATCH 18/31] Cleanup --- waspc/examples/todoApp/src/App.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/waspc/examples/todoApp/src/App.tsx b/waspc/examples/todoApp/src/App.tsx index acec24e80e..35b1b4442d 100644 --- a/waspc/examples/todoApp/src/App.tsx +++ b/waspc/examples/todoApp/src/App.tsx @@ -24,11 +24,7 @@ export function App({ children }: any) {

- - {appName} - - - {/* Filip */} + {appName}

Your site was loaded at: {date?.toLocaleString()} {connectionIcon} From e58aa7ad8cde22b667f43525aa6a38309ee610cc Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Thu, 12 Sep 2024 14:10:02 +0200 Subject: [PATCH 19/31] Updates todoApp unit tests --- waspc/examples/todoApp/src/App.tsx | 2 +- waspc/examples/todoApp/src/Todo.test.tsx | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/waspc/examples/todoApp/src/App.tsx b/waspc/examples/todoApp/src/App.tsx index 35b1b4442d..e7f0fbb3b0 100644 --- a/waspc/examples/todoApp/src/App.tsx +++ b/waspc/examples/todoApp/src/App.tsx @@ -9,7 +9,7 @@ import { getName } from './user' // Necessary to trigger type tests. import './testTypes/operations/client' -export function App({ children }: any) { +export function App() { const { data: user } = useAuth() const { data: date } = useQuery(getDate) const { isConnected } = useSocket() diff --git a/waspc/examples/todoApp/src/Todo.test.tsx b/waspc/examples/todoApp/src/Todo.test.tsx index 4d5c7cad2b..64b5c0fb51 100644 --- a/waspc/examples/todoApp/src/Todo.test.tsx +++ b/waspc/examples/todoApp/src/Todo.test.tsx @@ -8,6 +8,8 @@ import Todo, { areThereAnyTasks } from './Todo' import { App } from './App' import { getMe } from 'wasp/client/auth' +import { Routes, Route } from 'react-router-dom' + test('areThereAnyTasks', () => { expect(areThereAnyTasks([])).toBe(false) }) @@ -49,9 +51,11 @@ test('handles multiple mock data sources', async () => { mockQuery(getTasks, mockTasks) renderInContext( - - - + + + + + ) await screen.findByText('elon@tesla.com') From fcd805aa06ad1346c600758faf992d630efa448f Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Mon, 23 Sep 2024 13:19:35 +0200 Subject: [PATCH 20/31] Bump to latest React Router patch version Signed-off-by: Mihovil Ilakovac --- .../waspBuild/.wasp/build/.waspchecksums | 4 +-- .../.wasp/build/installedNpmDepsLog.json | 2 +- .../.wasp/build/sdk/wasp/package.json | 2 +- .../.wasp/build/web-app/package.json | 2 +- .../waspBuild/.wasp/out/sdk/wasp/package.json | 2 +- .../waspCompile/.wasp/out/.waspchecksums | 4 +-- .../.wasp/out/installedNpmDepsLog.json | 2 +- .../.wasp/out/sdk/wasp/package.json | 2 +- .../.wasp/out/web-app/package.json | 2 +- .../waspComplexTest/.wasp/out/.waspchecksums | 4 +-- .../.wasp/out/installedNpmDepsLog.json | 2 +- .../.wasp/out/sdk/wasp/package.json | 2 +- .../.wasp/out/web-app/package.json | 2 +- .../waspJob/.wasp/out/.waspchecksums | 4 +-- .../.wasp/out/installedNpmDepsLog.json | 2 +- .../waspJob/.wasp/out/sdk/wasp/package.json | 2 +- .../waspJob/.wasp/out/web-app/package.json | 2 +- .../waspMigrate/.wasp/out/.waspchecksums | 4 +-- .../.wasp/out/installedNpmDepsLog.json | 2 +- .../.wasp/out/sdk/wasp/package.json | 2 +- .../.wasp/out/web-app/package.json | 2 +- waspc/examples/todoApp/package-lock.json | 26 +++++++++---------- waspc/src/Wasp/Generator/SdkGenerator.hs | 2 +- waspc/src/Wasp/Generator/WebAppGenerator.hs | 2 +- 24 files changed, 41 insertions(+), 41 deletions(-) diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums index 7466f52b48..fd91737a8d 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums @@ -200,7 +200,7 @@ "file", "../out/sdk/wasp/package.json" ], - "d4acf9ed4d486a61f98e80190f34d7546ea6001a518da245a463d82665b9ed6c" + "c5dc0e880b6924c30799671f3204f15687c1e50e338144ba82e62916dba80c9d" ], [ [ @@ -536,7 +536,7 @@ "file", "web-app/package.json" ], - "104ef42603d3a213f1cb3b8ba24e31cf819e36484579d490316129b65e094ef4" + "b1d6de065bb861e6631ecc504632ebdf69c2e34bd7e5091f8f1879befcb90a68" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/installedNpmDepsLog.json index ec77b87c1b..dd987bba29 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/package.json b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/package.json index d1be50fc12..83a4dbab08 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/package.json +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/package.json @@ -14,7 +14,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/package.json b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/package.json index 2006a6a418..77db243bad 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/package.json @@ -17,7 +17,7 @@ "mitt": "3.0.0", "react-dom": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2" }, "devDependencies": { diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/package.json b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/package.json index d1be50fc12..83a4dbab08 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/package.json +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/package.json @@ -14,7 +14,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums index fdce9dd08f..d566895535 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums @@ -200,7 +200,7 @@ "file", "../out/sdk/wasp/package.json" ], - "d4acf9ed4d486a61f98e80190f34d7546ea6001a518da245a463d82665b9ed6c" + "c5dc0e880b6924c30799671f3204f15687c1e50e338144ba82e62916dba80c9d" ], [ [ @@ -550,7 +550,7 @@ "file", "web-app/package.json" ], - "c37018e6645a8e0a9204054d3564a272c55ed6ef3d379cf9f05b52b31eb617cb" + "8dabb1f0aa1f517bc272a7b6c9a13f8de348dbd064002dbcf0614c8d342f18e6" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/installedNpmDepsLog.json index ec77b87c1b..dd987bba29 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/package.json b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/package.json index d1be50fc12..83a4dbab08 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/package.json +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/package.json @@ -14,7 +14,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/package.json b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/package.json index 298e6def9d..181b622dd1 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/package.json @@ -17,7 +17,7 @@ "mitt": "3.0.0", "react-dom": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2" }, "devDependencies": { diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums index b9e6d55430..a2f2cde416 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums @@ -487,7 +487,7 @@ "file", "../out/sdk/wasp/package.json" ], - "ecaa8c42447ce77f08a8954c986b7cfc0d051f18976827e4c7112cee4115d05e" + "d018a4695d02879c54e6ed75d27e63acc6cc7b33386f1feeb853c5e10248b4f1" ], [ [ @@ -1180,7 +1180,7 @@ "file", "web-app/package.json" ], - "9f4c02ceb58c568b2cadb5cd167cc86c04852bcfa8e1d5a07c749d125d5e29f8" + "b602a1d989b4e0950cf30fa1490d10bd5956aa4a5339acdd7358f44d00b534d0" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/installedNpmDepsLog.json index c2ebf54eb9..348c8f3751 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"@stitches/react","version":"^1.2.8"},{"name":"@node-rs/argon2","version":"^1.8.3"},{"name":"arctic","version":"^1.2.1"},{"name":"lucia","version":"^3.0.1"},{"name":"oslo","version":"^1.1.2"},{"name":"@lucia-auth/adapter-prisma","version":"^4.0.0"},{"name":"@sendgrid/mail","version":"^7.7.0"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"pg-boss","version":"^8.4.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"@stitches/react","version":"^1.2.8"},{"name":"@node-rs/argon2","version":"^1.8.3"},{"name":"arctic","version":"^1.2.1"},{"name":"lucia","version":"^3.0.1"},{"name":"oslo","version":"^1.1.2"},{"name":"@lucia-auth/adapter-prisma","version":"^4.0.0"},{"name":"@sendgrid/mail","version":"^7.7.0"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"pg-boss","version":"^8.4.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/package.json b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/package.json index f0316bddbe..01460326fa 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/package.json +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/package.json @@ -22,7 +22,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/package.json b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/package.json index d3ee0e3163..99801d15c9 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/package.json @@ -17,7 +17,7 @@ "mitt": "3.0.0", "react-dom": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2" }, "devDependencies": { diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums index 37e2f34825..d98941b211 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums @@ -207,7 +207,7 @@ "file", "../out/sdk/wasp/package.json" ], - "3154a515a94c94bd1ed4c5768471072f80817148e2f9ba374d1eb0d8d0344acb" + "ea409ee729f8b19739d4d06aee14dae9fb1b3b745ea155a235d13f6c4aedda3c" ], [ [ @@ -620,7 +620,7 @@ "file", "web-app/package.json" ], - "784e08eec90cd536aae419328acdeaa2cf7eb8fe5524fe6704fa7c65bea284cd" + "224c574b8eea2c414fb618e7ec833d87c98b962288cdd8e0f65377dfe684bd8d" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/installedNpmDepsLog.json index bf4a778946..94c828a3bb 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"pg-boss","version":"^8.4.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"pg-boss","version":"^8.4.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/package.json b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/package.json index 21e0230054..8a92c82e8a 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/package.json +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/package.json @@ -15,7 +15,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/package.json b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/package.json index aabbc68d5f..588e41eb54 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/package.json @@ -17,7 +17,7 @@ "mitt": "3.0.0", "react-dom": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2" }, "devDependencies": { diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums index d413cb67b7..059ebaaeb1 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums @@ -200,7 +200,7 @@ "file", "../out/sdk/wasp/package.json" ], - "d4acf9ed4d486a61f98e80190f34d7546ea6001a518da245a463d82665b9ed6c" + "c5dc0e880b6924c30799671f3204f15687c1e50e338144ba82e62916dba80c9d" ], [ [ @@ -550,7 +550,7 @@ "file", "web-app/package.json" ], - "110ad3bc2c8b78a8ad20e9e84ea22fca41f5d20c31e62f69d27204fb5753ef28" + "880c852ac4fc2f2b319f5e53c5743e6b1f99f149cb212844d32804bebc27ecfc" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/installedNpmDepsLog.json index ec77b87c1b..dd987bba29 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~4.18.1"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"lodash.merge","version":"^4.6.2"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^1.12.2"},{"name":"uuid","version":"^9.0.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/express-serve-static-core","version":"^4.17.13"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"^5.1.0"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"^4.29.0"},{"name":"axios","version":"^1.4.0"},{"name":"mitt","version":"3.0.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"^4.2.1"},{"name":"dotenv","version":"^16.0.3"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"16.0.2"},{"name":"express","version":"~4.18.1"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"rate-limiter-flexible","version":"^2.4.1"},{"name":"superjson","version":"^1.12.2"}],"devDependencies":[{"name":"@tsconfig/node18","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^4.17.13"},{"name":"@types/express-serve-static-core","version":"^4.17.13"},{"name":"@types/node","version":"^18.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"},{"name":"standard","version":"^17.0.0"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/package.json b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/package.json index d1be50fc12..83a4dbab08 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/package.json +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/package.json @@ -14,7 +14,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/package.json b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/package.json index ace8509aeb..850279be84 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/package.json @@ -17,7 +17,7 @@ "mitt": "3.0.0", "react-dom": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2" }, "devDependencies": { diff --git a/waspc/examples/todoApp/package-lock.json b/waspc/examples/todoApp/package-lock.json index c600e75575..b51780be93 100644 --- a/waspc/examples/todoApp/package-lock.json +++ b/waspc/examples/todoApp/package-lock.json @@ -49,7 +49,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "socket.io": "^4.6.1", "socket.io-client": "^4.6.1", "superjson": "^1.12.2", @@ -2158,9 +2158,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", - "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", "engines": { "node": ">=14.0.0" } @@ -7821,11 +7821,11 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", - "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "dependencies": { - "@remix-run/router": "1.19.1" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -7835,12 +7835,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", - "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "dependencies": { - "@remix-run/router": "1.19.1", - "react-router": "6.26.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" diff --git a/waspc/src/Wasp/Generator/SdkGenerator.hs b/waspc/src/Wasp/Generator/SdkGenerator.hs index 97a41c6e24..d1510c5360 100644 --- a/waspc/src/Wasp/Generator/SdkGenerator.hs +++ b/waspc/src/Wasp/Generator/SdkGenerator.hs @@ -188,7 +188,7 @@ npmDepsForSdk spec = ("mitt", "3.0.0"), ("react", "^18.2.0"), ("lodash.merge", "^4.6.2"), - ("react-router-dom", "^6.26.1"), + ("react-router-dom", "^6.26.2"), ("react-hook-form", "^7.45.4"), ("superjson", "^1.12.2") ] diff --git a/waspc/src/Wasp/Generator/WebAppGenerator.hs b/waspc/src/Wasp/Generator/WebAppGenerator.hs index 8eac159814..5fae672a25 100644 --- a/waspc/src/Wasp/Generator/WebAppGenerator.hs +++ b/waspc/src/Wasp/Generator/WebAppGenerator.hs @@ -122,7 +122,7 @@ npmDepsForWasp _spec = ("react", "^18.2.0"), ("react-dom", "^18.2.0"), ("@tanstack/react-query", "^4.29.0"), - ("react-router-dom", "^6.26.1"), + ("react-router-dom", "^6.26.2"), ("superjson", "^1.12.2"), ("mitt", "3.0.0"), -- Used for Auth UI From bc4ae259b01521bb1aa5509471171fa02ca9b570 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Wed, 25 Sep 2024 15:56:11 +0200 Subject: [PATCH 21/31] Update routes template --- .../templates/sdk/wasp/client/router/index.ts | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/waspc/data/Generator/templates/sdk/wasp/client/router/index.ts b/waspc/data/Generator/templates/sdk/wasp/client/router/index.ts index 972d03fad4..2856ec13ad 100644 --- a/waspc/data/Generator/templates/sdk/wasp/client/router/index.ts +++ b/waspc/data/Generator/templates/sdk/wasp/client/router/index.ts @@ -12,14 +12,36 @@ export const routes = { {=# routes =} {= name =}: { to: "{= urlPath =}", + {=# hasUrlParams =} build: ( - options{=^ hasUrlParams =}?{=/ hasUrlParams =}: + options: OptionalRouteOptions + & { params: {{=# urlParams =}{= name =}{=# isOptional =}?{=/ isOptional =}: ParamValue;{=/ urlParams =}}} + {=# hasOptionalStaticSegments =} + & { path: ExpandRouteOnOptionalStaticSegments<"{= urlPath =}"> } + {=/ hasOptionalStaticSegments =} + ) => interpolatePath( + {=# hasOptionalStaticSegments =}options.path,{=/ hasOptionalStaticSegments =} + {=^ hasOptionalStaticSegments =}"{= urlPath =}",{=/ hasOptionalStaticSegments =} + options.params, + options?.search, + options?.hash + ), + {=/ hasUrlParams =} + {=^ hasUrlParams =} + build: ( + options?: OptionalRouteOptions - {=# hasUrlParams =}& { - params: {{=# urlParams =}{= name =}{=# isOptional =}?{=/ isOptional =}: ParamValue;{=/ urlParams =}} - }{=/ hasUrlParams =} - {=# hasOptionalStaticSegments =}& { path: ExpandRouteOnOptionalStaticSegments<"{= urlPath =}"> }{=/ hasOptionalStaticSegments =} - ) => interpolatePath({=# hasOptionalStaticSegments =}options.path{=/ hasOptionalStaticSegments =}{=^ hasOptionalStaticSegments =}"{= urlPath =}"{=/ hasOptionalStaticSegments =}, {=^ hasUrlParams =}undefined{=/ hasUrlParams =}{=# hasUrlParams =}options.params{=/ hasUrlParams =}, options?.search, options?.hash), + {=# hasOptionalStaticSegments =} + & { path: ExpandRouteOnOptionalStaticSegments<"{= urlPath =}"> } + {=/ hasOptionalStaticSegments =} + ) => interpolatePath( + {=# hasOptionalStaticSegments =}options.path,{=/ hasOptionalStaticSegments =} + {=^ hasOptionalStaticSegments =}"{= urlPath =}",{=/ hasOptionalStaticSegments =} + undefined, + options?.search, + options?.hash + ), + {=/ hasUrlParams =} }, {=/ routes =} } as const; From 4a8f52919f04d03dedaf39a428d2375dd3338355 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Wed, 25 Sep 2024 16:03:57 +0200 Subject: [PATCH 22/31] Update naming. Use * instead of splat as param name. --- .../templates/sdk/wasp/client/router/index.ts | 2 +- .../sdk/wasp/client/router/linkHelpers.ts | 2 +- waspc/src/Wasp/Util/WebRouterPath.hs | 18 +++++++++--------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/waspc/data/Generator/templates/sdk/wasp/client/router/index.ts b/waspc/data/Generator/templates/sdk/wasp/client/router/index.ts index 2856ec13ad..6731bfc0cd 100644 --- a/waspc/data/Generator/templates/sdk/wasp/client/router/index.ts +++ b/waspc/data/Generator/templates/sdk/wasp/client/router/index.ts @@ -15,7 +15,7 @@ export const routes = { {=# hasUrlParams =} build: ( options: OptionalRouteOptions - & { params: {{=# urlParams =}{= name =}{=# isOptional =}?{=/ isOptional =}: ParamValue;{=/ urlParams =}}} + & { params: {{=# urlParams =}"{= name =}"{=# isOptional =}?{=/ isOptional =}: ParamValue;{=/ urlParams =}}} {=# hasOptionalStaticSegments =} & { path: ExpandRouteOnOptionalStaticSegments<"{= urlPath =}"> } {=/ hasOptionalStaticSegments =} diff --git a/waspc/data/Generator/templates/sdk/wasp/client/router/linkHelpers.ts b/waspc/data/Generator/templates/sdk/wasp/client/router/linkHelpers.ts index c12c36125e..84dc58733d 100644 --- a/waspc/data/Generator/templates/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/data/Generator/templates/sdk/wasp/client/router/linkHelpers.ts @@ -18,7 +18,7 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/src/Wasp/Util/WebRouterPath.hs b/waspc/src/Wasp/Util/WebRouterPath.hs index 59c190042b..2f2206e899 100644 --- a/waspc/src/Wasp/Util/WebRouterPath.hs +++ b/waspc/src/Wasp/Util/WebRouterPath.hs @@ -23,17 +23,17 @@ getRouteSegments :: String -> [Segment] getRouteSegments = map parseSegment . splitOn "/" where parseSegment :: String -> Segment - parseSegment "*" = ParamSegment $ RequiredParamSegment "splat" - parseSegment (':' : xs) = + parseSegment "*" = ParamSegment $ RequiredParamSegment "*" + parseSegment (':' : paramName) = ParamSegment $ - if isSegmentOptional xs - then OptionalParamSegment (take (length xs - 1) xs) - else RequiredParamSegment xs - parseSegment x = + if isSegmentOptional paramName + then OptionalParamSegment $ init paramName + else RequiredParamSegment paramName + parseSegment segmentValue = StaticSegment $ - if isSegmentOptional x - then OptionalStaticSegment x - else RequiredStaticSegment x + if isSegmentOptional segmentValue + then OptionalStaticSegment segmentValue + else RequiredStaticSegment segmentValue isSegmentOptional :: String -> Bool isSegmentOptional = isSuffixOf "?" From 8aaa7588d8ac8581efc17fe67f4a1a41c005a55c Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Wed, 25 Sep 2024 16:08:11 +0200 Subject: [PATCH 23/31] Formatting --- waspc/src/Wasp/Util/WebRouterPath.hs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/waspc/src/Wasp/Util/WebRouterPath.hs b/waspc/src/Wasp/Util/WebRouterPath.hs index 2f2206e899..432cb6bfda 100644 --- a/waspc/src/Wasp/Util/WebRouterPath.hs +++ b/waspc/src/Wasp/Util/WebRouterPath.hs @@ -11,9 +11,15 @@ import Data.List.Split (splitOn) data Segment = StaticSegment StaticSegment | ParamSegment ParamSegment deriving (Show, Eq) -data StaticSegment = RequiredStaticSegment StaticSegmentValue | OptionalStaticSegment StaticSegmentValue deriving (Show, Eq) - -data ParamSegment = RequiredParamSegment ParamName | OptionalParamSegment ParamName deriving (Show, Eq) +data StaticSegment + = RequiredStaticSegment StaticSegmentValue + | OptionalStaticSegment StaticSegmentValue + deriving (Show, Eq) + +data ParamSegment + = RequiredParamSegment ParamName + | OptionalParamSegment ParamName + deriving (Show, Eq) type StaticSegmentValue = String From ace73c92f1195b0939a32344efffcef743dfddcf Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Wed, 25 Sep 2024 16:08:37 +0200 Subject: [PATCH 24/31] Update comment --- .../data/Generator/templates/sdk/wasp/client/router/types.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts b/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts index 784d240eb2..8ebce77f16 100644 --- a/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts +++ b/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts @@ -46,8 +46,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' From 8031e5dcc2e39d5ef6708cc4ff8f8d09e8b2f810 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Wed, 25 Sep 2024 16:31:22 +0200 Subject: [PATCH 25/31] e2e tests Signed-off-by: Mihovil Ilakovac --- .../waspBuild/.wasp/build/.waspchecksums | 6 +++--- .../.wasp/build/sdk/wasp/client/router/index.ts | 10 +++++++--- .../.wasp/build/sdk/wasp/client/router/linkHelpers.ts | 2 +- .../.wasp/build/sdk/wasp/client/router/types.ts | 4 ++-- .../build/sdk/wasp/dist/client/router/index.js.map | 2 +- .../build/sdk/wasp/dist/client/router/linkHelpers.js | 2 +- .../sdk/wasp/dist/client/router/linkHelpers.js.map | 2 +- .../.wasp/build/sdk/wasp/dist/client/router/types.d.ts | 4 ++-- .../.wasp/out/sdk/wasp/client/router/index.ts | 10 +++++++--- .../.wasp/out/sdk/wasp/client/router/linkHelpers.ts | 2 +- .../.wasp/out/sdk/wasp/client/router/types.ts | 4 ++-- .../.wasp/out/sdk/wasp/dist/client/router/index.js.map | 2 +- .../out/sdk/wasp/dist/client/router/linkHelpers.js | 2 +- .../out/sdk/wasp/dist/client/router/linkHelpers.js.map | 2 +- .../.wasp/out/sdk/wasp/dist/client/router/types.d.ts | 4 ++-- .../waspCompile/.wasp/out/.waspchecksums | 6 +++--- .../.wasp/out/sdk/wasp/client/router/index.ts | 10 +++++++--- .../.wasp/out/sdk/wasp/client/router/linkHelpers.ts | 2 +- .../.wasp/out/sdk/wasp/client/router/types.ts | 4 ++-- .../.wasp/out/sdk/wasp/dist/client/router/index.js.map | 2 +- .../out/sdk/wasp/dist/client/router/linkHelpers.js | 2 +- .../out/sdk/wasp/dist/client/router/linkHelpers.js.map | 2 +- .../.wasp/out/sdk/wasp/dist/client/router/types.d.ts | 4 ++-- .../waspComplexTest/.wasp/out/.waspchecksums | 6 +++--- .../.wasp/out/sdk/wasp/client/router/index.ts | 10 +++++++--- .../.wasp/out/sdk/wasp/client/router/linkHelpers.ts | 2 +- .../.wasp/out/sdk/wasp/client/router/types.ts | 4 ++-- .../.wasp/out/sdk/wasp/dist/client/router/index.js.map | 2 +- .../out/sdk/wasp/dist/client/router/linkHelpers.js | 2 +- .../out/sdk/wasp/dist/client/router/linkHelpers.js.map | 2 +- .../.wasp/out/sdk/wasp/dist/client/router/types.d.ts | 4 ++-- .../waspJob-golden/waspJob/.wasp/out/.waspchecksums | 6 +++--- .../waspJob/.wasp/out/sdk/wasp/client/router/index.ts | 10 +++++++--- .../.wasp/out/sdk/wasp/client/router/linkHelpers.ts | 2 +- .../waspJob/.wasp/out/sdk/wasp/client/router/types.ts | 4 ++-- .../.wasp/out/sdk/wasp/dist/client/router/index.js.map | 2 +- .../out/sdk/wasp/dist/client/router/linkHelpers.js | 2 +- .../out/sdk/wasp/dist/client/router/linkHelpers.js.map | 2 +- .../.wasp/out/sdk/wasp/dist/client/router/types.d.ts | 4 ++-- .../waspMigrate/.wasp/out/.waspchecksums | 6 +++--- .../.wasp/out/sdk/wasp/client/router/index.ts | 10 +++++++--- .../.wasp/out/sdk/wasp/client/router/linkHelpers.ts | 2 +- .../.wasp/out/sdk/wasp/client/router/types.ts | 4 ++-- .../.wasp/out/sdk/wasp/dist/client/router/index.js.map | 2 +- .../out/sdk/wasp/dist/client/router/linkHelpers.js | 2 +- .../out/sdk/wasp/dist/client/router/linkHelpers.js.map | 2 +- .../.wasp/out/sdk/wasp/dist/client/router/types.d.ts | 4 ++-- 47 files changed, 105 insertions(+), 81 deletions(-) diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums index fd91737a8d..054e71826e 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums @@ -116,21 +116,21 @@ "file", "../out/sdk/wasp/client/router/index.ts" ], - "d9757da6e7c2aca636925f13093f17e8ee4528de93c7e53e88f2b535910723a2" + "ad12dae94c1c68a4f31f660dd942fc0b43d713b4ed37145faeb2f65d3e5bc392" ], [ [ "file", "../out/sdk/wasp/client/router/linkHelpers.ts" ], - "7def2dcb41d0d0a3f123645cdb913f593b92fd35694783a753cba37c5deb84a2" + "3b523ed6020fe18d71a108551de0a71cbfa23bdc4e3245b3491c5224251faa20" ], [ [ "file", "../out/sdk/wasp/client/router/types.ts" ], - "b3524e4b61f19a0385cbe97e471b44fed26f2418bdea52d40441dd0cc9b10a56" + "3e06ad55db04cf1ebd138a52d1f1abe1d11e2b4c934a7afe915aee6035f47297" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/index.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/index.ts index ad6d2ee8cd..e8cfb7dd61 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/index.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/index.ts @@ -13,9 +13,13 @@ export const routes = { build: ( options?: OptionalRouteOptions - - - ) => interpolatePath("/", undefined, options?.search, options?.hash), + ) => interpolatePath( + + "/", + undefined, + options?.search, + options?.hash + ), }, } as const; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/linkHelpers.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/linkHelpers.ts index c12c36125e..84dc58733d 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/linkHelpers.ts @@ -18,7 +18,7 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts index 784d240eb2..8ebce77f16 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts @@ -46,8 +46,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/index.js.map b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/index.js.map index c292f4f080..1abf37c227 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/index.js.map +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EAGpB,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EACpB,EAAE,CAAC,eAAe,CAEhB,GAAG,EACH,SAAS,EACT,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EACf,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CACd;KACJ;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js index b281dd1032..f6e6c37c71 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js @@ -10,7 +10,7 @@ export function interpolatePath(path, params, search, hash) { function interpolatePathParams(path, params) { function mapPathPart(part) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js.map b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js.map index 4da8ff70fd..0614b93b14 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js.map +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/linkHelpers.js.map @@ -1 +1 @@ -{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file +{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts index 2920aa1efa..9801f596f6 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts @@ -32,8 +32,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/index.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/index.ts index ad6d2ee8cd..e8cfb7dd61 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/index.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/index.ts @@ -13,9 +13,13 @@ export const routes = { build: ( options?: OptionalRouteOptions - - - ) => interpolatePath("/", undefined, options?.search, options?.hash), + ) => interpolatePath( + + "/", + undefined, + options?.search, + options?.hash + ), }, } as const; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/linkHelpers.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/linkHelpers.ts index c12c36125e..84dc58733d 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/linkHelpers.ts @@ -18,7 +18,7 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts index 784d240eb2..8ebce77f16 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts @@ -46,8 +46,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/index.js.map b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/index.js.map index c292f4f080..1abf37c227 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/index.js.map +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EAGpB,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EACpB,EAAE,CAAC,eAAe,CAEhB,GAAG,EACH,SAAS,EACT,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EACf,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CACd;KACJ;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js index b281dd1032..f6e6c37c71 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js @@ -10,7 +10,7 @@ export function interpolatePath(path, params, search, hash) { function interpolatePathParams(path, params) { function mapPathPart(part) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map index 4da8ff70fd..0614b93b14 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map @@ -1 +1 @@ -{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file +{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 2920aa1efa..9801f596f6 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -32,8 +32,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums index d566895535..f618dc30e9 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums @@ -116,21 +116,21 @@ "file", "../out/sdk/wasp/client/router/index.ts" ], - "d9757da6e7c2aca636925f13093f17e8ee4528de93c7e53e88f2b535910723a2" + "ad12dae94c1c68a4f31f660dd942fc0b43d713b4ed37145faeb2f65d3e5bc392" ], [ [ "file", "../out/sdk/wasp/client/router/linkHelpers.ts" ], - "7def2dcb41d0d0a3f123645cdb913f593b92fd35694783a753cba37c5deb84a2" + "3b523ed6020fe18d71a108551de0a71cbfa23bdc4e3245b3491c5224251faa20" ], [ [ "file", "../out/sdk/wasp/client/router/types.ts" ], - "b3524e4b61f19a0385cbe97e471b44fed26f2418bdea52d40441dd0cc9b10a56" + "3e06ad55db04cf1ebd138a52d1f1abe1d11e2b4c934a7afe915aee6035f47297" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/index.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/index.ts index ad6d2ee8cd..e8cfb7dd61 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/index.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/index.ts @@ -13,9 +13,13 @@ export const routes = { build: ( options?: OptionalRouteOptions - - - ) => interpolatePath("/", undefined, options?.search, options?.hash), + ) => interpolatePath( + + "/", + undefined, + options?.search, + options?.hash + ), }, } as const; diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/linkHelpers.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/linkHelpers.ts index c12c36125e..84dc58733d 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/linkHelpers.ts @@ -18,7 +18,7 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts index 784d240eb2..8ebce77f16 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts @@ -46,8 +46,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/index.js.map b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/index.js.map index c292f4f080..1abf37c227 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/index.js.map +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EAGpB,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EACpB,EAAE,CAAC,eAAe,CAEhB,GAAG,EACH,SAAS,EACT,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EACf,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CACd;KACJ;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js index b281dd1032..f6e6c37c71 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js @@ -10,7 +10,7 @@ export function interpolatePath(path, params, search, hash) { function interpolatePathParams(path, params) { function mapPathPart(part) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map index 4da8ff70fd..0614b93b14 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map @@ -1 +1 @@ -{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file +{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 2920aa1efa..9801f596f6 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -32,8 +32,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums index a2f2cde416..d0f9930aa1 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums @@ -319,21 +319,21 @@ "file", "../out/sdk/wasp/client/router/index.ts" ], - "d9757da6e7c2aca636925f13093f17e8ee4528de93c7e53e88f2b535910723a2" + "ad12dae94c1c68a4f31f660dd942fc0b43d713b4ed37145faeb2f65d3e5bc392" ], [ [ "file", "../out/sdk/wasp/client/router/linkHelpers.ts" ], - "7def2dcb41d0d0a3f123645cdb913f593b92fd35694783a753cba37c5deb84a2" + "3b523ed6020fe18d71a108551de0a71cbfa23bdc4e3245b3491c5224251faa20" ], [ [ "file", "../out/sdk/wasp/client/router/types.ts" ], - "b3524e4b61f19a0385cbe97e471b44fed26f2418bdea52d40441dd0cc9b10a56" + "3e06ad55db04cf1ebd138a52d1f1abe1d11e2b4c934a7afe915aee6035f47297" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/index.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/index.ts index ad6d2ee8cd..e8cfb7dd61 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/index.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/index.ts @@ -13,9 +13,13 @@ export const routes = { build: ( options?: OptionalRouteOptions - - - ) => interpolatePath("/", undefined, options?.search, options?.hash), + ) => interpolatePath( + + "/", + undefined, + options?.search, + options?.hash + ), }, } as const; diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/linkHelpers.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/linkHelpers.ts index c12c36125e..84dc58733d 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/linkHelpers.ts @@ -18,7 +18,7 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts index 784d240eb2..8ebce77f16 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts @@ -46,8 +46,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/index.js.map b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/index.js.map index c292f4f080..1abf37c227 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/index.js.map +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EAGpB,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EACpB,EAAE,CAAC,eAAe,CAEhB,GAAG,EACH,SAAS,EACT,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EACf,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CACd;KACJ;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js index b281dd1032..f6e6c37c71 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js @@ -10,7 +10,7 @@ export function interpolatePath(path, params, search, hash) { function interpolatePathParams(path, params) { function mapPathPart(part) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map index 4da8ff70fd..0614b93b14 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map @@ -1 +1 @@ -{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file +{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 2920aa1efa..9801f596f6 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -32,8 +32,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums index d98941b211..2137738a02 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums @@ -116,21 +116,21 @@ "file", "../out/sdk/wasp/client/router/index.ts" ], - "d9757da6e7c2aca636925f13093f17e8ee4528de93c7e53e88f2b535910723a2" + "ad12dae94c1c68a4f31f660dd942fc0b43d713b4ed37145faeb2f65d3e5bc392" ], [ [ "file", "../out/sdk/wasp/client/router/linkHelpers.ts" ], - "7def2dcb41d0d0a3f123645cdb913f593b92fd35694783a753cba37c5deb84a2" + "3b523ed6020fe18d71a108551de0a71cbfa23bdc4e3245b3491c5224251faa20" ], [ [ "file", "../out/sdk/wasp/client/router/types.ts" ], - "b3524e4b61f19a0385cbe97e471b44fed26f2418bdea52d40441dd0cc9b10a56" + "3e06ad55db04cf1ebd138a52d1f1abe1d11e2b4c934a7afe915aee6035f47297" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/index.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/index.ts index ad6d2ee8cd..e8cfb7dd61 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/index.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/index.ts @@ -13,9 +13,13 @@ export const routes = { build: ( options?: OptionalRouteOptions - - - ) => interpolatePath("/", undefined, options?.search, options?.hash), + ) => interpolatePath( + + "/", + undefined, + options?.search, + options?.hash + ), }, } as const; diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/linkHelpers.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/linkHelpers.ts index c12c36125e..84dc58733d 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/linkHelpers.ts @@ -18,7 +18,7 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts index 784d240eb2..8ebce77f16 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts @@ -46,8 +46,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/index.js.map b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/index.js.map index c292f4f080..1abf37c227 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/index.js.map +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EAGpB,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EACpB,EAAE,CAAC,eAAe,CAEhB,GAAG,EACH,SAAS,EACT,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EACf,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CACd;KACJ;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js index b281dd1032..f6e6c37c71 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js @@ -10,7 +10,7 @@ export function interpolatePath(path, params, search, hash) { function interpolatePathParams(path, params) { function mapPathPart(part) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map index 4da8ff70fd..0614b93b14 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map @@ -1 +1 @@ -{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file +{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 2920aa1efa..9801f596f6 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -32,8 +32,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums index 059ebaaeb1..9863dce56a 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums @@ -116,21 +116,21 @@ "file", "../out/sdk/wasp/client/router/index.ts" ], - "d9757da6e7c2aca636925f13093f17e8ee4528de93c7e53e88f2b535910723a2" + "ad12dae94c1c68a4f31f660dd942fc0b43d713b4ed37145faeb2f65d3e5bc392" ], [ [ "file", "../out/sdk/wasp/client/router/linkHelpers.ts" ], - "7def2dcb41d0d0a3f123645cdb913f593b92fd35694783a753cba37c5deb84a2" + "3b523ed6020fe18d71a108551de0a71cbfa23bdc4e3245b3491c5224251faa20" ], [ [ "file", "../out/sdk/wasp/client/router/types.ts" ], - "b3524e4b61f19a0385cbe97e471b44fed26f2418bdea52d40441dd0cc9b10a56" + "3e06ad55db04cf1ebd138a52d1f1abe1d11e2b4c934a7afe915aee6035f47297" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/index.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/index.ts index ad6d2ee8cd..e8cfb7dd61 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/index.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/index.ts @@ -13,9 +13,13 @@ export const routes = { build: ( options?: OptionalRouteOptions - - - ) => interpolatePath("/", undefined, options?.search, options?.hash), + ) => interpolatePath( + + "/", + undefined, + options?.search, + options?.hash + ), }, } as const; diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/linkHelpers.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/linkHelpers.ts index c12c36125e..84dc58733d 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/linkHelpers.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/linkHelpers.ts @@ -18,7 +18,7 @@ export function interpolatePath( function interpolatePathParams(path: string, params: Params) { function mapPathPart(part: string) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts index 784d240eb2..8ebce77f16 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts @@ -46,8 +46,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/index.js.map b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/index.js.map index c292f4f080..1abf37c227 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/index.js.map +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EAGpB,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;KACrE;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE;QACT,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,CACL,OACoB,EACpB,EAAE,CAAC,eAAe,CAEhB,GAAG,EACH,SAAS,EACT,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EACf,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CACd;KACJ;CACO,CAAC;AAKX,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js index b281dd1032..f6e6c37c71 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js @@ -10,7 +10,7 @@ export function interpolatePath(path, params, search, hash) { function interpolatePathParams(path, params) { function mapPathPart(part) { if (part === '*') { - return params.splat; + return params['*']; } if (part.startsWith(":")) { const paramName = extractParamNameFromPathPart(part); diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map index 4da8ff70fd..0614b93b14 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/linkHelpers.js.map @@ -1 +1 @@ -{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file +{"version":3,"file":"linkHelpers.js","sourceRoot":"","sources":["../../../client/router/linkHelpers.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAe,EACf,MAAe,EACf,IAAa;IAEb,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,MAAM,kBAAkB,GAAG,MAAM;QAC/B,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,OAAO,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AACjE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,SAAS,WAAW,CAAC,IAAY;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI;SAC1B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,eAAe,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAmB;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 2920aa1efa..9801f596f6 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -32,8 +32,8 @@ type ParamsFromBuildFn = Parameters[0] extends { * into multiple routes, one for each possible combination of optional segments. * * For example: /users/tasks?/:id? will be expanded into two routes: - * - /users/:id - * - /users/tasks/:id + * - /users/:id? + * - /users/tasks/:id? */ export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; From 375d3aac60ca61b7bc39f58213c1789962f08066 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Wed, 25 Sep 2024 16:34:17 +0200 Subject: [PATCH 26/31] Update thoughts --- examples/thoughts/package-lock.json | 29 ++++++++++------------- examples/thoughts/src/client/MainPage.jsx | 3 ++- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/examples/thoughts/package-lock.json b/examples/thoughts/package-lock.json index 91cf5c2203..718182b30f 100644 --- a/examples/thoughts/package-lock.json +++ b/examples/thoughts/package-lock.json @@ -41,7 +41,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" @@ -1526,10 +1526,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", - "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", - "license": "MIT", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", "engines": { "node": ">=14.0.0" } @@ -5845,12 +5844,11 @@ } }, "node_modules/react-router": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", - "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "dependencies": { - "@remix-run/router": "1.19.1" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -5860,13 +5858,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", - "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "dependencies": { - "@remix-run/router": "1.19.1", - "react-router": "6.26.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" diff --git a/examples/thoughts/src/client/MainPage.jsx b/examples/thoughts/src/client/MainPage.jsx index 05af75e664..3519c4f2b6 100644 --- a/examples/thoughts/src/client/MainPage.jsx +++ b/examples/thoughts/src/client/MainPage.jsx @@ -1,4 +1,5 @@ import { createThought } from "wasp/client/operations"; +import { routes } from "wasp/client/router"; import React, { useState, useRef } from 'react' import ReactMarkdown from 'react-markdown' import { useNavigate } from 'react-router-dom' @@ -61,7 +62,7 @@ const Thought = () => { } try { await createThought({ textMarkdown: textMd.trim(), tagNames }) - navigate('/thoughts') // TODO: Would be cool if this was type checked somehow or if string was coming from the Wasp API. + navigate(routes.ThoughtsRoute.build()) } catch (err) { return window.alert('Error: ' + err.message) } From 19b2ca5bda121127c726e253a2ec1a03f6521168 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Wed, 25 Sep 2024 18:11:51 +0200 Subject: [PATCH 27/31] Handle root optional static segment. Improve naming. --- .../templates/sdk/wasp/client/router/types.ts | 48 ++++++++++--------- .../waspBuild/.wasp/build/.waspchecksums | 2 +- .../build/sdk/wasp/client/router/types.ts | 48 ++++++++++--------- .../sdk/wasp/dist/client/router/types.d.ts | 13 ++--- .../.wasp/out/sdk/wasp/client/router/types.ts | 48 ++++++++++--------- .../sdk/wasp/dist/client/router/types.d.ts | 13 ++--- .../waspCompile/.wasp/out/.waspchecksums | 2 +- .../.wasp/out/sdk/wasp/client/router/types.ts | 48 ++++++++++--------- .../sdk/wasp/dist/client/router/types.d.ts | 13 ++--- .../waspComplexTest/.wasp/out/.waspchecksums | 2 +- .../.wasp/out/sdk/wasp/client/router/types.ts | 48 ++++++++++--------- .../sdk/wasp/dist/client/router/types.d.ts | 13 ++--- .../waspJob/.wasp/out/.waspchecksums | 2 +- .../.wasp/out/sdk/wasp/client/router/types.ts | 48 ++++++++++--------- .../sdk/wasp/dist/client/router/types.d.ts | 13 ++--- .../waspMigrate/.wasp/out/.waspchecksums | 2 +- .../.wasp/out/sdk/wasp/client/router/types.ts | 48 ++++++++++--------- .../sdk/wasp/dist/client/router/types.d.ts | 13 ++--- 18 files changed, 229 insertions(+), 195 deletions(-) diff --git a/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts b/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts index 8ebce77f16..03e751be35 100644 --- a/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts +++ b/waspc/data/Generator/templates/sdk/wasp/client/router/types.ts @@ -49,46 +49,50 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' - ? '/' - : `/${JoinPath>>>}` +export type ExpandRouteOnOptionalStaticSegments = JoinPath< + ExpandOptionalSegments>>> +>; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] - ? Head extends '' - ? [...ExpandOptionalSegments] - : [_ExpandOptionalSegment, ...ExpandOptionalSegments] - : T +type ParseSegments = T extends [infer Head, ...infer Tail] + ? [_ParseSegment, ...ParseSegments] + : T; -type _ExpandOptionalSegment = T extends `:${infer P}` +type _ParseSegment = T extends `:${infer P}` ? // Param segment { segment: T } : T extends `${infer S}?` ? // Optional segment { optionalSegment: S } : // Regular segment - { segment: T } + { segment: T }; -type Segment = { segment: string } -type OptionalSegment = { optionalSegment: string } +type Segment = { segment: string }; +type OptionalSegment = { optionalSegment: string }; -type Elem = Segment | OptionalSegment +type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment - ? [First['segment'], ...JoinSegments] + ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] - : [] + : []; -type SplitPath = S extends `${infer T}/${infer U}` - ? [T, ...SplitPath] - : [S] +type SplitPath = S extends "/" + ? [""] + : S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S]; type JoinPath = T extends [infer Only extends string] - ? Only + ? Only extends "" + ? "/" + : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` - : never + : never; + +type NonEmptyString = S extends "" ? never : S; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums index 054e71826e..88029e1944 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums @@ -130,7 +130,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "3e06ad55db04cf1ebd138a52d1f1abe1d11e2b4c934a7afe915aee6035f47297" + "ffbce0f351b849dfe04f00421a31844836cbd5a80ab97445f6ed8859e6b94928" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts index 8ebce77f16..03e751be35 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/client/router/types.ts @@ -49,46 +49,50 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' - ? '/' - : `/${JoinPath>>>}` +export type ExpandRouteOnOptionalStaticSegments = JoinPath< + ExpandOptionalSegments>>> +>; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] - ? Head extends '' - ? [...ExpandOptionalSegments] - : [_ExpandOptionalSegment, ...ExpandOptionalSegments] - : T +type ParseSegments = T extends [infer Head, ...infer Tail] + ? [_ParseSegment, ...ParseSegments] + : T; -type _ExpandOptionalSegment = T extends `:${infer P}` +type _ParseSegment = T extends `:${infer P}` ? // Param segment { segment: T } : T extends `${infer S}?` ? // Optional segment { optionalSegment: S } : // Regular segment - { segment: T } + { segment: T }; -type Segment = { segment: string } -type OptionalSegment = { optionalSegment: string } +type Segment = { segment: string }; +type OptionalSegment = { optionalSegment: string }; -type Elem = Segment | OptionalSegment +type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment - ? [First['segment'], ...JoinSegments] + ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] - : [] + : []; -type SplitPath = S extends `${infer T}/${infer U}` - ? [T, ...SplitPath] - : [S] +type SplitPath = S extends "/" + ? [""] + : S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S]; type JoinPath = T extends [infer Only extends string] - ? Only + ? Only extends "" + ? "/" + : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` - : never + : never; + +type NonEmptyString = S extends "" ? never : S; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts index 9801f596f6..9abd699cf5 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/sdk/wasp/dist/client/router/types.d.ts @@ -35,9 +35,9 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; -type _ExpandOptionalSegment = T extends `:${infer P}` ? { +export type ExpandRouteOnOptionalStaticSegments = JoinPath>>>>; +type ParseSegments = T extends [infer Head, ...infer Tail] ? [_ParseSegment, ...ParseSegments] : T; +type _ParseSegment = T extends `:${infer P}` ? { segment: T; } : T extends `${infer S}?` ? { optionalSegment: S; @@ -51,7 +51,8 @@ type OptionalSegment = { optionalSegment: string; }; type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First['segment'], ...JoinSegments] : First extends OptionalSegment ? [First['optionalSegment'], ...JoinSegments] | JoinSegments : [] : []; -type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; -type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] : []; +type SplitPath = S extends "/" ? [""] : S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; +type JoinPath = T extends [infer Only extends string] ? Only extends "" ? "/" : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; +type NonEmptyString = S extends "" ? never : S; export {}; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts index 8ebce77f16..03e751be35 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/client/router/types.ts @@ -49,46 +49,50 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' - ? '/' - : `/${JoinPath>>>}` +export type ExpandRouteOnOptionalStaticSegments = JoinPath< + ExpandOptionalSegments>>> +>; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] - ? Head extends '' - ? [...ExpandOptionalSegments] - : [_ExpandOptionalSegment, ...ExpandOptionalSegments] - : T +type ParseSegments = T extends [infer Head, ...infer Tail] + ? [_ParseSegment, ...ParseSegments] + : T; -type _ExpandOptionalSegment = T extends `:${infer P}` +type _ParseSegment = T extends `:${infer P}` ? // Param segment { segment: T } : T extends `${infer S}?` ? // Optional segment { optionalSegment: S } : // Regular segment - { segment: T } + { segment: T }; -type Segment = { segment: string } -type OptionalSegment = { optionalSegment: string } +type Segment = { segment: string }; +type OptionalSegment = { optionalSegment: string }; -type Elem = Segment | OptionalSegment +type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment - ? [First['segment'], ...JoinSegments] + ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] - : [] + : []; -type SplitPath = S extends `${infer T}/${infer U}` - ? [T, ...SplitPath] - : [S] +type SplitPath = S extends "/" + ? [""] + : S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S]; type JoinPath = T extends [infer Only extends string] - ? Only + ? Only extends "" + ? "/" + : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` - : never + : never; + +type NonEmptyString = S extends "" ? never : S; diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 9801f596f6..9abd699cf5 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -35,9 +35,9 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; -type _ExpandOptionalSegment = T extends `:${infer P}` ? { +export type ExpandRouteOnOptionalStaticSegments = JoinPath>>>>; +type ParseSegments = T extends [infer Head, ...infer Tail] ? [_ParseSegment, ...ParseSegments] : T; +type _ParseSegment = T extends `:${infer P}` ? { segment: T; } : T extends `${infer S}?` ? { optionalSegment: S; @@ -51,7 +51,8 @@ type OptionalSegment = { optionalSegment: string; }; type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First['segment'], ...JoinSegments] : First extends OptionalSegment ? [First['optionalSegment'], ...JoinSegments] | JoinSegments : [] : []; -type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; -type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] : []; +type SplitPath = S extends "/" ? [""] : S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; +type JoinPath = T extends [infer Only extends string] ? Only extends "" ? "/" : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; +type NonEmptyString = S extends "" ? never : S; export {}; diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums index f618dc30e9..eb921c7f00 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums @@ -130,7 +130,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "3e06ad55db04cf1ebd138a52d1f1abe1d11e2b4c934a7afe915aee6035f47297" + "ffbce0f351b849dfe04f00421a31844836cbd5a80ab97445f6ed8859e6b94928" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts index 8ebce77f16..03e751be35 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/client/router/types.ts @@ -49,46 +49,50 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' - ? '/' - : `/${JoinPath>>>}` +export type ExpandRouteOnOptionalStaticSegments = JoinPath< + ExpandOptionalSegments>>> +>; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] - ? Head extends '' - ? [...ExpandOptionalSegments] - : [_ExpandOptionalSegment, ...ExpandOptionalSegments] - : T +type ParseSegments = T extends [infer Head, ...infer Tail] + ? [_ParseSegment, ...ParseSegments] + : T; -type _ExpandOptionalSegment = T extends `:${infer P}` +type _ParseSegment = T extends `:${infer P}` ? // Param segment { segment: T } : T extends `${infer S}?` ? // Optional segment { optionalSegment: S } : // Regular segment - { segment: T } + { segment: T }; -type Segment = { segment: string } -type OptionalSegment = { optionalSegment: string } +type Segment = { segment: string }; +type OptionalSegment = { optionalSegment: string }; -type Elem = Segment | OptionalSegment +type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment - ? [First['segment'], ...JoinSegments] + ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] - : [] + : []; -type SplitPath = S extends `${infer T}/${infer U}` - ? [T, ...SplitPath] - : [S] +type SplitPath = S extends "/" + ? [""] + : S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S]; type JoinPath = T extends [infer Only extends string] - ? Only + ? Only extends "" + ? "/" + : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` - : never + : never; + +type NonEmptyString = S extends "" ? never : S; diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 9801f596f6..9abd699cf5 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -35,9 +35,9 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; -type _ExpandOptionalSegment = T extends `:${infer P}` ? { +export type ExpandRouteOnOptionalStaticSegments = JoinPath>>>>; +type ParseSegments = T extends [infer Head, ...infer Tail] ? [_ParseSegment, ...ParseSegments] : T; +type _ParseSegment = T extends `:${infer P}` ? { segment: T; } : T extends `${infer S}?` ? { optionalSegment: S; @@ -51,7 +51,8 @@ type OptionalSegment = { optionalSegment: string; }; type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First['segment'], ...JoinSegments] : First extends OptionalSegment ? [First['optionalSegment'], ...JoinSegments] | JoinSegments : [] : []; -type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; -type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] : []; +type SplitPath = S extends "/" ? [""] : S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; +type JoinPath = T extends [infer Only extends string] ? Only extends "" ? "/" : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; +type NonEmptyString = S extends "" ? never : S; export {}; diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums index d0f9930aa1..fdf678111e 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums @@ -333,7 +333,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "3e06ad55db04cf1ebd138a52d1f1abe1d11e2b4c934a7afe915aee6035f47297" + "ffbce0f351b849dfe04f00421a31844836cbd5a80ab97445f6ed8859e6b94928" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts index 8ebce77f16..03e751be35 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/client/router/types.ts @@ -49,46 +49,50 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' - ? '/' - : `/${JoinPath>>>}` +export type ExpandRouteOnOptionalStaticSegments = JoinPath< + ExpandOptionalSegments>>> +>; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] - ? Head extends '' - ? [...ExpandOptionalSegments] - : [_ExpandOptionalSegment, ...ExpandOptionalSegments] - : T +type ParseSegments = T extends [infer Head, ...infer Tail] + ? [_ParseSegment, ...ParseSegments] + : T; -type _ExpandOptionalSegment = T extends `:${infer P}` +type _ParseSegment = T extends `:${infer P}` ? // Param segment { segment: T } : T extends `${infer S}?` ? // Optional segment { optionalSegment: S } : // Regular segment - { segment: T } + { segment: T }; -type Segment = { segment: string } -type OptionalSegment = { optionalSegment: string } +type Segment = { segment: string }; +type OptionalSegment = { optionalSegment: string }; -type Elem = Segment | OptionalSegment +type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment - ? [First['segment'], ...JoinSegments] + ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] - : [] + : []; -type SplitPath = S extends `${infer T}/${infer U}` - ? [T, ...SplitPath] - : [S] +type SplitPath = S extends "/" + ? [""] + : S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S]; type JoinPath = T extends [infer Only extends string] - ? Only + ? Only extends "" + ? "/" + : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` - : never + : never; + +type NonEmptyString = S extends "" ? never : S; diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 9801f596f6..9abd699cf5 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -35,9 +35,9 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; -type _ExpandOptionalSegment = T extends `:${infer P}` ? { +export type ExpandRouteOnOptionalStaticSegments = JoinPath>>>>; +type ParseSegments = T extends [infer Head, ...infer Tail] ? [_ParseSegment, ...ParseSegments] : T; +type _ParseSegment = T extends `:${infer P}` ? { segment: T; } : T extends `${infer S}?` ? { optionalSegment: S; @@ -51,7 +51,8 @@ type OptionalSegment = { optionalSegment: string; }; type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First['segment'], ...JoinSegments] : First extends OptionalSegment ? [First['optionalSegment'], ...JoinSegments] | JoinSegments : [] : []; -type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; -type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] : []; +type SplitPath = S extends "/" ? [""] : S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; +type JoinPath = T extends [infer Only extends string] ? Only extends "" ? "/" : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; +type NonEmptyString = S extends "" ? never : S; export {}; diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums index 2137738a02..9a2e9e9407 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums @@ -130,7 +130,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "3e06ad55db04cf1ebd138a52d1f1abe1d11e2b4c934a7afe915aee6035f47297" + "ffbce0f351b849dfe04f00421a31844836cbd5a80ab97445f6ed8859e6b94928" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts index 8ebce77f16..03e751be35 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/client/router/types.ts @@ -49,46 +49,50 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' - ? '/' - : `/${JoinPath>>>}` +export type ExpandRouteOnOptionalStaticSegments = JoinPath< + ExpandOptionalSegments>>> +>; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] - ? Head extends '' - ? [...ExpandOptionalSegments] - : [_ExpandOptionalSegment, ...ExpandOptionalSegments] - : T +type ParseSegments = T extends [infer Head, ...infer Tail] + ? [_ParseSegment, ...ParseSegments] + : T; -type _ExpandOptionalSegment = T extends `:${infer P}` +type _ParseSegment = T extends `:${infer P}` ? // Param segment { segment: T } : T extends `${infer S}?` ? // Optional segment { optionalSegment: S } : // Regular segment - { segment: T } + { segment: T }; -type Segment = { segment: string } -type OptionalSegment = { optionalSegment: string } +type Segment = { segment: string }; +type OptionalSegment = { optionalSegment: string }; -type Elem = Segment | OptionalSegment +type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment - ? [First['segment'], ...JoinSegments] + ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] - : [] + : []; -type SplitPath = S extends `${infer T}/${infer U}` - ? [T, ...SplitPath] - : [S] +type SplitPath = S extends "/" + ? [""] + : S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S]; type JoinPath = T extends [infer Only extends string] - ? Only + ? Only extends "" + ? "/" + : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` - : never + : never; + +type NonEmptyString = S extends "" ? never : S; diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 9801f596f6..9abd699cf5 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -35,9 +35,9 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; -type _ExpandOptionalSegment = T extends `:${infer P}` ? { +export type ExpandRouteOnOptionalStaticSegments = JoinPath>>>>; +type ParseSegments = T extends [infer Head, ...infer Tail] ? [_ParseSegment, ...ParseSegments] : T; +type _ParseSegment = T extends `:${infer P}` ? { segment: T; } : T extends `${infer S}?` ? { optionalSegment: S; @@ -51,7 +51,8 @@ type OptionalSegment = { optionalSegment: string; }; type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First['segment'], ...JoinSegments] : First extends OptionalSegment ? [First['optionalSegment'], ...JoinSegments] | JoinSegments : [] : []; -type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; -type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] : []; +type SplitPath = S extends "/" ? [""] : S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; +type JoinPath = T extends [infer Only extends string] ? Only extends "" ? "/" : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; +type NonEmptyString = S extends "" ? never : S; export {}; diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums index 9863dce56a..7d817cd209 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums @@ -130,7 +130,7 @@ "file", "../out/sdk/wasp/client/router/types.ts" ], - "3e06ad55db04cf1ebd138a52d1f1abe1d11e2b4c934a7afe915aee6035f47297" + "ffbce0f351b849dfe04f00421a31844836cbd5a80ab97445f6ed8859e6b94928" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts index 8ebce77f16..03e751be35 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/client/router/types.ts @@ -49,46 +49,50 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' - ? '/' - : `/${JoinPath>>>}` +export type ExpandRouteOnOptionalStaticSegments = JoinPath< + ExpandOptionalSegments>>> +>; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] - ? Head extends '' - ? [...ExpandOptionalSegments] - : [_ExpandOptionalSegment, ...ExpandOptionalSegments] - : T +type ParseSegments = T extends [infer Head, ...infer Tail] + ? [_ParseSegment, ...ParseSegments] + : T; -type _ExpandOptionalSegment = T extends `:${infer P}` +type _ParseSegment = T extends `:${infer P}` ? // Param segment { segment: T } : T extends `${infer S}?` ? // Optional segment { optionalSegment: S } : // Regular segment - { segment: T } + { segment: T }; -type Segment = { segment: string } -type OptionalSegment = { optionalSegment: string } +type Segment = { segment: string }; +type OptionalSegment = { optionalSegment: string }; -type Elem = Segment | OptionalSegment +type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment - ? [First['segment'], ...JoinSegments] + ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment - ? [First['optionalSegment'], ...JoinSegments] | JoinSegments + ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] - : [] + : []; -type SplitPath = S extends `${infer T}/${infer U}` - ? [T, ...SplitPath] - : [S] +type SplitPath = S extends "/" + ? [""] + : S extends `${infer T}/${infer U}` + ? [T, ...SplitPath] + : [S]; type JoinPath = T extends [infer Only extends string] - ? Only + ? Only extends "" + ? "/" + : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` - : never + : never; + +type NonEmptyString = S extends "" ? never : S; diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts index 9801f596f6..9abd699cf5 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/sdk/wasp/dist/client/router/types.d.ts @@ -35,9 +35,9 @@ type ParamsFromBuildFn = Parameters[0] extends { * - /users/:id? * - /users/tasks/:id? */ -export type ExpandRouteOnOptionalStaticSegments = S extends '/' ? '/' : `/${JoinPath>>>}`; -type ExpandOptionalSegments = T extends [infer Head, ...infer Tail] ? Head extends '' ? [...ExpandOptionalSegments] : [_ExpandOptionalSegment, ...ExpandOptionalSegments] : T; -type _ExpandOptionalSegment = T extends `:${infer P}` ? { +export type ExpandRouteOnOptionalStaticSegments = JoinPath>>>>; +type ParseSegments = T extends [infer Head, ...infer Tail] ? [_ParseSegment, ...ParseSegments] : T; +type _ParseSegment = T extends `:${infer P}` ? { segment: T; } : T extends `${infer S}?` ? { optionalSegment: S; @@ -51,7 +51,8 @@ type OptionalSegment = { optionalSegment: string; }; type Elem = Segment | OptionalSegment; -type JoinSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First['segment'], ...JoinSegments] : First extends OptionalSegment ? [First['optionalSegment'], ...JoinSegments] | JoinSegments : [] : []; -type SplitPath = S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; -type JoinPath = T extends [infer Only extends string] ? Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; +type ExpandOptionalSegments = T extends [] ? [] : T extends [infer First extends Elem, ...infer Rest extends Elem[]] ? First extends Segment ? [First["segment"], ...ExpandOptionalSegments] : First extends OptionalSegment ? [First["optionalSegment"], ...ExpandOptionalSegments] | ExpandOptionalSegments : [] : []; +type SplitPath = S extends "/" ? [""] : S extends `${infer T}/${infer U}` ? [T, ...SplitPath] : [S]; +type JoinPath = T extends [infer Only extends string] ? Only extends "" ? "/" : Only : T extends [infer First extends string, ...infer Rest extends string[]] ? `${First}/${JoinPath}` : never; +type NonEmptyString = S extends "" ? never : S; export {}; From f6d2d8dd23869f8660a292ae6d3639f1f12d58bd Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Fri, 27 Sep 2024 16:25:00 +0200 Subject: [PATCH 28/31] Update package-lock.json for example apps Signed-off-by: Mihovil Ilakovac --- .../hackathon-submissions/package-lock.json | 29 +++++----- examples/streaming/package-lock.json | 29 +++++----- examples/todo-typescript/package-lock.json | 29 +++++----- examples/waspello/package-lock.json | 29 +++++----- examples/waspleau/package-lock.json | 29 +++++----- .../package-lock.json | 55 +++++++++---------- waspc/examples/crud-testing/package-lock.json | 29 +++++----- .../pg-vector-example/package-lock.json | 29 +++++----- .../todo-typescript/package-lock.json | 29 +++++----- 9 files changed, 130 insertions(+), 157 deletions(-) diff --git a/examples/hackathon-submissions/package-lock.json b/examples/hackathon-submissions/package-lock.json index edb0eeab39..1f9ccca453 100644 --- a/examples/hackathon-submissions/package-lock.json +++ b/examples/hackathon-submissions/package-lock.json @@ -37,7 +37,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "tailwindcss": "^3.2.7", "uuid": "^9.0.0", @@ -859,10 +859,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", - "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", - "license": "MIT", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", "engines": { "node": ">=14.0.0" } @@ -4779,12 +4778,11 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-router": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", - "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "dependencies": { - "@remix-run/router": "1.19.1" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -4794,13 +4792,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", - "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "dependencies": { - "@remix-run/router": "1.19.1", - "react-router": "6.26.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" diff --git a/examples/streaming/package-lock.json b/examples/streaming/package-lock.json index 480ead3d59..19a1fd11c5 100644 --- a/examples/streaming/package-lock.json +++ b/examples/streaming/package-lock.json @@ -34,7 +34,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" @@ -708,10 +708,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", - "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", - "license": "MIT", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", "engines": { "node": ">=14.0.0" } @@ -4091,12 +4090,11 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", - "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "dependencies": { - "@remix-run/router": "1.19.1" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -4106,13 +4104,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", - "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "dependencies": { - "@remix-run/router": "1.19.1", - "react-router": "6.26.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" diff --git a/examples/todo-typescript/package-lock.json b/examples/todo-typescript/package-lock.json index 679728b313..561d5004f0 100644 --- a/examples/todo-typescript/package-lock.json +++ b/examples/todo-typescript/package-lock.json @@ -39,7 +39,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" @@ -2037,10 +2037,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", - "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", - "license": "MIT", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", "engines": { "node": ">=14.0.0" } @@ -5436,12 +5435,11 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", - "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "dependencies": { - "@remix-run/router": "1.19.1" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -5451,13 +5449,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", - "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "dependencies": { - "@remix-run/router": "1.19.1", - "react-router": "6.26.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" diff --git a/examples/waspello/package-lock.json b/examples/waspello/package-lock.json index 94eb239381..4de7634475 100644 --- a/examples/waspello/package-lock.json +++ b/examples/waspello/package-lock.json @@ -46,7 +46,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "tailwindcss": "^3.2.7", "uuid": "^9.0.0", @@ -1711,10 +1711,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", - "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", - "license": "MIT", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", "engines": { "node": ">=14.0.0" } @@ -6236,12 +6235,11 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", - "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "dependencies": { - "@remix-run/router": "1.19.1" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -6251,13 +6249,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", - "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "dependencies": { - "@remix-run/router": "1.19.1", - "react-router": "6.26.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" diff --git a/examples/waspleau/package-lock.json b/examples/waspleau/package-lock.json index fb987d6f0d..63856fe61a 100644 --- a/examples/waspleau/package-lock.json +++ b/examples/waspleau/package-lock.json @@ -36,7 +36,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" @@ -755,10 +755,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", - "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", - "license": "MIT", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", "engines": { "node": ">=14.0.0" } @@ -4338,12 +4337,11 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", - "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "dependencies": { - "@remix-run/router": "1.19.1" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -4353,13 +4351,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", - "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "dependencies": { - "@remix-run/router": "1.19.1", - "react-router": "6.26.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" diff --git a/examples/websockets-realtime-voting/package-lock.json b/examples/websockets-realtime-voting/package-lock.json index 9aedaa84a9..a55ec52333 100644 --- a/examples/websockets-realtime-voting/package-lock.json +++ b/examples/websockets-realtime-voting/package-lock.json @@ -44,7 +44,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "socket.io": "^4.6.1", "socket.io-client": "^4.6.1", "superjson": "^1.12.2", @@ -2175,10 +2175,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", - "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", - "license": "MIT", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", "engines": { "node": ">=14.0.0" } @@ -6537,12 +6536,11 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", - "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "dependencies": { - "@remix-run/router": "1.19.1" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -6552,13 +6550,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", - "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "dependencies": { - "@remix-run/router": "1.19.1", - "react-router": "6.26.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" @@ -9887,9 +9884,9 @@ } }, "@remix-run/router": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", - "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==" + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==" }, "@rollup/rollup-android-arm-eabi": { "version": "4.11.0", @@ -12836,20 +12833,20 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "react-router": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", - "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "requires": { - "@remix-run/router": "1.19.1" + "@remix-run/router": "1.19.2" } }, "react-router-dom": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", - "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "requires": { - "@remix-run/router": "1.19.1", - "react-router": "6.26.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" } }, "read-cache": { @@ -14130,7 +14127,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "socket.io": "^4.6.1", "socket.io-client": "^4.6.1", "superjson": "^1.12.2", diff --git a/waspc/examples/crud-testing/package-lock.json b/waspc/examples/crud-testing/package-lock.json index 14a1a3518d..bfd8a6f09e 100644 --- a/waspc/examples/crud-testing/package-lock.json +++ b/waspc/examples/crud-testing/package-lock.json @@ -41,7 +41,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "uuid": "^9.0.0", "vitest": "^1.2.1" @@ -1558,10 +1558,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", - "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", - "license": "MIT", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", "engines": { "node": ">=14.0.0" } @@ -5698,12 +5697,11 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", - "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "dependencies": { - "@remix-run/router": "1.19.1" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -5713,13 +5711,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", - "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "dependencies": { - "@remix-run/router": "1.19.1", - "react-router": "6.26.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" diff --git a/waspc/examples/pg-vector-example/package-lock.json b/waspc/examples/pg-vector-example/package-lock.json index 23d3c16d80..7f6d81a22f 100644 --- a/waspc/examples/pg-vector-example/package-lock.json +++ b/waspc/examples/pg-vector-example/package-lock.json @@ -44,7 +44,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "superjson": "^1.12.2", "tailwindcss": "^3.2.7", "uuid": "^9.0.0", @@ -3200,10 +3200,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", - "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", - "license": "MIT", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", "engines": { "node": ">=14.0.0" } @@ -8455,12 +8454,11 @@ } }, "node_modules/react-router": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", - "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "dependencies": { - "@remix-run/router": "1.19.1" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -8470,13 +8468,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", - "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "dependencies": { - "@remix-run/router": "1.19.1", - "react-router": "6.26.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" diff --git a/waspc/examples/todo-typescript/package-lock.json b/waspc/examples/todo-typescript/package-lock.json index 61587bc923..0454c851d5 100644 --- a/waspc/examples/todo-typescript/package-lock.json +++ b/waspc/examples/todo-typescript/package-lock.json @@ -46,7 +46,7 @@ "prisma": "5.19.1", "react": "^18.2.0", "react-hook-form": "^7.45.4", - "react-router-dom": "^6.26.1", + "react-router-dom": "^6.26.2", "socket.io": "^4.6.1", "socket.io-client": "^4.6.1", "superjson": "^1.12.2", @@ -1675,10 +1675,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", - "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", - "license": "MIT", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", "engines": { "node": ">=14.0.0" } @@ -6517,12 +6516,11 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-router": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", - "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", "dependencies": { - "@remix-run/router": "1.19.1" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -6532,13 +6530,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", - "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", - "license": "MIT", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", "dependencies": { - "@remix-run/router": "1.19.1", - "react-router": "6.26.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" From a23911c5ac11734a03fbf801775b96775ddf4732 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Fri, 27 Sep 2024 20:08:51 +0200 Subject: [PATCH 29/31] Update docs --- web/docs/advanced/links.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/docs/advanced/links.md b/web/docs/advanced/links.md index 4ded83f9aa..a2cf00ff2f 100644 --- a/web/docs/advanced/links.md +++ b/web/docs/advanced/links.md @@ -50,7 +50,7 @@ page CatchAllPage { ... } ``` ```jsx title="TaskList.tsx" - + About ``` @@ -191,7 +191,7 @@ export const routes = { CatchAllRoute: { build: ( options: { - params: { splat: ParamValue }, + params: { '*': ParamValue }, search?: string[][] | Record | string | URLSearchParams hash?: string } @@ -214,6 +214,6 @@ const linkToOptional = routes.DetailRoute.build({ params: { id: 1 }, }) const linkToCatchAll = routes.CatchAllRoute.build({ - params: { splat: 'about' }, + params: { '*': 'about' }, }) ``` From 89abca123851afe1cf504acb0afbc834d5a762ad Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Fri, 27 Sep 2024 20:09:57 +0200 Subject: [PATCH 30/31] Put Segment on multiple lines --- waspc/src/Wasp/Util/WebRouterPath.hs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/waspc/src/Wasp/Util/WebRouterPath.hs b/waspc/src/Wasp/Util/WebRouterPath.hs index 432cb6bfda..daab51acfc 100644 --- a/waspc/src/Wasp/Util/WebRouterPath.hs +++ b/waspc/src/Wasp/Util/WebRouterPath.hs @@ -9,7 +9,10 @@ where import Data.List (isSuffixOf) import Data.List.Split (splitOn) -data Segment = StaticSegment StaticSegment | ParamSegment ParamSegment deriving (Show, Eq) +data Segment + = StaticSegment StaticSegment + | ParamSegment ParamSegment + deriving (Show, Eq) data StaticSegment = RequiredStaticSegment StaticSegmentValue From c68896654d597e497e08cc326216dcc841fd2c86 Mon Sep 17 00:00:00 2001 From: Mihovil Ilakovac Date: Fri, 27 Sep 2024 20:10:35 +0200 Subject: [PATCH 31/31] Inline isSegmentOptional --- waspc/src/Wasp/Util/WebRouterPath.hs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/waspc/src/Wasp/Util/WebRouterPath.hs b/waspc/src/Wasp/Util/WebRouterPath.hs index daab51acfc..7c68a8bd55 100644 --- a/waspc/src/Wasp/Util/WebRouterPath.hs +++ b/waspc/src/Wasp/Util/WebRouterPath.hs @@ -44,5 +44,4 @@ getRouteSegments = map parseSegment . splitOn "/" then OptionalStaticSegment segmentValue else RequiredStaticSegment segmentValue -isSegmentOptional :: String -> Bool -isSegmentOptional = isSuffixOf "?" + isSegmentOptional = isSuffixOf "?"