From 13886502b6cb20a09f9a41ff69e5d7056bbb9e60 Mon Sep 17 00:00:00 2001 From: lonelyhentxi Date: Thu, 6 Feb 2025 04:26:07 +0800 Subject: [PATCH] feat: add basic example --- README.md | 47 +- assets/logo-512.png | Bin 48183 -> 54939 bytes examples/react-tanstack-router/package.json | 12 +- .../react-tanstack-router/postcss.config.mjs | 6 + .../react-tanstack-router/rsbuild.config.ts | 6 + examples/react-tanstack-router/src/App.css | 26 - examples/react-tanstack-router/src/App.tsx | 15 - examples/react-tanstack-router/src/index.tsx | 69 +- .../src/routeTree.gen.ts | 111 ++ .../src/routes/__root.tsx | 38 + .../src/routes/auth/callback.tsx | 13 + .../src/routes/index.tsx | 40 + examples/react-tanstack-router/src/style.css | 13 + .../react-tanstack-router/tailwind.config.mjs | 4 + .../react-tanstack-router/tsr.config.json | 4 + pnpm-lock.yaml | 1132 ++++++++++++++++- src/adapters/tanstack-router/index.ts | 8 +- src/provide-auth.ts | 135 +- 18 files changed, 1568 insertions(+), 111 deletions(-) create mode 100644 examples/react-tanstack-router/postcss.config.mjs delete mode 100644 examples/react-tanstack-router/src/App.css delete mode 100644 examples/react-tanstack-router/src/App.tsx create mode 100644 examples/react-tanstack-router/src/routeTree.gen.ts create mode 100644 examples/react-tanstack-router/src/routes/__root.tsx create mode 100644 examples/react-tanstack-router/src/routes/auth/callback.tsx create mode 100644 examples/react-tanstack-router/src/routes/index.tsx create mode 100644 examples/react-tanstack-router/src/style.css create mode 100644 examples/react-tanstack-router/tailwind.config.mjs create mode 100644 examples/react-tanstack-router/tsr.config.json diff --git a/README.md b/README.md index e2aebe8..30104e4 100644 --- a/README.md +++ b/README.md @@ -11,17 +11,54 @@ ## Quick Start -@TODO Add More Detailed Informations +@TODO Add More Details + +### Install ```sh -# or yarn/npm -pnpm install oidc-client-rx +pnpm add oidc-client-rx @outposts/injection-js @abraham/reflection +# npm install oidc-client-rx @outposts/injection-js @abraham/reflection +# yarn add oidc-client-rx @outposts/injection-js @abraham/reflection ``` -```ts -import {} from '' +### Basic Usage + +```typescript +import '@abraham/reflection'; // or 'reflect-metadata' | 'core-js/es7/reflect' +import { type Injector, ReflectiveInjector } from '@outposts/injection-js'; +import { LogLevel, OidcSecurityService, provideAuth } from 'oidc-client-rx'; + +const injector = ReflectiveInjector.resolveAndCreate( + provideAuth( + { + config: { + authority: '', + redirectUrl: `${window.location.origin}/auth/callback`, + postLogoutRedirectUri: window.location.origin, + clientId: '', + scope: 'openid profile email offline_access', + responseType: 'code', + silentRenew: true, + useRefreshToken: true, + logLevel: LogLevel.Debug, + ... + }, + } + ) +) as Injector; + +const oidcSecurityService = injector.get(OidcSecurityService); + +oidcSecurityService.checkAuth().subscribe((result) => { + console.debug('checkAuth result: ', result); +}); + +const isAuthenticated$ = oidcSecurityService.isAuthenticated$; ``` +### More Examples + +- [React + TanStack Router](https://github.com/lonelyhentxi/oidc-client-rx/tree/main/examples/react-tanstack-router) ## License diff --git a/assets/logo-512.png b/assets/logo-512.png index c8d96407c8e22a621561466e260041b0eb99f47d..8ebd1adba2b8faa9f3fffb4a0f5c8d5b28847bc2 100644 GIT binary patch literal 54939 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�@O%3erK4SKZ*6|g~ocbGeWM1X%_ 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 kFuVnv0{{1a@)*BA6F!UUi>O1+v5 { - const { oidcSecurityService } = useOidcClient(); - - return ( -
-

Rsbuild with React

-

Start building amazing things with Rsbuild.

-
- ); -}; - -export default App; diff --git a/examples/react-tanstack-router/src/index.tsx b/examples/react-tanstack-router/src/index.tsx index edb2327..d4c4090 100644 --- a/examples/react-tanstack-router/src/index.tsx +++ b/examples/react-tanstack-router/src/index.tsx @@ -1,39 +1,76 @@ +import '@abraham/reflection'; // or 'reflect-metadata' | 'core-js/es7/reflect' import { type Injector, ReflectiveInjector } from '@outposts/injection-js'; +import { RouterProvider, createRouter } from '@tanstack/react-router'; import { LogLevel, OidcSecurityService, provideAuth } from 'oidc-client-rx'; -import { InjectorProvider } from 'oidc-client-rx/adapters/react'; +import { + InjectorContextVoidInjector, + InjectorProvider, +} from 'oidc-client-rx/adapters/react'; +import { withTanstackRouter } from 'oidc-client-rx/adapters/tanstack-router'; import React from 'react'; import ReactDOM from 'react-dom/client'; -import App from './App'; +import { routeTree } from './routeTree.gen'; -const rootEl = document.getElementById('root'); +import './style.css'; -if (rootEl) { - const injector = ReflectiveInjector.resolveAndCreate( - provideAuth({ +// Set up a Router instance +const router = createRouter({ + routeTree, + defaultPreload: 'intent', + scrollRestoration: true, + context: { + injector: InjectorContextVoidInjector, + oidcSecurityService: {} as OidcSecurityService, + }, +}); + +// Register things for typesafety +declare module '@tanstack/react-router' { + interface Register { + router: typeof router; + } +} + +const injector = ReflectiveInjector.resolveAndCreate( + provideAuth( + { config: { - authority: '', - redirectUrl: window.location.origin, + authority: 'https://k9bor3.logto.app/oidc', + redirectUrl: `${window.location.origin}/auth/callback`, postLogoutRedirectUri: window.location.origin, - clientId: '', - scope: 'openid profile email offline_access', + clientId: 'zz5vo27wtvtjf36srwtbp', + scope: 'openid offline_access', responseType: 'code', silentRenew: true, useRefreshToken: true, logLevel: LogLevel.Debug, + autoUserInfo: true, + renewUserInfoAfterTokenRenew: true, + customParamsAuthRequest: { + prompt: 'consent', + }, }, - }) - ) as Injector; + }, + withTanstackRouter(router) + ) +) as Injector; - // if needed, check when init - const oidcSecurityService = injector.get(OidcSecurityService); - oidcSecurityService.checkAuthMultiple(); +// if needed, check when init +const oidcSecurityService = injector.get(OidcSecurityService); +oidcSecurityService.checkAuth().subscribe(); +const rootEl = document.getElementById('root'); + +if (rootEl) { const root = ReactDOM.createRoot(rootEl); root.render( - + ); diff --git a/examples/react-tanstack-router/src/routeTree.gen.ts b/examples/react-tanstack-router/src/routeTree.gen.ts new file mode 100644 index 0000000..289f6b1 --- /dev/null +++ b/examples/react-tanstack-router/src/routeTree.gen.ts @@ -0,0 +1,111 @@ +/* eslint-disable */ + +// @ts-nocheck + +// noinspection JSUnusedGlobalSymbols + +// This file was automatically generated by TanStack Router. +// You should NOT make any changes in this file as it will be overwritten. +// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. + +// Import Routes + +import { Route as rootRoute } from './routes/__root' +import { Route as IndexImport } from './routes/index' +import { Route as AuthCallbackImport } from './routes/auth/callback' + +// Create/Update Routes + +const IndexRoute = IndexImport.update({ + id: '/', + path: '/', + getParentRoute: () => rootRoute, +} as any) + +const AuthCallbackRoute = AuthCallbackImport.update({ + id: '/auth/callback', + path: '/auth/callback', + getParentRoute: () => rootRoute, +} as any) + +// Populate the FileRoutesByPath interface + +declare module '@tanstack/react-router' { + interface FileRoutesByPath { + '/': { + id: '/' + path: '/' + fullPath: '/' + preLoaderRoute: typeof IndexImport + parentRoute: typeof rootRoute + } + '/auth/callback': { + id: '/auth/callback' + path: '/auth/callback' + fullPath: '/auth/callback' + preLoaderRoute: typeof AuthCallbackImport + parentRoute: typeof rootRoute + } + } +} + +// Create and export the route tree + +export interface FileRoutesByFullPath { + '/': typeof IndexRoute + '/auth/callback': typeof AuthCallbackRoute +} + +export interface FileRoutesByTo { + '/': typeof IndexRoute + '/auth/callback': typeof AuthCallbackRoute +} + +export interface FileRoutesById { + __root__: typeof rootRoute + '/': typeof IndexRoute + '/auth/callback': typeof AuthCallbackRoute +} + +export interface FileRouteTypes { + fileRoutesByFullPath: FileRoutesByFullPath + fullPaths: '/' | '/auth/callback' + fileRoutesByTo: FileRoutesByTo + to: '/' | '/auth/callback' + id: '__root__' | '/' | '/auth/callback' + fileRoutesById: FileRoutesById +} + +export interface RootRouteChildren { + IndexRoute: typeof IndexRoute + AuthCallbackRoute: typeof AuthCallbackRoute +} + +const rootRouteChildren: RootRouteChildren = { + IndexRoute: IndexRoute, + AuthCallbackRoute: AuthCallbackRoute, +} + +export const routeTree = rootRoute + ._addFileChildren(rootRouteChildren) + ._addFileTypes() + +/* ROUTE_MANIFEST_START +{ + "routes": { + "__root__": { + "filePath": "__root.tsx", + "children": [ + "/", + "/auth/callback" + ] + }, + "/": { + "filePath": "index.tsx" + }, + "/auth/callback": { + "filePath": "auth/callback.tsx" + } + } +} +ROUTE_MANIFEST_END */ diff --git a/examples/react-tanstack-router/src/routes/__root.tsx b/examples/react-tanstack-router/src/routes/__root.tsx new file mode 100644 index 0000000..e915643 --- /dev/null +++ b/examples/react-tanstack-router/src/routes/__root.tsx @@ -0,0 +1,38 @@ +import type { Injector } from '@outposts/injection-js'; +import { + Link, + Outlet, + createRootRouteWithContext, +} from '@tanstack/react-router'; +import { TanStackRouterDevtools } from '@tanstack/router-devtools'; +import type { OidcSecurityService } from 'oidc-client-rx'; + +export interface RouterContext { + injector: Injector; + oidcSecurityService: OidcSecurityService; +} + +export const Route = createRootRouteWithContext()({ + component: RootComponent, +}); + +function RootComponent() { + return ( + <> +
+ + Home + {' '} +
+
+ + + + ); +} diff --git a/examples/react-tanstack-router/src/routes/auth/callback.tsx b/examples/react-tanstack-router/src/routes/auth/callback.tsx new file mode 100644 index 0000000..6d5fbb7 --- /dev/null +++ b/examples/react-tanstack-router/src/routes/auth/callback.tsx @@ -0,0 +1,13 @@ +import { createFileRoute } from '@tanstack/react-router'; + +export const Route = createFileRoute('/auth/callback')({ + component: AuthCallbackComponent, +}); + +function AuthCallbackComponent() { + return ( +
+

Auth Callback: validating...

+
+ ); +} diff --git a/examples/react-tanstack-router/src/routes/index.tsx b/examples/react-tanstack-router/src/routes/index.tsx new file mode 100644 index 0000000..d5d4af4 --- /dev/null +++ b/examples/react-tanstack-router/src/routes/index.tsx @@ -0,0 +1,40 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { useObservableEagerState } from 'observable-hooks'; +import { useOidcClient } from 'oidc-client-rx/adapters/react'; +import { useCallback } from 'react'; + +export const Route = createFileRoute('/')({ + component: HomeComponent, +}); + +function HomeComponent() { + const { oidcSecurityService } = useOidcClient(); + + const { isAuthenticated } = useObservableEagerState( + oidcSecurityService.isAuthenticated$ + ); + + const handleLogin = useCallback(() => { + oidcSecurityService.authorize().subscribe(); + }, [oidcSecurityService]); + + const handleLogout = useCallback(() => { + oidcSecurityService.logoff().subscribe(); + }, [oidcSecurityService]); + + return ( +
+

Welcome OIDC-CLIENT-RX DEMO of react-tanstack-router

+

Is authenticated? {isAuthenticated ? 'True' : 'False'}

+ {isAuthenticated ? ( + + ) : ( + + )} +
+ ); +} diff --git a/examples/react-tanstack-router/src/style.css b/examples/react-tanstack-router/src/style.css new file mode 100644 index 0000000..90ad286 --- /dev/null +++ b/examples/react-tanstack-router/src/style.css @@ -0,0 +1,13 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +html { + color-scheme: light dark; +} +* { + @apply border-gray-200 dark:border-gray-800; +} +body { + @apply bg-gray-50 text-gray-950 dark:bg-gray-900 dark:text-gray-200; +} \ No newline at end of file diff --git a/examples/react-tanstack-router/tailwind.config.mjs b/examples/react-tanstack-router/tailwind.config.mjs new file mode 100644 index 0000000..eb172f4 --- /dev/null +++ b/examples/react-tanstack-router/tailwind.config.mjs @@ -0,0 +1,4 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: ['./src/**/*.{js,jsx,ts,tsx}', './index.html'], +}; diff --git a/examples/react-tanstack-router/tsr.config.json b/examples/react-tanstack-router/tsr.config.json new file mode 100644 index 0000000..15b57e5 --- /dev/null +++ b/examples/react-tanstack-router/tsr.config.json @@ -0,0 +1,4 @@ +{ + "routesDirectory": "./src/routes", + "generatedRouteTree": "./src/routeTree.gen.ts" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 67668c2..8e316fb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -95,22 +95,43 @@ importers: version: 1.5.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(rollup@4.30.1) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.7.3)(vite@6.0.7(@types/node@22.12.0)(tsx@4.19.2)) + version: 5.1.4(typescript@5.7.3)(vite@6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0)) vitest: specifier: ^3.0.4 - version: 3.0.4(@types/node@22.12.0)(@vitest/browser@3.0.4)(jsdom@26.0.0)(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(tsx@4.19.2) + version: 3.0.4(@types/node@22.12.0)(@vitest/browser@3.0.4)(jiti@2.4.2)(jsdom@26.0.0)(lightningcss@1.29.1)(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(tsx@4.19.2)(yaml@2.7.0) examples/react-tanstack-router: dependencies: + '@abraham/reflection': + specifier: ^0.12.0 + version: 0.12.0 + '@outposts/injection-js': + specifier: ^2.5.1 + version: 2.5.1 '@tanstack/react-router': specifier: ^1.99.6 version: 1.99.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@tanstack/router-devtools': + specifier: ^1.99.6 + version: 1.99.6(@tanstack/react-router@1.99.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(csstype@3.1.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.5.1) + observable-hooks: + specifier: ^4.2.4 + version: 4.2.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rxjs@7.8.1) + oidc-client-rx: + specifier: workspace:* + version: link:../.. react: specifier: ^19.0.0 version: 19.0.0 react-dom: specifier: ^19.0.0 version: 19.0.0(react@19.0.0) + tailwindcss: + specifier: ^3.0.0 + version: 3.4.17 devDependencies: '@rsbuild/core': specifier: ^1.2.3 @@ -118,21 +139,31 @@ importers: '@rsbuild/plugin-react': specifier: ^1.1.0 version: 1.1.0(@rsbuild/core@1.2.4) + '@tanstack/router-plugin': + specifier: ^1.99.6 + version: 1.99.6(@rsbuild/core@1.2.4)(@tanstack/react-router@1.99.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0)) '@types/react': specifier: ^19.0.8 version: 19.0.8 '@types/react-dom': specifier: ^19.0.3 version: 19.0.3(@types/react@19.0.8) - oidc-client-rx: - specifier: workspace:* - version: link:../.. + postcss: + specifier: ^8.5.1 + version: 8.5.1 typescript: specifier: ^5.7.3 version: 5.7.3 packages: + '@abraham/reflection@0.12.0': + resolution: {integrity: sha512-OoLlgBE5u18mc61pJNamEh2OtFpHjtvDi1pV4ojnnH77juCvQw/Z3YlHF8TJiorU7/V6UuGApFzsi+bieug7fg==} + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -144,6 +175,36 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.26.5': + resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.7': + resolution: {integrity: sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.5': + resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} @@ -152,19 +213,56 @@ packages: resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.7': + resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.26.5': resolution: {integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.26.7': + resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.26.7': resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} engines: {node: '>=6.9.0'} + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.7': + resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==} + engines: {node: '>=6.9.0'} + '@babel/types@7.26.5': resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} engines: {node: '>=6.9.0'} + '@babel/types@7.26.7': + resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} @@ -656,6 +754,18 @@ packages: peerDependencies: rxjs: ^7.0.0 + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + '@open-draft/deferred-promise@2.2.0': resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} @@ -1051,9 +1161,52 @@ packages: resolution: {integrity: sha512-tEfMLeONfyoyI1e/ygUeGFtTWeWQu0GR3OT8OR75EOeNXRmUEtI6H4ThrXcV8nwBd6B88wmp9LhSPLl9H2VwSA==} engines: {node: '>=12'} + '@tanstack/router-devtools@1.99.6': + resolution: {integrity: sha512-X+Nb9WDv7qttqo81tAytUesnf8Yh/YG6E3xb1onk6zDyfdp0pGD/ZRIA7kOMnk5OQ+jB/M/w3Ar2/CPUlM3Yew==} + engines: {node: '>=12'} + peerDependencies: + '@tanstack/react-router': ^1.99.6 + react: '>=18.0.0 || >=19.0.0' + react-dom: '>=18.0.0 || >=19.0.0' + + '@tanstack/router-generator@1.99.6': + resolution: {integrity: sha512-XxAxESvr73zZVBoWvkkN2WSD9eVvdRktiB7gGPYaHoYV/35u1nIMyDoVM5PmeNhrNopzt8ZZzpr2TqTxeQAhjw==} + engines: {node: '>=12'} + peerDependencies: + '@tanstack/react-router': ^1.99.6 + peerDependenciesMeta: + '@tanstack/react-router': + optional: true + + '@tanstack/router-plugin@1.99.6': + resolution: {integrity: sha512-UeO/eTHQzTIK28GF2kRBvOaJMgVSiQA6+G4EFd7pAyFuOt6onoRoLBiljJ1gsMPct+Xf5FQCHifPbliaDN7e8Q==} + engines: {node: '>=12'} + peerDependencies: + '@rsbuild/core': '>=1.0.2' + '@tanstack/react-router': ^1.99.6 + vite: '>=5.0.0 || >=6.0.0' + webpack: '>=5.92.0' + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@tanstack/react-router': + optional: true + vite: + optional: true + webpack: + optional: true + + '@tanstack/router-utils@1.99.5': + resolution: {integrity: sha512-weYNg+aqXX1aZkcD7nOkjymtJiLgyp5A1Gtg6Ey0ttIaAlL3NuLlwX9z0CCnCLb3AGxGL4OgdZ2xVbH/DVaURQ==} + engines: {node: '>=12'} + '@tanstack/store@0.7.0': resolution: {integrity: sha512-CNIhdoUsmD2NolYuaIs8VfWM467RK6oIBAW4nPEKZhg1smZ+/CwtCdpURgp7nxSqOaV9oKkzdWD80+bC66F/Jg==} + '@tanstack/virtual-file-routes@1.99.0': + resolution: {integrity: sha512-XvX8bfdo4CYiCW+ItVdBfCorh3PwQFqYqd7ll+XKWiWOJpqUGIG7VlziVavARZpUySiY2VBlHadiUYS7jhgjRg==} + engines: {node: '>=12'} + '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} @@ -1073,6 +1226,18 @@ packages: '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} @@ -1259,6 +1424,17 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + ansis@3.10.0: + resolution: {integrity: sha512-hxDKLYT7hy3Y4sF3HxI926A3urzPxi73mZBB629m9bCVF+NyKNxbwCqqm+C/YrGPtxLwnl6d8/ZASCsz6SyvJA==} + engines: {node: '>=16'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} engines: {node: '>= 14'} @@ -1267,6 +1443,9 @@ packages: resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} engines: {node: '>= 14'} + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -1287,9 +1466,19 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + babel-dead-code-elimination@1.0.8: + resolution: {integrity: sha512-og6HQERk0Cmm+nTT4Od2wbPtgABXFMPaHACjbKLulZIFMkYyXZLkUGuAxdgpMJBrxyt/XFpSz++lNzjbcMnPkQ==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1325,6 +1514,10 @@ packages: resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -1334,6 +1527,15 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -1351,6 +1553,10 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + caniuse-lite@1.0.30001692: resolution: {integrity: sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==} @@ -1377,6 +1583,10 @@ packages: resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} engines: {node: '>=18.17'} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -1385,6 +1595,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1404,6 +1618,10 @@ packages: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} @@ -1418,6 +1636,9 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} @@ -1454,6 +1675,11 @@ packages: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + cssstyle@4.2.1: resolution: {integrity: sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==} engines: {node: '>=18'} @@ -1509,6 +1735,21 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff@7.0.0: + resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} + engines: {node: '>=0.3.1'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -1537,6 +1778,9 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + electron-to-chromium@1.5.92: + resolution: {integrity: sha512-BeHgmNobs05N1HMmMZ7YIuHfYBGlq/UmvlsTgg+fsbFs9xVMj+xJHFg19GN04+9Q+r8Xnh9LXqaYIyEWElnNgQ==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1623,10 +1867,17 @@ packages: fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-xml-parser@4.5.1: resolution: {integrity: sha512-y655CeyUQ+jj7KBbYMc4FG01V8ZQqjN+gDYGJ50RtfsUB8iG9AmwmwoAgeKLJdmueKKMrH1RJ7yXHTSoczdv5w==} hasBin: true + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} @@ -1642,6 +1893,10 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + foreground-child@3.3.0: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} @@ -1654,6 +1909,9 @@ packages: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fs-extra@11.3.0: resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} @@ -1676,6 +1934,10 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -1695,13 +1957,30 @@ packages: resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} engines: {node: '>= 14'} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + goober@2.1.16: + resolution: {integrity: sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==} + peerDependencies: + csstype: ^3.0.10 + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1771,17 +2050,33 @@ packages: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -1826,6 +2121,14 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -1852,6 +2155,11 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -1865,6 +2173,77 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lightningcss-darwin-arm64@1.29.1: + resolution: {integrity: sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.29.1: + resolution: {integrity: sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.29.1: + resolution: {integrity: sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.29.1: + resolution: {integrity: sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.29.1: + resolution: {integrity: sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.29.1: + resolution: {integrity: sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.29.1: + resolution: {integrity: sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.29.1: + resolution: {integrity: sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.29.1: + resolution: {integrity: sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.29.1: + resolution: {integrity: sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.29.1: + resolution: {integrity: sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==} + engines: {node: '>= 12.0.0'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1897,6 +2276,9 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -1922,6 +2304,14 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -1969,6 +2359,9 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1986,16 +2379,38 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} nwsapi@2.2.16: resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + observable-hooks@4.2.4: + resolution: {integrity: sha512-FdTQgyw1h5bG/QHCBIqctdBSnv9VARJCEilgpV6L2qlw1yeLqFIwPm4U15dMtl5kDmNN0hSt+Nl6iYbLFwEcQA==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + rxjs: '>=6.0.0' + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -2063,10 +2478,22 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + picomatch@4.0.2: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -2090,10 +2517,52 @@ packages: engines: {node: '>=18'} hasBin: true + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + postcss@8.5.1: resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} engines: {node: ^10 || ^12 || >=14} + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + engines: {node: '>=14'} + hasBin: true + pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -2132,6 +2601,9 @@ packages: querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + react-dom@19.0.0: resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} peerDependencies: @@ -2148,6 +2620,9 @@ packages: resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -2158,6 +2633,10 @@ packages: readdir-glob@1.1.3: resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} @@ -2190,6 +2669,10 @@ packages: resq@1.11.0: resolution: {integrity: sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==} + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfc4648@1.5.4: resolution: {integrity: sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==} @@ -2217,6 +2700,9 @@ packages: typescript: optional: true + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} @@ -2240,6 +2726,10 @@ packages: scheduler@0.25.0: resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -2361,6 +2851,11 @@ packages: strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -2376,6 +2871,11 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + engines: {node: '>=14.0.0'} + hasBin: true + tar-fs@3.0.8: resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} @@ -2389,6 +2889,13 @@ packages: text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -2427,6 +2934,10 @@ packages: resolution: {integrity: sha512-+lFzEXhpl7JXgWYaXcB6DqTYXbUArvrWAE/5ioq/X3CdWLbDjpPP4XTrQBmEJ91y3xbe4Fkw7Lxv4P3GWeJaNg==} hasBin: true + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -2443,6 +2954,9 @@ packages: resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} engines: {node: '>=18'} + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + tsconfck@3.1.4: resolution: {integrity: sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==} engines: {node: ^18 || >=20} @@ -2527,6 +3041,16 @@ packages: resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} engines: {node: '>=14.0.0'} + unplugin@2.1.2: + resolution: {integrity: sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==} + engines: {node: '>=18.12.0'} + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -2727,9 +3251,17 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -2749,8 +3281,15 @@ packages: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + snapshots: + '@abraham/reflection@0.12.0': {} + + '@alloc/quick-lru@5.2.0': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.8 @@ -2769,26 +3308,125 @@ snapshots: '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 picocolors: 1.1.1 - optional: true + + '@babel/compat-data@7.26.5': {} + + '@babel/core@7.26.7': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helpers': 7.26.7 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.5': + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} '@babel/helper-string-parser@7.25.9': {} '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.7': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + '@babel/parser@7.26.5': dependencies: '@babel/types': 7.26.5 + '@babel/parser@7.26.7': + dependencies: + '@babel/types': 7.26.7 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/runtime@7.26.7': dependencies: regenerator-runtime: 0.14.1 optional: true + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.5 + '@babel/types': 7.26.7 + + '@babel/traverse@7.26.7': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.26.5': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.26.7': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@bcoe/v8-coverage@1.0.2': {} '@biomejs/biome@1.9.4': @@ -3152,6 +3790,18 @@ snapshots: rxjs: 7.8.1 tslib: 2.8.1 + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.0 + '@open-draft/deferred-promise@2.2.0': optional: true @@ -3492,8 +4142,61 @@ snapshots: '@tanstack/history': 1.99.0 '@tanstack/store': 0.7.0 + '@tanstack/router-devtools@1.99.6(@tanstack/react-router@1.99.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(csstype@3.1.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@tanstack/react-router': 1.99.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + clsx: 2.1.1 + goober: 2.1.16(csstype@3.1.3) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + transitivePeerDependencies: + - csstype + + '@tanstack/router-generator@1.99.6(@tanstack/react-router@1.99.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0))': + dependencies: + '@tanstack/virtual-file-routes': 1.99.0 + prettier: 3.4.2 + tsx: 4.19.2 + zod: 3.24.1 + optionalDependencies: + '@tanstack/react-router': 1.99.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + + '@tanstack/router-plugin@1.99.6(@rsbuild/core@1.2.4)(@tanstack/react-router@1.99.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0))': + dependencies: + '@babel/core': 7.26.7 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.7) + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + '@tanstack/router-generator': 1.99.6(@tanstack/react-router@1.99.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) + '@tanstack/router-utils': 1.99.5 + '@tanstack/virtual-file-routes': 1.99.0 + '@types/babel__core': 7.20.5 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + babel-dead-code-elimination: 1.0.8 + chokidar: 3.6.0 + unplugin: 2.1.2 + zod: 3.24.1 + optionalDependencies: + '@rsbuild/core': 1.2.4 + '@tanstack/react-router': 1.99.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + vite: 6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color + + '@tanstack/router-utils@1.99.5': + dependencies: + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.7 + ansis: 3.10.0 + diff: 7.0.0 + '@tanstack/store@0.7.0': {} + '@tanstack/virtual-file-routes@1.99.0': {} + '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.26.2 @@ -3520,6 +4223,27 @@ snapshots: '@types/aria-query@5.0.4': optional: true + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.7 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.7 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.7 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.7 + '@types/cookie@0.6.0': optional: true @@ -3575,17 +4299,17 @@ snapshots: '@types/node': 22.12.0 optional: true - '@vitest/browser@3.0.4(@types/node@22.12.0)(playwright@1.50.0)(typescript@5.7.3)(vite@6.0.7(@types/node@22.12.0)(tsx@4.19.2))(vitest@3.0.4)(webdriverio@9.7.2)': + '@vitest/browser@3.0.4(@types/node@22.12.0)(playwright@1.50.0)(typescript@5.7.3)(vite@6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.4)(webdriverio@9.7.2)': dependencies: '@testing-library/dom': 10.4.0 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) - '@vitest/mocker': 3.0.4(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(vite@6.0.7(@types/node@22.12.0)(tsx@4.19.2)) + '@vitest/mocker': 3.0.4(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(vite@6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0)) '@vitest/utils': 3.0.4 magic-string: 0.30.17 msw: 2.7.0(@types/node@22.12.0)(typescript@5.7.3) sirv: 3.0.0 tinyrainbow: 2.0.0 - vitest: 3.0.4(@types/node@22.12.0)(@vitest/browser@3.0.4)(jsdom@26.0.0)(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(tsx@4.19.2) + vitest: 3.0.4(@types/node@22.12.0)(@vitest/browser@3.0.4)(jiti@2.4.2)(jsdom@26.0.0)(lightningcss@1.29.1)(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(tsx@4.19.2)(yaml@2.7.0) ws: 8.18.0 optionalDependencies: playwright: 1.50.0 @@ -3612,9 +4336,9 @@ snapshots: std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.4(@types/node@22.12.0)(@vitest/browser@3.0.4)(jsdom@26.0.0)(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(tsx@4.19.2) + vitest: 3.0.4(@types/node@22.12.0)(@vitest/browser@3.0.4)(jiti@2.4.2)(jsdom@26.0.0)(lightningcss@1.29.1)(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(tsx@4.19.2)(yaml@2.7.0) optionalDependencies: - '@vitest/browser': 3.0.4(@types/node@22.12.0)(playwright@1.50.0)(typescript@5.7.3)(vite@6.0.7(@types/node@22.12.0)(tsx@4.19.2))(vitest@3.0.4)(webdriverio@9.7.2) + '@vitest/browser': 3.0.4(@types/node@22.12.0)(playwright@1.50.0)(typescript@5.7.3)(vite@6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.4)(webdriverio@9.7.2) transitivePeerDependencies: - supports-color @@ -3625,14 +4349,14 @@ snapshots: chai: 5.1.2 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.4(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(vite@6.0.7(@types/node@22.12.0)(tsx@4.19.2))': + '@vitest/mocker@3.0.4(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(vite@6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: msw: 2.7.0(@types/node@22.12.0)(typescript@5.7.3) - vite: 6.0.7(@types/node@22.12.0)(tsx@4.19.2) + vite: 6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0) '@vitest/pretty-format@3.0.4': dependencies: @@ -3769,6 +4493,15 @@ snapshots: ansi-styles@6.2.1: {} + ansis@3.10.0: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + archiver-utils@5.0.2: dependencies: glob: 10.4.5 @@ -3791,6 +4524,8 @@ snapshots: zip-stream: 6.0.1 optional: true + arg@5.0.2: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -3813,9 +4548,28 @@ snapshots: asynckit@0.4.0: {} + autoprefixer@10.4.20(postcss@8.5.1): + dependencies: + browserslist: 4.24.4 + caniuse-lite: 1.0.30001692 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.1 + postcss-value-parser: 4.2.0 + b4a@1.6.7: optional: true + babel-dead-code-elimination@1.0.8: + dependencies: + '@babel/core': 7.26.7 + '@babel/parser': 7.26.5 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + balanced-match@1.0.2: {} bare-events@2.5.4: @@ -3851,6 +4605,8 @@ snapshots: basic-ftp@5.0.5: optional: true + binary-extensions@2.3.0: {} + boolbase@1.0.0: optional: true @@ -3864,6 +4620,17 @@ snapshots: dependencies: balanced-match: 1.0.2 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001692 + electron-to-chromium: 1.5.92 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) + buffer-crc32@0.2.13: optional: true @@ -3884,6 +4651,8 @@ snapshots: cac@6.7.14: {} + camelcase-css@2.0.1: {} + caniuse-lite@1.0.30001692: {} chai@5.1.2: @@ -3930,6 +4699,18 @@ snapshots: whatwg-mimetype: 4.0.0 optional: true + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + cli-width@4.1.0: optional: true @@ -3940,6 +4721,8 @@ snapshots: wrap-ansi: 7.0.0 optional: true + clsx@2.1.1: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -3954,6 +4737,8 @@ snapshots: commander@13.1.0: {} + commander@4.1.1: {} + commander@9.5.0: optional: true @@ -3971,6 +4756,8 @@ snapshots: confbox@0.1.8: {} + convert-source-map@2.0.0: {} + cookie@0.7.2: optional: true @@ -4012,6 +4799,8 @@ snapshots: css-what@6.1.0: optional: true + cssesc@3.0.0: {} + cssstyle@4.2.1: dependencies: '@asamuzakjp/css-color': 2.8.3 @@ -4056,6 +4845,15 @@ snapshots: dequal@2.0.3: optional: true + detect-libc@1.0.3: + optional: true + + didyoumean@1.2.2: {} + + diff@7.0.0: {} + + dlv@1.1.3: {} + dom-accessibility-api@0.5.16: optional: true @@ -4104,6 +4902,8 @@ snapshots: - supports-color optional: true + electron-to-chromium@1.5.92: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -4182,8 +4982,7 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 - escalade@3.2.0: - optional: true + escalade@3.2.0: {} escodegen@2.1.0: dependencies: @@ -4237,11 +5036,23 @@ snapshots: fast-fifo@1.3.2: optional: true + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-xml-parser@4.5.1: dependencies: strnum: 1.0.5 optional: true + fastq@1.19.0: + dependencies: + reusify: 1.0.4 + fd-slicer@1.1.0: dependencies: pend: 1.2.0 @@ -4257,6 +5068,10 @@ snapshots: web-streams-polyfill: 3.3.3 optional: true + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.6 @@ -4273,6 +5088,8 @@ snapshots: fetch-blob: 3.2.0 optional: true + fraction.js@4.3.7: {} + fs-extra@11.3.0: dependencies: graceful-fs: 4.2.11 @@ -4286,8 +5103,7 @@ snapshots: fsevents@2.3.3: optional: true - function-bind@1.1.2: - optional: true + function-bind@1.1.2: {} geckodriver@5.0.0: dependencies: @@ -4304,6 +5120,8 @@ snapshots: - supports-color optional: true + gensync@1.0.0-beta.2: {} + get-caller-file@2.0.5: optional: true @@ -4328,6 +5146,14 @@ snapshots: - supports-color optional: true + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + glob@10.4.5: dependencies: foreground-child: 3.3.0 @@ -4337,8 +5163,14 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + globals@11.12.0: {} + globrex@0.1.2: {} + goober@2.1.16(csstype@3.1.3): + dependencies: + csstype: 3.1.3 + graceful-fs@4.2.11: optional: true @@ -4353,7 +5185,6 @@ snapshots: hasown@2.0.2: dependencies: function-bind: 1.1.2 - optional: true headers-polyfill@4.0.3: optional: true @@ -4416,16 +5247,27 @@ snapshots: sprintf-js: 1.1.3 optional: true + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + is-core-module@2.16.1: dependencies: hasown: 2.0.2 - optional: true + + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + is-node-process@1.2.0: optional: true + is-number@7.0.0: {} + is-plain-obj@4.1.0: optional: true @@ -4471,11 +5313,15 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jiti@1.21.7: {} + + jiti@2.4.2: + optional: true + jju@1.4.0: optional: true - js-tokens@4.0.0: - optional: true + js-tokens@4.0.0: {} jsbn@1.1.0: optional: true @@ -4513,6 +5359,8 @@ snapshots: json-schema-traverse@1.0.0: optional: true + json5@2.2.3: {} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 @@ -4538,6 +5386,56 @@ snapshots: immediate: 3.0.6 optional: true + lightningcss-darwin-arm64@1.29.1: + optional: true + + lightningcss-darwin-x64@1.29.1: + optional: true + + lightningcss-freebsd-x64@1.29.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.29.1: + optional: true + + lightningcss-linux-arm64-gnu@1.29.1: + optional: true + + lightningcss-linux-arm64-musl@1.29.1: + optional: true + + lightningcss-linux-x64-gnu@1.29.1: + optional: true + + lightningcss-linux-x64-musl@1.29.1: + optional: true + + lightningcss-win32-arm64-msvc@1.29.1: + optional: true + + lightningcss-win32-x64-msvc@1.29.1: + optional: true + + lightningcss@1.29.1: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.29.1 + lightningcss-darwin-x64: 1.29.1 + lightningcss-freebsd-x64: 1.29.1 + lightningcss-linux-arm-gnueabihf: 1.29.1 + lightningcss-linux-arm64-gnu: 1.29.1 + lightningcss-linux-arm64-musl: 1.29.1 + lightningcss-linux-x64-gnu: 1.29.1 + lightningcss-linux-x64-musl: 1.29.1 + lightningcss-win32-arm64-msvc: 1.29.1 + lightningcss-win32-x64-msvc: 1.29.1 + optional: true + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + load-tsconfig@0.2.5: {} locate-app@2.5.0: @@ -4568,6 +5466,10 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + lru-cache@6.0.0: dependencies: yallist: 4.0.0 @@ -4603,6 +5505,13 @@ snapshots: dependencies: semver: 7.6.3 + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + mime-db@1.52.0: {} mime-types@2.1.35: @@ -4666,6 +5575,12 @@ snapshots: mute-stream@2.0.0: optional: true + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + nanoid@3.3.8: {} netmask@2.0.2: @@ -4681,8 +5596,11 @@ snapshots: formdata-polyfill: 4.0.10 optional: true - normalize-path@3.0.0: - optional: true + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} nth-check@2.1.1: dependencies: @@ -4691,6 +5609,16 @@ snapshots: nwsapi@2.2.16: {} + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + observable-hooks@4.2.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rxjs@7.8.1): + dependencies: + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + rxjs: 7.8.1 + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -4760,8 +5688,7 @@ snapshots: path-key@3.1.1: {} - path-parse@1.0.7: - optional: true + path-parse@1.0.7: {} path-scurry@1.11.1: dependencies: @@ -4782,8 +5709,14 @@ snapshots: picocolors@1.1.1: {} + picomatch@2.3.1: {} + picomatch@4.0.2: {} + pify@2.3.0: {} + + pirates@4.0.6: {} + pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -4806,12 +5739,45 @@ snapshots: optionalDependencies: fsevents: 2.3.2 + postcss-import@15.1.0(postcss@8.5.1): + dependencies: + postcss: 8.5.1 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.5.1): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.1 + + postcss-load-config@4.0.2(postcss@8.5.1): + dependencies: + lilconfig: 3.1.3 + yaml: 2.7.0 + optionalDependencies: + postcss: 8.5.1 + + postcss-nested@6.2.0(postcss@8.5.1): + dependencies: + postcss: 8.5.1 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + postcss@8.5.1: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 + prettier@3.4.2: {} + pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 @@ -4864,6 +5830,8 @@ snapshots: querystringify@2.2.0: optional: true + queue-microtask@1.2.3: {} + react-dom@19.0.0(react@19.0.0): dependencies: react: 19.0.0 @@ -4876,6 +5844,10 @@ snapshots: react@19.0.0: {} + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -4901,6 +5873,10 @@ snapshots: minimatch: 5.1.6 optional: true + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + reflect-metadata@0.2.2: {} regenerator-runtime@0.14.1: @@ -4924,13 +5900,14 @@ snapshots: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - optional: true resq@1.11.0: dependencies: fast-deep-equal: 2.0.1 optional: true + reusify@1.0.4: {} + rfc4648@1.5.4: {} rgb2hex@0.2.5: @@ -4973,6 +5950,10 @@ snapshots: '@microsoft/api-extractor': 7.49.2(@types/node@22.12.0) typescript: 5.7.3 + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + rxjs@7.8.1: dependencies: tslib: 2.8.1 @@ -4994,6 +5975,8 @@ snapshots: scheduler@0.25.0: {} + semver@6.3.1: {} + semver@7.5.4: dependencies: lru-cache: 6.0.0 @@ -5120,6 +6103,16 @@ snapshots: strnum@1.0.5: optional: true + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -5129,11 +6122,37 @@ snapshots: has-flag: 4.0.0 optional: true - supports-preserve-symlinks-flag@1.0.0: - optional: true + supports-preserve-symlinks-flag@1.0.0: {} symbol-tree@3.2.4: {} + tailwindcss@3.4.17: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.1 + postcss-import: 15.1.0(postcss@8.5.1) + postcss-js: 4.0.1(postcss@8.5.1) + postcss-load-config: 4.0.2(postcss@8.5.1) + postcss-nested: 6.2.0(postcss@8.5.1) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + tar-fs@3.0.8: dependencies: pump: 3.0.2 @@ -5163,6 +6182,14 @@ snapshots: b4a: 1.6.7 optional: true + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + through@2.3.8: optional: true @@ -5191,6 +6218,10 @@ snapshots: dependencies: tldts-core: 6.1.75 + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + totalist@3.0.1: optional: true @@ -5210,6 +6241,8 @@ snapshots: dependencies: punycode: 2.3.1 + ts-interface-checker@0.1.13: {} + tsconfck@3.1.4(typescript@5.7.3): optionalDependencies: typescript: 5.7.3 @@ -5282,6 +6315,17 @@ snapshots: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 + unplugin@2.1.2: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + + update-browserslist-db@1.1.2(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -5303,16 +6347,15 @@ snapshots: userhome@1.0.1: optional: true - util-deprecate@1.0.2: - optional: true + util-deprecate@1.0.2: {} - vite-node@3.0.4(@types/node@22.12.0)(tsx@4.19.2): + vite-node@3.0.4(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.2 - vite: 6.0.7(@types/node@22.12.0)(tsx@4.19.2) + vite: 6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -5327,18 +6370,18 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@6.0.7(@types/node@22.12.0)(tsx@4.19.2)): + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.4(typescript@5.7.3) optionalDependencies: - vite: 6.0.7(@types/node@22.12.0)(tsx@4.19.2) + vite: 6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript - vite@6.0.7(@types/node@22.12.0)(tsx@4.19.2): + vite@6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0): dependencies: esbuild: 0.24.2 postcss: 8.5.1 @@ -5346,12 +6389,15 @@ snapshots: optionalDependencies: '@types/node': 22.12.0 fsevents: 2.3.3 + jiti: 2.4.2 + lightningcss: 1.29.1 tsx: 4.19.2 + yaml: 2.7.0 - vitest@3.0.4(@types/node@22.12.0)(@vitest/browser@3.0.4)(jsdom@26.0.0)(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(tsx@4.19.2): + vitest@3.0.4(@types/node@22.12.0)(@vitest/browser@3.0.4)(jiti@2.4.2)(jsdom@26.0.0)(lightningcss@1.29.1)(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(tsx@4.19.2)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.4 - '@vitest/mocker': 3.0.4(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(vite@6.0.7(@types/node@22.12.0)(tsx@4.19.2)) + '@vitest/mocker': 3.0.4(msw@2.7.0(@types/node@22.12.0)(typescript@5.7.3))(vite@6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.4 '@vitest/runner': 3.0.4 '@vitest/snapshot': 3.0.4 @@ -5367,12 +6413,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.0.7(@types/node@22.12.0)(tsx@4.19.2) - vite-node: 3.0.4(@types/node@22.12.0)(tsx@4.19.2) + vite: 6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0) + vite-node: 3.0.4(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.12.0 - '@vitest/browser': 3.0.4(@types/node@22.12.0)(playwright@1.50.0)(typescript@5.7.3)(vite@6.0.7(@types/node@22.12.0)(tsx@4.19.2))(vitest@3.0.4)(webdriverio@9.7.2) + '@vitest/browser': 3.0.4(@types/node@22.12.0)(playwright@1.50.0)(typescript@5.7.3)(vite@6.0.7(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.4)(webdriverio@9.7.2) jsdom: 26.0.0 transitivePeerDependencies: - jiti @@ -5519,9 +6565,13 @@ snapshots: y18n@5.0.8: optional: true + yallist@3.1.1: {} + yallist@4.0.0: optional: true + yaml@2.7.0: {} + yargs-parser@21.1.1: optional: true @@ -5551,3 +6601,5 @@ snapshots: compress-commons: 6.0.2 readable-stream: 4.7.0 optional: true + + zod@3.24.1: {} diff --git a/src/adapters/tanstack-router/index.ts b/src/adapters/tanstack-router/index.ts index 7542d46..9c3e5e6 100644 --- a/src/adapters/tanstack-router/index.ts +++ b/src/adapters/tanstack-router/index.ts @@ -1,13 +1,9 @@ import { InjectionToken, inject } from '@outposts/injection-js'; -import type { - AnyRoute, - Router, - TrailingSlashOption, -} from '@tanstack/react-router'; +import type { Router } from '@tanstack/react-router'; import { AbstractRouter } from 'src/router'; import type { AuthFeature } from '../../provide-auth'; -export type TanStackRouter = Router; +export type TanStackRouter = Router; export const TANSTACK_ROUTER = new InjectionToken( 'TANSTACK_ROUTER' diff --git a/src/provide-auth.ts b/src/provide-auth.ts index 2369279..9ebd4e7 100644 --- a/src/provide-auth.ts +++ b/src/provide-auth.ts @@ -1,14 +1,79 @@ +import { HttpClient } from '@ngify/http'; import type { Provider } from '@outposts/injection-js'; +import { DataService } from './api/data.service'; +import { HttpBaseService } from './api/http-base.service'; import { PASSED_CONFIG, type PassedInitialConfig, createStaticLoader, } from './auth-config'; +import { AuthStateService } from './auth-state/auth-state.service'; +import { CheckAuthService } from './auth-state/check-auth.service'; +import { AutoLoginService } from './auto-login/auto-login.service'; +import { CallbackService } from './callback/callback.service'; +import { CodeFlowCallbackService } from './callback/code-flow-callback.service'; +import { ImplicitFlowCallbackService } from './callback/implicit-flow-callback.service'; +import { IntervalService } from './callback/interval.service'; +import { PeriodicallyTokenCheckService } from './callback/periodically-token-check.service'; +import { RefreshSessionRefreshTokenService } from './callback/refresh-session-refresh-token.service'; +import { RefreshSessionService } from './callback/refresh-session.service'; +import { AuthWellKnownDataService } from './config/auth-well-known/auth-well-known-data.service'; +import { AuthWellKnownService } from './config/auth-well-known/auth-well-known.service'; +import { ConfigurationService } from './config/config.service'; import { StsConfigLoader } from './config/loader/config-loader'; +import { ConfigValidationService } from './config/validation/config-validation.service'; +import { DOCUMENT } from './dom'; +import { JwkExtractor } from './extractors/jwk.extractor'; +import { CodeFlowCallbackHandlerService } from './flows/callback-handling/code-flow-callback-handler.service'; +import { HistoryJwtKeysCallbackHandlerService } from './flows/callback-handling/history-jwt-keys-callback-handler.service'; +import { ImplicitFlowCallbackHandlerService } from './flows/callback-handling/implicit-flow-callback-handler.service'; +import { RefreshSessionCallbackHandlerService } from './flows/callback-handling/refresh-session-callback-handler.service'; +import { RefreshTokenCallbackHandlerService } from './flows/callback-handling/refresh-token-callback-handler.service'; +import { StateValidationCallbackHandlerService } from './flows/callback-handling/state-validation-callback-handler.service'; +import { UserCallbackHandlerService } from './flows/callback-handling/user-callback-handler.service'; +import { FlowsDataService } from './flows/flows-data.service'; +import { FlowsService } from './flows/flows.service'; +import { RandomService } from './flows/random/random.service'; +import { ResetAuthDataService } from './flows/reset-auth-data.service'; +import { SigninKeyDataService } from './flows/signin-key-data.service'; +import { CheckSessionService } from './iframe/check-session.service'; +import { IFrameService } from './iframe/existing-iframe.service'; +import { RefreshSessionIframeService } from './iframe/refresh-session-iframe.service'; +import { SilentRenewService } from './iframe/silent-renew.service'; +import { ClosestMatchingRouteService } from './interceptor/closest-matching-route.service'; import { AbstractLoggerService } from './logging/abstract-logger.service'; import { ConsoleLoggerService } from './logging/console-logger.service'; +import { LoggerService } from './logging/logger.service'; +import { LoginService } from './login/login.service'; +import { ParLoginService } from './login/par/par-login.service'; +import { ParService } from './login/par/par.service'; +import { PopUpLoginService } from './login/popup/popup-login.service'; +import { PopUpService } from './login/popup/popup.service'; +import { ResponseTypeValidationService } from './login/response-type-validation/response-type-validation.service'; +import { StandardLoginService } from './login/standard/standard-login.service'; +import { LogoffRevocationService } from './logoff-revoke/logoff-revocation.service'; +import { OidcSecurityService } from './oidc.security.service'; +import { PublicEventsService } from './public-events/public-events.service'; import { AbstractSecurityStorage } from './storage/abstract-security-storage'; +import { BrowserStorageService } from './storage/browser-storage.service'; import { DefaultSessionStorageService } from './storage/default-sessionstorage.service'; +import { StoragePersistenceService } from './storage/storage-persistence.service'; +import { UserService } from './user-data/user.service'; +import { CryptoService } from './utils/crypto/crypto.service'; +import { EqualityService } from './utils/equality/equality.service'; +import { FlowHelper } from './utils/flowHelper/flow-helper.service'; +import { + PLATFORM_ID, + PlatformProvider, +} from './utils/platform-provider/platform.provider'; +import { RedirectService } from './utils/redirect/redirect.service'; +import { TokenHelperService } from './utils/tokenHelper/token-helper.service'; +import { CurrentUrlService } from './utils/url/current-url.service'; +import { UrlService } from './utils/url/url.service'; +import { JwkWindowCryptoService } from './validation/jwk-window-crypto.service'; +import { JwtWindowCryptoService } from './validation/jwt-window-crypto.service'; +import { StateValidationService } from './validation/state-validation.service'; +import { TokenValidationService } from './validation/token-validation.service'; /** * A feature to be used with `provideAuth`. @@ -32,9 +97,17 @@ export function provideAuth( export function _provideAuth(passedConfig: PassedInitialConfig): Provider[] { return [ + { + provide: DOCUMENT, + useFactory: () => document, + }, + HttpClient, + { + provide: PLATFORM_ID, + useValue: 'browser', + }, // Make the PASSED_CONFIG available through injection { provide: PASSED_CONFIG, useValue: passedConfig }, - // Create the loader: Either the one getting passed or a static one passedConfig?.loader || { provide: StsConfigLoader, @@ -46,5 +119,65 @@ export function _provideAuth(passedConfig: PassedInitialConfig): Provider[] { useClass: DefaultSessionStorageService, }, { provide: AbstractLoggerService, useClass: ConsoleLoggerService }, + StandardLoginService, + JwkWindowCryptoService, + ParLoginService, + AuthStateService, + RefreshTokenCallbackHandlerService, + JwkExtractor, + TokenHelperService, + RefreshSessionIframeService, + ImplicitFlowCallbackHandlerService, + CallbackService, + EqualityService, + FlowsDataService, + PopUpService, + FlowsService, + StoragePersistenceService, + ClosestMatchingRouteService, + CryptoService, + AutoLoginService, + RedirectService, + LoginService, + CurrentUrlService, + UserCallbackHandlerService, + IFrameService, + BrowserStorageService, + ParService, + LoggerService, + RandomService, + PopUpLoginService, + AuthWellKnownService, + RefreshSessionRefreshTokenService, + CodeFlowCallbackService, + StateValidationService, + FlowHelper, + ImplicitFlowCallbackService, + PublicEventsService, + CodeFlowCallbackHandlerService, + UrlService, + ConfigValidationService, + RefreshSessionService, + HttpBaseService, + AuthWellKnownDataService, + CheckAuthService, + SilentRenewService, + StateValidationCallbackHandlerService, + JwtWindowCryptoService, + ResetAuthDataService, + IntervalService, + LogoffRevocationService, + HistoryJwtKeysCallbackHandlerService, + PlatformProvider, + RefreshSessionCallbackHandlerService, + CheckSessionService, + ConfigurationService, + ResponseTypeValidationService, + DataService, + UserService, + PeriodicallyTokenCheckService, + SigninKeyDataService, + TokenValidationService, + OidcSecurityService, ]; }