From c1c746bca4be538e43d1138daa237013fdc96cbb Mon Sep 17 00:00:00 2001 From: Gao Sun Date: Thu, 18 Apr 2024 15:20:24 +0800 Subject: [PATCH] refactor: remove AppInsights for React (#5742) --- .changeset/ten-steaks-melt.md | 5 + packages/app-insights/package.json | 22 +- .../src/react/AppInsightsBoundary.tsx | 48 -- .../src/react/AppInsightsReact.ts | 137 ----- packages/app-insights/src/react/TrackOnce.tsx | 47 -- packages/app-insights/src/react/context.tsx | 61 -- packages/app-insights/src/react/index.ts | 5 - packages/app-insights/src/react/utils.ts | 5 - packages/app-insights/tsconfig.json | 2 +- packages/experience/jest.config.ts | 1 - packages/experience/package.json | 1 - packages/experience/src/App.tsx | 147 +++-- .../src/components/PageMeta/index.tsx | 20 +- pnpm-lock.yaml | 542 +----------------- 14 files changed, 88 insertions(+), 955 deletions(-) create mode 100644 .changeset/ten-steaks-melt.md delete mode 100644 packages/app-insights/src/react/AppInsightsBoundary.tsx delete mode 100644 packages/app-insights/src/react/AppInsightsReact.ts delete mode 100644 packages/app-insights/src/react/TrackOnce.tsx delete mode 100644 packages/app-insights/src/react/context.tsx delete mode 100644 packages/app-insights/src/react/index.ts delete mode 100644 packages/app-insights/src/react/utils.ts diff --git a/.changeset/ten-steaks-melt.md b/.changeset/ten-steaks-melt.md new file mode 100644 index 000000000..b4d58e3db --- /dev/null +++ b/.changeset/ten-steaks-melt.md @@ -0,0 +1,5 @@ +--- +"@logto/app-insights": major +--- + +remove application insights for react diff --git a/packages/app-insights/package.json b/packages/app-insights/package.json index d862bf8da..39af60408 100644 --- a/packages/app-insights/package.json +++ b/packages/app-insights/package.json @@ -12,10 +12,6 @@ "./*": { "import": "./lib/*.js", "types": "./lib/*.d.ts" - }, - "./react": { - "import": "./lib/react/index.js", - "types": "./lib/react/index.d.ts" } }, "publishConfig": { @@ -34,17 +30,12 @@ }, "devDependencies": { "@silverhand/eslint-config": "5.0.0", - "@silverhand/eslint-config-react": "5.0.0", "@silverhand/ts-config": "5.0.0", - "@silverhand/ts-config-react": "5.0.0", "@types/node": "^20.9.5", - "@types/react": "^18.0.31", "@vitest/coverage-v8": "^1.4.0", "eslint": "^8.44.0", - "history": "^5.3.0", "lint-staged": "^15.0.0", "prettier": "^3.0.0", - "react": "^18.0.0", "typescript": "^5.3.3", "vitest": "^1.4.0" }, @@ -52,28 +43,17 @@ "node": "^20.9.0" }, "eslintConfig": { - "extends": "@silverhand/react" + "extends": "@silverhand" }, "prettier": "@silverhand/eslint-config/.prettierrc", "dependencies": { - "@microsoft/applicationinsights-clickanalytics-js": "^3.1.2", - "@microsoft/applicationinsights-react-js": "^17.1.2", - "@microsoft/applicationinsights-web": "^3.1.2", "@silverhand/essentials": "^2.9.0", "applicationinsights": "^2.9.5" }, "peerDependencies": { - "history": "^5.3.0", - "react": "^18.0.0", "tslib": "^2.4.1" }, "peerDependenciesMeta": { - "history": { - "optional": true - }, - "react": { - "optional": true - }, "tslib": { "optional": true } diff --git a/packages/app-insights/src/react/AppInsightsBoundary.tsx b/packages/app-insights/src/react/AppInsightsBoundary.tsx deleted file mode 100644 index 34444a79a..000000000 --- a/packages/app-insights/src/react/AppInsightsBoundary.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { type ReactNode, useContext, useEffect } from 'react'; - -import { AppInsightsContext, AppInsightsProvider } from './context.js'; -import { getPrimaryDomain } from './utils.js'; - -type AppInsightsProps = { - cloudRole: string; -}; - -const AppInsights = ({ cloudRole }: AppInsightsProps) => { - const { needsSetup, setup } = useContext(AppInsightsContext); - - useEffect(() => { - const run = async () => { - await setup(cloudRole, { cookieDomain: getPrimaryDomain() }); - }; - - if (needsSetup) { - void run(); - } - }, [cloudRole, needsSetup, setup]); - - return null; -}; - -type Props = AppInsightsProps & { - children: ReactNode; -}; - -/** - * **CAUTION:** Make sure to put this component inside `` or any other - * context providers that are render-sensitive, since we are lazy loading ApplicationInsights SDKs - * for better user experience. - * - * This component will trigger a render after the ApplicationInsights SDK is loaded which may - * cause issues for some context providers. For example, `useHandleSignInCallback` will be - * called twice if you use this component to wrap a ``. - */ -const AppInsightsBoundary = ({ children, ...rest }: Props) => { - return ( - - - {children} - - ); -}; - -export default AppInsightsBoundary; diff --git a/packages/app-insights/src/react/AppInsightsReact.ts b/packages/app-insights/src/react/AppInsightsReact.ts deleted file mode 100644 index a5b90ed68..000000000 --- a/packages/app-insights/src/react/AppInsightsReact.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { type ClickAnalyticsPlugin } from '@microsoft/applicationinsights-clickanalytics-js'; -import type { ReactPlugin, withAITracking } from '@microsoft/applicationinsights-react-js'; -import type { ApplicationInsights, ITelemetryPlugin } from '@microsoft/applicationinsights-web'; -import { conditional, conditionalArray, type Optional } from '@silverhand/essentials'; -import { type ComponentType } from 'react'; - -export type SetupConfig = { - connectionString?: string; - /** - * The config object for the ClickAnalytics plugin. If this is provided, the plugin will be - * automatically loaded when calling `.setup()`. - * - * Wait for {@link https://github.com/microsoft/ApplicationInsights-JS/issues/2106 | microsoft/ApplicationInsights-JS#2106} - * to be resolved to use a stronger type. - * - * @see {@link https://github.com/microsoft/ApplicationInsights-JS/tree/master/extensions/applicationinsights-clickanalytics-js#configuration | ClickAnalytics configuration} - */ - clickPlugin?: Record; - cookieDomain?: string; -}; - -export class AppInsightsReact { - /** - * URL search parameters that start with `utm_`. It is an empty object until you call `.setup()`, - * which will read the URL search string and store parameters in this property. - */ - utmParameters: Record = {}; - - protected reactPlugin?: ReactPlugin; - protected clickAnalyticsPlugin?: ClickAnalyticsPlugin; - protected withAITracking?: typeof withAITracking; - protected appInsights?: ApplicationInsights; - - get instance(): Optional { - return this.appInsights; - } - - get trackPageView(): Optional { - return this.appInsights?.trackPageView.bind(this.appInsights); - } - - async setup(cloudRole: string, config?: string | SetupConfig): Promise { - const connectionStringFromConfig = - typeof config === 'string' ? config : config?.connectionString; - // The string needs to be normalized since it may contain '"' - const connectionString = ( - connectionStringFromConfig ?? process.env.APPLICATIONINSIGHTS_CONNECTION_STRING - )?.replace(/^"?(.*)"?$/g, '$1'); - - if (!connectionString) { - return false; - } - - if (this.appInsights?.config.connectionString === connectionString) { - return true; - } - - try { - // Lazy load ApplicationInsights modules - const { ReactPlugin, withAITracking } = await import( - '@microsoft/applicationinsights-react-js' - ); - const { ApplicationInsights } = await import('@microsoft/applicationinsights-web'); - - // Conditionally load ClickAnalytics plugin - const configObject = conditional(typeof config === 'object' && config) ?? {}; - const { cookieDomain, clickPlugin } = configObject; - const initClickAnalyticsPlugin = async () => { - const { ClickAnalyticsPlugin } = await import( - '@microsoft/applicationinsights-clickanalytics-js' - ); - return new ClickAnalyticsPlugin(); - }; - - // Assign React props - // https://github.com/microsoft/applicationinsights-react-js#readme - this.withAITracking = withAITracking; - this.reactPlugin = new ReactPlugin(); - - // Assign ClickAnalytics prop - this.clickAnalyticsPlugin = conditional(clickPlugin && (await initClickAnalyticsPlugin())); - - // Init ApplicationInsights instance - this.appInsights = new ApplicationInsights({ - config: { - cookieDomain, - connectionString, - enableAutoRouteTracking: false, - extensions: conditionalArray( - this.reactPlugin, - this.clickAnalyticsPlugin - ), - extensionConfig: conditional( - this.clickAnalyticsPlugin && { - [this.clickAnalyticsPlugin.identifier]: clickPlugin, - } - ), - }, - }); - - // Extract UTM parameters - const searchParams = [...new URLSearchParams(window.location.search).entries()]; - this.utmParameters = Object.fromEntries( - searchParams.filter(([key]) => key.startsWith('utm_')) - ); - - this.appInsights.addTelemetryInitializer((item) => { - // @see https://github.com/microsoft/ApplicationInsights-JS#example-setting-cloud-role-name - // @see https://github.com/microsoft/ApplicationInsights-node.js/blob/a573e40fc66981c6a3106bdc5b783d1d94f64231/Schema/PublicSchema/ContextTagKeys.bond#L83 - /* eslint-disable @silverhand/fp/no-mutation */ - item.tags = { ...item.tags, 'ai.cloud.role': cloudRole }; - /* eslint-enable @silverhand/fp/no-mutation */ - }); - - this.appInsights.loadAppInsights(); - } catch (error: unknown) { - console.error('Unable to init ApplicationInsights:'); - console.error(error); - - return false; - } - - return true; - } - - withAppInsights

(Component: ComponentType

): ComponentType

{ - if (!this.reactPlugin || !this.withAITracking) { - return Component; - } - - return this.withAITracking(this.reactPlugin, Component, undefined, 'appInsightsWrapper'); - } -} - -export const appInsightsReact = new AppInsightsReact(); - -export const withAppInsights = appInsightsReact.withAppInsights.bind(appInsightsReact); diff --git a/packages/app-insights/src/react/TrackOnce.tsx b/packages/app-insights/src/react/TrackOnce.tsx deleted file mode 100644 index d2975dd2c..000000000 --- a/packages/app-insights/src/react/TrackOnce.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { type ICustomProperties } from '@microsoft/applicationinsights-web'; -import { yes } from '@silverhand/essentials'; -import { useContext, useEffect } from 'react'; - -import { getEventName, type Component, type EventType } from '../custom-event.js'; - -import { AppInsightsContext } from './context.js'; - -type Props = { - component: C; - event: EventType; - customProperties?: ICustomProperties; -}; - -const storageKeyPrefix = 'logto:insights:'; - -/** Track an event after AppInsights SDK is setup, but only once during the current session. */ -const TrackOnce = ({ component, event, customProperties }: Props) => { - const { isSetupFinished, appInsights } = useContext(AppInsightsContext); - - useEffect(() => { - const eventName = getEventName(component, event); - const storageKey = `${storageKeyPrefix}${eventName}`; - const tracked = yes(sessionStorage.getItem(storageKey)); - - if (isSetupFinished && !tracked) { - appInsights.instance?.trackEvent( - { - name: getEventName(component, event), - }, - { ...appInsights.utmParameters, ...customProperties } - ); - sessionStorage.setItem(storageKey, '1'); - } - }, [ - appInsights.instance, - appInsights.utmParameters, - component, - customProperties, - event, - isSetupFinished, - ]); - - return null; -}; - -export default TrackOnce; diff --git a/packages/app-insights/src/react/context.tsx b/packages/app-insights/src/react/context.tsx deleted file mode 100644 index 26489bd8f..000000000 --- a/packages/app-insights/src/react/context.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { type ReactNode, createContext, useMemo, useState, useCallback } from 'react'; - -import { type AppInsightsReact, appInsightsReact as appInsights } from './AppInsightsReact'; - -const notImplemented = () => { - throw new Error('Not implemented'); -}; - -type Context = { - needsSetup: boolean; - isSetupFinished: boolean; - setup: (...args: Parameters) => Promise; - appInsights: AppInsightsReact; -}; - -export const AppInsightsContext = createContext({ - needsSetup: true, - isSetupFinished: false, - setup: notImplemented, - appInsights, -}); - -type Properties = { - children: ReactNode; -}; - -export type SetupStatus = 'none' | 'loading' | 'initialized' | 'failed'; - -export const AppInsightsProvider = ({ children }: Properties) => { - const [setupStatus, setSetupStatus] = useState('none'); - const setup = useCallback( - async (...args: Parameters) => { - if (setupStatus !== 'none') { - return; - } - - setSetupStatus('loading'); - const result = await appInsights.setup(...args); - - if (result) { - console.debug('Initialized ApplicationInsights'); - setSetupStatus('initialized'); - } else { - setSetupStatus('failed'); - } - }, - [setupStatus] - ); - - const context = useMemo( - () => ({ - needsSetup: setupStatus === 'none', - isSetupFinished: setupStatus === 'initialized' || setupStatus === 'failed', - setup, - appInsights, - }), - [setup, setupStatus] - ); - - return {children}; -}; diff --git a/packages/app-insights/src/react/index.ts b/packages/app-insights/src/react/index.ts deleted file mode 100644 index 638c4f0df..000000000 --- a/packages/app-insights/src/react/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { AppInsightsReact, type SetupConfig, withAppInsights } from './AppInsightsReact.js'; -export * from './context.js'; -export * from './utils.js'; -export { default as AppInsightsBoundary } from './AppInsightsBoundary.js'; -export { default as TrackOnce } from './TrackOnce.js'; diff --git a/packages/app-insights/src/react/utils.ts b/packages/app-insights/src/react/utils.ts deleted file mode 100644 index 636664f4b..000000000 --- a/packages/app-insights/src/react/utils.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * **CAUTION:** This function takes the last two parts of the hostname which may cause issues for - * some second-level domains, e.g. `.co.uk`. - */ -export const getPrimaryDomain = () => window.location.hostname.split('.').slice(-2).join('.'); diff --git a/packages/app-insights/tsconfig.json b/packages/app-insights/tsconfig.json index 2e988e53b..72888320f 100644 --- a/packages/app-insights/tsconfig.json +++ b/packages/app-insights/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@silverhand/ts-config-react/tsconfig.base", + "extends": "@silverhand/ts-config/tsconfig.base", "compilerOptions": { "outDir": "lib", "types": ["node"], diff --git a/packages/experience/jest.config.ts b/packages/experience/jest.config.ts index 8ab5d388c..588c07945 100644 --- a/packages/experience/jest.config.ts +++ b/packages/experience/jest.config.ts @@ -26,7 +26,6 @@ const config: Config.InitialOptions = { }, moduleNameMapper: { '^@/(.*)$': '/src/$1', - '^@logto/app-insights/(.*)$': '/../app-insights/lib/$1', '^@logto/shared/(.*)$': '/../shared/lib/$1', '\\.module\\.(css|sass|scss)$': 'identity-obj-proxy', }, diff --git a/packages/experience/package.json b/packages/experience/package.json index 746cc684e..149beca57 100644 --- a/packages/experience/package.json +++ b/packages/experience/package.json @@ -21,7 +21,6 @@ }, "devDependencies": { "@jest/types": "^29.5.0", - "@logto/app-insights": "workspace:^1.4.0", "@logto/connector-kit": "workspace:^3.0.0", "@logto/core-kit": "workspace:^2.4.0", "@logto/language-kit": "workspace:^1.1.0", diff --git a/packages/experience/src/App.tsx b/packages/experience/src/App.tsx index db44a29aa..e58276176 100644 --- a/packages/experience/src/App.tsx +++ b/packages/experience/src/App.tsx @@ -1,4 +1,3 @@ -import { AppInsightsBoundary } from '@logto/app-insights/react'; import { MfaFactor, experience } from '@logto/schemas'; import { Route, Routes, BrowserRouter } from 'react-router-dom'; @@ -48,85 +47,83 @@ const App = () => { - - - }> - } /> - } /> + + }> + } /> + } /> + } + /> + } /> + + }> } + path="unknown-session" + element={} /> - } /> - }> - } - /> - - {/* Sign-in */} - - } /> - } /> - - - {/* Register */} - - } /> - } /> - - - {/* Forgot password */} - - } /> - } /> - - - {/* Passwordless verification code */} - } /> - - {/* Mfa binding */} - - } /> - } /> - } /> - } /> - - - {/* Mfa verification */} - - } /> - } /> - } /> - } /> - - - {/* Continue set up missing profile */} - - } /> - - - {/* Social sign-in pages */} - - } /> - } /> - - - {/* Single sign-on */} - }> - } /> - } /> - - - {/* Consent */} - } /> - - } /> + {/* Sign-in */} + + } /> + } /> + + {/* Register */} + + } /> + } /> + + + {/* Forgot password */} + + } /> + } /> + + + {/* Passwordless verification code */} + } /> + + {/* Mfa binding */} + + } /> + } /> + } /> + } /> + + + {/* Mfa verification */} + + } /> + } /> + } /> + } /> + + + {/* Continue set up missing profile */} + + } /> + + + {/* Social sign-in pages */} + + } /> + } /> + + + {/* Single sign-on */} + }> + } /> + } /> + + + {/* Consent */} + } /> + + } /> - - + + diff --git a/packages/experience/src/components/PageMeta/index.tsx b/packages/experience/src/components/PageMeta/index.tsx index eb3ad32cd..db55e237c 100644 --- a/packages/experience/src/components/PageMeta/index.tsx +++ b/packages/experience/src/components/PageMeta/index.tsx @@ -1,34 +1,16 @@ -import { AppInsightsContext } from '@logto/app-insights/react'; import { type TFuncKey } from 'i18next'; -import { useContext, useEffect, useState } from 'react'; import { Helmet } from 'react-helmet'; import { useTranslation } from 'react-i18next'; -import { shouldTrack } from '@/utils/cookies'; - type Props = { titleKey: TFuncKey; titleKeyInterpolation?: Record; - // eslint-disable-next-line react/boolean-prop-naming - trackPageView?: boolean; }; -const PageMeta = ({ titleKey, titleKeyInterpolation = {}, trackPageView = true }: Props) => { +const PageMeta = ({ titleKey, titleKeyInterpolation = {} }: Props) => { const { t } = useTranslation(); - const { isSetupFinished, appInsights } = useContext(AppInsightsContext); - const [pageViewTracked, setPageViewTracked] = useState(false); - - const rawTitle = t(titleKey, { lng: 'en', ...titleKeyInterpolation }); const title = t(titleKey, titleKeyInterpolation); - useEffect(() => { - // Only track once for the same page - if (shouldTrack && isSetupFinished && trackPageView && !pageViewTracked) { - appInsights.trackPageView?.({ name: `Main flow: ${String(rawTitle)}` }); - setPageViewTracked(true); - } - }, [appInsights, isSetupFinished, pageViewTracked, rawTitle, trackPageView]); - return ; }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a11532c3c..b2cf8c9b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,15 +39,6 @@ importers: packages/app-insights: dependencies: - '@microsoft/applicationinsights-clickanalytics-js': - specifier: ^3.1.2 - version: 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-react-js': - specifier: ^17.1.2 - version: 17.1.2(history@5.3.0)(react@18.2.0)(tslib@2.4.1) - '@microsoft/applicationinsights-web': - specifier: ^3.1.2 - version: 3.1.2(tslib@2.4.1) '@silverhand/essentials': specifier: ^2.9.0 version: 2.9.0 @@ -61,39 +52,24 @@ importers: '@silverhand/eslint-config': specifier: 5.0.0 version: 5.0.0(eslint@8.44.0)(prettier@3.0.0)(typescript@5.3.3) - '@silverhand/eslint-config-react': - specifier: 5.0.0 - version: 5.0.0(eslint@8.44.0)(postcss@8.4.38)(prettier@3.0.0)(stylelint@15.11.0)(typescript@5.3.3) '@silverhand/ts-config': specifier: 5.0.0 version: 5.0.0(typescript@5.3.3) - '@silverhand/ts-config-react': - specifier: 5.0.0 - version: 5.0.0(typescript@5.3.3) '@types/node': specifier: ^20.9.5 version: 20.10.4 - '@types/react': - specifier: ^18.0.31 - version: 18.0.31 '@vitest/coverage-v8': specifier: ^1.4.0 version: 1.4.0(vitest@1.4.0) eslint: specifier: ^8.44.0 version: 8.44.0 - history: - specifier: ^5.3.0 - version: 5.3.0 lint-staged: specifier: ^15.0.0 version: 15.0.2 prettier: specifier: ^3.0.0 version: 3.0.0 - react: - specifier: ^18.0.0 - version: 18.2.0 typescript: specifier: ^5.3.3 version: 5.3.3 @@ -3402,9 +3378,6 @@ importers: '@jest/types': specifier: ^29.5.0 version: 29.6.3 - '@logto/app-insights': - specifier: workspace:^1.4.0 - version: link:../app-insights '@logto/connector-kit': specifier: workspace:^3.0.0 version: link:../toolkit/connector-kit @@ -5544,7 +5517,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@azure/abort-controller': 1.1.0 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /@azure/logger@1.0.4: @@ -6032,6 +6005,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 + dev: true /@babel/runtime@7.21.0: resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} @@ -6507,25 +6481,11 @@ packages: '@csstools/css-tokenizer': 2.0.1 dev: true - /@csstools/css-parser-algorithms@2.6.1(@csstools/css-tokenizer@2.2.4): - resolution: {integrity: sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - '@csstools/css-tokenizer': ^2.2.4 - dependencies: - '@csstools/css-tokenizer': 2.2.4 - dev: true - /@csstools/css-tokenizer@2.0.1: resolution: {integrity: sha512-sYD3H7ReR88S/4+V5VbKiBEUJF4FqvG+8aNJkxqoPAnbhFziDG22IDZc4+h+xA63SfgM+h15lq5OnLeCxQ9nPA==} engines: {node: ^14 || ^16 || >=18} dev: true - /@csstools/css-tokenizer@2.2.4: - resolution: {integrity: sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==} - engines: {node: ^14 || ^16 || >=18} - dev: true - /@csstools/media-query-list-parser@2.0.1(@csstools/css-parser-algorithms@2.0.1)(@csstools/css-tokenizer@2.0.1): resolution: {integrity: sha512-X2/OuzEbjaxhzm97UJ+95GrMeT29d1Ib+Pu+paGLuRWZnWRK9sI9r3ikmKXPWGA1C4y4JEdBEFpp9jEqCvLeRA==} engines: {node: ^14 || ^16 || >=18} @@ -6537,17 +6497,6 @@ packages: '@csstools/css-tokenizer': 2.0.1 dev: true - /@csstools/media-query-list-parser@2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4): - resolution: {integrity: sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - '@csstools/css-parser-algorithms': ^2.6.1 - '@csstools/css-tokenizer': ^2.2.4 - dependencies: - '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) - '@csstools/css-tokenizer': 2.2.4 - dev: true - /@csstools/selector-specificity@2.1.1(postcss-selector-parser@6.0.11)(postcss@8.4.31): resolution: {integrity: sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==} engines: {node: ^14 || ^16 || >=18} @@ -6559,15 +6508,6 @@ packages: postcss-selector-parser: 6.0.11 dev: true - /@csstools/selector-specificity@3.0.3(postcss-selector-parser@6.0.16): - resolution: {integrity: sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss-selector-parser: ^6.0.13 - dependencies: - postcss-selector-parser: 6.0.16 - dev: true - /@esbuild/aix-ppc64@0.19.12: resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} @@ -7488,164 +7428,10 @@ packages: resolution: {integrity: sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==} dev: true - /@microsoft/applicationinsights-analytics-js@3.1.2(tslib@2.4.1): - resolution: {integrity: sha512-HIlptHMIX3cGqTOUrdVjWb5FpYvs1xmosrIf7pnU0Y0/BER382fHCb/4BAB5mU32h/UlPX8to/d6Q20fSCtYAw==} - peerDependencies: - tslib: '*' - dependencies: - '@microsoft/applicationinsights-common': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-core-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-shims': 3.0.1 - '@microsoft/dynamicproto-js': 2.0.3 - '@nevware21/ts-utils': 0.11.2 - tslib: 2.4.1 - dev: false - - /@microsoft/applicationinsights-cfgsync-js@3.1.2(tslib@2.4.1): - resolution: {integrity: sha512-tVrIYxu3SCB/vYGdwPg5Inc8Kr1I9PCbqb/mIp+qOJyIRiB90VIHde6qHsttb7/ZHJJbNlztUtY4UcD5jaCBoA==} - peerDependencies: - tslib: '*' - dependencies: - '@microsoft/applicationinsights-common': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-core-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-shims': 3.0.1 - '@microsoft/dynamicproto-js': 2.0.3 - '@nevware21/ts-async': 0.5.1 - '@nevware21/ts-utils': 0.11.2 - tslib: 2.4.1 - dev: false - - /@microsoft/applicationinsights-channel-js@3.1.2(tslib@2.4.1): - resolution: {integrity: sha512-QyPxpOOhtohFzcl4tzfWp4seN6JaToF66DZ1qjsYkUmEyHAackWSsv9m7qvuaAcCB9WrUzW9y0mRXgGKsEJcAg==} - peerDependencies: - tslib: '*' - dependencies: - '@microsoft/applicationinsights-common': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-core-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-shims': 3.0.1 - '@microsoft/dynamicproto-js': 2.0.3 - '@nevware21/ts-async': 0.5.1 - '@nevware21/ts-utils': 0.11.2 - tslib: 2.4.1 - dev: false - - /@microsoft/applicationinsights-clickanalytics-js@3.1.2(tslib@2.4.1): - resolution: {integrity: sha512-zlOip0roNUGyrNb0vnsNSYYs5kETbf6Tlgijueyy9nrY14RbWCcIv0AhIxfM4juLIxlnl6Lo0YYdRe41P9yjng==} - peerDependencies: - tslib: '*' - dependencies: - '@microsoft/applicationinsights-common': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-core-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-properties-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-shims': 3.0.1 - '@microsoft/dynamicproto-js': 2.0.3 - '@nevware21/ts-utils': 0.11.2 - tslib: 2.4.1 - dev: false - - /@microsoft/applicationinsights-common@3.1.2(tslib@2.4.1): - resolution: {integrity: sha512-ivu3s73xt6Owakepnx2mbrMCry1mVHrA/2TL4nKCRLad6O3IBK3MkruMoeb3hoWpECBhErFRVj+/b0Kh7dl/Lw==} - peerDependencies: - tslib: '*' - dependencies: - '@microsoft/applicationinsights-core-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-shims': 3.0.1 - '@microsoft/dynamicproto-js': 2.0.3 - '@nevware21/ts-utils': 0.11.2 - tslib: 2.4.1 - dev: false - - /@microsoft/applicationinsights-core-js@3.1.2(tslib@2.4.1): - resolution: {integrity: sha512-xsJAm52tV355S/MogTunV/m1wg6P6tFg9Yhi4AC2OE9p2aa0k/FYHzWmrCrsEAVimCd8n/iTXmMRSrQk5QpxiA==} - peerDependencies: - tslib: '*' - dependencies: - '@microsoft/applicationinsights-shims': 3.0.1 - '@microsoft/dynamicproto-js': 2.0.3 - '@nevware21/ts-async': 0.5.1 - '@nevware21/ts-utils': 0.11.2 - tslib: 2.4.1 - dev: false - - /@microsoft/applicationinsights-dependencies-js@3.1.2(tslib@2.4.1): - resolution: {integrity: sha512-vFf/6s1ACvcmeDpAAMin2JefPQ+7lthfcNThLFOMPxRxsIKIsQMZ1rHhqd55xcZTNITCywhuK4dD+/YkwC9HPw==} - peerDependencies: - tslib: '*' - dependencies: - '@microsoft/applicationinsights-common': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-core-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-shims': 3.0.1 - '@microsoft/dynamicproto-js': 2.0.3 - '@nevware21/ts-async': 0.5.1 - '@nevware21/ts-utils': 0.11.2 - tslib: 2.4.1 - dev: false - - /@microsoft/applicationinsights-properties-js@3.1.2(tslib@2.4.1): - resolution: {integrity: sha512-GK+o/7RyIfySxAIHvw2oba5ca4WyvjE40+1gnRL15Pd/qnRn8+6OIOTpJ4kT1wg2l8CTVtPrUmIK4zeN6MqocA==} - peerDependencies: - tslib: '*' - dependencies: - '@microsoft/applicationinsights-common': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-core-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-shims': 3.0.1 - '@microsoft/dynamicproto-js': 2.0.3 - '@nevware21/ts-utils': 0.11.2 - tslib: 2.4.1 - dev: false - - /@microsoft/applicationinsights-react-js@17.1.2(history@5.3.0)(react@18.2.0)(tslib@2.4.1): - resolution: {integrity: sha512-i98Ep/UQvuLeDWWCWOLuvpF1cACOR98gafpTcOVeZSPKYlUtvFAqx6Xkn7HjjqZklxP9h0Hqjs5dreu4D5nM2A==} - peerDependencies: - history: '>= 4.10.1' - react: '>= 17.0.1 || ^18.0.0' - tslib: '*' - dependencies: - '@microsoft/applicationinsights-common': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-core-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-shims': 3.0.1 - '@microsoft/dynamicproto-js': 2.0.3 - '@nevware21/ts-utils': 0.11.2 - history: 5.3.0 - react: 18.2.0 - tslib: 2.4.1 - dev: false - - /@microsoft/applicationinsights-shims@3.0.1: - resolution: {integrity: sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==} - dependencies: - '@nevware21/ts-utils': 0.11.2 - dev: false - /@microsoft/applicationinsights-web-snippet@1.0.1: resolution: {integrity: sha512-2IHAOaLauc8qaAitvWS+U931T+ze+7MNWrDHY47IENP5y2UA0vqJDu67kWZDdpCN1fFC77sfgfB+HV7SrKshnQ==} dev: false - /@microsoft/applicationinsights-web@3.1.2(tslib@2.4.1): - resolution: {integrity: sha512-q+6RUtKChXrMf2+TN/dohK2p+LUTw8EIYKFtrujYG8/jh88fCdVqmgTCPk9bLb4wsH/dd5wLS+Aw7qVQtlYa9Q==} - peerDependencies: - tslib: '*' - dependencies: - '@microsoft/applicationinsights-analytics-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-cfgsync-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-channel-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-common': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-core-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-dependencies-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-properties-js': 3.1.2(tslib@2.4.1) - '@microsoft/applicationinsights-shims': 3.0.1 - '@microsoft/dynamicproto-js': 2.0.3 - '@nevware21/ts-async': 0.5.1 - '@nevware21/ts-utils': 0.11.2 - tslib: 2.4.1 - dev: false - - /@microsoft/dynamicproto-js@2.0.3: - resolution: {integrity: sha512-JTWTU80rMy3mdxOjjpaiDQsTLZ6YSGGqsjURsY6AUQtIj0udlF/jYmhdLZu8693ZIC0T1IwYnFa0+QeiMnziBA==} - dependencies: - '@nevware21/ts-utils': 0.11.2 - dev: false - /@mischnic/json-sourcemap@0.1.0: resolution: {integrity: sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==} engines: {node: '>=12.0.0'} @@ -7725,16 +7511,6 @@ packages: dev: true optional: true - /@nevware21/ts-async@0.5.1: - resolution: {integrity: sha512-O2kN8n2HpDWJ7Oji+oTMnhITrCndmrNvrHbGDwAIBydx+FWvLE/vrw4QwnRRMvSCa2AJrcP59Ryklxv30KfkWQ==} - dependencies: - '@nevware21/ts-utils': 0.11.2 - dev: false - - /@nevware21/ts-utils@0.11.2: - resolution: {integrity: sha512-80W8BkS09kkGuUHJX50Fqq+QqAslxUaOQytH+3JhRacXs1EpEt2JOOkYKytqFZAYir3SeH9fahniEaDzIBxlUw==} - dev: false - /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -9017,30 +8793,6 @@ packages: - typescript dev: true - /@silverhand/eslint-config-react@5.0.0(eslint@8.44.0)(postcss@8.4.38)(prettier@3.0.0)(stylelint@15.11.0)(typescript@5.3.3): - resolution: {integrity: sha512-ZHLke0twGmW73b23mPh1r38fw+4L+XL+9dedml21+OnXpftT3XM00igRocUgdfGTGxbGbQy1n5fLN5gizv5InQ==} - engines: {node: ^20.9.0} - peerDependencies: - stylelint: ^15.0.0 - dependencies: - '@silverhand/eslint-config': 5.0.0(eslint@8.44.0)(prettier@3.0.0)(typescript@5.3.3) - eslint-config-xo-react: 0.27.0(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.32.2)(eslint@8.44.0) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.44.0) - eslint-plugin-react: 7.32.2(eslint@8.44.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.44.0) - stylelint: 15.11.0(typescript@5.3.3) - stylelint-config-xo-scss: 0.15.0(postcss@8.4.38)(stylelint@15.11.0) - transitivePeerDependencies: - - '@types/eslint' - - eslint - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - postcss - - prettier - - supports-color - - typescript - dev: true - /@silverhand/eslint-config@5.0.0(eslint@8.44.0)(prettier@3.0.0)(typescript@5.3.3): resolution: {integrity: sha512-cVoe58TAtt2u5gvk9WpTGg2NlA3DVw6DeBOV1qxj3gnFGOtvUf6IMeX5gwcox3+zMNBOmVmOGljeVS7bSuJ80w==} engines: {node: ^20.9.0} @@ -10299,7 +10051,6 @@ packages: '@types/keygrip': 1.0.2 '@types/koa-compose': 3.2.5 '@types/node': 20.12.7 - dev: false /@types/koa__cors@5.0.0: resolution: {integrity: sha512-LCk/n25Obq5qlernGOK/2LUwa/2YJb2lxHUkkvYFDOpLXlVI6tKcdfCHRBQnOY4LwH6el5WOLs6PD/a8Uzau6g==} @@ -10340,10 +10091,6 @@ packages: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/minimist@1.2.5: - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - dev: true - /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: true @@ -10385,10 +10132,6 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true - /@types/oidc-provider@8.4.4: resolution: {integrity: sha512-+SlmKc4qlCJLjpw6Du/8cXw18JsPEYyQwoy+xheLkiuNsCz1mPEYI/lRXLQHvfJD9TH6+2/WDTLZQ2UUJ5G4bw==} dependencies: @@ -12229,11 +11972,6 @@ packages: engines: {node: '>=12.22'} dev: true - /css-functions-list@3.2.1: - resolution: {integrity: sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==} - engines: {node: '>=12 || >=16'} - dev: true - /css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} dependencies: @@ -12451,11 +12189,6 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - /decamelize@5.0.1: - resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} - engines: {node: '>=10'} - dev: true - /decamelize@6.0.0: resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -13760,13 +13493,6 @@ packages: flat-cache: 3.0.4 dev: true - /file-entry-cache@7.0.2: - resolution: {integrity: sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==} - engines: {node: '>=12.0.0'} - dependencies: - flat-cache: 3.2.0 - dev: true - /file-selector@0.6.0: resolution: {integrity: sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==} engines: {node: '>= 12'} @@ -13850,23 +13576,10 @@ packages: rimraf: 3.0.2 dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - /flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - dev: true - /follow-redirects@1.15.5: resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} engines: {node: '>=4.0'} @@ -14519,6 +14232,7 @@ packages: resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} dependencies: '@babel/runtime': 7.19.4 + dev: true /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -14571,11 +14285,6 @@ packages: engines: {node: '>=8'} dev: true - /html-tags@3.3.1: - resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} - engines: {node: '>=8'} - dev: true - /html-url-attributes@3.0.0: resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==} dev: true @@ -14879,11 +14588,6 @@ packages: engines: {node: '>=8'} dev: true - /indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - dev: true - /inflation@2.0.0: resolution: {integrity: sha512-m3xv4hJYR2oXw4o4Y5l6P5P16WYmazYof+el6Al3f+YlggGj6qT9kImBAnzDelRALnP5d3h4jGBPKzYCizjZZw==} engines: {node: '>= 0.8.0'} @@ -16131,6 +15835,7 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true /js-tokens@8.0.3: resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==} @@ -16221,6 +15926,7 @@ packages: /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: false /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -16357,6 +16063,7 @@ packages: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 + dev: false /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} @@ -16377,10 +16084,6 @@ packages: resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==} dev: true - /known-css-properties@0.29.0: - resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} - dev: true - /koa-body@6.0.1: resolution: {integrity: sha512-M8ZvMD8r+kPHy28aWP9VxL7kY8oPWA+C7ZgCljrCMeaU7uX6wsIQgDHskyrAr9sw+jqnIXyv4Mlxri5R4InIJg==} dependencies: @@ -16882,6 +16585,7 @@ packages: hasBin: true dependencies: js-tokens: 4.0.0 + dev: true /loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} @@ -17184,24 +16888,6 @@ packages: resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} engines: {node: '>= 0.6'} - /meow@10.1.5: - resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 7.0.2 - decamelize: 5.0.1 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 8.0.0 - redent: 4.0.0 - trim-newlines: 4.1.1 - type-fest: 1.4.0 - yargs-parser: 20.2.9 - dev: true - /meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} @@ -18710,15 +18396,6 @@ packages: postcss: 8.4.31 dev: true - /postcss-safe-parser@6.0.0(postcss@8.4.38): - resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.3.3 - dependencies: - postcss: 8.4.38 - dev: true - /postcss-scss@4.0.5(postcss@8.4.31): resolution: {integrity: sha512-F7xpB6TrXyqUh3GKdyB4Gkp3QL3DDW1+uI+gxx/oJnUt/qXI4trj5OGlp9rOKdoABGULuqtqeG+3HEVQk4DjmA==} engines: {node: '>=12.0'} @@ -18728,15 +18405,6 @@ packages: postcss: 8.4.31 dev: true - /postcss-scss@4.0.5(postcss@8.4.38): - resolution: {integrity: sha512-F7xpB6TrXyqUh3GKdyB4Gkp3QL3DDW1+uI+gxx/oJnUt/qXI4trj5OGlp9rOKdoABGULuqtqeG+3HEVQk4DjmA==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.3.3 - dependencies: - postcss: 8.4.38 - dev: true - /postcss-selector-parser@6.0.11: resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} engines: {node: '>=4'} @@ -18753,14 +18421,6 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss-selector-parser@6.0.16: - resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: true - /postcss-sorting@7.0.1(postcss@8.4.31): resolution: {integrity: sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==} peerDependencies: @@ -18795,15 +18455,6 @@ packages: source-map-js: 1.0.2 dev: true - /postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.2.0 - dev: true - /postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -19513,6 +19164,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 + dev: true /reactcss@1.2.3(react@18.2.0): resolution: {integrity: sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==} @@ -19532,15 +19184,6 @@ packages: type-fest: 0.8.1 dev: true - /read-pkg-up@8.0.0: - resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} - engines: {node: '>=12'} - dependencies: - find-up: 5.0.0 - read-pkg: 6.0.0 - type-fest: 1.4.0 - dev: true - /read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} @@ -19551,16 +19194,6 @@ packages: type-fest: 0.6.0 dev: true - /read-pkg@6.0.0: - resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} - engines: {node: '>=12'} - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 3.0.3 - parse-json: 5.2.0 - type-fest: 1.4.0 - dev: true - /read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} @@ -19624,14 +19257,6 @@ packages: strip-indent: 3.0.0 dev: true - /redent@4.0.0: - resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} - engines: {node: '>=12'} - dependencies: - indent-string: 5.0.0 - strip-indent: 4.0.0 - dev: true - /redis@4.6.5: resolution: {integrity: sha512-O0OWA36gDQbswOdUuAhRL6mTZpHFN525HlgZgDaVNgCJIAZR3ya06NTESb0R+TUZ+BFaDpz6NnnVvoMx9meUFg==} dependencies: @@ -20296,11 +19921,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - dev: true - /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: @@ -20592,13 +20212,6 @@ packages: min-indent: 1.0.1 dev: true - /strip-indent@4.0.0: - resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} - engines: {node: '>=12'} - dependencies: - min-indent: 1.0.1 - dev: true - /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -20648,20 +20261,6 @@ packages: - postcss dev: true - /stylelint-config-xo-scss@0.15.0(postcss@8.4.38)(stylelint@15.11.0): - resolution: {integrity: sha512-X9WD8cDofWFWy3uaKdwwm+DjEvgI/+h7AtlaPagkhNAeOWH/GFQoeciBvNvyJ8tB1p00SoIzCn2IIOIKXCbxYA==} - engines: {node: '>=12'} - peerDependencies: - stylelint: '>=14.5.1 || ^15.0.0' - dependencies: - postcss-scss: 4.0.5(postcss@8.4.38) - stylelint: 15.11.0(typescript@5.3.3) - stylelint-config-xo: 0.21.1(stylelint@15.11.0) - stylelint-scss: 4.3.0(stylelint@15.11.0) - transitivePeerDependencies: - - postcss - dev: true - /stylelint-config-xo@0.21.1(stylelint@15.0.0): resolution: {integrity: sha512-ORyxhq/Yutg27NgYlStkbXhK+Lz1SqZJDqV9Y2oWcfRFcDdgVAyM6ic7frOW00UH+OFyuGpTdIbTNTtVgsWpcw==} engines: {node: '>=12'} @@ -20673,17 +20272,6 @@ packages: stylelint-order: 5.0.0(stylelint@15.0.0) dev: true - /stylelint-config-xo@0.21.1(stylelint@15.11.0): - resolution: {integrity: sha512-ORyxhq/Yutg27NgYlStkbXhK+Lz1SqZJDqV9Y2oWcfRFcDdgVAyM6ic7frOW00UH+OFyuGpTdIbTNTtVgsWpcw==} - engines: {node: '>=12'} - peerDependencies: - stylelint: '>=14 || ^15.0.0' - dependencies: - stylelint: 15.11.0(typescript@5.3.3) - stylelint-declaration-block-no-ignored-properties: 2.5.0(stylelint@15.11.0) - stylelint-order: 5.0.0(stylelint@15.11.0) - dev: true - /stylelint-declaration-block-no-ignored-properties@2.5.0(stylelint@15.0.0): resolution: {integrity: sha512-UNz5nUC5GMgMb6GPc/pHUTC0+ydxTdj2mUn7XcKRdwQoiUzzUmWWdSf1aFv2UzrW4x8JYNReE1u5JOj7g0ThJw==} engines: {node: '>=6'} @@ -20693,15 +20281,6 @@ packages: stylelint: 15.0.0 dev: true - /stylelint-declaration-block-no-ignored-properties@2.5.0(stylelint@15.11.0): - resolution: {integrity: sha512-UNz5nUC5GMgMb6GPc/pHUTC0+ydxTdj2mUn7XcKRdwQoiUzzUmWWdSf1aFv2UzrW4x8JYNReE1u5JOj7g0ThJw==} - engines: {node: '>=6'} - peerDependencies: - stylelint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 - dependencies: - stylelint: 15.11.0(typescript@5.3.3) - dev: true - /stylelint-order@5.0.0(stylelint@15.0.0): resolution: {integrity: sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==} peerDependencies: @@ -20712,16 +20291,6 @@ packages: stylelint: 15.0.0 dev: true - /stylelint-order@5.0.0(stylelint@15.11.0): - resolution: {integrity: sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==} - peerDependencies: - stylelint: ^14.0.0 || ^15.0.0 - dependencies: - postcss: 8.4.31 - postcss-sorting: 7.0.1(postcss@8.4.31) - stylelint: 15.11.0(typescript@5.3.3) - dev: true - /stylelint-scss@4.3.0(stylelint@15.0.0): resolution: {integrity: sha512-GvSaKCA3tipzZHoz+nNO7S02ZqOsdBzMiCx9poSmLlb3tdJlGddEX/8QzCOD8O7GQan9bjsvLMsO5xiw6IhhIQ==} peerDependencies: @@ -20735,19 +20304,6 @@ packages: stylelint: 15.0.0 dev: true - /stylelint-scss@4.3.0(stylelint@15.11.0): - resolution: {integrity: sha512-GvSaKCA3tipzZHoz+nNO7S02ZqOsdBzMiCx9poSmLlb3tdJlGddEX/8QzCOD8O7GQan9bjsvLMsO5xiw6IhhIQ==} - peerDependencies: - stylelint: ^14.5.1 || ^15.0.0 - dependencies: - lodash: 4.17.21 - postcss-media-query-parser: 0.2.3 - postcss-resolve-nested-selector: 0.1.1 - postcss-selector-parser: 6.0.13 - postcss-value-parser: 4.2.0 - stylelint: 15.11.0(typescript@5.3.3) - dev: true - /stylelint@15.0.0: resolution: {integrity: sha512-K97Jgy0ZYMSs6gXoboXbWvc0KvvGnUftiI1Tiv70mQ/DpeDTHOlqQSk3o65Ien+ddYAJeLjzkYM0O6TWiHdoSg==} engines: {node: ^14.13.1 || >=16.0.0} @@ -20799,56 +20355,6 @@ packages: - supports-color dev: true - /stylelint@15.11.0(typescript@5.3.3): - resolution: {integrity: sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==} - engines: {node: ^14.13.1 || >=16.0.0} - hasBin: true - dependencies: - '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) - '@csstools/css-tokenizer': 2.2.4 - '@csstools/media-query-list-parser': 2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) - '@csstools/selector-specificity': 3.0.3(postcss-selector-parser@6.0.16) - balanced-match: 2.0.0 - colord: 2.9.3 - cosmiconfig: 8.3.6(typescript@5.3.3) - css-functions-list: 3.2.1 - css-tree: 2.3.1 - debug: 4.3.4 - fast-glob: 3.3.2 - fastest-levenshtein: 1.0.16 - file-entry-cache: 7.0.2 - global-modules: 2.0.0 - globby: 11.1.0 - globjoin: 0.1.4 - html-tags: 3.3.1 - ignore: 5.3.1 - import-lazy: 4.0.0 - imurmurhash: 0.1.4 - is-plain-object: 5.0.0 - known-css-properties: 0.29.0 - mathml-tag-names: 2.1.3 - meow: 10.1.5 - micromatch: 4.0.5 - normalize-path: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.38 - postcss-resolve-nested-selector: 0.1.1 - postcss-safe-parser: 6.0.0(postcss@8.4.38) - postcss-selector-parser: 6.0.16 - postcss-value-parser: 4.2.0 - resolve-from: 5.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - style-search: 0.1.0 - supports-hyperlinks: 3.0.0 - svg-tags: 1.0.0 - table: 6.8.2 - write-file-atomic: 5.0.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /superagent@8.1.2: resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} engines: {node: '>=6.4.0 <13 || >=14'} @@ -20910,14 +20416,6 @@ packages: supports-color: 7.2.0 dev: true - /supports-hyperlinks@3.0.0: - resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} - engines: {node: '>=14.18'} - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -20976,17 +20474,6 @@ packages: strip-ansi: 6.0.1 dev: true - /table@6.8.2: - resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} - engines: {node: '>=10.0.0'} - dependencies: - ajv: 8.12.0 - lodash.truncate: 4.4.2 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -21186,11 +20673,6 @@ packages: engines: {node: '>=8'} dev: true - /trim-newlines@4.1.1: - resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} - engines: {node: '>=12'} - dev: true - /trim-trailing-lines@1.1.4: resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==} dev: true @@ -22112,14 +21594,6 @@ packages: signal-exit: 3.0.7 dev: true - /write-file-atomic@5.0.1: - resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - imurmurhash: 0.1.4 - signal-exit: 4.1.0 - dev: true - /ws@8.16.0: resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} engines: {node: '>=10.0.0'}