mirror of
https://github.com/ajnart/homarr.git
synced 2026-02-26 16:30:57 +01:00
feat: add healthchecks (#1187)
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -56,6 +56,7 @@ yarn-error.log*
|
||||
apps/tasks/tasks.cjs
|
||||
apps/websocket/wssServer.cjs
|
||||
apps/nextjs/.million/
|
||||
packages/cli/cli.cjs
|
||||
|
||||
|
||||
#personal backgrounds
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
"@homarr/modals-collection": "workspace:^0.1.0",
|
||||
"@homarr/notifications": "workspace:^0.1.0",
|
||||
"@homarr/old-schema": "workspace:^0.1.0",
|
||||
"@homarr/redis": "workspace:^0.1.0",
|
||||
"@homarr/server-settings": "workspace:^0.1.0",
|
||||
"@homarr/spotlight": "workspace:^0.1.0",
|
||||
"@homarr/translation": "workspace:^0.1.0",
|
||||
|
||||
91
apps/nextjs/src/app/api/health/live/route.ts
Normal file
91
apps/nextjs/src/app/api/health/live/route.ts
Normal file
@@ -0,0 +1,91 @@
|
||||
import { performance } from "perf_hooks";
|
||||
|
||||
import { db } from "@homarr/db";
|
||||
import { logger } from "@homarr/log";
|
||||
import { handshakeAsync } from "@homarr/redis";
|
||||
|
||||
export async function GET() {
|
||||
const timeBeforeHealthCheck = performance.now();
|
||||
const response = await executeAndAggregateAllHealthChecksAsync();
|
||||
logger.info(`Completed healthcheck after ${performance.now() - timeBeforeHealthCheck}ms`);
|
||||
|
||||
if (response.status === "healthy") {
|
||||
return new Response(JSON.stringify(response), {
|
||||
status: 200,
|
||||
});
|
||||
}
|
||||
|
||||
return new Response(JSON.stringify(response), {
|
||||
status: 500,
|
||||
});
|
||||
}
|
||||
|
||||
const executeAndAggregateAllHealthChecksAsync = async (): Promise<{
|
||||
healthChecks: Record<string, object>;
|
||||
status: "healthy" | "unhealthy";
|
||||
}> => {
|
||||
const healthChecks = [
|
||||
executeHealthCheckSafelyAsync("database", async () => {
|
||||
// sqlite driver does not support raw query execution. this is for a heartbeat check only - it doesn't matter if data is returned or not
|
||||
await db.query.serverSettings.findFirst();
|
||||
return {};
|
||||
}),
|
||||
executeHealthCheckSafelyAsync("redis", async () => {
|
||||
await handshakeAsync();
|
||||
return {};
|
||||
}),
|
||||
];
|
||||
|
||||
const healthCheckResults = await Promise.all(healthChecks);
|
||||
const anyUnhealthy = healthCheckResults.some((healthCheck) => healthCheck.status === "unhealthy");
|
||||
|
||||
const healthCheckValues = healthCheckResults.reduce(
|
||||
(acc, healthCheck) => {
|
||||
acc[healthCheck.name] = {
|
||||
status: healthCheck.status,
|
||||
...healthCheck.values,
|
||||
};
|
||||
return acc;
|
||||
},
|
||||
{} as Record<string, object>,
|
||||
);
|
||||
|
||||
return {
|
||||
status: anyUnhealthy ? "unhealthy" : "healthy",
|
||||
healthChecks: healthCheckValues,
|
||||
};
|
||||
};
|
||||
|
||||
const executeHealthCheckSafelyAsync = async (
|
||||
name: string,
|
||||
callback: () => Promise<object>,
|
||||
): Promise<HealthCheckResult> => {
|
||||
try {
|
||||
const currentTimeBeforeCallback = performance.now();
|
||||
const values = await callback();
|
||||
return {
|
||||
name,
|
||||
status: "healthy",
|
||||
values: {
|
||||
...values,
|
||||
latency: performance.now() - currentTimeBeforeCallback,
|
||||
},
|
||||
};
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
||||
logger.error(`Healthcheck '${name}' has failed: ${error}`);
|
||||
return {
|
||||
status: "unhealthy",
|
||||
values: {
|
||||
error,
|
||||
},
|
||||
name,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
interface HealthCheckResult {
|
||||
status: "healthy" | "unhealthy";
|
||||
name: string;
|
||||
values: object;
|
||||
}
|
||||
5
apps/nextjs/src/app/api/health/ready/route.ts
Normal file
5
apps/nextjs/src/app/api/health/ready/route.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export function GET() {
|
||||
return new Response(undefined, {
|
||||
status: 200,
|
||||
});
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import { createListChannel, createQueueChannel, createSubPubChannel } from "./lib/channel";
|
||||
|
||||
export { createCacheChannel, createItemAndIntegrationChannel, createItemChannel } from "./lib/channel";
|
||||
export { createCacheChannel, createItemAndIntegrationChannel, createItemChannel, handshakeAsync } from "./lib/channel";
|
||||
|
||||
export const exampleChannel = createSubPubChannel<{ message: string }>("example");
|
||||
export const pingChannel = createSubPubChannel<{ url: string; statusCode: number } | { url: string; error: string }>(
|
||||
|
||||
@@ -260,3 +260,7 @@ export const createQueueChannel = <TItem>(name: string) => {
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export const handshakeAsync = async () => {
|
||||
await getSetClient.hello();
|
||||
};
|
||||
|
||||
113
pnpm-lock.yaml
generated
113
pnpm-lock.yaml
generated
@@ -21,10 +21,10 @@ importers:
|
||||
version: 2.1.2(@types/node@20.16.10)(typescript@5.6.2)
|
||||
'@vitejs/plugin-react':
|
||||
specifier: ^4.3.1
|
||||
version: 4.3.1(vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))
|
||||
version: 4.3.1(vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0))
|
||||
'@vitest/coverage-v8':
|
||||
specifier: ^2.1.1
|
||||
version: 2.1.1(vitest@2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@25.0.1)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))
|
||||
version: 2.1.1(vitest@2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@25.0.1)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0))
|
||||
'@vitest/ui':
|
||||
specifier: ^2.1.1
|
||||
version: 2.1.1(vitest@2.1.1)
|
||||
@@ -48,10 +48,10 @@ importers:
|
||||
version: 5.6.2
|
||||
vite-tsconfig-paths:
|
||||
specifier: ^5.0.1
|
||||
version: 5.0.1(typescript@5.6.2)(vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))
|
||||
version: 5.0.1(typescript@5.6.2)(vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0))
|
||||
vitest:
|
||||
specifier: ^2.1.1
|
||||
version: 2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@25.0.1)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
|
||||
version: 2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@25.0.1)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0)
|
||||
|
||||
apps/nextjs:
|
||||
dependencies:
|
||||
@@ -100,6 +100,9 @@ importers:
|
||||
'@homarr/old-schema':
|
||||
specifier: workspace:^0.1.0
|
||||
version: link:../../packages/old-schema
|
||||
'@homarr/redis':
|
||||
specifier: workspace:^0.1.0
|
||||
version: link:../../packages/redis
|
||||
'@homarr/server-settings':
|
||||
specifier: workspace:^0.1.0
|
||||
version: link:../../packages/server-settings
|
||||
@@ -153,16 +156,16 @@ importers:
|
||||
version: 5.56.2(@tanstack/react-query@5.56.2(react@18.3.1))(next@14.2.13(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.79.4))(react@18.3.1)
|
||||
'@trpc/client':
|
||||
specifier: next
|
||||
version: 11.0.0-rc.544(@trpc/server@11.0.0-rc.544)
|
||||
version: 11.0.0-rc.552(@trpc/server@11.0.0-rc.552)
|
||||
'@trpc/next':
|
||||
specifier: next
|
||||
version: 11.0.0-rc.544(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.544(@trpc/server@11.0.0-rc.544))(@trpc/react-query@11.0.0-rc.544(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.544(@trpc/server@11.0.0-rc.544))(@trpc/server@11.0.0-rc.544)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.544)(next@14.2.13(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.79.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
version: 11.0.0-rc.552(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.552(@trpc/server@11.0.0-rc.552))(@trpc/react-query@11.0.0-rc.552(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.552(@trpc/server@11.0.0-rc.552))(@trpc/server@11.0.0-rc.552)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.552)(next@14.2.13(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.79.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@trpc/react-query':
|
||||
specifier: next
|
||||
version: 11.0.0-rc.544(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.544(@trpc/server@11.0.0-rc.544))(@trpc/server@11.0.0-rc.544)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
version: 11.0.0-rc.552(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.552(@trpc/server@11.0.0-rc.552))(@trpc/server@11.0.0-rc.552)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@trpc/server':
|
||||
specifier: next
|
||||
version: 11.0.0-rc.544
|
||||
version: 11.0.0-rc.552
|
||||
'@xterm/addon-canvas':
|
||||
specifier: ^0.7.0
|
||||
version: 0.7.0(@xterm/xterm@5.5.0)
|
||||
@@ -502,13 +505,13 @@ importers:
|
||||
version: link:../validation
|
||||
'@trpc/client':
|
||||
specifier: next
|
||||
version: 11.0.0-rc.544(@trpc/server@11.0.0-rc.544)
|
||||
version: 11.0.0-rc.552(@trpc/server@11.0.0-rc.552)
|
||||
'@trpc/react-query':
|
||||
specifier: next
|
||||
version: 11.0.0-rc.544(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.544(@trpc/server@11.0.0-rc.544))(@trpc/server@11.0.0-rc.544)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
version: 11.0.0-rc.552(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.552(@trpc/server@11.0.0-rc.552))(@trpc/server@11.0.0-rc.552)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@trpc/server':
|
||||
specifier: next
|
||||
version: 11.0.0-rc.544
|
||||
version: 11.0.0-rc.552
|
||||
dockerode:
|
||||
specifier: ^4.0.2
|
||||
version: 4.0.2
|
||||
@@ -523,7 +526,7 @@ importers:
|
||||
version: 2.2.1
|
||||
trpc-swagger:
|
||||
specifier: ^1.2.6
|
||||
version: 1.2.6(patch_hash=6s72z7zx33c52iesv5sewipn6i)(@trpc/client@11.0.0-rc.544(@trpc/server@11.0.0-rc.544))(@trpc/server@11.0.0-rc.544)(zod@3.23.8)
|
||||
version: 1.2.6(patch_hash=6s72z7zx33c52iesv5sewipn6i)(@trpc/client@11.0.0-rc.552(@trpc/server@11.0.0-rc.552))(@trpc/server@11.0.0-rc.552)(zod@3.23.8)
|
||||
devDependencies:
|
||||
'@homarr/eslint-config':
|
||||
specifier: workspace:^0.2.0
|
||||
@@ -3215,18 +3218,18 @@ packages:
|
||||
'@tootallnate/quickjs-emscripten@0.23.0':
|
||||
resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
|
||||
|
||||
'@trpc/client@11.0.0-rc.544':
|
||||
resolution: {integrity: sha512-VympvY3/j597XUNEm8ywcH9Q78rC8f7qvLRpfU6u7Bjm7YgWLNaWlBYLpnOjhej0gXjFQjRLsnF1Ffek8KDtZg==}
|
||||
'@trpc/client@11.0.0-rc.552':
|
||||
resolution: {integrity: sha512-jFDclTMI4QLcLNMmEZdAXOZWTXlaSzfdOqhvj0FQLDu38T/Wt6F2EWUY51ALYv6WU0u7dIpH/yi1/XbULz4LUg==}
|
||||
peerDependencies:
|
||||
'@trpc/server': 11.0.0-rc.544+f8e8d1715
|
||||
'@trpc/server': 11.0.0-rc.552+268308497
|
||||
|
||||
'@trpc/next@11.0.0-rc.544':
|
||||
resolution: {integrity: sha512-hSneXAUgapL17RXyTdN9G5ZeN73B/bZ0j2XqduATfD/UgwvTaUuS4uYybgBy3RMLnaOnjr9lxcrYAf4ysiKxCg==}
|
||||
'@trpc/next@11.0.0-rc.552':
|
||||
resolution: {integrity: sha512-7JzIcXbUBDqqTNaI4wpz8vt1lOw+9vPo6cBZl8pyBBw+Jy64L2dRoLfBa2r3/RljDWBfPvV0kHNuZx8Ky8vshA==}
|
||||
peerDependencies:
|
||||
'@tanstack/react-query': ^5.54.1
|
||||
'@trpc/client': 11.0.0-rc.544+f8e8d1715
|
||||
'@trpc/react-query': 11.0.0-rc.544+f8e8d1715
|
||||
'@trpc/server': 11.0.0-rc.544+f8e8d1715
|
||||
'@trpc/client': 11.0.0-rc.552+268308497
|
||||
'@trpc/react-query': 11.0.0-rc.552+268308497
|
||||
'@trpc/server': 11.0.0-rc.552+268308497
|
||||
next: '*'
|
||||
react: '>=16.8.0'
|
||||
react-dom: '>=16.8.0'
|
||||
@@ -3236,17 +3239,17 @@ packages:
|
||||
'@trpc/react-query':
|
||||
optional: true
|
||||
|
||||
'@trpc/react-query@11.0.0-rc.544':
|
||||
resolution: {integrity: sha512-lieAIbIdbwWsQcZuyUUzIGMB+ouMfkiPoK/H7N864eftiAmZgIuvtaarnO/7wTtLGsJoMOTzTJLE503UvEu0FA==}
|
||||
'@trpc/react-query@11.0.0-rc.552':
|
||||
resolution: {integrity: sha512-E2mV9kdAPcUlFKK0HHW5LuPthuobI+ooN7eg0+KJAI2nr+yzERcreF9kXQiOtXPFDDob8hS+2zJ/H/rGYz4lHA==}
|
||||
peerDependencies:
|
||||
'@tanstack/react-query': ^5.54.1
|
||||
'@trpc/client': 11.0.0-rc.544+f8e8d1715
|
||||
'@trpc/server': 11.0.0-rc.544+f8e8d1715
|
||||
'@trpc/client': 11.0.0-rc.552+268308497
|
||||
'@trpc/server': 11.0.0-rc.552+268308497
|
||||
react: '>=18.2.0'
|
||||
react-dom: '>=18.2.0'
|
||||
|
||||
'@trpc/server@11.0.0-rc.544':
|
||||
resolution: {integrity: sha512-Hv7w6PV9MQgD+TzX1LI1P1E2siweQaf4fS/xW+b6NCC15REgcYuWNPu69YFFpwcdkl3PuAkh+DL/0NPUpHdiHg==}
|
||||
'@trpc/server@11.0.0-rc.552':
|
||||
resolution: {integrity: sha512-3t8jOfs6EmZXQtwRD+FliAZW9WJmG1wC3SlFj/0hBMjwHqYtLttM/gmR1qKEeFmL5VdUhMojfaLQiGg5fxQEZw==}
|
||||
|
||||
'@tsconfig/node10@1.0.11':
|
||||
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
|
||||
@@ -9394,30 +9397,30 @@ snapshots:
|
||||
|
||||
'@tootallnate/quickjs-emscripten@0.23.0': {}
|
||||
|
||||
'@trpc/client@11.0.0-rc.544(@trpc/server@11.0.0-rc.544)':
|
||||
'@trpc/client@11.0.0-rc.552(@trpc/server@11.0.0-rc.552)':
|
||||
dependencies:
|
||||
'@trpc/server': 11.0.0-rc.544
|
||||
'@trpc/server': 11.0.0-rc.552
|
||||
|
||||
'@trpc/next@11.0.0-rc.544(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.544(@trpc/server@11.0.0-rc.544))(@trpc/react-query@11.0.0-rc.544(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.544(@trpc/server@11.0.0-rc.544))(@trpc/server@11.0.0-rc.544)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.544)(next@14.2.13(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.79.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@trpc/next@11.0.0-rc.552(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.552(@trpc/server@11.0.0-rc.552))(@trpc/react-query@11.0.0-rc.552(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.552(@trpc/server@11.0.0-rc.552))(@trpc/server@11.0.0-rc.552)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.552)(next@14.2.13(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.79.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@trpc/client': 11.0.0-rc.544(@trpc/server@11.0.0-rc.544)
|
||||
'@trpc/server': 11.0.0-rc.544
|
||||
'@trpc/client': 11.0.0-rc.552(@trpc/server@11.0.0-rc.552)
|
||||
'@trpc/server': 11.0.0-rc.552
|
||||
next: 14.2.13(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.79.4)
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
optionalDependencies:
|
||||
'@tanstack/react-query': 5.56.2(react@18.3.1)
|
||||
'@trpc/react-query': 11.0.0-rc.544(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.544(@trpc/server@11.0.0-rc.544))(@trpc/server@11.0.0-rc.544)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@trpc/react-query': 11.0.0-rc.552(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.552(@trpc/server@11.0.0-rc.552))(@trpc/server@11.0.0-rc.552)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
|
||||
'@trpc/react-query@11.0.0-rc.544(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.544(@trpc/server@11.0.0-rc.544))(@trpc/server@11.0.0-rc.544)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@trpc/react-query@11.0.0-rc.552(@tanstack/react-query@5.56.2(react@18.3.1))(@trpc/client@11.0.0-rc.552(@trpc/server@11.0.0-rc.552))(@trpc/server@11.0.0-rc.552)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@tanstack/react-query': 5.56.2(react@18.3.1)
|
||||
'@trpc/client': 11.0.0-rc.544(@trpc/server@11.0.0-rc.544)
|
||||
'@trpc/server': 11.0.0-rc.544
|
||||
'@trpc/client': 11.0.0-rc.552(@trpc/server@11.0.0-rc.552)
|
||||
'@trpc/server': 11.0.0-rc.552
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
|
||||
'@trpc/server@11.0.0-rc.544': {}
|
||||
'@trpc/server@11.0.0-rc.552': {}
|
||||
|
||||
'@tsconfig/node10@1.0.11': {}
|
||||
|
||||
@@ -9772,18 +9775,18 @@ snapshots:
|
||||
global: 4.4.0
|
||||
is-function: 1.0.2
|
||||
|
||||
'@vitejs/plugin-react@4.3.1(vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))':
|
||||
'@vitejs/plugin-react@4.3.1(vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0))':
|
||||
dependencies:
|
||||
'@babel/core': 7.25.2
|
||||
'@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2)
|
||||
'@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2)
|
||||
'@types/babel__core': 7.20.5
|
||||
react-refresh: 0.14.2
|
||||
vite: 5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
|
||||
vite: 5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@vitest/coverage-v8@2.1.1(vitest@2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@25.0.1)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))':
|
||||
'@vitest/coverage-v8@2.1.1(vitest@2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@25.0.1)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0))':
|
||||
dependencies:
|
||||
'@ampproject/remapping': 2.3.0
|
||||
'@bcoe/v8-coverage': 0.2.3
|
||||
@@ -9797,7 +9800,7 @@ snapshots:
|
||||
std-env: 3.7.0
|
||||
test-exclude: 7.0.1
|
||||
tinyrainbow: 1.2.0
|
||||
vitest: 2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@25.0.1)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
|
||||
vitest: 2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@25.0.1)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -9808,13 +9811,13 @@ snapshots:
|
||||
chai: 5.1.1
|
||||
tinyrainbow: 1.2.0
|
||||
|
||||
'@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))':
|
||||
'@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0))':
|
||||
dependencies:
|
||||
'@vitest/spy': 2.1.1
|
||||
estree-walker: 3.0.3
|
||||
magic-string: 0.30.11
|
||||
optionalDependencies:
|
||||
vite: 5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
|
||||
vite: 5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0)
|
||||
|
||||
'@vitest/pretty-format@2.1.1':
|
||||
dependencies:
|
||||
@@ -9844,7 +9847,7 @@ snapshots:
|
||||
sirv: 2.0.4
|
||||
tinyglobby: 0.2.6
|
||||
tinyrainbow: 1.2.0
|
||||
vitest: 2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@25.0.1)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
|
||||
vitest: 2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@25.0.1)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0)
|
||||
|
||||
'@vitest/utils@2.1.1':
|
||||
dependencies:
|
||||
@@ -13980,10 +13983,10 @@ snapshots:
|
||||
|
||||
triple-beam@1.4.1: {}
|
||||
|
||||
trpc-swagger@1.2.6(patch_hash=6s72z7zx33c52iesv5sewipn6i)(@trpc/client@11.0.0-rc.544(@trpc/server@11.0.0-rc.544))(@trpc/server@11.0.0-rc.544)(zod@3.23.8):
|
||||
trpc-swagger@1.2.6(patch_hash=6s72z7zx33c52iesv5sewipn6i)(@trpc/client@11.0.0-rc.552(@trpc/server@11.0.0-rc.552))(@trpc/server@11.0.0-rc.552)(zod@3.23.8):
|
||||
dependencies:
|
||||
'@trpc/client': 11.0.0-rc.544(@trpc/server@11.0.0-rc.544)
|
||||
'@trpc/server': 11.0.0-rc.544
|
||||
'@trpc/client': 11.0.0-rc.552(@trpc/server@11.0.0-rc.552)
|
||||
'@trpc/server': 11.0.0-rc.552
|
||||
chalk-scripts: 1.2.8
|
||||
co-body: 6.2.0
|
||||
lodash.clonedeep: 4.5.0
|
||||
@@ -14317,12 +14320,12 @@ snapshots:
|
||||
dependencies:
|
||||
global: 4.4.0
|
||||
|
||||
vite-node@2.1.1(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0):
|
||||
vite-node@2.1.1(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0):
|
||||
dependencies:
|
||||
cac: 6.7.14
|
||||
debug: 4.3.7
|
||||
pathe: 1.1.2
|
||||
vite: 5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
|
||||
vite: 5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0)
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
- less
|
||||
@@ -14334,18 +14337,18 @@ snapshots:
|
||||
- supports-color
|
||||
- terser
|
||||
|
||||
vite-tsconfig-paths@5.0.1(typescript@5.6.2)(vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)):
|
||||
vite-tsconfig-paths@5.0.1(typescript@5.6.2)(vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0)):
|
||||
dependencies:
|
||||
debug: 4.3.7
|
||||
globrex: 0.1.2
|
||||
tsconfck: 3.1.3(typescript@5.6.2)
|
||||
optionalDependencies:
|
||||
vite: 5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
|
||||
vite: 5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0):
|
||||
vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0):
|
||||
dependencies:
|
||||
esbuild: 0.21.5
|
||||
postcss: 8.4.47
|
||||
@@ -14357,10 +14360,10 @@ snapshots:
|
||||
sugarss: 4.0.1(postcss@8.4.47)
|
||||
terser: 5.32.0
|
||||
|
||||
vitest@2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@25.0.1)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0):
|
||||
vitest@2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@25.0.1)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0):
|
||||
dependencies:
|
||||
'@vitest/expect': 2.1.1
|
||||
'@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))
|
||||
'@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0))
|
||||
'@vitest/pretty-format': 2.1.1
|
||||
'@vitest/runner': 2.1.1
|
||||
'@vitest/snapshot': 2.1.1
|
||||
@@ -14375,8 +14378,8 @@ snapshots:
|
||||
tinyexec: 0.3.0
|
||||
tinypool: 1.0.1
|
||||
tinyrainbow: 1.2.0
|
||||
vite: 5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
|
||||
vite-node: 2.1.1(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
|
||||
vite: 5.4.5(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0)
|
||||
vite-node: 2.1.1(@types/node@20.16.10)(sass@1.79.4)(sugarss@4.0.1)(terser@5.32.0)
|
||||
why-is-node-running: 2.3.0
|
||||
optionalDependencies:
|
||||
'@types/node': 20.16.10
|
||||
|
||||
Reference in New Issue
Block a user