测试新路由

This commit is contained in:
zhengw
2025-09-11 16:20:58 +08:00
parent 2417f801ec
commit e0fb27b796
25 changed files with 308 additions and 788 deletions

View File

@@ -1,68 +0,0 @@
<script context="module">
export const load = ({ route }) => ({
status: 404,
error: '[Routify] Page could not be found.',
props: { url: route.url },
})
const isDev = import.meta.env?.DEV
</script>
<script>
export let url
</script>
<!-- routify:meta inline=false -->
<!-- This file was created by Routify.
To customize the error page, create a catchall page
in the root of your project. Eg. [...404].svelte -->
<div class="four04">
<h1>404 - Page Not Found</h1>
<p>
The page <code>{url}</code> could not be found. Please check the URL or go back to
the <a href="/">homepage</a>.
</p>
{#if isDev}
<div>
<h5>Dev note:</h5>
<ul>
<li>
To customize this page, create a
<code>[...404].svelte</code> file in the root of your project.
</li>
<li>
You can copy this file from <code
>.routify/components/[...404].svelte</code
>.
</li>
<li>
Custom 404 files can be created at any level of your project. For
example, in <code>src/pages/blog/[...404].svelte</code>.
</li>
</ul>
</div>
{/if}
</div>
<style>
div {
display: flex;
align-items: center;
flex-direction: column;
text-align: center;
}
div.four04 > * {
margin-top: 1em;
}
ul {
padding: 0;
}
ul li {
opacity: 75%;
list-style-type: none;
padding: 0;
margin: 0;
}
</style>

View File

@@ -1,7 +0,0 @@
import { Router, createRouter } from '@roxi/routify'
import routes from './routes.default.js'
// remove previous routers to avoid bumping router names (/path => /1/path)
globalThis.__routify.reset()
export const router = createRouter({routes})
export { Router, routes }

View File

@@ -1,6 +0,0 @@
import * as module from '../src/App.svelte'
import { renderModule } from '@roxi/routify/tools/ssr5.js'
import { map } from './route-map.js'
export const render = url => renderModule(module, { url, routesMap: map })

View File

@@ -1,4 +0,0 @@
export const map = {
'default': () => import('./routes.default.js').then(m => m.default)
}

View File

@@ -1,144 +0,0 @@
// @ts-nocheck
export const routes = {
"meta": {},
"id": "_default",
"name": "",
"file": {
"path": "src/routes/_module.svelte",
"dir": "src/routes",
"base": "_module.svelte",
"ext": ".svelte",
"name": "_module"
},
"asyncModule": () => import('../src/routes/_module.svelte'),
"rootName": "default",
"routifyDir": import.meta.url,
"children": [
{
"meta": {
"dynamic": true,
"order": false,
"dynamicSpread": true,
"hideInMenu": true
},
"id": "_default_____404__svelte",
"name": "[...404]",
"file": {
"path": "src/routes/[...404].svelte",
"dir": "src/routes",
"base": "[...404].svelte",
"ext": ".svelte",
"name": "[...404]"
},
"asyncModule": () => import('../src/routes/[...404].svelte'),
"children": []
},
{
"meta": {
"isDefault": true,
"title": "主页",
"redirect": "/login"
},
"id": "_default_index_svelte",
"name": "index",
"file": {
"path": "src/routes/index.svelte",
"dir": "src/routes",
"base": "index.svelte",
"ext": ".svelte",
"name": "index"
},
"asyncModule": () => import('../src/routes/index.svelte'),
"children": []
},
{
"meta": {},
"id": "_default_login",
"name": "login",
"module": false,
"file": {
"path": "src/routes/login",
"dir": "src/routes",
"base": "login",
"ext": "",
"name": "login"
},
"children": [
{
"meta": {
"isDefault": true,
"title": "登录页面",
"hideInMenu": true,
"reset": true
},
"id": "_default_login_index_svelte",
"name": "index",
"file": {
"path": "src/routes/login/index.svelte",
"dir": "src/routes/login",
"base": "index.svelte",
"ext": ".svelte",
"name": "index"
},
"asyncModule": () => import('../src/routes/login/index.svelte'),
"children": []
}
]
},
{
"meta": {
"title": "订单管理"
},
"id": "_default_orders",
"name": "orders",
"file": {
"path": "src/routes/orders/_module.svelte",
"dir": "src/routes/orders",
"base": "_module.svelte",
"ext": ".svelte",
"name": "_module"
},
"asyncModule": () => import('../src/routes/orders/_module.svelte'),
"children": [
{
"meta": {
"isDefault": true,
"title": "订单管理",
"auth": "SF_XXX_2"
},
"id": "_default_orders_index_svelte",
"name": "index",
"file": {
"path": "src/routes/orders/index.svelte",
"dir": "src/routes/orders",
"base": "index.svelte",
"ext": ".svelte",
"name": "index"
},
"asyncModule": () => import('../src/routes/orders/index.svelte'),
"children": []
},
{
"meta": {
"title": "销售订单",
"auth": "SF_XXX_SAle"
},
"id": "_default_orders_sale_svelte",
"name": "sale",
"file": {
"path": "src/routes/orders/sale.svelte",
"dir": "src/routes/orders",
"base": "sale.svelte",
"ext": ".svelte",
"name": "sale"
},
"asyncModule": () => import('../src/routes/orders/sale.svelte'),
"children": []
}
]
}
]
}
export default routes

View File

@@ -1,18 +0,0 @@
import { appInstance, preloadUrl } from '@roxi/routify'
import { map } from './route-map.js'
appInstance.routeMaps = map
// We need to import the App module since a router is likely declared here. This saves us pre-creating the router in the preload step below.
import * as module from '../src/App.svelte'
const preloadPromise = Promise.all([
module.load?.(),
// PreloadUrl parses the url and preloads each url chunk in a router that matches its name. So for '/hello;widget=/world',
// it will preload '/hello' in the default router and '/world' in the 'widget' router.
// If the respective routers don't exist, preloadUrl will use routesMap to pre-create a router and match it with the url chunk.
preloadUrl({ routesMap: map })
])
export const app = preloadPromise.then(() => import('../src/main.js'))

View File

@@ -1,9 +1,9 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="zh-CN">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> <link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Vite + Svelte</title> <title>Vite + Svelte</title>
</head> </head>
<body> <body>

View File

@@ -25,7 +25,8 @@
"checkJs": true, "checkJs": true,
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {
"@/*": ["src/*"] "@/*": ["src/*"],
"*": ["node_modules/*"]
} }
}, },
/** /**

View File

@@ -28,8 +28,8 @@
] ]
}, },
"dependencies": { "dependencies": {
"@hvniel/svelte-router": "^0.0.2", "@zhengw513/js-tools": "^1.0.0",
"@roxi/routify": "3.0.0-next.293", "@zhengw513/svelte-router": "^0.0.12",
"axios": "^1.11.0", "axios": "^1.11.0",
"qs": "^6.14.0" "qs": "^6.14.0"
} }

438
pnpm-lock.yaml generated
View File

@@ -8,18 +8,21 @@ importers:
.: .:
dependencies: dependencies:
'@hvniel/svelte-router': '@zhengw513/js-tools':
specifier: ^0.0.2 specifier: ^1.0.0
version: 0.0.2(svelte@5.38.6) version: 1.0.0
'@roxi/routify': '@zhengw513/svelte-router':
specifier: 3.0.0-next.293 specifier: ^0.0.12
version: 3.0.0-next.293(@sveltejs/vite-plugin-svelte@6.1.4(svelte@5.38.6)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)))(dotenv-expand@10.0.0)(svelte@5.38.6)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)) version: 0.0.12(svelte@5.38.6)
axios: axios:
specifier: ^1.11.0 specifier: ^1.11.0
version: 1.11.0 version: 1.11.0
qs: qs:
specifier: ^6.14.0 specifier: ^6.14.0
version: 6.14.0 version: 6.14.0
svelte-router:
specifier: link:C:/Users/Administrator/AppData/Local/pnpm/global/5/node_modules/@zhengw513/svelte-router
version: link:C:/Users/Administrator/AppData/Local/pnpm/global/5/node_modules/@zhengw513/svelte-router
devDependencies: devDependencies:
'@sveltejs/vite-plugin-svelte': '@sveltejs/vite-plugin-svelte':
specifier: ^6.1.4 specifier: ^6.1.4
@@ -225,11 +228,6 @@ packages:
'@floating-ui/utils@0.2.10': '@floating-ui/utils@0.2.10':
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
'@hvniel/svelte-router@0.0.2':
resolution: {integrity: sha512-fSHCHh/Lwe+PFH40zoqTjDtryhwTj9gtyi3NY808IlglUkKV8MUOQKol+AVFfg22JL+9mjy99+lE9iQy1xLylg==}
peerDependencies:
svelte: ^5.0.0
'@isaacs/fs-minipass@4.0.1': '@isaacs/fs-minipass@4.0.1':
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
@@ -305,67 +303,56 @@ packages:
resolution: {integrity: sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ==} resolution: {integrity: sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm-musleabihf@4.48.1': '@rollup/rollup-linux-arm-musleabihf@4.48.1':
resolution: {integrity: sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q==} resolution: {integrity: sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-arm64-gnu@4.48.1': '@rollup/rollup-linux-arm64-gnu@4.48.1':
resolution: {integrity: sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ==} resolution: {integrity: sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm64-musl@4.48.1': '@rollup/rollup-linux-arm64-musl@4.48.1':
resolution: {integrity: sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ==} resolution: {integrity: sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-loongarch64-gnu@4.48.1': '@rollup/rollup-linux-loongarch64-gnu@4.48.1':
resolution: {integrity: sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ==} resolution: {integrity: sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ==}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-ppc64-gnu@4.48.1': '@rollup/rollup-linux-ppc64-gnu@4.48.1':
resolution: {integrity: sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ==} resolution: {integrity: sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-gnu@4.48.1': '@rollup/rollup-linux-riscv64-gnu@4.48.1':
resolution: {integrity: sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw==} resolution: {integrity: sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-musl@4.48.1': '@rollup/rollup-linux-riscv64-musl@4.48.1':
resolution: {integrity: sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA==} resolution: {integrity: sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-s390x-gnu@4.48.1': '@rollup/rollup-linux-s390x-gnu@4.48.1':
resolution: {integrity: sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ==} resolution: {integrity: sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.48.1': '@rollup/rollup-linux-x64-gnu@4.48.1':
resolution: {integrity: sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA==} resolution: {integrity: sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-musl@4.48.1': '@rollup/rollup-linux-x64-musl@4.48.1':
resolution: {integrity: sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg==} resolution: {integrity: sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-win32-arm64-msvc@4.48.1': '@rollup/rollup-win32-arm64-msvc@4.48.1':
resolution: {integrity: sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ==} resolution: {integrity: sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ==}
@@ -382,23 +369,6 @@ packages:
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@roxi/routify@3.0.0-next.293':
resolution: {integrity: sha512-hF3LT8bTh6/o9djgggkJlVVjK9pBy9Hq8R+gLi2+qK4FUoHdqZtx1NAzb98g8B8SAwfYxYr8bhSch51QiAeheA==}
hasBin: true
peerDependencies:
'@sveltejs/vite-plugin-svelte': ^2.4.6 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
dotenv-expand: ^8.0.0 || ^9.0.0 || ^10.0.0
spank: ^2.0.0
svelte: ^3.0.0 || ^4.0.0 || ^5.0.0
vite: ^3.2.4 || ^4.0.0 || ^5.0.0 || ^6.0.0
peerDependenciesMeta:
'@sveltejs/vite-plugin-svelte':
optional: true
spank:
optional: true
vite:
optional: true
'@sveltejs/acorn-typescript@1.0.5': '@sveltejs/acorn-typescript@1.0.5':
resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==} resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==}
peerDependencies: peerDependencies:
@@ -487,28 +457,24 @@ packages:
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@tailwindcss/oxide-linux-arm64-musl@4.1.12': '@tailwindcss/oxide-linux-arm64-musl@4.1.12':
resolution: {integrity: sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==} resolution: {integrity: sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@tailwindcss/oxide-linux-x64-gnu@4.1.12': '@tailwindcss/oxide-linux-x64-gnu@4.1.12':
resolution: {integrity: sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==} resolution: {integrity: sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@tailwindcss/oxide-linux-x64-musl@4.1.12': '@tailwindcss/oxide-linux-x64-musl@4.1.12':
resolution: {integrity: sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==} resolution: {integrity: sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@tailwindcss/oxide-wasm32-wasi@4.1.12': '@tailwindcss/oxide-wasm32-wasi@4.1.12':
resolution: {integrity: sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==} resolution: {integrity: sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==}
@@ -560,6 +526,14 @@ packages:
'@yr/monotone-cubic-spline@1.0.3': '@yr/monotone-cubic-spline@1.0.3':
resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==}
'@zhengw513/js-tools@1.0.0':
resolution: {integrity: sha512-hTafQUv5E0KHfsvNYVEq5U7c23/u9vORgMJiZ44ZCE8o440pQxcCf3fpLE4TTcXJuxHYSvztBfQ2PSEfpB9Z9Q==}
'@zhengw513/svelte-router@0.0.12':
resolution: {integrity: sha512-D3hExAVJbixbZTwYXmkGFPW8+meUDMyrXNqahLBWmQHtYl7IoFz1ZLK55DNxmAAHBOPJW8WwipX2DWI5x6uW9g==}
peerDependencies:
svelte: ^5.0.0
acorn@8.15.0: acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
@@ -582,12 +556,6 @@ packages:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
cachewrap@0.0.1:
resolution: {integrity: sha512-MumTMQ26KmLvWKnECZvoX+7tVGNOplDL4ls1z+xLkpZKCjuvv4t6QvrpqcsCAPfHoqerz0FEfWa6KXVHYylbJA==}
call-bind-apply-helpers@1.0.2: call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@@ -596,17 +564,6 @@ packages:
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
cheap-watch@1.0.4:
resolution: {integrity: sha512-QR/9FrtRL5fjfUJBhAKCdi0lSRQ3rVRRum3GF9wDKp2TJbEIMGhUEr2yU8lORzm9Isdjx7/k9S0DFDx+z5VGtw==}
engines: {node: '>=8'}
cheerio-select@2.1.0:
resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
cheerio@1.1.2:
resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==}
engines: {node: '>=20.18.1'}
chownr@3.0.0: chownr@3.0.0:
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
engines: {node: '>=18'} engines: {node: '>=18'}
@@ -619,35 +576,11 @@ packages:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
commander@7.2.0:
resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
engines: {node: '>= 10'}
compute-scroll-into-view@3.1.1:
resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==}
configent@3.0.0:
resolution: {integrity: sha512-rRHuq5ZP/J57RkD/ZKQypK+h//ocfKgddfyaKPRa8D4BjIX5egnbcGSUv173+LPhVGGc+gDotqf08muw3EdujA==}
consolite@0.3.12:
resolution: {integrity: sha512-bll77gpKp234MGTBctDzayyUpuRH3RR0OlUa4sAzpifuTS+6X8WoyS2gm/udVYoPLBzt10Q8W91NcQYXBNULoA==}
css-select@5.2.2:
resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
css-what@6.2.2:
resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
engines: {node: '>= 6'}
cssesc@3.0.0: cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'} engines: {node: '>=4'}
hasBin: true hasBin: true
data-uri-to-buffer@4.0.1:
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
engines: {node: '>= 12'}
date-fns@4.1.0: date-fns@4.1.0:
resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
@@ -672,46 +605,14 @@ packages:
resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
engines: {node: '>=8'} engines: {node: '>=8'}
dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
domhandler@5.0.3:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'}
domutils@3.2.2:
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
dotenv-expand@10.0.0:
resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==}
engines: {node: '>=12'}
dotenv@16.6.1:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
dunder-proto@1.0.1: dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
encoding-sniffer@0.2.1:
resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==}
enhanced-resolve@5.18.3: enhanced-resolve@5.18.3:
resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
entities@6.0.1:
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
es-define-property@1.0.1: es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@@ -736,10 +637,6 @@ packages:
esm-env@1.2.2: esm-env@1.2.2:
resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
esm@3.2.25:
resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==}
engines: {node: '>=6'}
esrap@2.1.0: esrap@2.1.0:
resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==} resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==}
@@ -755,10 +652,6 @@ packages:
picomatch: picomatch:
optional: true optional: true
fetch-blob@3.2.0:
resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
engines: {node: ^12.20 || >= 14.13}
flowbite-datepicker@1.3.2: flowbite-datepicker@1.3.2:
resolution: {integrity: sha512-6Nfm0MCVX3mpaR7YSCjmEO2GO8CDt6CX8ZpQnGdeu03WUCWtEPQ/uy0PUiNtIJjJZWnX0Cm3H55MOhbD1g+E/g==} resolution: {integrity: sha512-6Nfm0MCVX3mpaR7YSCjmEO2GO8CDt6CX8ZpQnGdeu03WUCWtEPQ/uy0PUiNtIJjJZWnX0Cm3H55MOhbD1g+E/g==}
@@ -792,14 +685,6 @@ packages:
resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
formdata-polyfill@4.0.10:
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
engines: {node: '>=12.20.0'}
fs-extra@10.1.0:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
engines: {node: '>=12'}
fsevents@2.3.3: fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -835,16 +720,6 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
hookar@0.0.7:
resolution: {integrity: sha512-4qiFw9WIMM6ft82CalpWaEkBAzoL3Dw7xB7eLlC9P64Mx/SaHTLqWQTfLkGe6r5ERE4iTbVDCTsKLQuK1YTr3A==}
htmlparser2@10.0.0:
resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==}
iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
is-core-module@2.16.1: is-core-module@2.16.1:
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@@ -859,17 +734,6 @@ packages:
resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==}
hasBin: true hasBin: true
jsonfile@6.2.0:
resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
kleur@4.1.5:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
lightningcss-darwin-arm64@1.30.1: lightningcss-darwin-arm64@1.30.1:
resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
@@ -899,28 +763,24 @@ packages:
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
lightningcss-linux-arm64-musl@1.30.1: lightningcss-linux-arm64-musl@1.30.1:
resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
lightningcss-linux-x64-gnu@1.30.1: lightningcss-linux-x64-gnu@1.30.1:
resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
lightningcss-linux-x64-musl@1.30.1: lightningcss-linux-x64-musl@1.30.1:
resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
lightningcss-win32-arm64-msvc@1.30.1: lightningcss-win32-arm64-msvc@1.30.1:
resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
@@ -990,37 +850,13 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true hasBin: true
node-domexception@1.0.0:
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
engines: {node: '>=10.5.0'}
deprecated: Use your platform's native DOMException instead
node-fetch@3.3.2:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
object-inspect@1.13.4: object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
parse5-htmlparser2-tree-adapter@7.1.0:
resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
parse5-parser-stream@7.1.2:
resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==}
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
path-parse@1.0.7: path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
persistable@0.1.2:
resolution: {integrity: sha512-MBOfOEnD9SbHbhpwpqyF1I46Ae9Et3PBxWDBI3Ro5NfSa2761CPzLKcfhlcvanmhAgHJpCGmsuCnP3+wDC/2Ug==}
picocolors@1.1.1: picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -1036,10 +872,6 @@ packages:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14} engines: {node: ^10 || ^12 || >=14}
prompts@2.4.2:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
proxy-from-env@1.1.0: proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
@@ -1057,12 +889,6 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'} engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true hasBin: true
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
scroll-into-view-if-needed@3.1.0:
resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==}
side-channel-list@1.0.0: side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@@ -1079,9 +905,6 @@ packages:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
source-map-js@1.2.1: source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@@ -1130,14 +953,6 @@ packages:
undici-types@7.10.0: undici-types@7.10.0:
resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==}
undici@7.15.0:
resolution: {integrity: sha512-7oZJCPvvMvTd0OlqWsIxTuItTpJBpU1tcbVl24FMn3xt3+VSunwUasmfPJRE57oNO1KsZ4PgA1xTdAX4hq8NyQ==}
engines: {node: '>=20.18.1'}
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
util-deprecate@1.0.2: util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -1189,18 +1004,6 @@ packages:
vite: vite:
optional: true optional: true
web-streams-polyfill@3.3.3:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
whatwg-encoding@3.1.1:
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
engines: {node: '>=18'}
whatwg-mimetype@4.0.0:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
yallist@5.0.0: yallist@5.0.0:
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
engines: {node: '>=18'} engines: {node: '>=18'}
@@ -1299,10 +1102,6 @@ snapshots:
'@floating-ui/utils@0.2.10': {} '@floating-ui/utils@0.2.10': {}
'@hvniel/svelte-router@0.0.2(svelte@5.38.6)':
dependencies:
svelte: 5.38.6
'@isaacs/fs-minipass@4.0.1': '@isaacs/fs-minipass@4.0.1':
dependencies: dependencies:
minipass: 7.1.2 minipass: 7.1.2
@@ -1406,27 +1205,6 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.48.1': '@rollup/rollup-win32-x64-msvc@4.48.1':
optional: true optional: true
'@roxi/routify@3.0.0-next.293(@sveltejs/vite-plugin-svelte@6.1.4(svelte@5.38.6)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)))(dotenv-expand@10.0.0)(svelte@5.38.6)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))':
dependencies:
cachewrap: 0.0.1
cheap-watch: 1.0.4
cheerio: 1.1.2
commander: 7.2.0
configent: 3.0.0
consolite: 0.3.12
dotenv-expand: 10.0.0
fs-extra: 10.1.0
hookar: 0.0.7
kleur: 4.1.5
node-fetch: 3.3.2
persistable: 0.1.2
prompts: 2.4.2
scroll-into-view-if-needed: 3.1.0
svelte: 5.38.6
optionalDependencies:
'@sveltejs/vite-plugin-svelte': 6.1.4(svelte@5.38.6)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))
vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)
'@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)': '@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)':
dependencies: dependencies:
acorn: 8.15.0 acorn: 8.15.0
@@ -1565,6 +1343,13 @@ snapshots:
'@yr/monotone-cubic-spline@1.0.3': {} '@yr/monotone-cubic-spline@1.0.3': {}
'@zhengw513/js-tools@1.0.0': {}
'@zhengw513/svelte-router@0.0.12(svelte@5.38.6)':
dependencies:
'@zhengw513/js-tools': 1.0.0
svelte: 5.38.6
acorn@8.15.0: {} acorn@8.15.0: {}
apexcharts@5.3.4: apexcharts@5.3.4:
@@ -1590,10 +1375,6 @@ snapshots:
axobject-query@4.1.0: {} axobject-query@4.1.0: {}
boolbase@1.0.0: {}
cachewrap@0.0.1: {}
call-bind-apply-helpers@1.0.2: call-bind-apply-helpers@1.0.2:
dependencies: dependencies:
es-errors: 1.3.0 es-errors: 1.3.0
@@ -1604,31 +1385,6 @@ snapshots:
call-bind-apply-helpers: 1.0.2 call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.3.0 get-intrinsic: 1.3.0
cheap-watch@1.0.4: {}
cheerio-select@2.1.0:
dependencies:
boolbase: 1.0.0
css-select: 5.2.2
css-what: 6.2.2
domelementtype: 2.3.0
domhandler: 5.0.3
domutils: 3.2.2
cheerio@1.1.2:
dependencies:
cheerio-select: 2.1.0
dom-serializer: 2.0.0
domhandler: 5.0.3
domutils: 3.2.2
encoding-sniffer: 0.2.1
htmlparser2: 10.0.0
parse5: 7.3.0
parse5-htmlparser2-tree-adapter: 7.1.0
parse5-parser-stream: 7.1.2
undici: 7.15.0
whatwg-mimetype: 4.0.0
chownr@3.0.0: {} chownr@3.0.0: {}
clsx@2.1.1: {} clsx@2.1.1: {}
@@ -1637,31 +1393,8 @@ snapshots:
dependencies: dependencies:
delayed-stream: 1.0.0 delayed-stream: 1.0.0
commander@7.2.0: {}
compute-scroll-into-view@3.1.1: {}
configent@3.0.0:
dependencies:
dotenv: 16.6.1
esm: 3.2.25
consolite@0.3.12: {}
css-select@5.2.2:
dependencies:
boolbase: 1.0.0
css-what: 6.2.2
domhandler: 5.0.3
domutils: 3.2.2
nth-check: 2.1.1
css-what@6.2.2: {}
cssesc@3.0.0: {} cssesc@3.0.0: {}
data-uri-to-buffer@4.0.1: {}
date-fns@4.1.0: {} date-fns@4.1.0: {}
debug@4.4.1: debug@4.4.1:
@@ -1674,48 +1407,17 @@ snapshots:
detect-libc@2.0.4: {} detect-libc@2.0.4: {}
dom-serializer@2.0.0:
dependencies:
domelementtype: 2.3.0
domhandler: 5.0.3
entities: 4.5.0
domelementtype@2.3.0: {}
domhandler@5.0.3:
dependencies:
domelementtype: 2.3.0
domutils@3.2.2:
dependencies:
dom-serializer: 2.0.0
domelementtype: 2.3.0
domhandler: 5.0.3
dotenv-expand@10.0.0: {}
dotenv@16.6.1: {}
dunder-proto@1.0.1: dunder-proto@1.0.1:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.2 call-bind-apply-helpers: 1.0.2
es-errors: 1.3.0 es-errors: 1.3.0
gopd: 1.2.0 gopd: 1.2.0
encoding-sniffer@0.2.1:
dependencies:
iconv-lite: 0.6.3
whatwg-encoding: 3.1.1
enhanced-resolve@5.18.3: enhanced-resolve@5.18.3:
dependencies: dependencies:
graceful-fs: 4.2.11 graceful-fs: 4.2.11
tapable: 2.2.3 tapable: 2.2.3
entities@4.5.0: {}
entities@6.0.1: {}
es-define-property@1.0.1: {} es-define-property@1.0.1: {}
es-errors@1.3.0: {} es-errors@1.3.0: {}
@@ -1762,8 +1464,6 @@ snapshots:
esm-env@1.2.2: {} esm-env@1.2.2: {}
esm@3.2.25: {}
esrap@2.1.0: esrap@2.1.0:
dependencies: dependencies:
'@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/sourcemap-codec': 1.5.5
@@ -1774,11 +1474,6 @@ snapshots:
optionalDependencies: optionalDependencies:
picomatch: 4.0.3 picomatch: 4.0.3
fetch-blob@3.2.0:
dependencies:
node-domexception: 1.0.0
web-streams-polyfill: 3.3.3
flowbite-datepicker@1.3.2(rollup@4.48.1): flowbite-datepicker@1.3.2(rollup@4.48.1):
dependencies: dependencies:
'@rollup/plugin-node-resolve': 15.3.1(rollup@4.48.1) '@rollup/plugin-node-resolve': 15.3.1(rollup@4.48.1)
@@ -1834,16 +1529,6 @@ snapshots:
hasown: 2.0.2 hasown: 2.0.2
mime-types: 2.1.35 mime-types: 2.1.35
formdata-polyfill@4.0.10:
dependencies:
fetch-blob: 3.2.0
fs-extra@10.1.0:
dependencies:
graceful-fs: 4.2.11
jsonfile: 6.2.0
universalify: 2.0.1
fsevents@2.3.3: fsevents@2.3.3:
optional: true optional: true
@@ -1881,19 +1566,6 @@ snapshots:
dependencies: dependencies:
function-bind: 1.1.2 function-bind: 1.1.2
hookar@0.0.7: {}
htmlparser2@10.0.0:
dependencies:
domelementtype: 2.3.0
domhandler: 5.0.3
domutils: 3.2.2
entities: 6.0.1
iconv-lite@0.6.3:
dependencies:
safer-buffer: 2.1.2
is-core-module@2.16.1: is-core-module@2.16.1:
dependencies: dependencies:
hasown: 2.0.2 hasown: 2.0.2
@@ -1906,16 +1578,6 @@ snapshots:
jiti@2.5.1: {} jiti@2.5.1: {}
jsonfile@6.2.0:
dependencies:
universalify: 2.0.1
optionalDependencies:
graceful-fs: 4.2.11
kleur@3.0.3: {}
kleur@4.1.5: {}
lightningcss-darwin-arm64@1.30.1: lightningcss-darwin-arm64@1.30.1:
optional: true optional: true
@@ -1995,37 +1657,10 @@ snapshots:
nanoid@3.3.11: {} nanoid@3.3.11: {}
node-domexception@1.0.0: {}
node-fetch@3.3.2:
dependencies:
data-uri-to-buffer: 4.0.1
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
nth-check@2.1.1:
dependencies:
boolbase: 1.0.0
object-inspect@1.13.4: {} object-inspect@1.13.4: {}
parse5-htmlparser2-tree-adapter@7.1.0:
dependencies:
domhandler: 5.0.3
parse5: 7.3.0
parse5-parser-stream@7.1.2:
dependencies:
parse5: 7.3.0
parse5@7.3.0:
dependencies:
entities: 6.0.1
path-parse@1.0.7: {} path-parse@1.0.7: {}
persistable@0.1.2: {}
picocolors@1.1.1: {} picocolors@1.1.1: {}
picomatch@4.0.3: {} picomatch@4.0.3: {}
@@ -2041,11 +1676,6 @@ snapshots:
picocolors: 1.1.1 picocolors: 1.1.1
source-map-js: 1.2.1 source-map-js: 1.2.1
prompts@2.4.2:
dependencies:
kleur: 3.0.3
sisteransi: 1.0.5
proxy-from-env@1.1.0: {} proxy-from-env@1.1.0: {}
qs@6.14.0: qs@6.14.0:
@@ -2084,12 +1714,6 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.48.1 '@rollup/rollup-win32-x64-msvc': 4.48.1
fsevents: 2.3.3 fsevents: 2.3.3
safer-buffer@2.1.2: {}
scroll-into-view-if-needed@3.1.0:
dependencies:
compute-scroll-into-view: 3.1.1
side-channel-list@1.0.0: side-channel-list@1.0.0:
dependencies: dependencies:
es-errors: 1.3.0 es-errors: 1.3.0
@@ -2118,8 +1742,6 @@ snapshots:
side-channel-map: 1.0.1 side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2 side-channel-weakmap: 1.0.2
sisteransi@1.0.5: {}
source-map-js@1.2.1: {} source-map-js@1.2.1: {}
supports-preserve-symlinks-flag@1.0.0: {} supports-preserve-symlinks-flag@1.0.0: {}
@@ -2173,10 +1795,6 @@ snapshots:
undici-types@7.10.0: {} undici-types@7.10.0: {}
undici@7.15.0: {}
universalify@2.0.1: {}
util-deprecate@1.0.2: {} util-deprecate@1.0.2: {}
vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1): vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1):
@@ -2197,14 +1815,6 @@ snapshots:
optionalDependencies: optionalDependencies:
vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1) vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)
web-streams-polyfill@3.3.3: {}
whatwg-encoding@3.1.1:
dependencies:
iconv-lite: 0.6.3
whatwg-mimetype@4.0.0: {}
yallist@5.0.0: {} yallist@5.0.0: {}
zimmerframe@1.1.2: {} zimmerframe@1.1.2: {}

View File

@@ -1,73 +1,34 @@
<!-- <script lang="ts"> <script lang="ts">
import "./app.css"; import AppLayout from '@/layouts/AppLayout.svelte';
import Error from "./layouts/Error.svelte"; import { Toaster } from 'svelte-hot-french-toast';
import About from "./pages/About.svelte"; import AppLayout2 from './layouts/AppLayout2.svelte';
import Home from "./pages/Home.svelte"; import Home from './pages/Home.svelte';
import Router from './router/Router.svelte';
import type { IRouteItem } from './router/types';
import { createHashRouter, RouterProvider } from "@hvniel/svelte-router"; const routes: IRouteItem[] = [
import AppLayout from "./layouts/AppLayout.svelte";
import User, { userLoader } from "./pages/User.svelte";
const router = createHashRouter([
{ {
// path: "/home", path: '/home',
Component: AppLayout, component: AppLayout,
redirect: '#/home/index',
children: [ children: [
{ { path: '/index', component: Home },
index: true, { path: '/user', component: () => import('@/pages/User.svelte') },
Component: Home,
},
// {
// path: "/home",
// index: true,
// Component: Home,
// },
{
path: "/user",
index: true,
Component: User,
loader: userLoader,
},
{
path: "/about",
index: true,
Component: About,
},
{
path: "*",
Component: Error,
},
], ],
}, },
{ {
path: "*", path: '/about',
Component: Error, component: AppLayout2,
redirect: '#/about/index',
children: [{ path: '/index', component: () => import('@/pages/About.svelte') }],
}, },
]); {
path: '/*',
component: AppLayout,
children: [{ path: '/index', component: () => import('@/pages/Error.svelte') }],
},
];
</script> </script>
<RouterProvider {router} /> --> <Router {routes} />
<Toaster position={'top-end'} />
<script context="module">
import { Router, createRouter } from "@roxi/routify";
import { Toaster } from "svelte-hot-french-toast";
import routes from "../.routify/routes.default.js";
export const router = createRouter({
routes,
urlRewrite: {
toExternal: (url) => `#${url}`, // prepend URLs with #
toInternal: (url) => url.replace(/^.+#/, ""), // remove leading #
},
beforeUrlChange({ route }) {
// console.log(route);
const { meta } = route;
// console.log(meta);
document.title = meta["title"] || "";
return true;
},
});
</script>
<Router {router} />
<Toaster position={"top-end"} />

View File

@@ -1,17 +1,24 @@
<script lang="ts"> <script lang="ts">
import { Outlet, useNavigate } from "@hvniel/svelte-router"; import { navigate } from '@/router/routerUtils';
import { Button } from "flowbite-svelte"; import { Button } from 'flowbite-svelte';
const navigate = useNavigate(); import Link from '../router/Link.svelte';
import Outlet from '../router/Outlet.svelte';
import { useSearchParams } from '../router/routerUtils';
console.log('useSearchParams', useSearchParams());
</script> </script>
<div class="layout"> <div class="layout">
<header>header</header> <header>header {Date.now()}</header>
<main> <main>
<!-- <Link to="/home">Home</Link> <!-- <Link to="/home">Home</Link>
<Link to="/about">About</Link> --> <Link to="/about">About</Link> -->
<Button onclick={() => navigate("/user")}>User</Button> <Button onclick={() => navigate('/home/index')}>home</Button>
<Button onclick={() => navigate("/about")}>About</Button> <Button onclick={() => navigate('/home/user')}>user</Button>
<Button onclick={() => navigate('/about/index')}>About</Button>
<Button onclick={() => navigate('https://baidu.com')}>百度</Button>
<Link href="https://baidu.com">谷歌</Link>
<Outlet /> <Outlet />
</main> </main>
<footer>© 2024</footer> <footer>© 2024111</footer>
</div> </div>

View File

@@ -0,0 +1,20 @@
<script lang="ts">
import Link from '@/router/Link.svelte';
import Outlet from '@/router/Outlet.svelte';
import { navigate } from '@/router/routerUtils';
import { Button } from 'flowbite-svelte';
</script>
<div class="layout">
<header>AppLayout2 {Date.now()}</header>
<main>
<!-- <Link to="/home">Home</Link>
<Link to="/about">About</Link> -->
<Button onclick={() => navigate('/home/index')}>home1</Button>
<Button onclick={() => navigate('/home/user')}>user2</Button>
<Button onclick={() => navigate('/about/index')}>About</Button>
<Link href="/home/index">aaaaa</Link>
<Outlet />
</main>
<footer>© 2024111</footer>
</div>

View File

@@ -1 +0,0 @@
<main>Error</main>

View File

@@ -1,7 +1,4 @@
<script> <script>
import { Link } from "@hvniel/svelte-router";
console.log("About");
</script> </script>
<main>About Page</main> <main>About Page</main>
<Link to="/home/index">to Home</Link>

1
src/pages/Error.svelte Normal file
View File

@@ -0,0 +1 @@
<p>Error</p>

View File

@@ -1,17 +1,34 @@
<script lang="ts"> <script lang="ts">
import { Link } from "@hvniel/svelte-router"; import { Button } from 'flowbite-svelte';
import { onDestroy, onMount } from 'svelte';
// import { useSearchParams } from 'svelte-router';
// const searchParams = useSearchParams();
// console.log('searchParams', searchParams);
let count = $state(0); let count = $state(0);
let open = $state(false); // let open = $state(false);
const increment = () => { // const increment = () => {
count += 1; // count += 1;
open = !open; // open = !open;
}; // };
console.log("Home"); // console.log("Home");
onMount(() => {
console.log('home mount');
});
onDestroy(() => {
console.log('home onDestroy');
});
</script> </script>
<main>Home Page</main> <main>Home Page</main>
<Link to="/home/about">to About</Link> <Button
onclick={() => {
count += 1;
}}>{count}</Button
>
<!-- <Link to="/home/about">to About</Link> -->
<!-- <Button onclick={increment} color="blue" size="xs">Default {count}</Button> <!-- <Button onclick={increment} color="blue" size="xs">Default {count}</Button>
<Modal <Modal

View File

@@ -7,13 +7,13 @@
</script> </script>
<script lang="ts"> <script lang="ts">
import { useLoaderData, useSearchParams } from "@hvniel/svelte-router"; // import { useLoaderData, useSearchParams } from "@hvniel/svelte-router";
let a = $state(0); // let a = $state(0);
const params = useSearchParams(); // const params = useSearchParams();
console.log(JSON.stringify(params)); // console.log(JSON.stringify(params));
const data = useLoaderData<typeof userLoader>(); // const data = useLoaderData<typeof userLoader>();
console.log("data", data); // console.log("data", data);
</script> </script>
<p>User {a} {data?.name}</p> <p>User</p>

7
src/router/Link.svelte Normal file
View File

@@ -0,0 +1,7 @@
<script lang="ts">
import { urlFormat } from './routerUtils';
const props = $props<{ href: string; children?: any }>();
</script>
<a href={urlFormat(props.href)}>{@render props.children?.()}</a>

3
src/router/Outlet.svelte Normal file
View File

@@ -0,0 +1,3 @@
<script lang="ts"></script>
<div style="display: contents;" id="Outlet"></div>

119
src/router/Router.svelte Normal file
View File

@@ -0,0 +1,119 @@
<script lang="ts">
import { mount, onDestroy, onMount, unmount } from 'svelte';
import type { IRouteItem, IRouteItemChild } from './types';
const { routes } = $props<{ routes: IRouteItem[] }>();
let routesObj: any = {};
let redirectObj: any = {};
const routerUnmount: any = { layout: undefined, outlet: undefined };
let layout = $state<any>();
routes.forEach((el: IRouteItem) => {
const key = '#' + el.path;
redirectObj[key] = {
redirect: el.redirect,
};
el.children.forEach((ell: IRouteItemChild) => {
if (el.path == '/*') {
const key = '#' + el.path;
routesObj[key] = {
layout: el.component,
children: ell.component,
};
} else {
const key = '#' + el.path + ell.path;
routesObj[key] = {
layout: el.component,
children: ell.component,
};
}
});
});
const renderComponent = async (hashStr: string) => {
let hash = hashStr.endsWith('/') ? hashStr.substring(0, hashStr.length - 1) : hashStr;
if (hash.includes('?')) {
hash = hash.substring(0, hash.indexOf('?'));
}
// console.log("hash", hash);
if (routesObj[hash]) {
if (layout != routesObj[hash].layout) {
if (routerUnmount.layout) {
await unmount(routerUnmount.layout);
}
layout = routesObj[hash].layout;
routerUnmount.layout = mount(layout, {
target: document.getElementById('Router'),
});
}
if (routerUnmount.outlet) {
await unmount(routerUnmount.outlet, { outro: true });
}
const r = routesObj[hash].children;
// ! 判断 component
const fnSource = r.toString().replace(/\s+/g, '');
const importReg = /^\(\)\=>import\(.*\)$|^async\(\)\=>import\(.*\)$/;
let component: any;
if (typeof r == 'function' && importReg.test(fnSource)) {
const componentModule = await r();
component = componentModule.default;
} else {
component = r;
}
routerUnmount.outlet = mount(component, {
target: document.getElementById('Outlet'),
});
} else if (redirectObj[hash]) {
if (redirectObj[hash].redirect) {
// console.log(redirectObj[hash].redirect);
location.hash = redirectObj[hash].redirect;
} else {
if (redirectObj['#/*']) {
renderComponent('#/*');
}
}
} else {
if (redirectObj['#/*']) {
renderComponent('#/*');
}
}
};
onMount(async () => {
// console.log("routesObj", routesObj);
// !初次渲染路由
const key = Object.keys(routesObj);
if (!location.hash) {
// 替换默认地址
window.history.replaceState({}, '', key[0]);
}
await renderComponent(location.hash || key[0]);
window.addEventListener('hashchange', async () => {
// console.log("hashchange");
// !url改变时渲染路由
const hash = location.hash;
await renderComponent(hash);
});
});
onDestroy(() => {
console.log('onDestroy1111');
if (routerUnmount.layout) {
unmount(routerUnmount.layout);
}
if (routerUnmount.outlet) {
unmount(routerUnmount.outlet, { outro: true });
}
routerUnmount.layout = undefined;
routerUnmount.outlet = undefined;
});
</script>
<div style="display: contents;" id="Router"></div>

21
src/router/routerUtils.ts Normal file
View File

@@ -0,0 +1,21 @@
import { toStringAndTrim } from '@zhengw513/js-tools';
/** 路由导航 */
export const navigate = (path: string) => {
location.hash = urlFormat(path);
};
export const urlFormat = (path: string) => {
const url = toStringAndTrim(path);
if (url.startsWith('http') || url.startsWith('blob')) {
return url;
}
return `#${url}`;
};
export const useSearchParams = () => {
const hash = location.hash;
const index = hash.indexOf('?');
const searchParams = index >= 0 ? hash.substring(index) : '';
return new URLSearchParams(searchParams);
};

15
src/router/types.ts Normal file
View File

@@ -0,0 +1,15 @@
export interface IRouteItemChild {
path: string;
component: any;
meta?: {
title?: string;
[key: string]: any;
};
}
export interface IRouteItem {
path: string;
component: any;
redirect?: string;
children: IRouteItemChild[];
}

View File

@@ -1,22 +1,22 @@
<script lang="ts"> <script lang="ts">
import { post } from "@/utils/http"; import { post } from '@/utils/http';
import { goto } from "@roxi/routify"; import { goto } from '@roxi/routify';
import { Button, Input } from "flowbite-svelte"; import { Button, Input } from 'flowbite-svelte';
import toast from "svelte-hot-french-toast"; import toast from 'svelte-hot-french-toast';
$goto; // manually initialize the helper $goto; // manually initialize the helper
const userInfo = $state({ const userInfo = $state({
login_name: "zhengw", login_name: 'zhengw',
password: "123456", password: '123456',
login_type: 1, login_type: 1,
}); });
const login = () => { const login = () => {
post("/Users/login", userInfo).then((res) => { post('/Users/login', userInfo).then((res) => {
if (res.err_code == 0) { if (res.err_code == 0) {
toast.success("登录成功"); toast.success('登录成功');
$goto("/"); $goto('/');
} else { } else {
toast.error(`${res.err_code}: ${res.err_code}`); toast.error(`${res.err_code}: ${res.err_code}`);
} }
@@ -31,24 +31,13 @@
<div class="login-box"> <div class="login-box">
<div>后台登录</div> <div>后台登录</div>
<div> <div>
<Input <Input size="lg" placeholder="Large input" bind:value={userInfo.login_name} />
size="lg"
placeholder="Large input"
bind:value={userInfo.login_name}
/>
</div> </div>
<div> <div>
<Input <Input size="lg" type="password" placeholder="Large input" bind:value={userInfo.password} />
size="lg"
type="password"
placeholder="Large input"
bind:value={userInfo.password}
/>
</div> </div>
<div> <div>
<Button size="lg" style="display: block;width: 100%;" onclick={login} <Button size="lg" style="display: block;width: 100%;" onclick={login}>登录</Button>
>登录</Button
>
</div> </div>
</div> </div>
</main> </main>

View File

@@ -1,4 +1,4 @@
import routify from "@roxi/routify/vite-plugin"; // import routify from "@roxi/routify/vite-plugin";
import { svelte } from "@sveltejs/vite-plugin-svelte"; import { svelte } from "@sveltejs/vite-plugin-svelte";
import tailwindcss from "@tailwindcss/vite"; import tailwindcss from "@tailwindcss/vite";
import path from "node:path"; import path from "node:path";
@@ -9,14 +9,14 @@ export default defineConfig({
plugins: [ plugins: [
tailwindcss(), tailwindcss(),
svelte(), svelte(),
routify({ // routify({
singlePage: true, // singlePage: true,
render: { // render: {
csr: true, // csr: true,
ssg: false, // ssg: false,
ssr: false, // ssr: false,
}, // },
}), // }),
], ],
base: "./", base: "./",
resolve: { resolve: {