Refactor routes (#535)

* refactor routes

* use default export for screens

* use "route" relative routing

* don't use absolute import for root screens

* no absolute importing folders!!!

* fine we can absolute import folders
This commit is contained in:
Brendan Allan 2023-01-20 12:40:36 -08:00 committed by GitHub
parent 24de617b92
commit e4e80fa603
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 188 additions and 478 deletions

View file

@ -35,7 +35,7 @@
"ts-node": "^10.9.1",
"tsparticles": "^2.3.4",
"typescript": "^4.8.4",
"vite": "^3.1.4",
"vite": "^4.0.4",
"vite-plugin-ssr": "^0.4.39"
},
"devDependencies": {

View file

@ -15,7 +15,7 @@
"@tanstack/react-query": "^4.10.1",
"@vitejs/plugin-react": "^2.1.0",
"typescript": "^4.8.2",
"vite": "^3.0.9"
"vite": "^4.0.4"
},
"dependencies": {
"clsx": "^1.2.1",

View file

@ -17,7 +17,19 @@ module.exports = {
const item = folderItems.find((i) => i.startsWith(sourcePath.split('/').at(-1)));
return absolutePath + path.extname(item);
const fullPath = absolutePath + path.extname(item);
const stats = await fs.stat(fullPath);
if (stats.isDirectory()) {
const directoryItems = await fs.readdir(absolutePath + path.extname(item));
const indexFile = directoryItems.find((i) => i.startsWith('index'));
return `${absolutePath}/${indexFile}`;
} else {
return fullPath;
}
}
}
};

View file

@ -75,7 +75,7 @@
"@vitejs/plugin-react": "^1.3.1",
"prettier": "^2.7.1",
"typescript": "^4.8.4",
"vite": "^3.1.4",
"vite": "^4.0.4",
"vite-plugin-svgr": "^2.2.1"
}
}

View file

@ -2,7 +2,6 @@ import clsx from 'clsx';
import { Suspense } from 'react';
import { Outlet } from 'react-router-dom';
import { useCurrentLibrary } from '@sd/client';
import { Dialogs } from '@sd/ui';
import { Sidebar } from '~/components/layout/Sidebar';
import { Toasts } from '~/components/primitive/Toasts';
import { useOperatingSystem } from '~/hooks/useOperatingSystem';

View file

@ -1,42 +1,12 @@
import { lazy } from '@loadable/component';
import { Navigate, Route, Routes } from 'react-router-dom';
import { Route, Routes } from 'react-router-dom';
import { useCurrentLibrary, useInvalidateQuery } from '@sd/client';
import { AppLayout } from '~/AppLayout';
import { useKeybindHandler } from '~/hooks/useKeyboardHandler';
import { AppLayout } from './AppLayout';
import screens from '~/screens';
import { lazyEl } from '~/util';
// Using React.lazy breaks hot reload so we don't use it.
const DebugScreen = lazy(() => import('./screens/Debug'));
const SettingsScreen = lazy(() => import('./screens/settings/Settings'));
const TagExplorer = lazy(() => import('./screens/TagExplorer'));
const PhotosScreen = lazy(() => import('./screens/Photos'));
const OverviewScreen = lazy(() => import('./screens/Overview'));
const ContentScreen = lazy(() => import('./screens/Content'));
const LocationExplorer = lazy(() => import('./screens/LocationExplorer'));
const OnboardingScreen = lazy(() => import('./components/onboarding/Onboarding'));
const NotFound = lazy(() => import('./NotFound'));
const AppearanceSettings = lazy(() => import('./screens/settings/client/AppearanceSettings'));
const ExtensionSettings = lazy(() => import('./screens/settings/client/ExtensionsSettings'));
const GeneralSettings = lazy(() => import('./screens/settings/client/GeneralSettings'));
const KeybindingSettings = lazy(() => import('./screens/settings/client/KeybindingSettings'));
const PrivacySettings = lazy(() => import('./screens/settings/client/PrivacySettings'));
const AboutSpacedrive = lazy(() => import('./screens/settings/info/AboutSpacedrive'));
const Changelog = lazy(() => import('./screens/settings/info/Changelog'));
const Support = lazy(() => import('./screens/settings/info/Support'));
const ContactsSettings = lazy(() => import('./screens/settings/library/ContactsSettings'));
const KeysSettings = lazy(() => import('./screens/settings/library/KeysSetting'));
const LibraryGeneralSettings = lazy(
() => import('./screens/settings/library/LibraryGeneralSettings')
);
const LocationSettings = lazy(() => import('./screens/settings/library/LocationSettings'));
const NodesSettings = lazy(() => import('./screens/settings/library/NodesSettings'));
const SecuritySettings = lazy(() => import('./screens/settings/library/SecuritySettings'));
const SharingSettings = lazy(() => import('./screens/settings/library/SharingSettings'));
const SyncSettings = lazy(() => import('./screens/settings/library/SyncSettings'));
const TagsSettings = lazy(() => import('./screens/settings/library/TagsSettings'));
const ExperimentalSettings = lazy(() => import('./screens/settings/node/ExperimentalSettings'));
const LibrarySettings = lazy(() => import('./screens/settings/node/LibrariesSettings'));
const P2PSettings = lazy(() => import('./screens/settings/node/P2PSettings'));
const Onboarding = lazyEl(() => import('./components/onboarding/Onboarding'));
const NotFound = lazyEl(() => import('./NotFound'));
export function AppRouter() {
const { library } = useCurrentLibrary();
@ -46,7 +16,7 @@ export function AppRouter() {
return (
<Routes>
<Route path="onboarding" element={<OnboardingScreen />} />
<Route path="onboarding" element={Onboarding} />
<Route element={<AppLayout />}>
{/* As we are caching the libraries in localStore so this *shouldn't* result is visual problems unless something else is wrong */}
{library === undefined ? (
@ -58,40 +28,8 @@ export function AppRouter() {
/>
) : (
<>
<Route index element={<Navigate to="/overview" />} />
<Route path="overview" element={<OverviewScreen />} />
<Route path="content" element={<ContentScreen />} />
<Route path="photos" element={<PhotosScreen />} />
<Route path="debug" element={<DebugScreen />} />
<Route path={'settings'} element={<SettingsScreen />}>
<Route index element={<GeneralSettings />} />
<Route path="general" element={<GeneralSettings />} />
<Route path="appearance" element={<AppearanceSettings />} />
<Route path="keybindings" element={<KeybindingSettings />} />
<Route path="extensions" element={<ExtensionSettings />} />
<Route path="p2p" element={<P2PSettings />} />
<Route path="contacts" element={<ContactsSettings />} />
<Route path="experimental" element={<ExperimentalSettings />} />
<Route path="keys" element={<KeysSettings />} />
<Route path="libraries" element={<LibrarySettings />} />
<Route path="security" element={<SecuritySettings />} />
<Route path="locations" element={<LocationSettings />} />
<Route path="sharing" element={<SharingSettings />} />
<Route path="sync" element={<SyncSettings />} />
<Route path="tags" element={<TagsSettings />} />
<Route path="library" element={<LibraryGeneralSettings />} />
<Route path="locations" element={<LocationSettings />} />
<Route path="tags" element={<TagsSettings />} />
<Route path="nodes" element={<NodesSettings />} />
<Route path="keys" element={<KeysSettings />} />
<Route path="privacy" element={<PrivacySettings />} />
<Route path="about" element={<AboutSpacedrive />} />
<Route path="changelog" element={<Changelog />} />
<Route path="support" element={<Support />} />
</Route>
<Route path="location/:id" element={<LocationExplorer />} />
<Route path="tag/:id" element={<TagExplorer />} />
<Route path="*" element={<NotFound />} />
{screens}
<Route path="*" element={NotFound} />
</>
)}
</Route>

View file

@ -0,0 +1,32 @@
import { Navigate, Route, RouteProps } from 'react-router-dom';
import { lazyEl } from '~/util';
import settingsScreens from './settings';
const routes: RouteProps[] = [
{
index: true,
element: <Navigate to="overview" relative="route" />
},
{
path: 'overview',
element: lazyEl(() => import('./Overview'))
},
{ path: 'content', element: lazyEl(() => import('./Content')) },
{ path: 'photos', element: lazyEl(() => import('./Photos')) },
{ path: 'debug', element: lazyEl(() => import('./Debug')) },
{ path: 'location/:id', element: lazyEl(() => import('./LocationExplorer')) },
{ path: 'tag/:id', element: lazyEl(() => import('./TagExplorer')) },
{
path: 'settings',
element: lazyEl(() => import('./settings/Layout')),
children: settingsScreens
}
];
export default (
<>
{routes.map((route) => (
<Route key={route.path} {...route} />
))}
</>
);

View file

@ -0,0 +1,37 @@
import { Navigate, Route, RouteProps } from 'react-router-dom';
import { lazyEl } from '~/util';
const routes: RouteProps[] = [
{ index: true, element: <Navigate to="general" relative="route" /> },
{ path: 'general', element: lazyEl(() => import('./client/GeneralSettings')) },
{ path: 'appearance', element: lazyEl(() => import('./client/AppearanceSettings')) },
{ path: 'keybindings', element: lazyEl(() => import('./client/KeybindingSettings')) },
{ path: 'extensions', element: lazyEl(() => import('./client/ExtensionsSettings')) },
{ path: 'p2p', element: lazyEl(() => import('./node/P2PSettings')) },
{ path: 'contacts', element: lazyEl(() => import('./library/ContactsSettings')) },
{ path: 'experimental', element: lazyEl(() => import('./node/ExperimentalSettings')) },
{ path: 'keys', element: lazyEl(() => import('./library/KeysSetting')) },
{ path: 'libraries', element: lazyEl(() => import('./node/LibrariesSettings')) },
{ path: 'security', element: lazyEl(() => import('./library/SecuritySettings')) },
{ path: 'locations', element: lazyEl(() => import('./library/LocationSettings')) },
{ path: 'sharing', element: lazyEl(() => import('./library/SharingSettings')) },
{ path: 'sync', element: lazyEl(() => import('./library/SyncSettings')) },
{ path: 'tags', element: lazyEl(() => import('./library/TagsSettings')) },
{ path: 'library', element: lazyEl(() => import('./library/LibraryGeneralSettings')) },
{ path: 'locations', element: lazyEl(() => import('./library/LocationSettings')) },
{ path: 'tags', element: lazyEl(() => import('./library/TagsSettings')) },
{ path: 'nodes', element: lazyEl(() => import('./library/NodesSettings')) },
{ path: 'keys', element: lazyEl(() => import('./library/KeysSetting')) },
{ path: 'privacy', element: lazyEl(() => import('./client/PrivacySettings')) },
{ path: 'about', element: lazyEl(() => import('./info/AboutSpacedrive')) },
{ path: 'changelog', element: lazyEl(() => import('./info/Changelog')) },
{ path: 'support', element: lazyEl(() => import('./info/Support')) }
];
export default (
<>
{routes.map((route) => (
<Route key={route.path} {...route} />
))}
</>
);

View file

@ -0,0 +1,7 @@
import { lazy } from '@loadable/component';
import { ReactNode } from 'react';
export function lazyEl(fn: Parameters<typeof lazy>[0]): ReactNode {
const Element = lazy(fn);
return <Element />;
}

View file

@ -119,7 +119,7 @@ importers:
ts-node: ^10.9.1
tsparticles: ^2.3.4
typescript: ^4.8.4
vite: ^3.1.4
vite: ^4.0.4
vite-plugin-esmodule: ^1.4.4
vite-plugin-markdown: ^2.1.0
vite-plugin-ssr: ^0.4.39
@ -131,7 +131,7 @@ importers:
'@sd/assets': link:../../packages/assets
'@sd/docs': link:../../docs
'@tryghost/content-api': 1.11.5
'@vitejs/plugin-react': 2.2.0_vite@3.2.5
'@vitejs/plugin-react': 2.2.0_vite@4.0.4
clsx: 1.2.1
compression: 1.7.4
cross-env: 7.0.3
@ -150,8 +150,8 @@ importers:
ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq
tsparticles: 2.8.0
typescript: 4.9.4
vite: 3.2.5_ovmyjmuuyckt3r3gpaexj2onji
vite-plugin-ssr: 0.4.70_vite@3.2.5
vite: 4.0.4_ovmyjmuuyckt3r3gpaexj2onji
vite-plugin-ssr: 0.4.70_vite@4.0.4
devDependencies:
'@sd/config': link:../../packages/config
'@sd/ui': link:../../packages/ui
@ -171,9 +171,9 @@ importers:
rollup-plugin-visualizer: 5.9.0
sass: 1.57.1
vite-plugin-esmodule: 1.4.4
vite-plugin-markdown: 2.1.0_vite@3.2.5
vite-plugin-svgr: 2.4.0_vite@3.2.5
vite-tsconfig-paths: 3.6.0_vite@3.2.5
vite-plugin-markdown: 2.1.0_vite@4.0.4
vite-plugin-svgr: 2.4.0_vite@4.0.4
vite-tsconfig-paths: 3.6.0_vite@4.0.4
apps/mobile:
specifiers:
@ -340,7 +340,7 @@ importers:
solid-js: ^1.5.1
tailwindcss: ^3.1.8
typescript: ^4.8.2
vite: ^3.0.9
vite: ^4.0.4
dependencies:
clsx: 1.2.1
react: 18.2.0
@ -351,9 +351,9 @@ importers:
'@rspc/client': 0.0.0-main-7c0a67c1
'@rspc/react': 0.0.0-main-7c0a67c1_ews3p2w6ewwkufep3giz5zum7m
'@tanstack/react-query': 4.22.0_biqbaboplfbrettd7655fr4n2y
'@vitejs/plugin-react': 2.2.0_vite@3.2.5
'@vitejs/plugin-react': 2.2.0_vite@4.0.4
typescript: 4.9.4
vite: 3.2.5
vite: 4.0.4
docs:
specifiers: {}
@ -455,7 +455,7 @@ importers:
use-count-up: ^3.0.1
use-debounce: ^8.0.4
valtio: ^1.7.4
vite: ^3.1.4
vite: ^4.0.4
vite-plugin-svgr: ^2.2.1
zod: ^3.20.2
dependencies:
@ -477,7 +477,7 @@ importers:
'@tanstack/react-query': 4.22.0_biqbaboplfbrettd7655fr4n2y
'@tanstack/react-query-devtools': 4.22.0_gp275tdwez2a4eujt75dnnp754
'@tanstack/react-virtual': 3.0.0-beta.18_react@18.2.0
'@vitejs/plugin-react': 2.2.0_vite@3.2.5
'@vitejs/plugin-react': 2.2.0_vite@4.0.4
'@zxcvbn-ts/core': 2.1.0
'@zxcvbn-ts/language-common': 2.0.1
'@zxcvbn-ts/language-en': 2.1.0
@ -514,8 +514,8 @@ importers:
'@types/react-router-dom': 5.3.3
prettier: 2.8.3
typescript: 4.9.4
vite: 3.2.5_@types+node@18.11.18
vite-plugin-svgr: 2.4.0_vite@3.2.5
vite: 4.0.4_@types+node@18.11.18
vite-plugin-svgr: 2.4.0_vite@4.0.4
packages/ui:
specifiers:
@ -3397,21 +3397,12 @@ packages:
dev: false
optional: true
/@esbuild/android-arm/0.15.18:
resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
requiresBuild: true
optional: true
/@esbuild/android-arm/0.16.17:
resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
requiresBuild: true
dev: true
optional: true
/@esbuild/android-arm64/0.16.17:
@ -3420,7 +3411,6 @@ packages:
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@esbuild/android-x64/0.16.17:
@ -3429,7 +3419,6 @@ packages:
cpu: [x64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@esbuild/darwin-arm64/0.16.17:
@ -3438,7 +3427,6 @@ packages:
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@esbuild/darwin-x64/0.16.17:
@ -3447,7 +3435,6 @@ packages:
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@esbuild/freebsd-arm64/0.16.17:
@ -3456,7 +3443,6 @@ packages:
cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/freebsd-x64/0.16.17:
@ -3465,7 +3451,6 @@ packages:
cpu: [x64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-arm/0.16.17:
@ -3474,7 +3459,6 @@ packages:
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-arm64/0.16.17:
@ -3483,7 +3467,6 @@ packages:
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-ia32/0.16.17:
@ -3492,15 +3475,6 @@ packages:
cpu: [ia32]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-loong64/0.15.18:
resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
requiresBuild: true
optional: true
/@esbuild/linux-loong64/0.16.17:
@ -3509,7 +3483,6 @@ packages:
cpu: [loong64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-mips64el/0.16.17:
@ -3518,7 +3491,6 @@ packages:
cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-ppc64/0.16.17:
@ -3527,7 +3499,6 @@ packages:
cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-riscv64/0.16.17:
@ -3536,7 +3507,6 @@ packages:
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-s390x/0.16.17:
@ -3545,7 +3515,6 @@ packages:
cpu: [s390x]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-x64/0.16.17:
@ -3554,7 +3523,6 @@ packages:
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/netbsd-x64/0.16.17:
@ -3563,7 +3531,6 @@ packages:
cpu: [x64]
os: [netbsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/openbsd-x64/0.16.17:
@ -3572,7 +3539,6 @@ packages:
cpu: [x64]
os: [openbsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/sunos-x64/0.16.17:
@ -3581,7 +3547,6 @@ packages:
cpu: [x64]
os: [sunos]
requiresBuild: true
dev: true
optional: true
/@esbuild/win32-arm64/0.16.17:
@ -3590,7 +3555,6 @@ packages:
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@esbuild/win32-ia32/0.16.17:
@ -3599,7 +3563,6 @@ packages:
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@esbuild/win32-x64/0.16.17:
@ -3608,7 +3571,6 @@ packages:
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@eslint/eslintrc/1.4.1:
@ -8286,23 +8248,6 @@ packages:
wonka: 4.0.15
dev: false
/@vitejs/plugin-react/2.2.0_vite@3.2.5:
resolution: {integrity: sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
vite: ^3.0.0
dependencies:
'@babel/core': 7.20.12
'@babel/plugin-transform-react-jsx': 7.20.7_@babel+core@7.20.12
'@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.20.12
'@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.20.12
'@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.20.12
magic-string: 0.26.7
react-refresh: 0.14.0
vite: 3.2.5_ovmyjmuuyckt3r3gpaexj2onji
transitivePeerDependencies:
- supports-color
/@vitejs/plugin-react/2.2.0_vite@4.0.4:
resolution: {integrity: sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==}
engines: {node: ^14.18.0 || >=16.0.0}
@ -8319,7 +8264,6 @@ packages:
vite: 4.0.4_sass@1.57.1
transitivePeerDependencies:
- supports-color
dev: true
/@vue/compiler-core/3.2.45:
resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==}
@ -11579,195 +11523,6 @@ packages:
resolution: {integrity: sha512-baZkUfTDSx7X69+NA8imbvGrsPfqH0MX7ADdIDjqwsI8lkTgLIiD2QWrUCSGsUQ0YMnSCA/4pNgSyXdnLHWf3A==}
dev: true
/esbuild-android-64/0.15.18:
resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
requiresBuild: true
optional: true
/esbuild-android-arm64/0.15.18:
resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
requiresBuild: true
optional: true
/esbuild-darwin-64/0.15.18:
resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
requiresBuild: true
optional: true
/esbuild-darwin-arm64/0.15.18:
resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
optional: true
/esbuild-freebsd-64/0.15.18:
resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
requiresBuild: true
optional: true
/esbuild-freebsd-arm64/0.15.18:
resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
requiresBuild: true
optional: true
/esbuild-linux-32/0.15.18:
resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
requiresBuild: true
optional: true
/esbuild-linux-64/0.15.18:
resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
requiresBuild: true
optional: true
/esbuild-linux-arm/0.15.18:
resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
requiresBuild: true
optional: true
/esbuild-linux-arm64/0.15.18:
resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
requiresBuild: true
optional: true
/esbuild-linux-mips64le/0.15.18:
resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
requiresBuild: true
optional: true
/esbuild-linux-ppc64le/0.15.18:
resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
requiresBuild: true
optional: true
/esbuild-linux-riscv64/0.15.18:
resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
requiresBuild: true
optional: true
/esbuild-linux-s390x/0.15.18:
resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
requiresBuild: true
optional: true
/esbuild-netbsd-64/0.15.18:
resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
requiresBuild: true
optional: true
/esbuild-openbsd-64/0.15.18:
resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
requiresBuild: true
optional: true
/esbuild-sunos-64/0.15.18:
resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
requiresBuild: true
optional: true
/esbuild-windows-32/0.15.18:
resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
requiresBuild: true
optional: true
/esbuild-windows-64/0.15.18:
resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
requiresBuild: true
optional: true
/esbuild-windows-arm64/0.15.18:
resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
requiresBuild: true
optional: true
/esbuild/0.15.18:
resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@esbuild/android-arm': 0.15.18
'@esbuild/linux-loong64': 0.15.18
esbuild-android-64: 0.15.18
esbuild-android-arm64: 0.15.18
esbuild-darwin-64: 0.15.18
esbuild-darwin-arm64: 0.15.18
esbuild-freebsd-64: 0.15.18
esbuild-freebsd-arm64: 0.15.18
esbuild-linux-32: 0.15.18
esbuild-linux-64: 0.15.18
esbuild-linux-arm: 0.15.18
esbuild-linux-arm64: 0.15.18
esbuild-linux-mips64le: 0.15.18
esbuild-linux-ppc64le: 0.15.18
esbuild-linux-riscv64: 0.15.18
esbuild-linux-s390x: 0.15.18
esbuild-netbsd-64: 0.15.18
esbuild-openbsd-64: 0.15.18
esbuild-sunos-64: 0.15.18
esbuild-windows-32: 0.15.18
esbuild-windows-64: 0.15.18
esbuild-windows-arm64: 0.15.18
/esbuild/0.16.17:
resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
engines: {node: '>=12'}
@ -11796,7 +11551,6 @@ packages:
'@esbuild/win32-arm64': 0.16.17
'@esbuild/win32-ia32': 0.16.17
'@esbuild/win32-x64': 0.16.17
dev: true
/escalade/3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
@ -18417,20 +18171,12 @@ packages:
yargs: 17.6.2
dev: true
/rollup/2.79.1:
resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
/rollup/3.10.0:
resolution: {integrity: sha512-JmRYz44NjC1MjVF2VKxc0M1a97vn+cDxeqWmnwyAF4FvpjK8YFdHpaqvQB+3IxCvX05vJxKZkoMDU8TShhmJVA==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
dev: true
/rooks/5.14.1_biqbaboplfbrettd7655fr4n2y:
resolution: {integrity: sha512-ZldHmIdi6NM9zgGJlLbYrOcwvdadzX9RLw11KgfD4WuePMz7Dy50JHZzoPz9oCaKM5iTjAaBXZ3z7Gz9dvt2Hg==}
@ -20949,7 +20695,7 @@ packages:
vite: 4.0.4
dev: true
/vite-plugin-markdown/2.1.0_vite@3.2.5:
/vite-plugin-markdown/2.1.0_vite@4.0.4:
resolution: {integrity: sha512-eWLlrWzYZXEX3/HaXZo/KLjRpO72IUhbgaoFrbwB07ueXi6QfwqrgdZQfUcXTSofJCkN7GhErMC1K1RTAE0gGQ==}
peerDependencies:
vite: ^2.0.0 || ^3.0.0
@ -20957,14 +20703,14 @@ packages:
front-matter: 4.0.2
htmlparser2: 6.1.0
markdown-it: 12.3.2
vite: 3.2.5_ovmyjmuuyckt3r3gpaexj2onji
vite: 4.0.4_ovmyjmuuyckt3r3gpaexj2onji
dev: true
/vite-plugin-optimizer/1.4.2:
resolution: {integrity: sha512-UNQy+J31b+DeEc2NCxV+WIkwyYPWGPjYsnXO4+gM26CKY5KJ47JeRjchR11F3qfR8MWDX1+425LZfkUyXOfGFA==}
dev: true
/vite-plugin-ssr/0.4.70_vite@3.2.5:
/vite-plugin-ssr/0.4.70_vite@4.0.4:
resolution: {integrity: sha512-qcAqNss7phJnfK8QwT0KIotwvTuJLZhEA6jZiAYfS++HOLffEqUVSx620LfAr9j1H1MCoTwGd82zAbspOKnEHQ==}
engines: {node: '>=12.19.0'}
hasBin: true
@ -20983,22 +20729,9 @@ packages:
fast-glob: 3.2.12
picocolors: 1.0.0
sirv: 2.0.2
vite: 3.2.5_ovmyjmuuyckt3r3gpaexj2onji
vite: 4.0.4_ovmyjmuuyckt3r3gpaexj2onji
dev: false
/vite-plugin-svgr/2.4.0_vite@3.2.5:
resolution: {integrity: sha512-q+mJJol6ThvqkkJvvVFEndI4EaKIjSI0I3jNFgSoC9fXAz1M7kYTVUin8fhUsFojFDKZ9VHKtX6NXNaOLpbsHA==}
peerDependencies:
vite: ^2.6.0 || 3 || 4
dependencies:
'@rollup/pluginutils': 5.0.2
'@svgr/core': 6.5.1
vite: 3.2.5_ovmyjmuuyckt3r3gpaexj2onji
transitivePeerDependencies:
- rollup
- supports-color
dev: true
/vite-plugin-svgr/2.4.0_vite@4.0.4:
resolution: {integrity: sha512-q+mJJol6ThvqkkJvvVFEndI4EaKIjSI0I3jNFgSoC9fXAz1M7kYTVUin8fhUsFojFDKZ9VHKtX6NXNaOLpbsHA==}
peerDependencies:
@ -21012,20 +20745,6 @@ packages:
- supports-color
dev: true
/vite-tsconfig-paths/3.6.0_vite@3.2.5:
resolution: {integrity: sha512-UfsPYonxLqPD633X8cWcPFVuYzx/CMNHAjZTasYwX69sXpa4gNmQkR0XCjj82h7zhLGdTWagMjC1qfb9S+zv0A==}
peerDependencies:
vite: '>2.0.0-0'
dependencies:
debug: 4.3.4
globrex: 0.1.2
recrawl-sync: 2.2.3
tsconfig-paths: 4.1.2
vite: 3.2.5_ovmyjmuuyckt3r3gpaexj2onji
transitivePeerDependencies:
- supports-color
dev: true
/vite-tsconfig-paths/3.6.0_vite@4.0.4:
resolution: {integrity: sha512-UfsPYonxLqPD633X8cWcPFVuYzx/CMNHAjZTasYwX69sXpa4gNmQkR0XCjj82h7zhLGdTWagMjC1qfb9S+zv0A==}
peerDependencies:
@ -21035,7 +20754,7 @@ packages:
globrex: 0.1.2
recrawl-sync: 2.2.3
tsconfig-paths: 4.1.2
vite: 4.0.4
vite: 4.0.4_ovmyjmuuyckt3r3gpaexj2onji
transitivePeerDependencies:
- supports-color
dev: true
@ -21051,107 +20770,6 @@ packages:
- typescript
dev: true
/vite/3.2.5:
resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
'@types/node': '>= 14'
less: '*'
sass: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
dependencies:
esbuild: 0.15.18
postcss: 8.4.21
resolve: 1.22.1
rollup: 2.79.1
optionalDependencies:
fsevents: 2.3.2
dev: true
/vite/3.2.5_@types+node@18.11.18:
resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
'@types/node': '>= 14'
less: '*'
sass: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
dependencies:
'@types/node': 18.11.18
esbuild: 0.15.18
postcss: 8.4.21
resolve: 1.22.1
rollup: 2.79.1
optionalDependencies:
fsevents: 2.3.2
dev: true
/vite/3.2.5_ovmyjmuuyckt3r3gpaexj2onji:
resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
'@types/node': '>= 14'
less: '*'
sass: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
dependencies:
'@types/node': 18.11.18
esbuild: 0.15.18
postcss: 8.4.21
resolve: 1.22.1
rollup: 2.79.1
sass: 1.57.1
optionalDependencies:
fsevents: 2.3.2
/vite/4.0.4:
resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==}
engines: {node: ^14.18.0 || >=16.0.0}
@ -21185,6 +20803,74 @@ packages:
fsevents: 2.3.2
dev: true
/vite/4.0.4_@types+node@18.11.18:
resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
'@types/node': '>= 14'
less: '*'
sass: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
dependencies:
'@types/node': 18.11.18
esbuild: 0.16.17
postcss: 8.4.21
resolve: 1.22.1
rollup: 3.10.0
optionalDependencies:
fsevents: 2.3.2
dev: true
/vite/4.0.4_ovmyjmuuyckt3r3gpaexj2onji:
resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
'@types/node': '>= 14'
less: '*'
sass: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
dependencies:
'@types/node': 18.11.18
esbuild: 0.16.17
postcss: 8.4.21
resolve: 1.22.1
rollup: 3.10.0
sass: 1.57.1
optionalDependencies:
fsevents: 2.3.2
/vite/4.0.4_sass@1.57.1:
resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==}
engines: {node: ^14.18.0 || >=16.0.0}
@ -21217,7 +20903,6 @@ packages:
sass: 1.57.1
optionalDependencies:
fsevents: 2.3.2
dev: true
/vlq/1.0.1:
resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==}