diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs index ef8385d479..5e8db9a346 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs @@ -75,7 +75,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Module private static void UpdateNuGetConfig(ProjectBuildContext context, List steps) { - steps.Add(new UpdateNuGetConfigStep("/aspnet-core/NuGet.Config")); + steps.Add(new UpdateNuGetConfigStep("/NuGet.Config")); } private void CleanupFolderHierarchy(ProjectBuildContext context, List steps) diff --git a/npm/ng-packs/packages/core/src/lib/models/utility.ts b/npm/ng-packs/packages/core/src/lib/models/utility.ts index f1cfbdb6da..a8ff45e319 100644 --- a/npm/ng-packs/packages/core/src/lib/models/utility.ts +++ b/npm/ng-packs/packages/core/src/lib/models/utility.ts @@ -1,13 +1,21 @@ +/* tslint:disable:ban-types */ import { TemplateRef, Type } from '@angular/core'; -export type DeepPartial = { - [P in keyof T]?: T[P] extends Serializable ? DeepPartial : T[P]; -}; +export type DeepPartial = Partible extends never + ? T + : { + [K in keyof T]?: DeepPartial; + }; -type Serializable = Record< - string | number | symbol, - string | number | boolean | Record ->; +type Partible = T extends Primitive | Array + ? never + : { + [K in keyof T]: T[K] extends Function ? never : T[K]; + } extends T + ? T + : never; + +export type Primitive = undefined | null | boolean | string | number | bigint | symbol; export type InferredInstanceOf = T extends Type ? U : never; export type InferredContextOf = T extends TemplateRef ? U : never; diff --git a/npm/ng-packs/packages/core/src/lib/services/permission.service.ts b/npm/ng-packs/packages/core/src/lib/services/permission.service.ts index c89949b064..c549c5a7a8 100644 --- a/npm/ng-packs/packages/core/src/lib/services/permission.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/permission.service.ts @@ -6,7 +6,7 @@ import { ConfigStateService } from './config-state.service'; @Injectable({ providedIn: 'root' }) export class PermissionService { - constructor(private configState: ConfigStateService) {} + constructor(protected configState: ConfigStateService) {} getGrantedPolicy$(key: string) { return this.getStream().pipe( @@ -19,7 +19,7 @@ export class PermissionService { return this.isPolicyGranted(key, policies); } - private isPolicyGranted(key: string, grantedPolicies: Record) { + protected isPolicyGranted(key: string, grantedPolicies: Record) { if (!key) return true; const orRegexp = /\|\|/g; @@ -43,19 +43,19 @@ export class PermissionService { return this.getPolicy(key, grantedPolicies); } - private getStream() { + protected getStream() { return this.configState.getAll$().pipe(map(this.mapToPolicies)); } - private getSnapshot() { + protected getSnapshot() { return this.mapToPolicies(this.configState.getAll()); } - private mapToPolicies(applicationConfiguration: ApplicationConfigurationDto) { - return snq(() => applicationConfiguration.auth.grantedPolicies); + protected mapToPolicies(applicationConfiguration: ApplicationConfigurationDto) { + return snq(() => applicationConfiguration.auth.grantedPolicies, {}); } - private getPolicy(key: string, grantedPolicies: Record) { + protected getPolicy(key: string, grantedPolicies: Record) { return snq(() => grantedPolicies[key], false); } } diff --git a/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts index ea4af9ddfb..27a8e9cbcf 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts @@ -33,7 +33,7 @@ export class InternalStore { } this.state$.next(patchedState); - this.update$.next(patchedState); + this.update$.next(patchedState as DeepPartial); } deepPatch(state: DeepPartial) { @@ -43,7 +43,7 @@ export class InternalStore { set(state: State) { this.state$.next(state); - this.update$.next(state); + this.update$.next(state as DeepPartial); } reset() { diff --git a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts index 7fa32a1b89..adfbaca816 100644 --- a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts +++ b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts @@ -4,6 +4,7 @@ import { coreOptionsFactory, CORE_OPTIONS, LIST_QUERY_DEBOUNCE_TIME, + PermissionService, RestService, } from '@abp/ng.core'; import { APP_BASE_HREF } from '@angular/common'; @@ -11,6 +12,7 @@ import { ModuleWithProviders, NgModule } from '@angular/core'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { provideRoutes } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; +import { MockPermissionService } from './services/mock-permission.service'; import { MockRestService } from './services/mock-rest.service'; /** @@ -42,6 +44,10 @@ export class CoreTestingModule { provide: LIST_QUERY_DEBOUNCE_TIME, useValue: listQueryDebounceTime, }, + { + provide: PermissionService, + useClass: MockPermissionService, + }, { provide: RestService, useClass: MockRestService, diff --git a/npm/ng-packs/packages/core/testing/src/lib/services/index.ts b/npm/ng-packs/packages/core/testing/src/lib/services/index.ts index 24206d7c5d..128750c0bc 100644 --- a/npm/ng-packs/packages/core/testing/src/lib/services/index.ts +++ b/npm/ng-packs/packages/core/testing/src/lib/services/index.ts @@ -1 +1,2 @@ +export * from './mock-permission.service'; export * from './mock-rest.service'; diff --git a/npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts b/npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts new file mode 100644 index 0000000000..81bbdcc625 --- /dev/null +++ b/npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts @@ -0,0 +1,34 @@ +import { ConfigStateService, PermissionService } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class MockPermissionService extends PermissionService { + constructor(protected configState: ConfigStateService) { + super(configState); + this.grantAllPolicies(); + } + + grantAllPolicies() { + const grantedPolicies = new Proxy( + {}, + { + get() { + return true; + }, + }, + ); + + this.configState['store'].deepPatch({ auth: { grantedPolicies } }); + } + + grantPolicies(keys: string[]) { + const grantedPolicies = keys.reduce((policies, key) => { + policies[key] = true; + return policies; + }, {}); + + this.configState['store'].deepPatch({ auth: { grantedPolicies } }); + } +} diff --git a/npm/ng-packs/packages/core/testing/src/lib/utils/clear-page.util.ts b/npm/ng-packs/packages/core/testing/src/lib/utils/clear-page.util.ts new file mode 100644 index 0000000000..3570d25f2d --- /dev/null +++ b/npm/ng-packs/packages/core/testing/src/lib/utils/clear-page.util.ts @@ -0,0 +1,10 @@ +import { ComponentFixture } from '@angular/core/testing'; + +export function clearPage(_fixture: ComponentFixture) { + if (!document) return; + + const elements = document.querySelectorAll('body > *'); + elements.forEach(element => { + if (/^(abp|ngb)-/i.test(element.tagName)) document.body.removeChild(element); + }); +} diff --git a/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts b/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts new file mode 100644 index 0000000000..3de5c9748e --- /dev/null +++ b/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts @@ -0,0 +1,2 @@ +export * from './clear-page.util'; +export * from './wait.util'; diff --git a/npm/ng-packs/packages/core/testing/src/lib/utils/wait.util.ts b/npm/ng-packs/packages/core/testing/src/lib/utils/wait.util.ts new file mode 100644 index 0000000000..9bd6b4435f --- /dev/null +++ b/npm/ng-packs/packages/core/testing/src/lib/utils/wait.util.ts @@ -0,0 +1,6 @@ +import { ComponentFixture } from '@angular/core/testing'; + +export function wait(fixture: ComponentFixture, timeout = 0) { + fixture.detectChanges(); + return new Promise(res => setTimeout(res, timeout)); +} diff --git a/npm/ng-packs/packages/core/testing/src/public-api.ts b/npm/ng-packs/packages/core/testing/src/public-api.ts index 3b48853680..657f628e28 100644 --- a/npm/ng-packs/packages/core/testing/src/public-api.ts +++ b/npm/ng-packs/packages/core/testing/src/public-api.ts @@ -1 +1,3 @@ export * from './lib/core-testing.module'; +export * from './lib/services'; +export * from './lib/utils'; diff --git a/npm/ng-packs/scripts/publish.ts b/npm/ng-packs/scripts/publish.ts index b8da3637db..7e6f683c96 100644 --- a/npm/ng-packs/scripts/publish.ts +++ b/npm/ng-packs/scripts/publish.ts @@ -8,13 +8,14 @@ program '-v, --nextVersion ', 'next semantic version. Available versions: ["major", "minor", "patch", "premajor", "preminor", "prepatch", "prerelease", "or type a custom version"]', ) + .option('-r, --registry ', 'target npm server registry') .option('-p, --preview', 'publishes with preview tag') .option('-r, --rc', 'publishes with next tag') .option('-g, --skipGit', 'skips git push'); program.parse(process.argv); -const publish = async () => { +(async () => { const versions = ['major', 'minor', 'patch', 'premajor', 'preminor', 'prepatch', 'prerelease']; if (!program.nextVersion) { @@ -22,9 +23,11 @@ const publish = async () => { process.exit(1); } - const registry = program.preview - ? 'https://www.myget.org/F/abp-nightly/auth/8f2a5234-1bce-4dc7-b976-2983078590a9/npm/' - : 'https://registry.npmjs.org'; + const registry = + program.registry || + (program.preview + ? 'https://www.myget.org/F/abp-nightly/auth/8f2a5234-1bce-4dc7-b976-2983078590a9/npm/' + : 'https://registry.npmjs.org'); try { await fse.remove('../dist'); @@ -88,8 +91,4 @@ const publish = async () => { } process.exit(0); -}; - -publish(); - -export default publish; +})();