diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css
index 3a2c2675c5..7d72b13512 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css
@@ -1,3 +1,32 @@
-.post-desc {
+.post-desc {
overflow-wrap: break-word;
}
+
+#gravatar {
+ margin: 10px;
+}
+
+#profile-photo {
+ margin-bottom: 10px;
+}
+
+.custom-heading {
+ margin-bottom: 20px !important;
+ font-size: 28px !important;
+}
+
+.company-jobtitle {
+ font-size: 16px !important;
+ font-weight: 300 !important;
+ margin-bottom: 20px;
+}
+
+.username-website {
+ font-size: 16px !important;
+ font-weight: 400 !important;
+ margin-bottom: 20px;
+}
+
+.custom-small {
+ display: block;
+}
diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs
index fa1beb9124..d20158f16e 100644
--- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs
@@ -140,6 +140,7 @@ public class IdentityUserAppService : IdentityAppServiceBase, IIdentityUserAppSe
[Authorize(IdentityPermissions.Users.Update)]
public virtual async Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input)
{
+ await IdentityOptions.SetAsync();
var user = await UserManager.GetByIdAsync(id);
(await UserManager.SetRolesAsync(user, input.RoleNames)).CheckErrors();
await UserRepository.UpdateAsync(user);
diff --git a/modules/openiddict/app/angular/package.json b/modules/openiddict/app/angular/package.json
index 1243eac1b6..46a14117ef 100644
--- a/modules/openiddict/app/angular/package.json
+++ b/modules/openiddict/app/angular/package.json
@@ -20,7 +20,7 @@
"@abp/ng.setting-management": "~8.0.0",
"@abp/ng.tenant-management": "~8.0.0",
"@abp/ng.theme.shared": "~8.0.0",
- "@abp/ng.theme.lepton-x": "~3.0.0-rc.1",
+ "@abp/ng.theme.lepton-x": "~3.0.0",
"@angular/animations": "^15.0.1",
"@angular/common": "^15.0.1",
"@angular/compiler": "^15.0.1",
diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json
index 98f4ba9762..4baf350a87 100644
--- a/npm/ng-packs/package.json
+++ b/npm/ng-packs/package.json
@@ -44,7 +44,7 @@
},
"private": true,
"devDependencies": {
- "@abp/ng.theme.lepton-x": "~3.0.0-rc.1",
+ "@abp/ng.theme.lepton-x": "~3.0.0",
"@abp/utils": "~8.0.0",
"@angular-devkit/build-angular": "~17.0.0",
"@angular-devkit/core": "~17.0.0",
diff --git a/npm/ng-packs/packages/core/src/lib/abstracts/auth-error-filter.ts b/npm/ng-packs/packages/core/src/lib/abstracts/auth-error-filter.ts
new file mode 100644
index 0000000000..f7d964b37f
--- /dev/null
+++ b/npm/ng-packs/packages/core/src/lib/abstracts/auth-error-filter.ts
@@ -0,0 +1,40 @@
+import { AuthErrorEvent, AuthErrorFilter } from '../models';
+
+export abstract class AbstractAuthErrorFilter
{
+ abstract get(id: string): T;
+ abstract add(filter: T): void;
+ abstract patch(item: Partial): void;
+ abstract remove(id: string): void;
+ abstract run(event: E): boolean;
+}
+
+export class AuthErrorFilterService<
+ T = AuthErrorFilter,
+ E = AuthErrorEvent,
+> extends AbstractAuthErrorFilter {
+ private warningMessage() {
+ console.error('You should add @abp/ng-oauth packages or create your own auth packages.');
+ }
+
+ get(id: string): T {
+ this.warningMessage();
+ throw new Error('not implemented');
+ }
+
+ add(filter: T): void {
+ this.warningMessage();
+ }
+
+ patch(item: Partial): void {
+ this.warningMessage();
+ }
+
+ remove(id: string): void {
+ this.warningMessage();
+ }
+
+ run(event: E): boolean {
+ this.warningMessage();
+ throw new Error('not implemented');
+ }
+}
diff --git a/npm/ng-packs/packages/core/src/lib/abstracts/auth.service.ts b/npm/ng-packs/packages/core/src/lib/abstracts/auth.service.ts
index 3c6d62fae6..8527232d5f 100644
--- a/npm/ng-packs/packages/core/src/lib/abstracts/auth.service.ts
+++ b/npm/ng-packs/packages/core/src/lib/abstracts/auth.service.ts
@@ -33,9 +33,8 @@ export class AuthService implements IAuthService {
navigateToLogin(queryParams?: Params): void {}
- get isInternalAuth() {
+ get isInternalAuth(): boolean {
throw new Error('not implemented');
- return false;
}
get isAuthenticated(): boolean {
diff --git a/npm/ng-packs/packages/core/src/lib/abstracts/index.ts b/npm/ng-packs/packages/core/src/lib/abstracts/index.ts
index f9b4794de0..97f3c524f4 100644
--- a/npm/ng-packs/packages/core/src/lib/abstracts/index.ts
+++ b/npm/ng-packs/packages/core/src/lib/abstracts/index.ts
@@ -3,3 +3,4 @@ export * from './ng-model.component';
export * from './auth.guard';
export * from './auth.service';
export * from './auth-response.model';
+export * from './auth-error-filter';
diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts
index d39912b496..5eb6c82f0e 100644
--- a/npm/ng-packs/packages/core/src/lib/core.module.ts
+++ b/npm/ng-packs/packages/core/src/lib/core.module.ts
@@ -187,6 +187,7 @@ export class CoreModule {
provide: OTHERS_GROUP,
useValue: options.othersGroup || 'AbpUi::OthersGroup',
},
+ AuthErrorFilterService,
IncludeLocalizationResourcesProvider,
{
provide: DYNAMIC_LAYOUTS_TOKEN,
diff --git a/npm/ng-packs/packages/core/src/lib/models/auth-events.ts b/npm/ng-packs/packages/core/src/lib/models/auth-events.ts
new file mode 100644
index 0000000000..4b9e49eb0d
--- /dev/null
+++ b/npm/ng-packs/packages/core/src/lib/models/auth-events.ts
@@ -0,0 +1,54 @@
+export type EventType =
+ | 'discovery_document_loaded'
+ | 'jwks_load_error'
+ | 'invalid_nonce_in_state'
+ | 'discovery_document_load_error'
+ | 'discovery_document_validation_error'
+ | 'user_profile_loaded'
+ | 'user_profile_load_error'
+ | 'token_received'
+ | 'token_error'
+ | 'code_error'
+ | 'token_refreshed'
+ | 'token_refresh_error'
+ | 'silent_refresh_error'
+ | 'silently_refreshed'
+ | 'silent_refresh_timeout'
+ | 'token_validation_error'
+ | 'token_expires'
+ | 'session_changed'
+ | 'session_error'
+ | 'session_terminated'
+ | 'session_unchanged'
+ | 'logout'
+ | 'popup_closed'
+ | 'popup_blocked'
+ | 'token_revoke_error';
+
+export abstract class AuthEvent {
+ constructor(public readonly type: EventType) {
+ this.type = type;
+ }
+}
+
+export class AuthSuccessEvent extends AuthEvent {
+ constructor(public readonly type: EventType, public readonly info?: any) {
+ super(type);
+ }
+}
+
+export class AuthInfoEvent extends AuthEvent {
+ constructor(public readonly type: EventType, public readonly info?: any) {
+ super(type);
+ }
+}
+
+export class AuthErrorEvent extends AuthEvent {
+ constructor(
+ public readonly type: EventType,
+ public readonly reason: object,
+ public readonly params?: object,
+ ) {
+ super(type);
+ }
+}
diff --git a/npm/ng-packs/packages/core/src/lib/models/auth.ts b/npm/ng-packs/packages/core/src/lib/models/auth.ts
index dcaf6e7f11..23818878f4 100644
--- a/npm/ng-packs/packages/core/src/lib/models/auth.ts
+++ b/npm/ng-packs/packages/core/src/lib/models/auth.ts
@@ -1,5 +1,6 @@
-import { UnaryFunction } from 'rxjs';
import { Injector } from '@angular/core';
+import { UnaryFunction } from 'rxjs';
+import { AuthErrorEvent } from './auth-events';
export interface LoginParams {
username: string;
@@ -13,7 +14,13 @@ export type PipeToLoginFn = (
injector: Injector,
) => UnaryFunction;
/**
- * @deprecated The interface should not be used anymore.
+ * @deprecated The interface should not be used anymore.
*/
export type SetTokenResponseToStorageFn = (tokenRes: T) => void;
export type CheckAuthenticationStateFn = (injector: Injector) => void;
+
+export interface AuthErrorFilter {
+ id: string;
+ executable: boolean;
+ execute: (event: T) => boolean;
+}
diff --git a/npm/ng-packs/packages/core/src/lib/models/index.ts b/npm/ng-packs/packages/core/src/lib/models/index.ts
index 0549dd0128..c343ee2440 100644
--- a/npm/ng-packs/packages/core/src/lib/models/index.ts
+++ b/npm/ng-packs/packages/core/src/lib/models/index.ts
@@ -7,3 +7,4 @@ export * from './rest';
export * from './session';
export * from './utility';
export * from './auth';
+export * from './auth-events';
diff --git a/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts b/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts
index 3ee3741d04..2adac2a23a 100644
--- a/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts
+++ b/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts
@@ -1,9 +1,11 @@
import { APP_INITIALIZER, ModuleWithProviders, NgModule, Provider } from '@angular/core';
import { CommonModule } from '@angular/common';
+import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc';
import {
AbpLocalStorageService,
ApiInterceptor,
+ AuthErrorFilterService,
AuthGuard,
authGuard,
AuthService,
@@ -11,9 +13,8 @@ import {
noop,
PIPE_TO_LOGIN_FN_KEY,
} from '@abp/ng.core';
-import { AbpOAuthService } from './services';
+import { AbpOAuthService, OAuthErrorFilterService } from './services';
import { OAuthConfigurationHandler } from './handlers/oauth-configuration.handler';
-import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { OAuthApiInterceptor } from './interceptors/api.interceptor';
import { AbpOAuthGuard, abpOAuthGuard } from './guards/oauth.guard';
import { NavigateToManageProfileProvider } from './providers';
@@ -65,6 +66,7 @@ export class AbpOAuthModule {
},
OAuthModule.forRoot().providers as Provider[],
{ provide: OAuthStorage, useClass: AbpLocalStorageService },
+ { provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService },
],
};
}
diff --git a/npm/ng-packs/packages/oauth/src/lib/services/index.ts b/npm/ng-packs/packages/oauth/src/lib/services/index.ts
index ddc54916a3..375177f3b5 100644
--- a/npm/ng-packs/packages/oauth/src/lib/services/index.ts
+++ b/npm/ng-packs/packages/oauth/src/lib/services/index.ts
@@ -1 +1,2 @@
export * from './oauth.service';
+export * from './oauth-error-filter.service';
diff --git a/npm/ng-packs/packages/oauth/src/lib/services/oauth-error-filter.service.ts b/npm/ng-packs/packages/oauth/src/lib/services/oauth-error-filter.service.ts
new file mode 100644
index 0000000000..1c5fafb86e
--- /dev/null
+++ b/npm/ng-packs/packages/oauth/src/lib/services/oauth-error-filter.service.ts
@@ -0,0 +1,45 @@
+import { Injectable, signal } from '@angular/core';
+import { OAuthErrorEvent } from 'angular-oauth2-oidc';
+import { AbstractAuthErrorFilter, AuthErrorFilter } from '@abp/ng.core';
+
+@Injectable({ providedIn: 'root' })
+export class OAuthErrorFilterService extends AbstractAuthErrorFilter<
+ AuthErrorFilter,
+ OAuthErrorEvent
+> {
+ protected readonly _filters = signal>>([]);
+ readonly filters = this._filters.asReadonly();
+
+ get(id: string): AuthErrorFilter {
+ return this._filters().find(({ id: _id }) => _id === id);
+ }
+
+ add(filter: AuthErrorFilter): void {
+ this._filters.update(items => [...items, filter]);
+ }
+
+ patch(item: Partial>): void {
+ const _item = this.filters().find(({ id }) => id === item.id);
+ if (!_item) {
+ return;
+ }
+
+ Object.assign(_item, item);
+ }
+
+ remove(id: string): void {
+ const item = this.filters().find(({ id: _id }) => _id === id);
+ if (!item) {
+ return;
+ }
+
+ this._filters.update(items => items.filter(({ id: _id }) => _id !== id));
+ }
+
+ run(event: OAuthErrorEvent): boolean {
+ return this.filters()
+ .filter(({ executable }) => !!executable)
+ .map(({ execute }) => execute(event))
+ .some(item => item);
+ }
+}
diff --git a/npm/ng-packs/packages/oauth/src/lib/services/oauth.service.ts b/npm/ng-packs/packages/oauth/src/lib/services/oauth.service.ts
index 8b10d39bf2..2e615c95a5 100644
--- a/npm/ng-packs/packages/oauth/src/lib/services/oauth.service.ts
+++ b/npm/ng-packs/packages/oauth/src/lib/services/oauth.service.ts
@@ -44,10 +44,10 @@ export class AbpOAuthService implements IAuthService {
}
logout(queryParams?: Params): Observable {
-
- if(!this.strategy){
- return EMPTY
+ if (!this.strategy) {
+ return EMPTY;
}
+
return this.strategy.logout(queryParams);
}
diff --git a/npm/ng-packs/packages/oauth/src/lib/strategies/auth-flow-strategy.ts b/npm/ng-packs/packages/oauth/src/lib/strategies/auth-flow-strategy.ts
index b47eeb3ac7..e5189966bd 100644
--- a/npm/ng-packs/packages/oauth/src/lib/strategies/auth-flow-strategy.ts
+++ b/npm/ng-packs/packages/oauth/src/lib/strategies/auth-flow-strategy.ts
@@ -1,13 +1,16 @@
import { Injector } from '@angular/core';
+import { HttpErrorResponse } from '@angular/common/http';
import { Params, Router } from '@angular/router';
+
+import { Observable, of } from 'rxjs';
+import { filter, map, switchMap, take, tap } from 'rxjs/operators';
import {
AuthConfig,
OAuthErrorEvent,
OAuthService as OAuthService2,
OAuthStorage,
} from 'angular-oauth2-oidc';
-import { Observable, of } from 'rxjs';
-import { filter, map, switchMap, take, tap } from 'rxjs/operators';
+
import {
AbpLocalStorageService,
ConfigStateService,
@@ -17,9 +20,10 @@ import {
SessionStateService,
TENANT_KEY,
} from '@abp/ng.core';
+
import { clearOAuthStorage } from '../utils/clear-o-auth-storage';
import { oAuthStorage } from '../utils/oauth-storage';
-import { HttpErrorResponse } from '@angular/common/http';
+import { OAuthErrorFilterService } from '../services';
export abstract class AuthFlowStrategy {
abstract readonly isInternalAuth: boolean;
@@ -34,6 +38,8 @@ export abstract class AuthFlowStrategy {
protected tenantKey: string;
protected router: Router;
+ protected readonly oAuthErrorFilterService: OAuthErrorFilterService;
+
abstract checkIfInternalAuth(queryParams?: Params): boolean;
abstract navigateToLogin(queryParams?: Params): void;
abstract logout(queryParams?: Params): Observable;
@@ -54,6 +60,7 @@ export abstract class AuthFlowStrategy {
this.oAuthConfig = this.environment.getEnvironment().oAuthConfig || {};
this.tenantKey = injector.get(TENANT_KEY);
this.router = injector.get(Router);
+ this.oAuthErrorFilterService = injector.get(OAuthErrorFilterService);
this.listenToOauthErrors();
}
@@ -97,6 +104,7 @@ export abstract class AuthFlowStrategy {
if (redirect_uri && redirect_uri !== '/') {
return redirect_uri;
}
+
return '/';
}),
switchMap(redirectUri =>
@@ -118,7 +126,12 @@ export abstract class AuthFlowStrategy {
this.oAuthService.events
.pipe(
filter(event => event instanceof OAuthErrorEvent),
- tap(() => clearOAuthStorage()),
+ tap((err: OAuthErrorEvent) => {
+ const shouldSkip = this.oAuthErrorFilterService.run(err);
+ if (!shouldSkip) {
+ clearOAuthStorage();
+ }
+ }),
switchMap(() => this.configState.refreshAppState()),
)
.subscribe();
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts b/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts
index 7822c10e36..71bff8eb13 100644
--- a/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts
+++ b/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts
@@ -18,4 +18,5 @@ export const DEFAULT_VALIDATION_BLUEPRINTS = {
passwordRequiresDigit: 'AbpIdentity::Volo.Abp.Identity:PasswordRequiresDigit',
passwordRequiresNonAlphanumeric: 'AbpIdentity::Volo.Abp.Identity:PasswordRequiresNonAlphanumeric',
usernamePattern: 'AbpIdentity::Volo.Abp.Identity:InvalidUserName[{{ actualValue }}]',
-};
+ customMessage: '{{ customMessage }}'
+};
\ No newline at end of file
diff --git a/npm/scripts/change-package-version.ts b/npm/scripts/change-package-version.ts
new file mode 100644
index 0000000000..748633d465
--- /dev/null
+++ b/npm/scripts/change-package-version.ts
@@ -0,0 +1,100 @@
+import glob from "glob";
+import fse from "fs-extra";
+import {program} from "commander";
+
+(function findPackageJsonFiles() {
+ setupCommander();
+ const options = {
+ ignore: [
+ "../../**/node_modules/**",
+ "../../**/dist/**",
+ "../../**/build/**",
+ "../../**/scripts/**",
+ "../../**/wwwroot/**"
+ ]
+ };
+
+ const workingDir = "../../";
+ glob(`${workingDir}**/package.json`, options, (err, files) => {
+ if (err) throw err;
+
+ const {packageName,targetVersion}= program.opts();
+
+ for (const file of files) {
+ readPackageJsonFile(file, packageName, targetVersion);
+ }
+ });
+})();
+
+function readPackageJsonFile(path, key, newVersion) {
+ const replace = (block, key, newVersion) => {
+ const founded = Object.keys(block).filter(x => x === key);
+ if (founded.length > 0) {
+ let value = block[key];
+ value = value.replace(semverRegex, newVersion);
+ return [true, {
+ ...block,
+ [key]:value
+ }];
+ }
+ return [false, block];
+ };
+ fse.readJson(path, (err, packageObj) => {
+ if (err) throw err;
+
+ const { dependencies, peerDependencies, devDependencies } = packageObj;
+ const results = [];
+
+ let result = { ...packageObj };
+ if (dependencies) {
+ const [founded, d] = replace(dependencies, key, newVersion);
+ results.push(founded);
+ result = {
+ ...result, dependencies: d
+ };
+ }
+ if (peerDependencies) {
+ const [founded, p] = replace(peerDependencies, key, newVersion);
+ results.push(founded);
+ result = {
+ ...result, peerDependencies: p
+ };
+ }
+ if (devDependencies) {
+ const [founded, d] = replace(devDependencies, key, newVersion);
+ results.push(founded);
+ result = {
+ ...result, devDependencies: d
+ };
+ }
+ const anyChanges = !results.some(x => x);
+ if (anyChanges) {
+ return;
+ }
+ console.log("changed", path);
+ writeFile(path, result);
+ }
+ )
+ ;
+}
+export const semverRegex =
+ /\d+\.\d+\.\d+(?:-[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)*)?(?:\+[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)*)?$/;
+
+function writeFile(path, result) {
+ return fse.writeJson(path, result, { spaces: 2 });
+}
+
+
+function setupCommander() {
+ program
+ .option(
+ "-n, --packageName ",
+ "Package name"
+ )
+ .option(
+ "-v, --targetVersion ",
+ "Version number of the package"
+ );
+
+ program.parse(process.argv);
+}
diff --git a/npm/scripts/package.json b/npm/scripts/package.json
index bbf9c8bebf..6cc0b6bdb6 100644
--- a/npm/scripts/package.json
+++ b/npm/scripts/package.json
@@ -4,12 +4,13 @@
"description": "",
"scripts": {
"remove-lock-files": "yarn && ts-node -r tsconfig-paths/register remove-lock-files.ts",
- "validate-versions": "yarn && ts-node -r tsconfig-paths/register validate-versions.ts"
+ "validate-versions": "yarn && ts-node -r tsconfig-paths/register validate-versions.ts",
+ "change-package-version": "ts-node -r tsconfig-paths/register change-package-version.ts -n @abp/ng.theme.lepton-x -v 3.0.0"
},
"dependencies": {
"axios": "^0.24.0",
"chalk": "^4.1.0",
- "commander": "^8.3.0",
+ "commander": "^11.0.0",
"execa": "^5.1.1",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
diff --git a/npm/scripts/yarn.lock b/npm/scripts/yarn.lock
index 2feefc9b8a..97f2d15e36 100644
--- a/npm/scripts/yarn.lock
+++ b/npm/scripts/yarn.lock
@@ -417,16 +417,16 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies:
delayed-stream "~1.0.0"
+commander@^11.0.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906"
+ integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==
+
commander@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc"
integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==
-commander@^8.3.0:
- version "8.3.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
- integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
-
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
diff --git a/templates/app-nolayers/angular/angular.json b/templates/app-nolayers/angular/angular.json
index 453c76b128..16e8870f7d 100644
--- a/templates/app-nolayers/angular/angular.json
+++ b/templates/app-nolayers/angular/angular.json
@@ -147,10 +147,10 @@
"builder": "@angular-devkit/build-angular:dev-server",
"configurations": {
"production": {
- "browserTarget": "MyProjectName:build:production"
+ "buildTarget": "MyProjectName:build:production"
},
"development": {
- "browserTarget": "MyProjectName:build:development"
+ "buildTarget": "MyProjectName:build:development"
}
},
"defaultConfiguration": "development"
@@ -158,7 +158,7 @@
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
- "browserTarget": "MyProjectName:build"
+ "buildTarget": "MyProjectName:build"
}
},
"test": {
diff --git a/templates/app-nolayers/angular/package.json b/templates/app-nolayers/angular/package.json
index f2a0c03a3a..cb6deafece 100644
--- a/templates/app-nolayers/angular/package.json
+++ b/templates/app-nolayers/angular/package.json
@@ -20,7 +20,7 @@
"@abp/ng.setting-management": "~8.0.0",
"@abp/ng.tenant-management": "~8.0.0",
"@abp/ng.theme.shared": "~8.0.0",
- "@abp/ng.theme.lepton-x": "~3.0.0-rc.1",
+ "@abp/ng.theme.lepton-x": "~3.0.0",
"@angular/animations": "~17.0.0",
"@angular/common": "~17.0.0",
"@angular/compiler": "~17.0.0",
diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/Program.cs
index aca539aecf..fe30630813 100644
--- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/Program.cs
+++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/Program.cs
@@ -40,11 +40,11 @@ public class Program
builder.Host.AddAppSettingsSecretsJson()
.UseAutofac()
.UseSerilog();
- await builder.AddApplicationAsync();
if (IsMigrateDatabase(args))
{
builder.Services.AddDataMigrationEnvironment();
}
+ await builder.AddApplicationAsync();
var app = builder.Build();
await app.InitializeApplicationAsync();
diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Program.cs
index aca539aecf..fe30630813 100644
--- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Program.cs
+++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Program.cs
@@ -40,11 +40,11 @@ public class Program
builder.Host.AddAppSettingsSecretsJson()
.UseAutofac()
.UseSerilog();
- await builder.AddApplicationAsync();
if (IsMigrateDatabase(args))
{
builder.Services.AddDataMigrationEnvironment();
}
+ await builder.AddApplicationAsync();
var app = builder.Build();
await app.InitializeApplicationAsync();
diff --git a/templates/app/angular/angular.json b/templates/app/angular/angular.json
index 453c76b128..16e8870f7d 100644
--- a/templates/app/angular/angular.json
+++ b/templates/app/angular/angular.json
@@ -147,10 +147,10 @@
"builder": "@angular-devkit/build-angular:dev-server",
"configurations": {
"production": {
- "browserTarget": "MyProjectName:build:production"
+ "buildTarget": "MyProjectName:build:production"
},
"development": {
- "browserTarget": "MyProjectName:build:development"
+ "buildTarget": "MyProjectName:build:development"
}
},
"defaultConfiguration": "development"
@@ -158,7 +158,7 @@
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
- "browserTarget": "MyProjectName:build"
+ "buildTarget": "MyProjectName:build"
}
},
"test": {
diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json
index ca0afa8312..7eefe37bdb 100644
--- a/templates/app/angular/package.json
+++ b/templates/app/angular/package.json
@@ -19,7 +19,7 @@
"@abp/ng.oauth": "~8.0.0",
"@abp/ng.setting-management": "~8.0.0",
"@abp/ng.tenant-management": "~8.0.0",
- "@abp/ng.theme.lepton-x": "~3.0.0-rc.1",
+ "@abp/ng.theme.lepton-x": "~3.0.0",
"@abp/ng.theme.shared": "~8.0.0",
"@angular/animations": "~17.0.0",
"@angular/common": "~17.0.0",
diff --git a/templates/module/angular/angular.json b/templates/module/angular/angular.json
index aced10d5fe..9547009278 100644
--- a/templates/module/angular/angular.json
+++ b/templates/module/angular/angular.json
@@ -145,10 +145,10 @@
"builder": "@angular-devkit/build-angular:dev-server",
"configurations": {
"production": {
- "browserTarget": "dev-app:build:production"
+ "buildTarget": "dev-app:build:production"
},
"development": {
- "browserTarget": "dev-app:build:development"
+ "buildTarget": "dev-app:build:development"
}
},
"defaultConfiguration": "development"
@@ -156,7 +156,7 @@
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
- "browserTarget": "dev-app:build"
+ "buildTarget": "dev-app:build"
}
},
"test": {