From f819e3c679c156247eb3706ede39cea56f6ee859 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 09:16:39 +0300 Subject: [PATCH 01/12] fix condition for recursive DeepPartial type --- npm/ng-packs/packages/core/src/lib/models/utility.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) 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..6d9b44ceb6 100644 --- a/npm/ng-packs/packages/core/src/lib/models/utility.ts +++ b/npm/ng-packs/packages/core/src/lib/models/utility.ts @@ -1,14 +1,9 @@ import { TemplateRef, Type } from '@angular/core'; export type DeepPartial = { - [P in keyof T]?: T[P] extends Serializable ? DeepPartial : T[P]; + [P in keyof T]?: T[P] extends Record ? DeepPartial : T[P]; }; -type Serializable = Record< - string | number | symbol, - string | number | boolean | Record ->; - export type InferredInstanceOf = T extends Type ? U : never; export type InferredContextOf = T extends TemplateRef ? U : never; From 27fb31e530309d72b88d896c27263ff138bd6884 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 09:17:34 +0300 Subject: [PATCH 02/12] fix sliceUpdate selector type --- .../packages/core/src/lib/utils/internal-store-utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..924c48d988 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 @@ -19,7 +19,7 @@ export class InternalStore { ) => this.state$.pipe(map(selector), distinctUntilChanged(compareFn)); sliceUpdate = ( - selector: (state: DeepPartial) => Slice, + selector: (state: State) => Slice, filterFn = (x: Slice) => x !== undefined, ) => this.update$.pipe(map(selector), filter(filterFn)); From 13e06959243b6acd426f7a40c6ef5cd1ca1f8321 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 09:18:17 +0300 Subject: [PATCH 03/12] make PermissionService props and methods protected --- .../core/src/lib/services/permission.service.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) 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); } } From 255922244ae8ebe904c898382391eade72c944dc Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 09:18:48 +0300 Subject: [PATCH 04/12] add mock permission service to core testing lib --- .../core/testing/src/lib/services/index.ts | 1 + .../lib/services/mock-permission.service.ts | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts 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 } }); + } +} From a55c79519f4d591b2fb7c946cbf1d2aef60fa3e5 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 09:19:13 +0300 Subject: [PATCH 05/12] provide MockPermissionService as PermissionService --- .../packages/core/testing/src/lib/core-testing.module.ts | 6 ++++++ 1 file changed, 6 insertions(+) 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, From f0cdf83357b2a3c4c60df3aae4ee68244da3f452 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 09:21:57 +0300 Subject: [PATCH 06/12] make mock services of core testing public --- npm/ng-packs/packages/core/testing/src/public-api.ts | 1 + 1 file changed, 1 insertion(+) 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..bf95ae9ece 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,2 @@ export * from './lib/core-testing.module'; +export * from './lib/services'; From 08a43351d96d5c8791d9a0462d4639cb767a8987 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 29 Dec 2020 13:15:40 +0300 Subject: [PATCH 07/12] Cli: Change NuGet.config file path for module source-code download --- .../Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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) From 2103cb339cae5671a1f6fb2f9813718eb22e842f Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 22:04:42 +0300 Subject: [PATCH 08/12] improve DeepPartial utility type --- .../packages/core/src/lib/models/utility.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) 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 6d9b44ceb6..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,8 +1,21 @@ +/* tslint:disable:ban-types */ import { TemplateRef, Type } from '@angular/core'; -export type DeepPartial = { - [P in keyof T]?: T[P] extends Record ? DeepPartial : T[P]; -}; +export type DeepPartial = Partible extends never + ? T + : { + [K in keyof T]?: DeepPartial; + }; + +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; From e7edc905c352e4d0cf763b7602fec3755ee53829 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 22:09:02 +0300 Subject: [PATCH 09/12] assert generic state to deep partial state --- .../packages/core/src/lib/utils/internal-store-utils.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 924c48d988..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 @@ -19,7 +19,7 @@ export class InternalStore { ) => this.state$.pipe(map(selector), distinctUntilChanged(compareFn)); sliceUpdate = ( - selector: (state: State) => Slice, + selector: (state: DeepPartial) => Slice, filterFn = (x: Slice) => x !== undefined, ) => this.update$.pipe(map(selector), filter(filterFn)); @@ -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() { From 1e2934125b7eb80f3864d072181c363700eb49f5 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 30 Dec 2020 11:58:21 +0300 Subject: [PATCH 10/12] add clearPage test utility function --- .../core/testing/src/lib/utils/clear-page.util.ts | 10 ++++++++++ .../packages/core/testing/src/lib/utils/index.ts | 1 + npm/ng-packs/packages/core/testing/src/public-api.ts | 1 + 3 files changed, 12 insertions(+) create mode 100644 npm/ng-packs/packages/core/testing/src/lib/utils/clear-page.util.ts create mode 100644 npm/ng-packs/packages/core/testing/src/lib/utils/index.ts 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..3586e1279b --- /dev/null +++ b/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts @@ -0,0 +1 @@ +export * from './clear-page.util'; 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 bf95ae9ece..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,2 +1,3 @@ export * from './lib/core-testing.module'; export * from './lib/services'; +export * from './lib/utils'; From 99e54a80808efc45dc2e9c6a1644e721996aba9b Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 30 Dec 2020 12:03:22 +0300 Subject: [PATCH 11/12] add wait test utility function --- npm/ng-packs/packages/core/testing/src/lib/utils/index.ts | 1 + .../packages/core/testing/src/lib/utils/wait.util.ts | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 npm/ng-packs/packages/core/testing/src/lib/utils/wait.util.ts 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 index 3586e1279b..3de5c9748e 100644 --- a/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts +++ b/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts @@ -1 +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)); +} From 0e11d9762843e3ec32fbdbf4c2cb9bf3246ed77f Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 29 Dec 2020 17:35:16 +0300 Subject: [PATCH 12/12] chore: add registry option to publish script --- npm/ng-packs/scripts/publish.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) 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; +})();