From ed0ed3c46456f541cf4f85083511304763228b8b Mon Sep 17 00:00:00 2001 From: omergronich Date: Sat, 7 Dec 2024 01:20:06 +0200 Subject: [PATCH] Added a more complex example for persistence. This examples demonstrates how to selectively persist queries to different persisters. --- .../.devcontainer/devcontainer.json | 4 + .../angular/multiple-persisters/.eslintrc.cjs | 6 + .../angular/multiple-persisters/README.md | 6 + .../angular/multiple-persisters/angular.json | 104 ++++++++++ .../angular/multiple-persisters/package.json | 33 +++ .../src/app/app.component.ts | 30 +++ .../multiple-persisters/src/app/app.config.ts | 60 ++++++ .../app/components/session-data.component.ts | 75 +++++++ .../components/user-preferences.component.ts | 73 +++++++ .../app/interceptor/mock-api.interceptor.ts | 43 ++++ .../multiple-persisters/src/favicon.ico | Bin 0 -> 15086 bytes .../multiple-persisters/src/index.html | 13 ++ .../angular/multiple-persisters/src/main.ts | 5 + .../multiple-persisters/src/styles.css | 3 + .../multiple-persisters/tailwind.config.js | 8 + .../multiple-persisters/tsconfig.app.json | 9 + .../angular/multiple-persisters/tsconfig.json | 31 +++ pnpm-lock.yaml | 194 ++++++++++++------ 18 files changed, 629 insertions(+), 68 deletions(-) create mode 100644 examples/angular/multiple-persisters/.devcontainer/devcontainer.json create mode 100644 examples/angular/multiple-persisters/.eslintrc.cjs create mode 100644 examples/angular/multiple-persisters/README.md create mode 100644 examples/angular/multiple-persisters/angular.json create mode 100644 examples/angular/multiple-persisters/package.json create mode 100644 examples/angular/multiple-persisters/src/app/app.component.ts create mode 100644 examples/angular/multiple-persisters/src/app/app.config.ts create mode 100644 examples/angular/multiple-persisters/src/app/components/session-data.component.ts create mode 100644 examples/angular/multiple-persisters/src/app/components/user-preferences.component.ts create mode 100644 examples/angular/multiple-persisters/src/app/interceptor/mock-api.interceptor.ts create mode 100644 examples/angular/multiple-persisters/src/favicon.ico create mode 100644 examples/angular/multiple-persisters/src/index.html create mode 100644 examples/angular/multiple-persisters/src/main.ts create mode 100644 examples/angular/multiple-persisters/src/styles.css create mode 100644 examples/angular/multiple-persisters/tailwind.config.js create mode 100644 examples/angular/multiple-persisters/tsconfig.app.json create mode 100644 examples/angular/multiple-persisters/tsconfig.json diff --git a/examples/angular/multiple-persisters/.devcontainer/devcontainer.json b/examples/angular/multiple-persisters/.devcontainer/devcontainer.json new file mode 100644 index 00000000000..365adf8f4c3 --- /dev/null +++ b/examples/angular/multiple-persisters/.devcontainer/devcontainer.json @@ -0,0 +1,4 @@ +{ + "name": "Node.js", + "image": "mcr.microsoft.com/devcontainers/javascript-node:22" +} diff --git a/examples/angular/multiple-persisters/.eslintrc.cjs b/examples/angular/multiple-persisters/.eslintrc.cjs new file mode 100644 index 00000000000..cca134ce166 --- /dev/null +++ b/examples/angular/multiple-persisters/.eslintrc.cjs @@ -0,0 +1,6 @@ +// @ts-check + +/** @type {import('eslint').Linter.Config} */ +const config = {} + +module.exports = config diff --git a/examples/angular/multiple-persisters/README.md b/examples/angular/multiple-persisters/README.md new file mode 100644 index 00000000000..d0551cf9de0 --- /dev/null +++ b/examples/angular/multiple-persisters/README.md @@ -0,0 +1,6 @@ +# TanStack Query Angular multiple persisters example + +To run this example: + +- `npm install` or `yarn` or `pnpm i` or `bun i` +- `npm run start` or `yarn start` or `pnpm start` or `bun start` diff --git a/examples/angular/multiple-persisters/angular.json b/examples/angular/multiple-persisters/angular.json new file mode 100644 index 00000000000..e9ada927850 --- /dev/null +++ b/examples/angular/multiple-persisters/angular.json @@ -0,0 +1,104 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "cli": { + "packageManager": "pnpm", + "analytics": false, + "cache": { + "enabled": false + } + }, + "newProjectRoot": "projects", + "projects": { + "multiple-persisters": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "inlineTemplate": true, + "inlineStyle": true, + "skipTests": true + }, + "@schematics/angular:class": { + "skipTests": true + }, + "@schematics/angular:directive": { + "skipTests": true + }, + "@schematics/angular:guard": { + "skipTests": true + }, + "@schematics/angular:interceptor": { + "skipTests": true + }, + "@schematics/angular:pipe": { + "skipTests": true + }, + "@schematics/angular:resolver": { + "skipTests": true + }, + "@schematics/angular:service": { + "skipTests": true + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/multiple-persisters", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "tsconfig.app.json", + "assets": ["src/favicon.ico", "src/assets"], + "styles": ["src/styles.css"], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular/build:dev-server", + "configurations": { + "production": { + "buildTarget": "multiple-persisters:build:production" + }, + "development": { + "buildTarget": "multiple-persisters:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular/build:extract-i18n", + "options": { + "buildTarget": "multiple-persisters:build" + } + } + } + } + } +} diff --git a/examples/angular/multiple-persisters/package.json b/examples/angular/multiple-persisters/package.json new file mode 100644 index 00000000000..f4230fea7e9 --- /dev/null +++ b/examples/angular/multiple-persisters/package.json @@ -0,0 +1,33 @@ +{ + "name": "@tanstack/query-example-angular-multiple-persisters", + "type": "module", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development" + }, + "private": true, + "dependencies": { + "@angular/common": "^19.1.0-next.0", + "@angular/compiler": "^19.1.0-next.0", + "@angular/core": "^19.1.0-next.0", + "@angular/platform-browser": "^19.1.0-next.0", + "@angular/platform-browser-dynamic": "^19.1.0-next.0", + "@tanstack/angular-query-experimental": "^5.62.3", + "@tanstack/angular-query-persist-client-experimental": "^5.62.3", + "@tanstack/query-sync-storage-persister": "^5.62.3", + "rxjs": "^7.8.1", + "tslib": "^2.6.3", + "zone.js": "^0.15.0" + }, + "devDependencies": { + "@angular/build": "^19.0.2", + "@angular/cli": "^19.0.2", + "@angular/compiler-cli": "^19.1.0-next.0", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.7", + "typescript": "5.7.2" + } +} diff --git a/examples/angular/multiple-persisters/src/app/app.component.ts b/examples/angular/multiple-persisters/src/app/app.component.ts new file mode 100644 index 00000000000..9ad189c91ba --- /dev/null +++ b/examples/angular/multiple-persisters/src/app/app.component.ts @@ -0,0 +1,30 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core' +import { UserPreferencesComponent } from './components/user-preferences.component' +import { SessionDataComponent } from './components/session-data.component' + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + selector: 'app-root', + standalone: true, + template: ` +
+
+

+ TanStack Query Persistence Demo +

+

+ This demo illustrates how to selectively persist queries to different + persisters. By leveraging shouldDehydrateQuery, it is possible to + strategically cache data in multiple persisters based on specific + query requirements. +

+
+ + +
+
+
+ `, + imports: [UserPreferencesComponent, SessionDataComponent], +}) +export class AppComponent {} diff --git a/examples/angular/multiple-persisters/src/app/app.config.ts b/examples/angular/multiple-persisters/src/app/app.config.ts new file mode 100644 index 00000000000..544da92c30f --- /dev/null +++ b/examples/angular/multiple-persisters/src/app/app.config.ts @@ -0,0 +1,60 @@ +import { + provideHttpClient, + withFetch, + withInterceptors, +} from '@angular/common/http' +import { + QueryClient, + provideTanStackQuery, + withDevtools, +} from '@tanstack/angular-query-experimental' +import { createSyncStoragePersister } from '@tanstack/query-sync-storage-persister' +import { withPersistQueryClient } from '@tanstack/angular-query-persist-client-experimental' +import { mockInterceptor } from './interceptor/mock-api.interceptor' +import type { ApplicationConfig } from '@angular/core' + +const localStoragePersister = createSyncStoragePersister({ + storage: window.localStorage, +}) + +const sessionStoragePersister = createSyncStoragePersister({ + storage: window.sessionStorage, +}) + +export const appConfig: ApplicationConfig = { + providers: [ + provideHttpClient(withFetch(), withInterceptors([mockInterceptor])), + provideTanStackQuery( + new QueryClient({ + defaultOptions: { + queries: { + gcTime: 1000 * 60 * 60 * 24, // 24 hours + }, + }, + }), + withDevtools(), + withPersistQueryClient([ + { + persistOptions: { + persister: localStoragePersister, + dehydrateOptions: { + shouldDehydrateQuery: (query) => + query.state.status === 'success' && + query.queryKey[0] === 'preferences', + }, + }, + }, + { + persistOptions: { + persister: sessionStoragePersister, + dehydrateOptions: { + shouldDehydrateQuery: (query) => + query.state.status === 'success' && + query.queryKey[0] === 'session', + }, + }, + }, + ]), + ), + ], +} diff --git a/examples/angular/multiple-persisters/src/app/components/session-data.component.ts b/examples/angular/multiple-persisters/src/app/components/session-data.component.ts new file mode 100644 index 00000000000..88e9f85b6e2 --- /dev/null +++ b/examples/angular/multiple-persisters/src/app/components/session-data.component.ts @@ -0,0 +1,75 @@ +import { Component, inject } from '@angular/core' +import { injectQuery } from '@tanstack/angular-query-experimental' +import { HttpClient } from '@angular/common/http' +import { firstValueFrom } from 'rxjs' +import { DatePipe } from '@angular/common' + +interface SessionData { + lastActive: string + currentView: string + activeFilters: Array + temporaryNotes: string +} + +@Component({ + selector: 'session-data', + template: ` + @if (sessionData.isLoading()) { +
+
+
+
+ } @else if (sessionData.isError()) { +
+ Error loading session data: {{ sessionData.error() }} +
+ } @else { +
+
+ 🔑 +

+ Session Data + (stored in sessionStorage) +

+
+
+
+ Last Active: + + {{ sessionData.data()?.lastActive | date }} + +
+
+ Current View: + {{ + sessionData.data()?.currentView + }} +
+
+ Active Filters: + + {{ sessionData.data()?.activeFilters?.join(', ') }} + +
+
+ Temporary Notes: + {{ + sessionData.data()?.temporaryNotes + }} +
+
+
+ } + `, + standalone: true, + imports: [DatePipe], +}) +export class SessionDataComponent { + #http = inject(HttpClient) + + sessionData = injectQuery(() => ({ + queryKey: ['session'], + queryFn: () => firstValueFrom(this.#http.get('/session')), + staleTime: 1000 * 60 * 60, // 1 hour + })) +} diff --git a/examples/angular/multiple-persisters/src/app/components/user-preferences.component.ts b/examples/angular/multiple-persisters/src/app/components/user-preferences.component.ts new file mode 100644 index 00000000000..c499ccd27ea --- /dev/null +++ b/examples/angular/multiple-persisters/src/app/components/user-preferences.component.ts @@ -0,0 +1,73 @@ +import { Component, inject } from '@angular/core' +import { injectQuery } from '@tanstack/angular-query-experimental' +import { HttpClient } from '@angular/common/http' +import { firstValueFrom } from 'rxjs' + +interface UserPreferences { + theme: string + language: string + notifications: boolean + fontSize: string +} + +@Component({ + selector: 'user-preferences', + template: ` + @if (userPreferences.isLoading()) { +
+
+
+
+ } @else if (userPreferences.isError()) { +
+ Error loading preferences: {{ userPreferences.error() }} +
+ } @else { +
+
+ ⚙️ +

+ User Preferences + (stored in localStorage) +

+
+
+
+ Theme: + {{ userPreferences.data()?.theme }} +
+
+ Language: + {{ + userPreferences.data()?.language + }} +
+
+ Notifications: + {{ + userPreferences.data()?.notifications ? 'Enabled' : 'Disabled' + }} +
+
+ Font Size: + {{ + userPreferences.data()?.fontSize + }} +
+
+
+ } + `, + standalone: true, + imports: [], +}) +export class UserPreferencesComponent { + #http = inject(HttpClient) + + userPreferences = injectQuery(() => ({ + queryKey: ['preferences'], + queryFn: () => + firstValueFrom(this.#http.get('/preferences')), + staleTime: 1000 * 60 * 60, // 1 hour + })) +} diff --git a/examples/angular/multiple-persisters/src/app/interceptor/mock-api.interceptor.ts b/examples/angular/multiple-persisters/src/app/interceptor/mock-api.interceptor.ts new file mode 100644 index 00000000000..74b3ee0e50f --- /dev/null +++ b/examples/angular/multiple-persisters/src/app/interceptor/mock-api.interceptor.ts @@ -0,0 +1,43 @@ +/** + * MockApiInterceptor is used to simulate API responses for `/api/tasks` endpoints. + * It handles the following operations: + * - GET: Fetches all tasks from localStorage. + * - POST: Adds a new task to localStorage. + * - DELETE: Clears all tasks from localStorage. + * Simulated responses include a delay to mimic network latency. + */ +import { HttpResponse } from '@angular/common/http' +import { delay, of } from 'rxjs' +import type { + HttpEvent, + HttpHandlerFn, + HttpInterceptorFn, + HttpRequest, +} from '@angular/common/http' +import type { Observable } from 'rxjs' + +export const mockInterceptor: HttpInterceptorFn = ( + req: HttpRequest, + next: HttpHandlerFn, +): Observable> => { + const respondWith = (status: number, body: any) => + of(new HttpResponse({ status, body })).pipe(delay(100)) + if (req.url === '/preferences') { + return respondWith(200, { + theme: 'dark', + language: 'en', + notifications: true, + fontSize: 'medium', + }) + } + + if (req.url === '/session') { + return respondWith(200, { + lastActive: '2024-02-28T12:00:00Z', + currentView: 'dashboard', + activeFilters: ['recent', 'important'], + temporaryNotes: 'Meeting at 3PM', + }) + } + return next(req) +} diff --git a/examples/angular/multiple-persisters/src/favicon.ico b/examples/angular/multiple-persisters/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..57614f9c967596fad0a3989bec2b1deff33034f6 GIT binary patch literal 15086 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 Nr__JTFzvMr^FKp4S3v*( literal 0 HcmV?d00001 diff --git a/examples/angular/multiple-persisters/src/index.html b/examples/angular/multiple-persisters/src/index.html new file mode 100644 index 00000000000..94e60f2df09 --- /dev/null +++ b/examples/angular/multiple-persisters/src/index.html @@ -0,0 +1,13 @@ + + + + + TanStack Query Angular multiple persisters example + + + + + + + + diff --git a/examples/angular/multiple-persisters/src/main.ts b/examples/angular/multiple-persisters/src/main.ts new file mode 100644 index 00000000000..c3d8f9af997 --- /dev/null +++ b/examples/angular/multiple-persisters/src/main.ts @@ -0,0 +1,5 @@ +import { bootstrapApplication } from '@angular/platform-browser' +import { appConfig } from './app/app.config' +import { AppComponent } from './app/app.component' + +bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)) diff --git a/examples/angular/multiple-persisters/src/styles.css b/examples/angular/multiple-persisters/src/styles.css new file mode 100644 index 00000000000..b5c61c95671 --- /dev/null +++ b/examples/angular/multiple-persisters/src/styles.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/examples/angular/multiple-persisters/tailwind.config.js b/examples/angular/multiple-persisters/tailwind.config.js new file mode 100644 index 00000000000..7d52777e058 --- /dev/null +++ b/examples/angular/multiple-persisters/tailwind.config.js @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: ['./src/**/*.{html,ts}'], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/examples/angular/multiple-persisters/tsconfig.app.json b/examples/angular/multiple-persisters/tsconfig.app.json new file mode 100644 index 00000000000..5b9d3c5ecb0 --- /dev/null +++ b/examples/angular/multiple-persisters/tsconfig.app.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"] +} diff --git a/examples/angular/multiple-persisters/tsconfig.json b/examples/angular/multiple-persisters/tsconfig.json new file mode 100644 index 00000000000..d0d73c8bebb --- /dev/null +++ b/examples/angular/multiple-persisters/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "bundler", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": ["ES2022", "dom"] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictStandalone": true, + "strictTemplates": true + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a7b3cb1556..06d0b69c5e7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,7 +24,7 @@ importers: version: 1.17.1(eslint@9.15.0(jiti@2.4.0))(typescript@5.7.2) '@tanstack/config': specifier: ^0.14.0 - version: 0.14.0(@types/node@22.9.3)(esbuild@0.24.0)(eslint@9.15.0(jiti@2.4.0))(rollup@4.27.4)(typescript@5.7.2)(vite@5.4.11(@types/node@22.9.3)(less@4.2.1)(lightningcss@1.27.0)(sass@1.81.0)(terser@5.31.6)) + version: 0.14.0(@types/node@22.9.3)(esbuild@0.19.12)(eslint@9.15.0(jiti@2.4.0))(rollup@4.27.4)(typescript@5.7.2)(vite@5.4.11(@types/node@22.9.3)(less@4.2.1)(lightningcss@1.27.0)(sass@1.81.0)(terser@5.31.6)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -349,6 +349,64 @@ importers: specifier: 5.7.2 version: 5.7.2 + examples/angular/multiple-persisters: + dependencies: + '@angular/common': + specifier: ^19.1.0-next.0 + version: 19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/compiler': + specifier: ^19.1.0-next.0 + version: 19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)) + '@angular/core': + specifier: ^19.1.0-next.0 + version: 19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/platform-browser': + specifier: ^19.1.0-next.0 + version: 19.1.0-next.0(@angular/common@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)) + '@angular/platform-browser-dynamic': + specifier: ^19.1.0-next.0 + version: 19.1.0-next.0(@angular/common@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.1.0-next.0(@angular/common@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0))) + '@tanstack/angular-query-experimental': + specifier: ^5.62.3 + version: link:../../../packages/angular-query-experimental + '@tanstack/angular-query-persist-client-experimental': + specifier: ^5.62.3 + version: link:../../../packages/angular-persist-query-client-experimental + '@tanstack/query-sync-storage-persister': + specifier: ^5.62.3 + version: link:../../../packages/query-sync-storage-persister + rxjs: + specifier: ^7.8.1 + version: 7.8.1 + tslib: + specifier: ^2.6.3 + version: 2.8.1 + zone.js: + specifier: ^0.15.0 + version: 0.15.0 + devDependencies: + '@angular/build': + specifier: ^19.0.2 + version: 19.0.2(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.9.3)(chokidar@4.0.1)(less@4.2.1)(lightningcss@1.27.0)(postcss@8.4.49)(tailwindcss@3.4.7)(terser@5.31.6)(typescript@5.7.2) + '@angular/cli': + specifier: ^19.0.2 + version: 19.0.2(@types/node@22.9.3)(chokidar@4.0.1) + '@angular/compiler-cli': + specifier: ^19.1.0-next.0 + version: 19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.49) + postcss: + specifier: ^8.4.49 + version: 8.4.49 + tailwindcss: + specifier: ^3.4.7 + version: 3.4.7 + typescript: + specifier: 5.7.2 + version: 5.7.2 + examples/angular/pagination: dependencies: '@angular/common': @@ -1905,7 +1963,7 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: ^17.3.8 - version: 17.3.8(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(typescript@5.4.5))(@types/express@4.17.21)(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.90.3(esbuild@0.20.1)))(lightningcss@1.27.0)(ng-packagr@17.3.0(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(typescript@5.4.5))(tailwindcss@3.4.7)(tslib@2.8.1)(typescript@5.4.5))(tailwindcss@3.4.7)(typescript@5.4.5) + version: 17.3.8(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(typescript@5.4.5))(@types/express@4.17.21)(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.90.3(esbuild@0.19.12)))(lightningcss@1.27.0)(ng-packagr@17.3.0(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(typescript@5.4.5))(tailwindcss@3.4.7)(tslib@2.8.1)(typescript@5.4.5))(tailwindcss@3.4.7)(typescript@5.4.5) '@angular/cli': specifier: ^17.3.8 version: 17.3.8(chokidar@3.6.0) @@ -2071,7 +2129,7 @@ importers: version: 5.6.3(webpack@5.96.1) webpack: specifier: ^5.96.1 - version: 5.96.1(esbuild@0.24.0)(webpack-cli@5.1.4) + version: 5.96.1(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 version: 5.1.4(webpack@5.96.1) @@ -2145,7 +2203,7 @@ importers: devDependencies: '@analogjs/vite-plugin-angular': specifier: ^1.6.4 - version: 1.6.4(@angular-devkit/build-angular@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.94.0(esbuild@0.19.12)))(lightningcss@1.27.0)(tailwindcss@3.4.7)(typescript@5.7.2))(@ngtools/webpack@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.94.0(esbuild@0.23.0))) + version: 1.6.4(@angular-devkit/build-angular@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.19.12)))(lightningcss@1.27.0)(tailwindcss@3.4.7)(typescript@5.7.2))(@ngtools/webpack@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.96.1(esbuild@0.19.12))) '@angular/compiler': specifier: ^19.1.0-next.0 version: 19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)) @@ -2175,7 +2233,7 @@ importers: version: 50.5.0(eslint@9.15.0(jiti@2.4.0)) tsup: specifier: 8.0.2 - version: 8.0.2(@microsoft/api-extractor@7.48.0(@types/node@22.9.3))(postcss@8.4.41)(typescript@5.7.2) + version: 8.0.2(@microsoft/api-extractor@7.48.0(@types/node@22.9.3))(postcss@8.4.49)(typescript@5.7.2) typescript: specifier: 5.7.2 version: 5.7.2 @@ -2191,7 +2249,7 @@ importers: devDependencies: '@analogjs/vite-plugin-angular': specifier: ^1.6.4 - version: 1.6.4(@angular-devkit/build-angular@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.24.0)))(lightningcss@1.27.0)(tailwindcss@3.4.7)(typescript@5.7.2))(@ngtools/webpack@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.96.1(esbuild@0.24.0))) + version: 1.6.4(@angular-devkit/build-angular@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.19.12)))(lightningcss@1.27.0)(tailwindcss@3.4.7)(typescript@5.7.2))(@ngtools/webpack@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.96.1(esbuild@0.19.12))) '@angular/core': specifier: ^19.1.0-next.0 version: 19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0) @@ -2225,7 +2283,7 @@ importers: devDependencies: '@analogjs/vite-plugin-angular': specifier: ^1.6.4 - version: 1.6.4(@angular-devkit/build-angular@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.24.0)))(lightningcss@1.27.0)(tailwindcss@3.4.7)(typescript@5.7.2))(@ngtools/webpack@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.96.1(esbuild@0.24.0))) + version: 1.6.4(@angular-devkit/build-angular@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.94.0(esbuild@0.19.12)))(lightningcss@1.27.0)(tailwindcss@3.4.7)(typescript@5.7.2))(@ngtools/webpack@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.94.0(esbuild@0.23.0))) '@angular/compiler': specifier: ^19.1.0-next.0 version: 19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)) @@ -2246,7 +2304,7 @@ importers: version: 50.5.0(eslint@9.15.0(jiti@2.4.0)) tsup: specifier: 8.0.2 - version: 8.0.2(@microsoft/api-extractor@7.48.0(@types/node@22.9.3))(postcss@8.4.49)(typescript@5.7.2) + version: 8.0.2(@microsoft/api-extractor@7.48.0(@types/node@22.9.3))(postcss@8.4.41)(typescript@5.7.2) typescript: specifier: 5.7.2 version: 5.7.2 @@ -16744,10 +16802,10 @@ snapshots: '@ngtools/webpack': 18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.94.0(esbuild@0.23.0)) ts-morph: 21.0.1 - '@analogjs/vite-plugin-angular@1.6.4(@angular-devkit/build-angular@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.24.0)))(lightningcss@1.27.0)(tailwindcss@3.4.7)(typescript@5.7.2))(@ngtools/webpack@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.96.1(esbuild@0.24.0)))': + '@analogjs/vite-plugin-angular@1.6.4(@angular-devkit/build-angular@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.19.12)))(lightningcss@1.27.0)(tailwindcss@3.4.7)(typescript@5.7.2))(@ngtools/webpack@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.96.1(esbuild@0.19.12)))': dependencies: - '@angular-devkit/build-angular': 18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.24.0)))(lightningcss@1.27.0)(tailwindcss@3.4.7)(typescript@5.7.2) - '@ngtools/webpack': 18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.96.1(esbuild@0.24.0)) + '@angular-devkit/build-angular': 18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.19.12)))(lightningcss@1.27.0)(tailwindcss@3.4.7)(typescript@5.7.2) + '@ngtools/webpack': 18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.96.1(esbuild@0.19.12)) ts-morph: 21.0.1 '@andrewbranch/untar.js@1.0.3': {} @@ -16773,7 +16831,7 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@17.3.8(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(typescript@5.4.5))(@types/express@4.17.21)(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.90.3(esbuild@0.20.1)))(lightningcss@1.27.0)(ng-packagr@17.3.0(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(typescript@5.4.5))(tailwindcss@3.4.7)(tslib@2.8.1)(typescript@5.4.5))(tailwindcss@3.4.7)(typescript@5.4.5)': + '@angular-devkit/build-angular@17.3.8(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(typescript@5.4.5))(@types/express@4.17.21)(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.90.3(esbuild@0.19.12)))(lightningcss@1.27.0)(ng-packagr@17.3.0(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(typescript@5.4.5))(tailwindcss@3.4.7)(tslib@2.8.1)(typescript@5.4.5))(tailwindcss@3.4.7)(typescript@5.4.5)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1703.8(chokidar@3.6.0) @@ -16835,11 +16893,11 @@ snapshots: undici: 6.11.1 vite: 5.1.7(@types/node@22.9.3)(less@4.2.0)(lightningcss@1.27.0)(sass@1.71.1)(terser@5.29.1) watchpack: 2.4.0 - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) webpack-dev-middleware: 6.1.2(webpack@5.90.3(esbuild@0.20.1)) webpack-dev-server: 4.15.1(webpack@5.90.3(esbuild@0.20.1)) webpack-merge: 5.10.0 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(webpack@5.90.3(esbuild@0.20.1)))(webpack@5.90.3(esbuild@0.20.1)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(webpack@5.90.3(esbuild@0.19.12)))(webpack@5.90.3(esbuild@0.20.1)) optionalDependencies: esbuild: 0.20.1 ng-packagr: 17.3.0(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(typescript@5.4.5))(tailwindcss@3.4.7)(tslib@2.8.1)(typescript@5.4.5) @@ -16950,7 +17008,7 @@ snapshots: - utf-8-validate - webpack-cli - '@angular-devkit/build-angular@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.24.0)))(lightningcss@1.27.0)(tailwindcss@3.4.7)(typescript@5.7.2)': + '@angular-devkit/build-angular@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(@types/node@22.9.3)(chokidar@3.6.0)(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.19.12)))(lightningcss@1.27.0)(tailwindcss@3.4.7)(typescript@5.7.2)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1802.12(chokidar@3.6.0) @@ -17015,7 +17073,7 @@ snapshots: webpack-dev-middleware: 7.4.2(webpack@5.94.0(esbuild@0.23.0)) webpack-dev-server: 5.0.4(webpack@5.94.0(esbuild@0.23.0)) webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.24.0)))(webpack@5.94.0(esbuild@0.23.0)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.19.12)))(webpack@5.94.0(esbuild@0.23.0)) optionalDependencies: esbuild: 0.23.0 tailwindcss: 3.4.7 @@ -17041,7 +17099,7 @@ snapshots: dependencies: '@angular-devkit/architect': 0.1703.8(chokidar@3.6.0) rxjs: 7.8.1 - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) webpack-dev-server: 4.15.1(webpack@5.90.3(esbuild@0.20.1)) transitivePeerDependencies: - chokidar @@ -21913,7 +21971,7 @@ snapshots: dependencies: '@angular/compiler-cli': 17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(typescript@5.4.5) typescript: 5.4.5 - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) '@ngtools/webpack@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.94.0(esbuild@0.23.0))': dependencies: @@ -21921,11 +21979,11 @@ snapshots: typescript: 5.7.2 webpack: 5.94.0(esbuild@0.19.12) - '@ngtools/webpack@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.96.1(esbuild@0.24.0))': + '@ngtools/webpack@18.2.12(@angular/compiler-cli@19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2))(typescript@5.7.2)(webpack@5.96.1(esbuild@0.19.12))': dependencies: '@angular/compiler-cli': 19.1.0-next.0(@angular/compiler@19.1.0-next.0(@angular/core@19.1.0-next.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.7.2) typescript: 5.7.2 - webpack: 5.96.1(esbuild@0.24.0) + webpack: 5.96.1(esbuild@0.19.12) '@nodelib/fs.scandir@2.1.5': dependencies: @@ -23034,14 +23092,14 @@ snapshots: '@swc/counter': 0.1.3 tslib: 2.8.1 - '@tanstack/config@0.14.0(@types/node@22.9.3)(esbuild@0.24.0)(eslint@9.15.0(jiti@2.4.0))(rollup@4.27.4)(typescript@5.7.2)(vite@5.4.11(@types/node@22.9.3)(less@4.2.1)(lightningcss@1.27.0)(sass@1.81.0)(terser@5.31.6))': + '@tanstack/config@0.14.0(@types/node@22.9.3)(esbuild@0.19.12)(eslint@9.15.0(jiti@2.4.0))(rollup@4.27.4)(typescript@5.7.2)(vite@5.4.11(@types/node@22.9.3)(less@4.2.1)(lightningcss@1.27.0)(sass@1.81.0)(terser@5.31.6))': dependencies: '@commitlint/parse': 19.5.0 '@eslint/js': 9.15.0 '@stylistic/eslint-plugin-js': 2.11.0(eslint@9.15.0(jiti@2.4.0)) commander: 12.1.0 current-git-branch: 1.1.0 - esbuild-register: 3.6.0(esbuild@0.24.0) + esbuild-register: 3.6.0(esbuild@0.19.12) eslint-plugin-import-x: 4.4.3(eslint@9.15.0(jiti@2.4.0))(typescript@5.7.2) eslint-plugin-n: 17.14.0(eslint@9.15.0(jiti@2.4.0)) globals: 15.12.0 @@ -24051,7 +24109,7 @@ snapshots: '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.96.1)': dependencies: - webpack: 5.96.1(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.96.1(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.96.1) '@webpack-cli/info@1.5.0(webpack-cli@4.10.0)': @@ -24061,7 +24119,7 @@ snapshots: '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.96.1)': dependencies: - webpack: 5.96.1(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.96.1(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.96.1) '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)': @@ -24070,7 +24128,7 @@ snapshots: '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.96.1)': dependencies: - webpack: 5.96.1(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.96.1(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.96.1) '@xmldom/xmldom@0.7.13': {} @@ -24583,7 +24641,7 @@ snapshots: '@babel/core': 7.24.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) babel-loader@9.1.3(@babel/core@7.25.2)(webpack@5.94.0(esbuild@0.23.0)): dependencies: @@ -24597,7 +24655,7 @@ snapshots: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.96.1(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.96.1(esbuild@0.19.12)(webpack-cli@5.1.4) babel-plugin-add-module-exports@0.2.1: {} @@ -25586,7 +25644,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) copy-webpack-plugin@12.0.2(webpack@5.94.0(esbuild@0.23.0)): dependencies: @@ -25836,7 +25894,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) css-loader@7.1.2(webpack@5.94.0(esbuild@0.23.0)): dependencies: @@ -26376,10 +26434,10 @@ snapshots: transitivePeerDependencies: - supports-color - esbuild-register@3.6.0(esbuild@0.24.0): + esbuild-register@3.6.0(esbuild@0.19.12): dependencies: debug: 4.3.7 - esbuild: 0.24.0 + esbuild: 0.19.12 transitivePeerDependencies: - supports-color @@ -27997,7 +28055,7 @@ snapshots: util.promisify: 1.0.0 webpack: 4.44.2(webpack-cli@4.10.0) - html-webpack-plugin@5.6.3(webpack@5.90.3(esbuild@0.20.1)): + html-webpack-plugin@5.6.3(webpack@5.90.3(esbuild@0.19.12)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -28005,7 +28063,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) optional: true html-webpack-plugin@5.6.3(webpack@5.94.0(esbuild@0.19.12)): @@ -28019,7 +28077,7 @@ snapshots: webpack: 5.94.0(esbuild@0.19.12) optional: true - html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.24.0)): + html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.19.12)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -28027,7 +28085,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.96.1(esbuild@0.24.0) + webpack: 5.96.1(esbuild@0.19.12) optional: true html-webpack-plugin@5.6.3(webpack@5.96.1): @@ -28038,7 +28096,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.96.1(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.96.1(esbuild@0.19.12)(webpack-cli@5.1.4) htmlparser2@6.1.0: dependencies: @@ -28992,7 +29050,7 @@ snapshots: dependencies: klona: 2.0.6 less: 4.2.0 - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) less-loader@12.2.0(less@4.2.0)(webpack@5.94.0(esbuild@0.23.0)): dependencies: @@ -29040,7 +29098,7 @@ snapshots: dependencies: webpack-sources: 3.2.3 optionalDependencies: - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) license-webpack-plugin@4.0.2(webpack@5.94.0(esbuild@0.23.0)): dependencies: @@ -30050,7 +30108,7 @@ snapshots: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) mini-css-extract-plugin@2.9.0(webpack@5.94.0(esbuild@0.23.0)): dependencies: @@ -31473,7 +31531,7 @@ snapshots: postcss: 8.4.35 semver: 7.6.3 optionalDependencies: - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) transitivePeerDependencies: - typescript @@ -32519,7 +32577,7 @@ snapshots: neo-async: 2.6.2 optionalDependencies: sass: 1.71.1 - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) sass-loader@16.0.0(sass@1.77.6)(webpack@5.94.0(esbuild@0.23.0)): dependencies: @@ -33020,7 +33078,7 @@ snapshots: dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) source-map-loader@5.0.0(webpack@5.94.0(esbuild@0.23.0)): dependencies: @@ -33521,49 +33579,49 @@ snapshots: webpack-sources: 1.4.3 worker-farm: 1.7.0 - terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.94.0(esbuild@0.23.0)): + terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.90.3(esbuild@0.20.1)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.6 - webpack: 5.94.0(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.19.12) optionalDependencies: esbuild: 0.19.12 - terser-webpack-plugin@5.3.10(esbuild@0.24.0)(webpack@5.90.3(esbuild@0.20.1)): + terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.94.0(esbuild@0.23.0)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.6 - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.94.0(esbuild@0.19.12) optionalDependencies: - esbuild: 0.24.0 + esbuild: 0.19.12 - terser-webpack-plugin@5.3.10(esbuild@0.24.0)(webpack@5.96.1(esbuild@0.24.0)): + terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.96.1(esbuild@0.19.12)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.6 - webpack: 5.96.1(esbuild@0.24.0) + webpack: 5.96.1(esbuild@0.19.12) optionalDependencies: - esbuild: 0.24.0 + esbuild: 0.19.12 - terser-webpack-plugin@5.3.10(esbuild@0.24.0)(webpack@5.96.1): + terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.96.1): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.6 - webpack: 5.96.1(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.96.1(esbuild@0.19.12)(webpack-cli@5.1.4) optionalDependencies: - esbuild: 0.24.0 + esbuild: 0.19.12 terser@4.8.1: dependencies: @@ -34770,7 +34828,7 @@ snapshots: import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.96.1(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.96.1(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-merge: 5.10.0 webpack-dev-middleware@5.3.4(webpack@5.90.3(esbuild@0.20.1)): @@ -34780,7 +34838,7 @@ snapshots: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) webpack-dev-middleware@6.1.2(webpack@5.90.3(esbuild@0.20.1)): dependencies: @@ -34790,7 +34848,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) webpack-dev-middleware@7.4.2(webpack@5.94.0(esbuild@0.23.0)): dependencies: @@ -34836,7 +34894,7 @@ snapshots: webpack-dev-middleware: 5.3.4(webpack@5.90.3(esbuild@0.20.1)) ws: 8.18.0 optionalDependencies: - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) transitivePeerDependencies: - bufferutil - debug @@ -34902,12 +34960,12 @@ snapshots: webpack-sources@3.2.3: {} - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(webpack@5.90.3(esbuild@0.20.1)))(webpack@5.90.3(esbuild@0.20.1)): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(webpack@5.90.3(esbuild@0.19.12)))(webpack@5.90.3(esbuild@0.20.1)): dependencies: typed-assert: 1.0.9 - webpack: 5.90.3(esbuild@0.24.0) + webpack: 5.90.3(esbuild@0.19.12) optionalDependencies: - html-webpack-plugin: 5.6.3(webpack@5.90.3(esbuild@0.20.1)) + html-webpack-plugin: 5.6.3(webpack@5.90.3(esbuild@0.19.12)) webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(webpack@5.94.0(esbuild@0.19.12)))(webpack@5.94.0(esbuild@0.23.0)): dependencies: @@ -34916,12 +34974,12 @@ snapshots: optionalDependencies: html-webpack-plugin: 5.6.3(webpack@5.94.0(esbuild@0.19.12)) - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.24.0)))(webpack@5.94.0(esbuild@0.23.0)): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(webpack@5.96.1(esbuild@0.19.12)))(webpack@5.94.0(esbuild@0.23.0)): dependencies: typed-assert: 1.0.9 webpack: 5.94.0(esbuild@0.19.12) optionalDependencies: - html-webpack-plugin: 5.6.3(webpack@5.96.1(esbuild@0.24.0)) + html-webpack-plugin: 5.6.3(webpack@5.96.1(esbuild@0.19.12)) webpack-virtual-modules@0.6.2: {} @@ -34955,7 +35013,7 @@ snapshots: transitivePeerDependencies: - supports-color - webpack@5.90.3(esbuild@0.24.0): + webpack@5.90.3(esbuild@0.19.12): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -34978,7 +35036,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.24.0)(webpack@5.90.3(esbuild@0.20.1)) + terser-webpack-plugin: 5.3.10(esbuild@0.19.12)(webpack@5.90.3(esbuild@0.20.1)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -35016,7 +35074,7 @@ snapshots: - esbuild - uglify-js - webpack@5.96.1(esbuild@0.24.0): + webpack@5.96.1(esbuild@0.19.12): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -35038,7 +35096,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.24.0)(webpack@5.96.1(esbuild@0.24.0)) + terser-webpack-plugin: 5.3.10(esbuild@0.19.12)(webpack@5.96.1(esbuild@0.19.12)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -35046,7 +35104,7 @@ snapshots: - esbuild - uglify-js - webpack@5.96.1(esbuild@0.24.0)(webpack-cli@5.1.4): + webpack@5.96.1(esbuild@0.19.12)(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -35068,7 +35126,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.24.0)(webpack@5.96.1) + terser-webpack-plugin: 5.3.10(esbuild@0.19.12)(webpack@5.96.1) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: