diff --git a/docs/config.json b/docs/config.json index 11a32c4323..cd66f9889e 100644 --- a/docs/config.json +++ b/docs/config.json @@ -1038,6 +1038,10 @@ "label": "Basic", "to": "framework/angular/examples/basic" }, + { + "label": "Pagination", + "to": "framework/angular/examples/pagination" + }, { "label": "Infinite query with Max pages", "to": "framework/angular/examples/infinite-query-with-max-pages" diff --git a/examples/angular/basic/README.md b/examples/angular/basic/README.md index 091e861860..15f2ed2f4a 100644 --- a/examples/angular/basic/README.md +++ b/examples/angular/basic/README.md @@ -1,4 +1,4 @@ -# Angular Query basic example +# TanStack Query Angular basic example To run this example: diff --git a/examples/angular/basic/src/app/app.config.ts b/examples/angular/basic/src/app/app.config.ts index db56fd38d5..75b2b84870 100644 --- a/examples/angular/basic/src/app/app.config.ts +++ b/examples/angular/basic/src/app/app.config.ts @@ -7,7 +7,6 @@ import type { ApplicationConfig } from '@angular/core' export const appConfig: ApplicationConfig = { providers: [ - provideHttpClient(withFetch()), provideAngularQuery( new QueryClient({ defaultOptions: { @@ -17,5 +16,6 @@ export const appConfig: ApplicationConfig = { }, }), ), + provideHttpClient(withFetch()), ], } diff --git a/examples/angular/basic/src/index.html b/examples/angular/basic/src/index.html index 53168b1751..0ca80dd67a 100644 --- a/examples/angular/basic/src/index.html +++ b/examples/angular/basic/src/index.html @@ -8,6 +8,6 @@ - + diff --git a/examples/angular/infinite-query-with-max-pages/README.md b/examples/angular/infinite-query-with-max-pages/README.md index 1d8b6e7182..fce960f6a3 100644 --- a/examples/angular/infinite-query-with-max-pages/README.md +++ b/examples/angular/infinite-query-with-max-pages/README.md @@ -1,4 +1,4 @@ -# Angular Query infinite query example +# TanStack Query Angular infinite query example To run this example: diff --git a/examples/angular/infinite-query-with-max-pages/angular.json b/examples/angular/infinite-query-with-max-pages/angular.json index c105727c39..32d851b616 100644 --- a/examples/angular/infinite-query-with-max-pages/angular.json +++ b/examples/angular/infinite-query-with-max-pages/angular.json @@ -10,7 +10,7 @@ }, "newProjectRoot": "projects", "projects": { - "basic": { + "infinite-query-with-max-pages": { "projectType": "application", "schematics": { "@schematics/angular:component": { @@ -47,7 +47,7 @@ "build": { "builder": "@angular-devkit/build-angular:application", "options": { - "outputPath": "dist/basic", + "outputPath": "dist/infinite-query-with-max-pages", "index": "src/index.html", "browser": "src/main.ts", "polyfills": ["zone.js"], @@ -84,10 +84,10 @@ "builder": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "buildTarget": "basic:build:production" + "buildTarget": "infinite-query-with-max-pages:build:production" }, "development": { - "buildTarget": "basic:build:development" + "buildTarget": "infinite-query-with-max-pages:build:development" } }, "defaultConfiguration": "development" @@ -95,7 +95,7 @@ "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { - "buildTarget": "basic:build" + "buildTarget": "infinite-query-with-max-pages:build" } } } diff --git a/examples/angular/infinite-query-with-max-pages/src/app/app.config.ts b/examples/angular/infinite-query-with-max-pages/src/app/app.config.ts index ee41436a49..8ad4034c5f 100644 --- a/examples/angular/infinite-query-with-max-pages/src/app/app.config.ts +++ b/examples/angular/infinite-query-with-max-pages/src/app/app.config.ts @@ -12,7 +12,6 @@ import type { ApplicationConfig } from '@angular/core' export const appConfig: ApplicationConfig = { providers: [ - provideHttpClient(withInterceptors([projectsMockInterceptor]), withFetch()), provideAngularQuery( new QueryClient({ defaultOptions: { @@ -22,5 +21,6 @@ export const appConfig: ApplicationConfig = { }, }), ), + provideHttpClient(withInterceptors([projectsMockInterceptor]), withFetch()), ], } diff --git a/examples/angular/infinite-query-with-max-pages/src/app/components/example.component.ts b/examples/angular/infinite-query-with-max-pages/src/app/components/example.component.ts index 509961ef80..37e3f5baeb 100644 --- a/examples/angular/infinite-query-with-max-pages/src/app/components/example.component.ts +++ b/examples/angular/infinite-query-with-max-pages/src/app/components/example.component.ts @@ -8,7 +8,7 @@ import { AngularQueryDevtools } from '@tanstack/angular-query-devtools-experimen import { injectInfiniteQuery } from '@tanstack/angular-query-experimental' import { lastValueFrom } from 'rxjs' import { ProjectStyleDirective } from '../directives/project-style.directive' -import { ProjectsService } from '../services/projects-service' +import { ProjectsService } from '../services/projects.service' @Component({ changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/examples/angular/infinite-query-with-max-pages/src/app/services/projects-service.ts b/examples/angular/infinite-query-with-max-pages/src/app/services/projects.service.ts similarity index 100% rename from examples/angular/infinite-query-with-max-pages/src/app/services/projects-service.ts rename to examples/angular/infinite-query-with-max-pages/src/app/services/projects.service.ts diff --git a/examples/angular/infinite-query-with-max-pages/src/index.html b/examples/angular/infinite-query-with-max-pages/src/index.html index 4e953a7416..7295e04136 100644 --- a/examples/angular/infinite-query-with-max-pages/src/index.html +++ b/examples/angular/infinite-query-with-max-pages/src/index.html @@ -2,12 +2,12 @@ - Angular Query infinite query example + TanStack Query Angular infinite query example - + diff --git a/examples/angular/pagination/README.md b/examples/angular/pagination/README.md new file mode 100644 index 0000000000..fd58c45586 --- /dev/null +++ b/examples/angular/pagination/README.md @@ -0,0 +1,6 @@ +# TanStack Query Angular pagination 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/pagination/angular.json b/examples/angular/pagination/angular.json new file mode 100644 index 0000000000..536f15470b --- /dev/null +++ b/examples/angular/pagination/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": { + "pagination": { + "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-devkit/build-angular:application", + "options": { + "outputPath": "dist/pagination", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "tsconfig.app.json", + "assets": ["src/favicon.ico"], + "styles": [], + "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-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "pagination:build:production" + }, + "development": { + "buildTarget": "pagination:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "pagination:build" + } + } + } + } + } +} diff --git a/examples/angular/pagination/package.json b/examples/angular/pagination/package.json new file mode 100644 index 0000000000..d885e8274a --- /dev/null +++ b/examples/angular/pagination/package.json @@ -0,0 +1,29 @@ +{ + "name": "@tanstack/query-example-angular-pagination", + "private": true, + "type": "module", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development" + }, + "dependencies": { + "@angular/common": "^17.3.12", + "@angular/compiler": "^17.3.12", + "@angular/core": "^17.3.12", + "@angular/platform-browser": "^17.3.12", + "@angular/platform-browser-dynamic": "^17.3.12", + "@tanstack/angular-query-experimental": "^5.59.0", + "rxjs": "^7.8.1", + "tslib": "^2.6.3", + "zone.js": "^0.14.8" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.3.8", + "@angular/cli": "^17.3.8", + "@angular/compiler-cli": "^17.3.12", + "@tanstack/angular-query-devtools-experimental": "^5.59.0", + "typescript": "5.3.3" + } +} diff --git a/examples/angular/pagination/src/app/api/projects-mock.interceptor.ts b/examples/angular/pagination/src/app/api/projects-mock.interceptor.ts new file mode 100644 index 0000000000..e7975f3aab --- /dev/null +++ b/examples/angular/pagination/src/app/api/projects-mock.interceptor.ts @@ -0,0 +1,40 @@ +import { HttpResponse } from '@angular/common/http' +import { delay, of } from 'rxjs' +import type { Observable } from 'rxjs' +import type { HttpEvent, HttpInterceptorFn } from '@angular/common/http' + +export const projectsMockInterceptor: HttpInterceptorFn = ( + req, + next, +): Observable> => { + const { url } = req + + if (url.includes('/api/projects')) { + const page = parseInt( + new URLSearchParams(req.url.split('?')[1]).get('page') || '0', + 10, + ) + const pageSize = 10 + + const projects = Array(pageSize) + .fill(0) + .map((_, i) => { + const id = page * pageSize + (i + 1) + return { + name: 'Project ' + id, + id, + } + }) + + return of( + new HttpResponse({ + status: 200, + body: { + projects, + hasMore: page < 9, + }, + }), + ).pipe(delay(1000)) + } + return next(req) +} diff --git a/examples/angular/pagination/src/app/app.component.ts b/examples/angular/pagination/src/app/app.component.ts new file mode 100644 index 0000000000..cc0dc44f09 --- /dev/null +++ b/examples/angular/pagination/src/app/app.component.ts @@ -0,0 +1,12 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core' +import { AngularQueryDevtools } from '@tanstack/angular-query-devtools-experimental' +import { ExampleComponent } from './components/example.component' + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + selector: 'app-root', + standalone: true, + template: ``, + imports: [AngularQueryDevtools, ExampleComponent], +}) +export class AppComponent {} diff --git a/examples/angular/pagination/src/app/app.config.ts b/examples/angular/pagination/src/app/app.config.ts new file mode 100644 index 0000000000..aa0e11e934 --- /dev/null +++ b/examples/angular/pagination/src/app/app.config.ts @@ -0,0 +1,18 @@ +import { + provideHttpClient, + withFetch, + withInterceptors, +} from '@angular/common/http' +import { + QueryClient, + provideAngularQuery, +} from '@tanstack/angular-query-experimental' +import { projectsMockInterceptor } from './api/projects-mock.interceptor' +import type { ApplicationConfig } from '@angular/core' + +export const appConfig: ApplicationConfig = { + providers: [ + provideAngularQuery(new QueryClient()), + provideHttpClient(withInterceptors([projectsMockInterceptor]), withFetch()), + ], +} diff --git a/examples/angular/pagination/src/app/components/example.component.html b/examples/angular/pagination/src/app/components/example.component.html new file mode 100644 index 0000000000..944b74e77b --- /dev/null +++ b/examples/angular/pagination/src/app/components/example.component.html @@ -0,0 +1,40 @@ +
+

+ In this example, each page of data remains visible as the next page is + fetched. The buttons and capability to proceed to the next page are also + supressed until the next page cursor is known. Each page is cached as a + normal query too, so when going to previous pages, you'll see them + instantaneously while they are also refetched invisibly in the background. +

+ + @if (query.isPending()) { +
Loading...
+ } @else if (query.isError()) { +
Error: {{ query.error().message }}
+ } @else if (query.isSuccess()) { +
+ @for (project of query.data().projects; track project.id) { +

{{ project.name }}

+ } +
+ } + +
Current Page: {{ page() + 1 }}
+ + + + + + + @if (query.isFetching()) { + Loading... + } + +
diff --git a/examples/angular/pagination/src/app/components/example.component.ts b/examples/angular/pagination/src/app/components/example.component.ts new file mode 100644 index 0000000000..03f72d6c6f --- /dev/null +++ b/examples/angular/pagination/src/app/components/example.component.ts @@ -0,0 +1,66 @@ +import { + ChangeDetectionStrategy, + Component, + effect, + inject, + signal, + untracked, +} from '@angular/core' +import { AngularQueryDevtools } from '@tanstack/angular-query-devtools-experimental' +import { + injectQuery, + injectQueryClient, + keepPreviousData, +} from '@tanstack/angular-query-experimental' +import { lastValueFrom } from 'rxjs' +import { ProjectsService } from '../services/projects.service' + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + selector: 'example', + standalone: true, + templateUrl: './example.component.html', + imports: [AngularQueryDevtools], +}) +export class ExampleComponent { + queryClient = injectQueryClient() + projectsService = inject(ProjectsService) + page = signal(0) + + query = injectQuery(() => ({ + queryKey: ['projects', this.page()], + queryFn: () => { + return lastValueFrom(this.projectsService.getProjects(this.page())) + }, + placeholderData: keepPreviousData, + staleTime: 5000, + })) + + prefetchEffect = effect(() => { + const data = this.query.data() + const isPlaceholderData = this.query.isPlaceholderData() + const newPage = this.page() + 1 + + untracked(() => { + if (!isPlaceholderData && data?.hasMore) { + this.queryClient.prefetchQuery({ + queryKey: ['projects', newPage], + queryFn: () => + lastValueFrom(this.projectsService.getProjects(newPage)), + }) + } + }) + }) + + previousPage() { + this.page.update((currentPage) => { + return Math.max(currentPage - 1, 0) + }) + } + + nextPage() { + this.page.update((currentPage) => { + return this.query.data()?.hasMore ? currentPage + 1 : currentPage + }) + } +} diff --git a/examples/angular/pagination/src/app/services/projects.service.ts b/examples/angular/pagination/src/app/services/projects.service.ts new file mode 100644 index 0000000000..7a9197c4dd --- /dev/null +++ b/examples/angular/pagination/src/app/services/projects.service.ts @@ -0,0 +1,23 @@ +import { HttpClient } from '@angular/common/http' +import { Injectable, inject } from '@angular/core' + +interface Project { + id: number + name: string +} + +interface ProjectResponse { + projects: Array + hasMore: boolean +} + +@Injectable({ + providedIn: 'root', +}) +export class ProjectsService { + #http = inject(HttpClient) + + getProjects(page: number) { + return this.#http.get(`/api/projects?page=${page}`) + } +} diff --git a/examples/angular/pagination/src/favicon.ico b/examples/angular/pagination/src/favicon.ico new file mode 100644 index 0000000000..57614f9c96 Binary files /dev/null and b/examples/angular/pagination/src/favicon.ico differ diff --git a/examples/angular/pagination/src/index.html b/examples/angular/pagination/src/index.html new file mode 100644 index 0000000000..b8112ac8be --- /dev/null +++ b/examples/angular/pagination/src/index.html @@ -0,0 +1,13 @@ + + + + + TanStack Query Angular pagination example + + + + + + + + diff --git a/examples/angular/pagination/src/main.ts b/examples/angular/pagination/src/main.ts new file mode 100644 index 0000000000..c3d8f9af99 --- /dev/null +++ b/examples/angular/pagination/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/pagination/tsconfig.app.json b/examples/angular/pagination/tsconfig.app.json new file mode 100644 index 0000000000..84f1f992d2 --- /dev/null +++ b/examples/angular/pagination/tsconfig.app.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"] +} diff --git a/examples/angular/pagination/tsconfig.json b/examples/angular/pagination/tsconfig.json new file mode 100644 index 0000000000..82c63d482a --- /dev/null +++ b/examples/angular/pagination/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": ["ES2022", "dom"] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/examples/angular/router/README.md b/examples/angular/router/README.md index 129bb7bda8..0429048cb9 100644 --- a/examples/angular/router/README.md +++ b/examples/angular/router/README.md @@ -1,4 +1,4 @@ -# Angular Query router example +# TanStack Query Angular router example To run this example: diff --git a/examples/angular/rxjs/angular.json b/examples/angular/rxjs/angular.json index c105727c39..d47424e82f 100644 --- a/examples/angular/rxjs/angular.json +++ b/examples/angular/rxjs/angular.json @@ -10,7 +10,7 @@ }, "newProjectRoot": "projects", "projects": { - "basic": { + "rxjs": { "projectType": "application", "schematics": { "@schematics/angular:component": { @@ -47,7 +47,7 @@ "build": { "builder": "@angular-devkit/build-angular:application", "options": { - "outputPath": "dist/basic", + "outputPath": "dist/rxjs", "index": "src/index.html", "browser": "src/main.ts", "polyfills": ["zone.js"], @@ -84,10 +84,10 @@ "builder": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "buildTarget": "basic:build:production" + "buildTarget": "rxjs:build:production" }, "development": { - "buildTarget": "basic:build:development" + "buildTarget": "rxjs:build:development" } }, "defaultConfiguration": "development" @@ -95,7 +95,7 @@ "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { - "buildTarget": "basic:build" + "buildTarget": "rxjs:build" } } } diff --git a/examples/angular/rxjs/src/index.html b/examples/angular/rxjs/src/index.html index 2c67e4a362..290bca207e 100644 --- a/examples/angular/rxjs/src/index.html +++ b/examples/angular/rxjs/src/index.html @@ -8,6 +8,6 @@ - + diff --git a/examples/angular/simple/README.md b/examples/angular/simple/README.md index c329cad361..35939257ca 100644 --- a/examples/angular/simple/README.md +++ b/examples/angular/simple/README.md @@ -1,4 +1,4 @@ -# Angular Query simple example +# TanStack Query Angular simple example To run this example: diff --git a/examples/angular/simple/src/app/app.config.ts b/examples/angular/simple/src/app/app.config.ts index 464fd772d0..914b965923 100644 --- a/examples/angular/simple/src/app/app.config.ts +++ b/examples/angular/simple/src/app/app.config.ts @@ -7,7 +7,7 @@ import type { ApplicationConfig } from '@angular/core' export const appConfig: ApplicationConfig = { providers: [ - provideHttpClient(withFetch()), provideAngularQuery(new QueryClient()), + provideHttpClient(withFetch()), ], } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f8c570938..709a1ce580 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -162,7 +162,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.3.3))(@types/express@4.17.21)(@types/node@22.0.2)(chokidar@3.6.0)(html-webpack-plugin@5.6.0(webpack@5.90.3(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.3.3))(tailwindcss@3.4.7)(tslib@2.6.3)(typescript@5.3.3))(tailwindcss@3.4.7)(typescript@5.3.3) + 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.3.3))(@types/express@4.17.21)(@types/node@22.0.2)(chokidar@3.6.0)(html-webpack-plugin@5.6.0(webpack@5.93.0(esbuild@0.19.12)))(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.3.3))(tailwindcss@3.4.7)(tslib@2.6.3)(typescript@5.3.3))(tailwindcss@3.4.7)(typescript@5.3.3) '@angular/cli': specifier: ^17.3.8 version: 17.3.8(chokidar@3.6.0) @@ -222,6 +222,52 @@ importers: specifier: 5.3.3 version: 5.3.3 + examples/angular/pagination: + dependencies: + '@angular/common': + specifier: ^17.3.12 + version: 17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8))(rxjs@7.8.1) + '@angular/compiler': + specifier: ^17.3.12 + version: 17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)) + '@angular/core': + specifier: ^17.3.12 + version: 17.3.12(rxjs@7.8.1)(zone.js@0.14.8) + '@angular/platform-browser': + specifier: ^17.3.12 + version: 17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)) + '@angular/platform-browser-dynamic': + specifier: ^17.3.12 + version: 17.3.12(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8))(rxjs@7.8.1))(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8))(@angular/platform-browser@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8))) + '@tanstack/angular-query-experimental': + specifier: ^5.59.0 + version: link:../../../packages/angular-query-experimental + rxjs: + specifier: ^7.8.1 + version: 7.8.1 + tslib: + specifier: ^2.6.3 + version: 2.6.3 + zone.js: + specifier: ^0.14.8 + version: 0.14.8 + 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.3.3))(@types/express@4.17.21)(@types/node@22.0.2)(chokidar@3.6.0)(html-webpack-plugin@5.6.0(webpack@5.93.0(esbuild@0.19.12)))(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.3.3))(tailwindcss@3.4.7)(tslib@2.6.3)(typescript@5.3.3))(tailwindcss@3.4.7)(typescript@5.3.3) + '@angular/cli': + specifier: ^17.3.8 + version: 17.3.8(chokidar@3.6.0) + '@angular/compiler-cli': + specifier: ^17.3.12 + version: 17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.8)))(typescript@5.3.3) + '@tanstack/angular-query-devtools-experimental': + specifier: ^5.59.0 + version: link:../../../packages/angular-query-devtools-experimental + typescript: + specifier: 5.3.3 + version: 5.3.3 + examples/angular/router: dependencies: '@angular/common': @@ -257,7 +303,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.3.3))(@types/express@4.17.21)(@types/node@22.0.2)(chokidar@3.6.0)(html-webpack-plugin@5.6.0(webpack@5.93.0(esbuild@0.19.12)))(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.3.3))(tailwindcss@3.4.7)(tslib@2.6.3)(typescript@5.3.3))(tailwindcss@3.4.7)(typescript@5.3.3) + 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.3.3))(@types/express@4.17.21)(@types/node@22.0.2)(chokidar@3.6.0)(html-webpack-plugin@5.6.0(webpack@5.90.3(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.3.3))(tailwindcss@3.4.7)(tslib@2.6.3)(typescript@5.3.3))(tailwindcss@3.4.7)(typescript@5.3.3) '@angular/cli': specifier: ^17.3.8 version: 17.3.8(chokidar@3.6.0) @@ -9672,7 +9718,7 @@ packages: resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} engines: {node: '>= 4.0'} os: [darwin] - deprecated: Upgrade to fsevents v2 to mitigate potential security issues + deprecated: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2 fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} @@ -17270,7 +17316,7 @@ snapshots: undici: 6.11.1 vite: 5.1.7(@types/node@22.0.2)(less@4.2.0)(sass@1.71.1)(terser@5.29.1) watchpack: 2.4.0 - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) 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 @@ -17302,7 +17348,7 @@ snapshots: dependencies: '@angular-devkit/architect': 0.1703.8(chokidar@3.6.0) rxjs: 7.8.1 - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) webpack-dev-server: 4.15.1(webpack@5.90.3(esbuild@0.20.1)) transitivePeerDependencies: - chokidar @@ -21044,7 +21090,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.3.3) typescript: 5.3.3 - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) '@ngtools/webpack@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.3.3))(typescript@5.3.3)(webpack@5.93.0(esbuild@0.19.12))': dependencies: @@ -23898,7 +23944,7 @@ snapshots: '@babel/core': 7.24.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) babel-plugin-add-module-exports@0.2.1: {} @@ -24906,7 +24952,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) core-js-compat@3.37.1: dependencies: @@ -25189,7 +25235,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) css-loader@6.11.0(webpack@5.93.0(esbuild@0.19.12)): dependencies: @@ -28722,7 +28768,7 @@ snapshots: dependencies: klona: 2.0.6 less: 4.2.0 - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) less@4.2.0: dependencies: @@ -28754,7 +28800,7 @@ snapshots: dependencies: webpack-sources: 3.2.3 optionalDependencies: - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) lie@3.1.1: dependencies: @@ -29707,7 +29753,7 @@ snapshots: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) mini-css-extract-plugin@2.9.0(webpack@5.93.0(esbuild@0.19.12)): dependencies: @@ -31359,7 +31405,7 @@ snapshots: postcss: 8.4.35 semver: 7.6.3 optionalDependencies: - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) transitivePeerDependencies: - typescript @@ -33169,7 +33215,7 @@ snapshots: neo-async: 2.6.2 optionalDependencies: sass: 1.71.1 - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) sass@1.71.1: dependencies: @@ -33644,7 +33690,7 @@ snapshots: dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.0 - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) source-map-resolve@0.5.3: dependencies: @@ -34316,6 +34362,17 @@ snapshots: optionalDependencies: esbuild: 0.19.12 + terser-webpack-plugin@5.3.10(esbuild@0.20.1)(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.3 + webpack: 5.90.3(esbuild@0.20.1) + optionalDependencies: + esbuild: 0.20.1 + terser@4.8.1: dependencies: acorn: 8.12.1 @@ -35568,7 +35625,7 @@ snapshots: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) webpack-dev-middleware@5.3.4(webpack@5.93.0(esbuild@0.19.12)): dependencies: @@ -35587,7 +35644,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) webpack-dev-server@3.11.1(webpack@4.44.2): dependencies: @@ -35662,7 +35719,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.19.12) + webpack: 5.90.3(esbuild@0.20.1) transitivePeerDependencies: - bufferutil - debug @@ -35756,7 +35813,7 @@ snapshots: webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.0(webpack@5.93.0(esbuild@0.19.12)))(webpack@5.90.3(esbuild@0.20.1)): dependencies: typed-assert: 1.0.9 - webpack: 5.90.3(esbuild@0.19.12) + webpack: 5.90.3(esbuild@0.20.1) optionalDependencies: html-webpack-plugin: 5.6.0(webpack@5.93.0(esbuild@0.19.12)) @@ -35821,6 +35878,37 @@ snapshots: - esbuild - uglify-js + webpack@5.90.3(esbuild@0.20.1): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.12.1 + acorn-import-assertions: 1.9.0(acorn@8.12.1) + browserslist: 4.23.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(esbuild@0.20.1)(webpack@5.90.3(esbuild@0.20.1)) + watchpack: 2.4.1 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + webpack@5.93.0(esbuild@0.19.12): dependencies: '@types/eslint-scope': 3.7.7