From 475cde8d5fa1772e4904a4e5aaf2c2a1569e4d16 Mon Sep 17 00:00:00 2001 From: Taskever Agent Date: Thu, 6 Aug 2026 09:21:44 +0000 Subject: [PATCH 1/2] Update files (10 files) --- npm/ng-packs/package.json | 50 +++++++++---------- .../packages/feature-management/package.json | 2 +- .../permission-management/package.json | 2 +- npm/ng-packs/packages/schematics/package.json | 8 +-- .../packages/setting-management/package.json | 2 +- templates/app-nolayers/angular/package.json | 38 +++++++------- templates/app/angular/package.json | 38 +++++++------- templates/module/angular/package.json | 42 ++++++++-------- .../projects/my-project-name/package.json | 4 +- templates/module/angular/tsconfig.prod.json | 2 +- 10 files changed, 94 insertions(+), 94 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 1b6fff15c4..405e0e15d9 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -51,29 +51,29 @@ "@abp/ng.theme.lepton-x": "~5.7.0-rc.1", "@abp/ng.schematics": "~10.7.0-rc.1", "@abp/utils": "~10.7.0-rc.1", - "@angular-devkit/build-angular": "~22.0.0", - "@angular-devkit/core": "~22.0.0", - "@angular-devkit/schematics": "~22.0.0", - "@angular-devkit/schematics-cli": "~22.0.0", - "@angular-eslint/eslint-plugin": "~22.0.0", - "@angular-eslint/eslint-plugin-template": "~22.0.0", - "@angular-eslint/template-parser": "~22.0.0", - "@angular/animations": "~22.0.0", - "@angular/aria": "~22.0.0", - "@angular/build": "~22.0.0", - "@angular/cli": "~22.0.0", - "@angular/common": "~22.0.0", - "@angular/compiler": "~22.0.0", - "@angular/compiler-cli": "~22.0.0", - "@angular/core": "~22.0.0", - "@angular/forms": "~22.0.0", - "@angular/language-service": "~22.0.0", - "@angular/localize": "~22.0.0", - "@angular/platform-browser": "~22.0.0", - "@angular/platform-browser-dynamic": "~22.0.0", - "@angular/platform-server": "~22.0.0", - "@angular/router": "~22.0.0", - "@angular/ssr": "~22.0.0", + "@angular-devkit/build-angular": "~22.1.0", + "@angular-devkit/core": "~22.1.0", + "@angular-devkit/schematics": "~22.1.0", + "@angular-devkit/schematics-cli": "~22.1.0", + "@angular-eslint/eslint-plugin": "~22.1.0", + "@angular-eslint/eslint-plugin-template": "~22.1.0", + "@angular-eslint/template-parser": "~22.1.0", + "@angular/animations": "~22.1.0", + "@angular/aria": "~22.1.0", + "@angular/build": "~22.1.0", + "@angular/cli": "~22.1.0", + "@angular/common": "~22.1.0", + "@angular/compiler": "~22.1.0", + "@angular/compiler-cli": "~22.1.0", + "@angular/core": "~22.1.0", + "@angular/forms": "~22.1.0", + "@angular/language-service": "~22.1.0", + "@angular/localize": "~22.1.0", + "@angular/platform-browser": "~22.1.0", + "@angular/platform-browser-dynamic": "~22.1.0", + "@angular/platform-server": "~22.1.0", + "@angular/router": "~22.1.0", + "@angular/ssr": "~22.1.0", "@fortawesome/fontawesome-free": "^6.0.0", "@ng-bootstrap/ng-bootstrap": "~20.0.0", "@ngneat/spectator": "~19.6.2", @@ -91,7 +91,7 @@ "@nx/web": "~22.7.5", "@nx/workspace": "~22.7.5", "@popperjs/core": "~2.11.0", - "@schematics/angular": "~22.0.0", + "@schematics/angular": "~22.1.0", "@swc-node/register": "~1.11.1", "@swc/cli": "~0.7.10", "@swc/core": "~1.15.8", @@ -129,7 +129,7 @@ "just-compare": "^2.0.0", "lerna": "^4.0.0", "lint-staged": "^13.0.0", - "ng-packagr": "~22.0.0", + "ng-packagr": "~22.1.0", "ng-zorro-antd": "~21.1.0", "nx": "~22.7.5", "postcss": "^8.0.0", diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index 35e67f5cbe..512561583d 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -11,7 +11,7 @@ "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/aria": "~21.2.0" + "@angular/aria": "~22.1.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index 62dec74cbc..25f90bb13f 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -11,7 +11,7 @@ "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/aria": "~21.2.0" + "@angular/aria": "~22.1.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/schematics/package.json b/npm/ng-packs/packages/schematics/package.json index 3e87293cab..1a928c4668 100644 --- a/npm/ng-packs/packages/schematics/package.json +++ b/npm/ng-packs/packages/schematics/package.json @@ -4,16 +4,16 @@ "author": "", "schematics": "./collection.json", "dependencies": { - "@angular-devkit/core": "~22.0.0", - "@angular-devkit/schematics": "~22.0.0", - "@angular/cli": "~22.0.0", + "@angular-devkit/core": "~22.1.0", + "@angular-devkit/schematics": "~22.1.0", + "@angular/cli": "~22.1.0", "got": "^11.5.2", "jsonc-parser": "^2.3.0", "should-quote": "^1.0.0", "typescript": "~6.0.3" }, "devDependencies": { - "@schematics/angular": "~22.0.0", + "@schematics/angular": "~22.1.0", "@types/jest": "29.4.4", "@types/node": "20.2.5", "jest": "29.4.3", diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index dababae919..f166095800 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -12,7 +12,7 @@ "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/aria": "~21.2.0" + "@angular/aria": "~22.1.0" }, "publishConfig": { "access": "public" diff --git a/templates/app-nolayers/angular/package.json b/templates/app-nolayers/angular/package.json index c90b3cd5c0..d526be0fd6 100644 --- a/templates/app-nolayers/angular/package.json +++ b/templates/app-nolayers/angular/package.json @@ -21,16 +21,16 @@ "@abp/ng.tenant-management": "~10.7.0-rc.1", "@abp/ng.theme.lepton-x": "~5.7.0-rc.1", "@abp/ng.theme.shared": "~10.7.0-rc.1", - "@angular/animations": "~22.0.1", - "@angular/aria": "~22.0.0", - "@angular/common": "~22.0.1", - "@angular/compiler": "~22.0.1", - "@angular/core": "~22.0.1", - "@angular/forms": "~22.0.1", - "@angular/localize": "~22.0.1", - "@angular/platform-browser": "~22.0.1", - "@angular/platform-browser-dynamic": "~22.0.1", - "@angular/router": "~22.0.1", + "@angular/animations": "~22.1.0", + "@angular/aria": "~22.1.0", + "@angular/common": "~22.1.0", + "@angular/compiler": "~22.1.0", + "@angular/core": "~22.1.0", + "@angular/forms": "~22.1.0", + "@angular/localize": "~22.1.0", + "@angular/platform-browser": "~22.1.0", + "@angular/platform-browser-dynamic": "~22.1.0", + "@angular/router": "~22.1.0", "bootstrap-icons": "~1.8.0", "rxjs": "~7.8.0", "tslib": "^2.0.0", @@ -38,15 +38,15 @@ }, "devDependencies": { "@abp/ng.schematics": "~10.7.0-rc.1", - "@angular-eslint/builder": "~21.2.0", - "@angular-eslint/eslint-plugin": "~21.2.0", - "@angular-eslint/eslint-plugin-template": "~21.2.0", - "@angular-eslint/schematics": "~21.2.0", - "@angular-eslint/template-parser": "~21.2.0", - "@angular/build": "~22.0.1", - "@angular/cli": "~22.0.1", - "@angular/compiler-cli": "~22.0.1", - "@angular/language-service": "~22.0.1", + "@angular-eslint/builder": "~22.1.0", + "@angular-eslint/eslint-plugin": "~22.1.0", + "@angular-eslint/eslint-plugin-template": "~22.1.0", + "@angular-eslint/schematics": "~22.1.0", + "@angular-eslint/template-parser": "~22.1.0", + "@angular/build": "~22.1.0", + "@angular/cli": "~22.1.0", + "@angular/compiler-cli": "~22.1.0", + "@angular/language-service": "~22.1.0", "@types/node": "^12.11.1", "@typescript-eslint/eslint-plugin": "7.16.0", "@typescript-eslint/parser": "7.16.0", diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index b7e1aa37ca..8e14c60e29 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -21,16 +21,16 @@ "@abp/ng.tenant-management": "~10.7.0-rc.1", "@abp/ng.theme.lepton-x": "~5.7.0-rc.1", "@abp/ng.theme.shared": "~10.7.0-rc.1", - "@angular/animations": "~22.0.1", - "@angular/aria": "~22.0.0", - "@angular/common": "~22.0.1", - "@angular/compiler": "~22.0.1", - "@angular/core": "~22.0.1", - "@angular/forms": "~22.0.1", - "@angular/localize": "~22.0.1", - "@angular/platform-browser": "~22.0.1", - "@angular/platform-browser-dynamic": "~22.0.1", - "@angular/router": "~22.0.1", + "@angular/animations": "~22.1.0", + "@angular/aria": "~22.1.0", + "@angular/common": "~22.1.0", + "@angular/compiler": "~22.1.0", + "@angular/core": "~22.1.0", + "@angular/forms": "~22.1.0", + "@angular/localize": "~22.1.0", + "@angular/platform-browser": "~22.1.0", + "@angular/platform-browser-dynamic": "~22.1.0", + "@angular/router": "~22.1.0", "bootstrap-icons": "~1.8.0", "rxjs": "~7.8.0", "tslib": "^2.0.0", @@ -38,15 +38,15 @@ }, "devDependencies": { "@abp/ng.schematics": "~10.7.0-rc.1", - "@angular-eslint/builder": "~21.2.0", - "@angular-eslint/eslint-plugin": "~21.2.0", - "@angular-eslint/eslint-plugin-template": "~21.2.0", - "@angular-eslint/schematics": "~21.2.0", - "@angular-eslint/template-parser": "~21.2.0", - "@angular/build": "~22.0.1", - "@angular/cli": "~22.0.1", - "@angular/compiler-cli": "~22.0.1", - "@angular/language-service": "~22.0.1", + "@angular-eslint/builder": "~22.1.0", + "@angular-eslint/eslint-plugin": "~22.1.0", + "@angular-eslint/eslint-plugin-template": "~22.1.0", + "@angular-eslint/schematics": "~22.1.0", + "@angular-eslint/template-parser": "~22.1.0", + "@angular/build": "~22.1.0", + "@angular/cli": "~22.1.0", + "@angular/compiler-cli": "~22.1.0", + "@angular/language-service": "~22.1.0", "@types/node": "~20.11.0", "@typescript-eslint/eslint-plugin": "7.16.0", "@typescript-eslint/parser": "7.16.0", diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 3acd4258e8..4c85fe517f 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -22,39 +22,39 @@ "@abp/ng.tenant-management": "~10.7.0-rc.1", "@abp/ng.theme.basic": "~10.7.0-rc.1", "@abp/ng.theme.shared": "~10.7.0-rc.1", - "@angular/animations": "~22.0.0", - "@angular/aria": "~22.0.0", - "@angular/common": "~22.0.0", - "@angular/compiler": "~22.0.0", - "@angular/core": "~22.0.0", - "@angular/forms": "~22.0.0", - "@angular/localize": "~22.0.0", - "@angular/platform-browser": "~22.0.0", - "@angular/platform-browser-dynamic": "~22.0.0", - "@angular/router": "~22.0.0", + "@angular/animations": "~22.1.0", + "@angular/aria": "~22.1.0", + "@angular/common": "~22.1.0", + "@angular/compiler": "~22.1.0", + "@angular/core": "~22.1.0", + "@angular/forms": "~22.1.0", + "@angular/localize": "~22.1.0", + "@angular/platform-browser": "~22.1.0", + "@angular/platform-browser-dynamic": "~22.1.0", + "@angular/router": "~22.1.0", "rxjs": "~7.8.0", "tslib": "^2.0.0", "zone.js": "~0.15.0" }, "devDependencies": { "@abp/ng.schematics": "~10.7.0-rc.1", - "@angular-eslint/builder": "~21.2.0", - "@angular-eslint/eslint-plugin": "~21.2.0", - "@angular-eslint/eslint-plugin-template": "~21.2.0", - "@angular-eslint/schematics": "~21.2.0", - "@angular-eslint/template-parser": "~21.2.0", - "@angular/build": "~21.2.0", - "@angular/cli": "~21.2.0", - "@angular/compiler-cli": "~21.2.0", - "@angular/language-service": "~21.2.0", + "@angular-eslint/builder": "~22.1.0", + "@angular-eslint/eslint-plugin": "~22.1.0", + "@angular-eslint/eslint-plugin-template": "~22.1.0", + "@angular-eslint/schematics": "~22.1.0", + "@angular-eslint/template-parser": "~22.1.0", + "@angular/build": "~22.1.0", + "@angular/cli": "~22.1.0", + "@angular/compiler-cli": "~22.1.0", + "@angular/language-service": "~22.1.0", "@types/node": "^12.11.1", "@typescript-eslint/eslint-plugin": "7.16.0", "@typescript-eslint/parser": "7.16.0", "eslint": "^8.0.0", "jsdom": "^27.1.0", - "ng-packagr": "~22.0.0", + "ng-packagr": "~22.1.0", "symlink": "^2.0.0", "typescript": "~6.0.3", "vitest": "^4.0.0" } -} \ No newline at end of file +} diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index 1b70364a0d..823fd14f1a 100644 --- a/templates/module/angular/projects/my-project-name/package.json +++ b/templates/module/angular/projects/my-project-name/package.json @@ -2,8 +2,8 @@ "name": "@my-company-name/my-project-name", "version": "0.0.1", "peerDependencies": { - "@angular/common": "~21.2.0", - "@angular/core": "~21.2.0", + "@angular/common": "~22.1.0", + "@angular/core": "~22.1.0", "@abp/ng.core": "~10.7.0-rc.1", "@abp/ng.theme.shared": "~10.7.0-rc.1" }, diff --git a/templates/module/angular/tsconfig.prod.json b/templates/module/angular/tsconfig.prod.json index b8243f2066..ad47989213 100644 --- a/templates/module/angular/tsconfig.prod.json +++ b/templates/module/angular/tsconfig.prod.json @@ -4,13 +4,13 @@ "outDir": "./dist/out-tsc", "sourceMap": true, "declaration": false, - "downlevelIteration": true, "experimentalDecorators": true, "moduleResolution": "bundler", "importHelpers": true, "target": "es2022", "module": "ES2022", "esModuleInterop": true, + "skipLibCheck": true, "lib": [ "es2020", "dom" From 0ecd9b96982e132e68b7cdd0fa89c78ba80fd4e4 Mon Sep 17 00:00:00 2001 From: sumeyye Date: Thu, 6 Aug 2026 15:57:25 +0300 Subject: [PATCH 2/2] fix: some bugs for the upgrade --- .../core/src/lib/directives/permission.directive.ts | 4 +++- .../components/breadcrumb/breadcrumb.component.html | 2 +- .../components/breadcrumb/breadcrumb.component.ts | 13 ++++++------- .../src/lib/services/toaster.service.ts | 6 +++--- .../src/lib/tests/breadcrumb.component.spec.ts | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/directives/permission.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/permission.directive.ts index b12782288d..d9ad09c780 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/permission.directive.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/permission.directive.ts @@ -52,7 +52,9 @@ export class PermissionDirective implements OnDestroy, OnChanges, AfterViewInit if (!this.rendered) { this.cdrSubject.next(); } else { - this.cdRef.detectChanges(); + // Defer via queue — sync detectChanges during ApplicationRef.tick + // (e.g. post-login permission/config refresh) can contribute to NG0101. + this.queue.add(() => this.cdRef.detectChanges()); } } else { this.cdRef.markForCheck(); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html index b23fdc598e..1eabd84821 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html @@ -1 +1 @@ - + diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts index b8a86342b1..884eb9db99 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts @@ -6,7 +6,7 @@ import { SubscriptionService, TreeNode, } from '@abp/ng.core'; -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, inject } from '@angular/core'; +import { ChangeDetectionStrategy, Component, OnInit, inject, signal } from '@angular/core'; import { Router } from '@angular/router'; import { map, startWith } from 'rxjs/operators'; import { eThemeSharedRouteNames } from '../../enums/route-names'; @@ -20,14 +20,13 @@ import { BreadcrumbItemsComponent } from '../breadcrumb-items/breadcrumb-items.c imports: [BreadcrumbItemsComponent], }) export class BreadcrumbComponent implements OnInit { - readonly cdRef = inject(ChangeDetectorRef); private router = inject(Router); private routes = inject(RoutesService); private subscription = inject(SubscriptionService); private routerEvents = inject(RouterEvents); private routeCultureUrl = inject(RouteBasedCultureUrlService); - segments: Partial[] = []; + readonly segments = signal[]>([]); ngOnInit(): void { this.subscription.addOne( @@ -38,18 +37,18 @@ export class BreadcrumbComponent implements OnInit { ), ), route => { - this.segments = []; + const next: Partial[] = []; if (route) { let node = { parent: route } as TreeNode; while (node.parent) { node = node.parent; const { parent, children, isLeaf, ...segment } = node; - if (!isAdministration(segment)) this.segments.unshift(segment); + if (!isAdministration(segment)) next.unshift(segment); } - - this.cdRef.detectChanges(); } + + this.segments.set(next); }, ); } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts index b6db6e7716..f1f3a5c114 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts @@ -1,4 +1,4 @@ -import { ApplicationRef, ComponentRef, inject, Injectable } from '@angular/core'; +import { ComponentRef, inject, Injectable } from '@angular/core'; import { ContentProjectionService, LocalizationParam, @@ -12,7 +12,6 @@ import { Toaster } from '../models'; providedIn: 'root', }) export class ToasterService implements ToasterContract { - private readonly appRef = inject(ApplicationRef); private readonly contentProjectionService = inject(ContentProjectionService); private lastId = -1; @@ -37,8 +36,9 @@ export class ToasterService implements ToasterContract { } this.containerComponentRef.instance.setToasts(this.toasts); + // Only refresh the projected toast host. Calling ApplicationRef.tick() here + // races with zone-driven CD and throws NG0101 (recursive tick). this.containerComponentRef.changeDetectorRef.detectChanges(); - this.appRef.tick(); } /** diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/breadcrumb.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/breadcrumb.component.spec.ts index 6ad217d3b8..ce1463e2cf 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/breadcrumb.component.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/breadcrumb.component.spec.ts @@ -135,7 +135,7 @@ describe('BreadcrumbComponent', () => { const breadcrumb = spectator.fixture.debugElement.query(By.directive(BreadcrumbComponent)) .componentInstance as BreadcrumbComponent; - expect(breadcrumb.segments.map(segment => segment.path)).toEqual([ + expect(breadcrumb.segments().map(segment => segment.path)).toEqual([ '/identity', '/identity/users', ]);