Merge pull request #5594 from abpframework/rel-3.2

Rel 3.2
pull/5607/head
Mehmet Erim 5 years ago committed by GitHub
commit 577ce93e40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,13 @@
{
"grammarly.userWords": [
"api",
"apiName",
"cli",
"defaultProject",
"formatter",
"md",
"monorepo",
"npx",
"rootNamespace"
]
}

@ -233,4 +233,4 @@ Please refer to `Config.Environment` type for all the properties you can pass to
## What's Next?
- [Modifying the Menu](./Modifying-the-Menu.md)
- [HTTP Requests](./Http-Requests)

@ -1,4 +1,4 @@
# Content Projection
# Projecting Angular Content
You can use the `ContentProjectionService` in @abp/ng.core package in order to project content in an easy and explicit way.
@ -75,4 +75,4 @@ projectContent<T extends Type<any> | TemplateRef<any>>(
## What's Next?
- [TrackByService](./Track-By-Service.md)
- [Confirmation Popup](./Confirmation-Service.md)

@ -35,7 +35,3 @@ export class AppComponent {
Navigate to `/setting-management` route to see the changes:
![Custom Settings Tab](./images/custom-settings.png)
## What's Next?
- [Lazy Loading Scripts & Styles](./Lazy-Load-Service.md)

@ -1,4 +1,4 @@
# Dom Insertion (of Scripts and Styles)
# Inserting Scripts & Styles to DOM
You can use the `DomInsertionService` in @abp/ng.core package in order to insert scripts and styles in an easy and explicit way.
@ -137,4 +137,4 @@ The `has` method returns a boolean value that indicates the given content has al
## What's Next?
- [ContentProjectionService](./Content-Projection-Service.md)
- [Lazy Loading Scripts & Styles](./Lazy-Load-Service.md)

@ -4,7 +4,7 @@ Every application needs some **environment** variables. In Angular world, this i
Current `Environment` configuration holds sub config classes as follows:
```typescript
```js
export interface Environment {
apis: Apis;
application: Application;
@ -16,7 +16,7 @@ export interface Environment {
## Apis
```typescript
```js
export interface Apis {
[key: string]: ApiConfig;
default: ApiConfig;
@ -56,7 +56,7 @@ Everything else will be sent to `"https://localhost:8080"`
## Application
```typescript
```js
export interface Application {
name: string;
baseUrl?: string;
@ -80,7 +80,7 @@ Abp Framework supports this out of box.
To integrate an existing config json into the `environment`, you need to set `remoteEnv`
```typescript
```js
export type customMergeFn = (
localEnv: Partial<Config.Environment>,
remoteEnv: any,
@ -106,4 +106,3 @@ export interface RemoteEnv {
## What's Next?
* [Service Proxies](./Service-Proxies.md)

@ -1,4 +1,4 @@
# How to Lazy Load Scripts and Styles
# Lazy Loading Scripts & Styles
You can use the `LazyLoadService` in @abp/ng.core package in order to lazy load scripts and styles in an easy and explicit way.
@ -210,4 +210,4 @@ load(strategy: LoadingStrategy, retryTimes?: number, retryDelay?: number): Obser
## What's Next?
- [DomInsertionService](./Dom-Insertion-Service.md)
- [Projecting Angular Content](./Content-Projection-Service.md)

@ -1,4 +1,4 @@
# Querying Lists Easily with ListService
# Working with Lists
`ListService` is a utility service to provide an easy pagination, sorting, and search implementation.
@ -177,3 +177,8 @@ As of v3.0, with ngx-datatable, the `page` property has to be set as `0` for ini
```
**Important Note:** The `abp-table` is not removed, but is deprecated and will be removed in the future. Please consider switching to ngx-datatable.
## What's Next?
- [Easy *ngFor trackBy](./Track-By-Service.md)

@ -2,8 +2,8 @@
ABP Angular UI supports the multi-tenancy. The following features related to multi-tenancy are available in the startup templates.
![Tenants Page](./images/tenants-page.png)
<p style="font-size:small;text-align:center;">Tenants page</p>
On the page above, you can;
@ -13,13 +13,12 @@ On the page above, you can;
- Edit an existing tenant.
- Delete a tenant.
![Tenant Switching Component](./images/tenant-switching-box.png)
<p style="font-size:small;text-align:center;">Tenant Switching Component</p>
You can switch between existing tenants by using the tenant switching component in the child pages of the `AccountLayoutComponent` (like Login page). Angular UI sends the selected tenant id to the backend as `__tenant` header on each request.
## Domain Tenant Resolver
Angular UI can get the tenant name from the app running URL. You can determine the current tenant by subdomain (like mytenant1.mydomain.com) or by the whole domain (like mytenant.com). To do this, you need to set the `application.baseUrl` property in the environment:
@ -32,10 +31,10 @@ Subdomain resolver:
export const environment = {
//...
application: {
baseUrl: 'https://{0}.mydomain.com/'
baseUrl: "https://{0}.mydomain.com/",
},
//...
}
};
```
**{0}** is the placeholder to determine current tenant's unique name.
@ -44,7 +43,6 @@ After the configuration above, if your app runs on the `mytenant1.mydomain.com`,
> **Important Note:** If you define the `baseUrl` with the placeholder (**{0}**), the tenant switching component in the child pages of the `AccountLayoutComponent` (like Login page) will be hidden.
Domain resolver:
```js
@ -53,10 +51,10 @@ Domain resolver:
export const environment = {
//...
application: {
baseUrl: 'https://{0}.com/'
baseUrl: "https://{0}.com/",
},
//...
}
};
```
After the configuration above, if your app runs on the `mytenant.com`, the app will get the tenant name as **mytenant**.
@ -71,29 +69,28 @@ The **{0}** placeholder can be put to the API URLs in the environment to determi
export const environment = {
//...
application: {
baseUrl: 'https://{0}.mydomain.com/',
baseUrl: "https://{0}.mydomain.com/",
//...
},
oAuthConfig: {
issuer: 'https://{0}.ids.mydomain.com',
issuer: "https://{0}.ids.mydomain.com",
//...
},
apis: {
default: {
url: 'https://{0}.api.mydomain.com',
url: "https://{0}.api.mydomain.com",
},
AbpIdentity: {
url: 'https://{0}.identity.mydomain.com',
url: "https://{0}.identity.mydomain.com",
},
},
}
};
```
> **Important Note:** The `application.baseUrl` and the `{0}` placeholder in the value of the `baseUrl` property are required to be able to get tenant from running URL. Other placeholders in API URLs are optional.
After the configuration above, if your app runs on the `mytenant1.mydomain.com`, the app will get tenant name as **mytenant1** and replace the environment object in `ConfigState` on app initialization as follows:
```js
// environment object in ConfigState
@ -128,8 +125,8 @@ The app sends the `__tenant` header that contains the current tenant id on each
## See Also
* [Multi Tenancy in ABP](../../Multi-Tenancy.md)
- [Multi Tenancy in ABP](../../Multi-Tenancy.md)
## What's Next?
- [Confirmation Popup](./Confirmation-Service.md)
- [Managing RxJS Subscriptions](./Subscription-Service.md)

@ -209,4 +209,4 @@ In addition, you can [deploy your application to certain targets using the Angul
## What's Next?
- [Environment](./Environment.md)
- [Environment Variables](./Environment.md)

@ -1,16 +1,15 @@
## Service Proxies
It is common to call a REST endpoint in the server from our Angular applications. In this case, we generally create **services** (those have methods for each service method on the server side) and **model objects** (matches to [DTOs](../../Data-Transfer-Objects) in the server side).
Calling a REST endpoint from Angular applications is common. We usually create **services** matching server-side controllers and **interfaces** matching [DTOs](../../Data-Transfer-Objects) to interact with the server. This often results in manually transforming C# code into TypeScript equivalents and that is unfortunate, if not intolerable.
In addition to manually creating such server-interacting services, we could use tools like [NSWAG](https://github.com/RicoSuter/NSwag) to generate service proxies for us. But NSWAG has the following problems we've experienced:
To avoid manual effort, we might use a tool like [NSWAG](https://github.com/RicoSuter/NSwag) that generates service proxies. However, NSWAG has some disadvantages:
- It generates a **big, single** .ts file which has some problems;
- It get **too large** when your application grows.
- It doesn't fit into the **[modular](../../Module-Development-Basics) approach** of the ABP framework.
- It creates a bit **ugly code**. We want to have a clean code (just like if we write manually).
- It can not generate the same **method signature** declared in the server side (because swagger.json doesn't exactly reflect the method signature of the backend service). We've created an endpoint that exposes server side method contacts to allow clients generate a better aligned client proxies.
- It generates **a single .ts file** which gets **too large** as your application grows. Also, this single file does not fit the **[modular](../../Module-Development-Basics) approach** of ABP.
- To be honest, the generated code is a bit **ugly**. We would like to produce code that looks as if someone wrote it.
- Since swagger.json **does not reflect the exact method signature** of backend services, NSWAG cannot reflect them on the client-side as well.
ABP introduces an endpoint that exposes server-side method contracts. When the `generate-proxy` command is run, ABP CLI makes an HTTP request to this endpoint and generates better-aligned client proxies in TypeScript. It organizes folders according to namespaces, adds barrel exports, and reflects method signatures in Angular services.
ABP CLI changes that via the `generate-proxy` command. It automatically generates the client proxies in TypeScript. by creating folders which separated by module names in the `src/app` folder.
Run the following command in the **root folder** of the angular application:
```bash
@ -19,13 +18,13 @@ abp generate-proxy
The command without any parameters creates proxies only for your own application's services and places them in your default Angular application. There are several parameters you may use to modify this behavior. See the [CLI documentation](../../CLI) for details.
The generated files will be placed in a folder called `proxy` at the root of target project.
The generated files will be placed in a folder called `proxy` at the root of the target project.
![generated-files-via-generate-proxy](./images/generated-files-via-generate-proxy.png)
Each folder will have models, enums, and services defined at related namespace accompanied by a barrel export, i.e. an `index.ts` file for easier imports.
> The cammand is able to find application/library roots by reading `angular.json` file. Make sure you have either defined your target project as the `defaultProject` or pass the `--target` parameter to the command. This also means that you may have a monorepo workspace.
> The command can find application/library roots by reading the `angular.json` file. Make sure you have either defined your target project as the `defaultProject` or pass the `--target` parameter to the command. This also means that you may have a monorepo workspace.
### Angular Project Configuration
@ -74,9 +73,9 @@ export const environment: Config.Environment = {
The `generate-proxy` command generates one service per back-end controller and a method (property with a function value actually) for each action in the controller. These methods call backend APIs via [RestService](./Http-Requests#restservice).
A variable named `apiName` (available as of v2.4) is defined in each service. `apiName` matches the module's RemoteServiceName. This variable passes to the `RestService` as a parameter at each request. If there is no microservice API defined in the environment, `RestService` uses the default. See [getting a specific API endpoint from application config](./Http-Requests#how-to-get-a-specific-api-endpoint-from-application-config)
A variable named `apiName` (available as of v2.4) is defined in each service. `apiName` matches the module's `RemoteServiceName`. This variable passes to the `RestService` as a parameter at each request. If there is no microservice API defined in the environment, `RestService` uses the default. See [getting a specific API endpoint from application config](./Http-Requests#how-to-get-a-specific-api-endpoint-from-application-config)
The `providedIn` property of the services is defined as `'root'`. Therefore there is no need to provide them in a module. You can use them directly by injecting them into constructor as shown below:
The `providedIn` property of the services is defined as `'root'`. Therefore there is no need to provide them in a module. You can use them directly by injecting them into the constructor as shown below:
```js
import { BookService } from '@proxy/books';
@ -114,7 +113,7 @@ export class BookComponent implements OnInit {
### Enums
Enums have always been difficult to populate in the frontend. The `generate-proxy` command genarates enums in a separate file and exports a ready-to-use options constant from the same file. So you can import them as follows:
Enums have always been difficult to populate in the frontend. The `generate-proxy` command generates enums in a separate file and exports a ready-to-use "options constant" from the same file. So you can import them as follows:
```js
import { bookGenreOptions } from "@proxy/books";
@ -132,7 +131,7 @@ export class BookComponent implements OnInit {
<select formControlName="genre">
<option [ngValue]="null">Select a genre</option>
<option *ngFor="let genre of genres" [ngValue]="genre.value">
{%{{{ genre.key }}}%}
{%{{{ genre.key }}}%}
</option>
</select>
```
@ -141,4 +140,4 @@ export class BookComponent implements OnInit {
## What's Next?
- [HTTP Requests](./Http-Requests)
- [Config State](./Config-State.md)

@ -1,4 +1,4 @@
# Easy Unsubscription for Your Observables
# Managing RxJS Subscriptions
`SubscriptionService` is a utility service to provide an easy unsubscription from RxJS observables in Angular components and directives. Please see [why you should unsubscribe from observables on instance destruction](https://angular.io/guide/lifecycle-hooks#cleaning-up-on-instance-destruction).
@ -200,4 +200,4 @@ class DemoComponent implements OnInit {
## What's Next?
- [ListService](./List-Service.md)
- [Working with Lists](./List-Service.md)

@ -156,4 +156,4 @@ Removes all open toasts.
## What's Next?
- [Config State](./Config-State.md)
- [Modifying the Menu](./Modifying-the-Menu.md)

@ -1,4 +1,4 @@
# Easy TrackByFunction Implementation
# Easy *ngFor trackBy
`TrackByService` is a utility service to provide an easy implementation for one of the most frequent needs in Angular templates: `TrackByFunction`. Please see [this page in Angular docs](https://angular.io/guide/template-syntax#ngfor-with-trackby) for its purpose.
@ -116,4 +116,4 @@ class DemoComponent {
## What's Next?
- [SubscriptionService](./Subscription-Service.md)
- [Inserting Scripts & Styles to DOM](./Dom-Insertion-Service.md)

@ -436,76 +436,96 @@
"path": "UI/Angular/Quick-Start.md"
},
{
"text": "Environment",
"path": "UI/Angular/Environment.md"
},
{
"text": "Service Proxies",
"path": "UI/Angular/Service-Proxies.md"
},
{
"text": "HTTP Requests",
"path": "UI/Angular/HTTP-Requests.md"
},
{
"text": "Localization",
"path": "UI/Angular/Localization.md"
},
{
"text": "Permission Management",
"path": "UI/Angular/Permission-Management.md"
},
{
"text": "Multi Tenancy",
"path": "UI/Angular/Multi-Tenancy.md"
},
{
"text": "Confirmation Popup",
"path": "UI/Angular/Confirmation-Service.md"
},
{
"text": "Toast Overlay",
"path": "UI/Angular/Toaster-Service.md"
},
{
"text": "Config State",
"path": "UI/Angular/Config-State.md"
},
{
"text": "Modifying the Menu",
"path": "UI/Angular/Modifying-the-Menu.md"
},
{
"text": "Component Replacement",
"path": "UI/Angular/Component-Replacement.md"
},
{
"text": "Custom Setting Page",
"path": "UI/Angular/Custom-Setting-Page.md"
},
{
"text": "Lazy Loading Scripts & Styles",
"path": "UI/Angular/Lazy-Load-Service.md"
},
{
"text": "DomInsertionService",
"path": "UI/Angular/Dom-Insertion-Service.md"
},
{
"text": "ContentProjectionService",
"path": "UI/Angular/Content-Projection-Service.md"
"text": "Development",
"items": [
{
"text": "Environment Variables",
"path": "UI/Angular/Environment.md"
},
{
"text": "Service Proxies",
"path": "UI/Angular/Service-Proxies.md"
}
]
},
{
"text": "TrackByService",
"path": "UI/Angular/Track-By-Service.md"
"text": "Core Functionality",
"items": [
{
"text": "Config State",
"path": "UI/Angular/Config-State.md"
},
{
"text": "HTTP Requests",
"path": "UI/Angular/HTTP-Requests.md"
},
{
"text": "Localization",
"path": "UI/Angular/Localization.md"
},
{
"text": "Permission Management",
"path": "UI/Angular/Permission-Management.md"
},
{
"text": "Multi Tenancy",
"path": "UI/Angular/Multi-Tenancy.md"
}
]
},
{
"text": "SubscriptionService",
"path": "UI/Angular/Subscription-Service.md"
"text": "Utilities",
"items": [
{
"text": "Managing RxJS Subscriptions",
"path": "UI/Angular/Subscription-Service.md"
},
{
"text": "Working with Lists",
"path": "UI/Angular/List-Service.md"
},
{
"text": "Easy *ngFor trackBy",
"path": "UI/Angular/Track-By-Service.md"
},
{
"text": "Inserting Scripts & Styles to DOM",
"path": "UI/Angular/Dom-Insertion-Service.md"
},
{
"text": "Lazy Loading Scripts & Styles",
"path": "UI/Angular/Lazy-Load-Service.md"
},
{
"text": "Projecting Angular Content",
"path": "UI/Angular/Content-Projection-Service.md"
},
{
"text": "Confirmation Popup",
"path": "UI/Angular/Confirmation-Service.md"
},
{
"text": "Toast Overlay",
"path": "UI/Angular/Toaster-Service.md"
}
]
},
{
"text": "ListService",
"path": "UI/Angular/List-Service.md"
"text": "Customization",
"items": [
{
"text": "Modifying the Menu",
"path": "UI/Angular/Modifying-the-Menu.md"
},
{
"text": "Component Replacement",
"path": "UI/Angular/Component-Replacement.md"
},
{
"text": "Custom Setting Page",
"path": "UI/Angular/Custom-Setting-Page.md"
}
]
}
]
},

@ -1,5 +1,6 @@
{
"printWidth": 100,
"singleQuote": true,
"trailingComma": "all"
"trailingComma": "all",
"arrowParens": "avoid"
}

@ -1,5 +1,5 @@
{
"extends": "../../tsconfig.base.json",
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/app",
"types": []

@ -1,5 +1,5 @@
{
"extends": "../../tsconfig.base.json",
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/spec",
"types": ["node", "jest"]

@ -21,7 +21,7 @@
"ci:test": "ng test --coverage=false --silent",
"ci:build": "cd scripts && yarn install && yarn build:prod",
"lerna": "lerna",
"compile:ivy": "yarn ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points --tsconfig './tsconfig.prod.json' --source node_modules --async false",
"compile:ivy": "yarn ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points --tsconfig './tsconfig.prod.json' --source node_modules",
"postinstall": "npm run compile:ivy"
},
"devDependencies": {
@ -37,21 +37,21 @@
"@abp/ng.theme.shared": "~3.2.0-rc.2",
"@abp/utils": "^3.2.0-rc.2",
"@angular-builders/jest": "^10.0.0",
"@angular-devkit/build-angular": "~0.1000.6",
"@angular-devkit/build-ng-packagr": "~0.1000.6",
"@angular-devkit/build-angular": "~0.1001.2",
"@angular-devkit/build-ng-packagr": "~0.1001.2",
"@angular-devkit/schematics-cli": "^0.1001.1",
"@angular/animations": "~10.0.10",
"@angular/cli": "~10.0.6",
"@angular/common": "~10.0.10",
"@angular/compiler": "10.0.0",
"@angular/compiler-cli": "10.0.0",
"@angular/core": "~10.0.10",
"@angular/forms": "~10.0.10",
"@angular/language-service": "~10.0.10",
"@angular/localize": "~10.0.10",
"@angular/platform-browser": "~10.0.10",
"@angular/platform-browser-dynamic": "~10.0.10",
"@angular/router": "~10.0.10",
"@angular/animations": "~10.1.2",
"@angular/cli": "~10.1.2",
"@angular/common": "~10.1.2",
"@angular/compiler": "10.1.2",
"@angular/compiler-cli": "10.1.2",
"@angular/core": "~10.1.2",
"@angular/forms": "~10.1.2",
"@angular/language-service": "~10.1.2",
"@angular/localize": "~10.1.2",
"@angular/platform-browser": "~10.1.2",
"@angular/platform-browser-dynamic": "~10.1.2",
"@angular/router": "~10.1.2",
"@fortawesome/fontawesome-free": "^5.14.0",
"@ng-bootstrap/ng-bootstrap": "^7.0.0",
"@ngneat/spectator": "^5.13.0",
@ -68,7 +68,7 @@
"angular-oauth2-oidc": "^10.0.3",
"bootstrap": "^4.5.0",
"chart.js": "^2.9.3",
"codelyzer": "^5.1.2",
"codelyzer": "^6.0.0",
"conventional-changelog-cli": "^2.0.31",
"cz-conventional-changelog": "3.0.2",
"font-awesome": "^4.7.0",
@ -91,18 +91,14 @@
"symlink-manager": "^1.5.0",
"ts-node": "~7.0.0",
"ts-toolbelt": "6.15.4",
"tsickle": "^0.38.1",
"tsickle": "^0.39.1",
"tslint": "~6.1.0",
"typescript": "~3.9.5",
"typescript": "~4.0.3",
"zone.js": "~0.10.2"
},
"dependencies": {
"tslib": "^2.0.0"
},
"resolutions": {
"@angular/compiler": "10.0.0",
"@angular/compiler-cli": "10.0.0"
},
"config": {
"commitizen": {
"path": "cz-conventional-changelog"

@ -14,7 +14,6 @@ export interface RegisterResponse {
emailConfirmed: boolean;
phoneNumber: string;
phoneNumberConfirmed: boolean;
twoFactorEnabled: boolean;
lockoutEnabled: boolean;
lockoutEnd: string;
concurrencyStamp: string;

@ -169,18 +169,6 @@
'AbpIdentity::DisplayName:LockoutEnabled' | abpLocalization
}}</label>
</div>
<div class="custom-checkbox custom-control mb-2">
<input
type="checkbox"
id="two-factor-checkbox"
class="custom-control-input"
formControlName="twoFactorEnabled"
/>
<label class="custom-control-label" for="two-factor-checkbox">{{
'AbpIdentity::DisplayName:TwoFactorEnabled' | abpLocalization
}}</label>
</div>
</ng-template>
</li>

@ -101,8 +101,7 @@ export class UsersComponent implements OnInit {
name: [this.selected.name || '', [Validators.maxLength(64)]],
surname: [this.selected.surname || '', [Validators.maxLength(64)]],
phoneNumber: [this.selected.phoneNumber || '', [Validators.maxLength(16)]],
lockoutEnabled: [this.selected.lockoutEnabled || (this.selected.id ? false : true)],
twoFactorEnabled: [this.selected.twoFactorEnabled || (this.selected.id ? false : true)],
lockoutEnabled: [this.selected.id ? this.selected.lockoutEnabled : true],
roleNames: this.fb.array(
this.roles.map(role =>
this.fb.group({

@ -41,7 +41,6 @@ export interface IdentityUserCreateOrUpdateDtoBase extends ExtensibleObject {
surname: string;
email: string;
phoneNumber: string;
twoFactorEnabled: boolean;
lockoutEnabled: boolean;
roleNames: string[];
}
@ -55,7 +54,6 @@ export interface IdentityUserDto extends ExtensibleFullAuditedEntityDto<string>
emailConfirmed: boolean;
phoneNumber: string;
phoneNumberConfirmed: boolean;
twoFactorEnabled: boolean;
lockoutEnabled: boolean;
lockoutEnd?: string;
concurrencyStamp: string;

@ -1,41 +0,0 @@
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"downlevelIteration": true,
"experimentalDecorators": true,
"module": "esnext",
"moduleResolution": "node",
"importHelpers": true,
"target": "es2015",
"typeRoots": ["node_modules/@types"],
"lib": ["es2018", "dom"],
"types": ["jest"],
"paths": {
"@abp/ng.core": ["packages/core/src/public-api.ts"],
"@abp/ng.theme.shared": ["packages/theme-shared/src/public-api.ts"],
"@abp/ng.theme.shared/extensions": ["packages/theme-shared/extensions/src/public-api.ts"],
"@abp/ng.components/tree": ["packages/components/tree/src/public-api.ts"],
"@abp/ng.theme.basic": ["packages/theme-basic/src/public-api.ts"],
"@abp/ng.account": ["packages/account/src/public-api.ts"],
"@abp/ng.account/config": ["packages/account/config/src/public-api.ts"],
"@abp/ng.identity": ["packages/identity/src/public-api.ts"],
"@abp/ng.identity/config": ["packages/identity/config/src/public-api.ts"],
"@abp/ng.tenant-management": ["packages/tenant-management/src/public-api.ts"],
"@abp/ng.tenant-management/config": ["packages/tenant-management/config/src/public-api.ts"],
"@abp/ng.setting-management": ["packages/setting-management/src/public-api.ts"],
"@abp/ng.setting-management/config": ["packages/setting-management/config/src/public-api.ts"],
"@abp/ng.permission-management": ["packages/permission-management/src/public-api.ts"],
"@abp/ng.feature-management": ["packages/feature-management/src/public-api.ts"],
"@proxy": ["apps/dev-app/src/app/proxy/index.ts"],
"@proxy/*": ["apps/dev-app/src/app/proxy/*"]
}
},
"angularCompilerOptions": {
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true
}
}

@ -1,41 +1,41 @@
/*
This is a "Solution Style" tsconfig.json file, and is used by editors and TypeScripts language server to improve development experience.
It is not intended to be used to perform a compilation.
To learn more about this file see: https://angular.io/config/solution-tsconfig.
*/
{
"files": [],
"references": [
{
"path": "./packages/core/tsconfig.lib.json"
},
{
"path": "./packages/theme-shared/tsconfig.lib.json"
},
{
"path": "./packages/theme-basic/tsconfig.lib.json"
},
{
"path": "./packages/account/tsconfig.lib.json"
},
{
"path": "./packages/permission-management/tsconfig.lib.json"
},
{
"path": "./packages/identity/tsconfig.lib.json"
},
{
"path": "./packages/feature-management/tsconfig.lib.json"
},
{
"path": "./packages/tenant-management/tsconfig.lib.json"
},
{
"path": "./packages/setting-management/tsconfig.lib.json"
},
{
"path": "./apps/dev-app/tsconfig.dev.json"
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"downlevelIteration": true,
"experimentalDecorators": true,
"module": "esnext",
"moduleResolution": "node",
"importHelpers": true,
"target": "es2015",
"typeRoots": ["node_modules/@types"],
"lib": ["es2018", "dom"],
"types": ["jest"],
"paths": {
"@abp/ng.core": ["packages/core/src/public-api.ts"],
"@abp/ng.theme.shared": ["packages/theme-shared/src/public-api.ts"],
"@abp/ng.theme.shared/extensions": ["packages/theme-shared/extensions/src/public-api.ts"],
"@abp/ng.components/tree": ["packages/components/tree/src/public-api.ts"],
"@abp/ng.theme.basic": ["packages/theme-basic/src/public-api.ts"],
"@abp/ng.account": ["packages/account/src/public-api.ts"],
"@abp/ng.account/config": ["packages/account/config/src/public-api.ts"],
"@abp/ng.identity": ["packages/identity/src/public-api.ts"],
"@abp/ng.identity/config": ["packages/identity/config/src/public-api.ts"],
"@abp/ng.tenant-management": ["packages/tenant-management/src/public-api.ts"],
"@abp/ng.tenant-management/config": ["packages/tenant-management/config/src/public-api.ts"],
"@abp/ng.setting-management": ["packages/setting-management/src/public-api.ts"],
"@abp/ng.setting-management/config": ["packages/setting-management/config/src/public-api.ts"],
"@abp/ng.permission-management": ["packages/permission-management/src/public-api.ts"],
"@abp/ng.feature-management": ["packages/feature-management/src/public-api.ts"],
"@proxy": ["apps/dev-app/src/app/proxy/index.ts"],
"@proxy/*": ["apps/dev-app/src/app/proxy/*"]
}
]
}
},
"angularCompilerOptions": {
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true
}
}

File diff suppressed because it is too large Load Diff

@ -1,4 +1,5 @@
{
"singleQuote": true,
"printWidth": 100
"printWidth": 100,
"arrowParens": "avoid"
}

@ -1,5 +1,5 @@
{
"extends": "../tsconfig.base.json",
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/e2e",
"module": "commonjs",

@ -17,40 +17,40 @@
"@abp/ng.setting-management": "~3.2.0-rc.2",
"@abp/ng.tenant-management": "~3.2.0-rc.2",
"@abp/ng.theme.basic": "~3.2.0-rc.2",
"@angular/animations": "~10.0.10",
"@angular/common": "~10.0.10",
"@angular/compiler": "~10.0.10",
"@angular/core": "~10.0.10",
"@angular/forms": "~10.0.10",
"@angular/platform-browser": "~10.0.10",
"@angular/platform-browser-dynamic": "~10.0.10",
"@angular/router": "~10.0.10",
"rxjs": "~6.5.4",
"@angular/animations": "~10.1.2",
"@angular/common": "~10.1.2",
"@angular/compiler": "~10.1.2",
"@angular/core": "~10.1.2",
"@angular/forms": "~10.1.2",
"@angular/platform-browser": "~10.1.2",
"@angular/platform-browser-dynamic": "~10.1.2",
"@angular/router": "~10.1.2",
"rxjs": "~6.6.0",
"tslib": "^2.0.0",
"zone.js": "~0.10.2"
},
"devDependencies": {
"@abp/ng.schematics": "~3.2.0-rc.2",
"@angular-devkit/build-angular": "~0.1000.6",
"@angular-devkit/build-ng-packagr": "~0.1000.6",
"@angular/cli": "~10.0.6",
"@angular/compiler-cli": "~10.0.10",
"@angular/language-service": "~10.0.10",
"@angular-devkit/build-angular": "~0.1001.2",
"@angular-devkit/build-ng-packagr": "~0.1001.2",
"@angular/cli": "~10.1.2",
"@angular/compiler-cli": "~10.1.2",
"@angular/language-service": "~10.1.2",
"@types/jasmine": "~3.5.0",
"@types/jasminewd2": "~2.0.3",
"@types/node": "^12.11.1",
"codelyzer": "^5.1.2",
"jasmine-core": "~3.5.0",
"codelyzer": "^6.0.0",
"jasmine-core": "~3.6.0",
"jasmine-spec-reporter": "~5.0.0",
"karma": "~5.0.0",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~3.0.2",
"karma-jasmine": "~3.3.0",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"ng-packagr": "^10.0.0",
"protractor": "~7.0.0",
"ts-node": "~8.3.0",
"tslint": "~6.1.0",
"typescript": "~3.9.5"
"typescript": "~4.0.2"
}
}

@ -1,5 +1,5 @@
{
"extends": "./tsconfig.base.json",
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/app",
"types": []

@ -1,26 +0,0 @@
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"downlevelIteration": true,
"experimentalDecorators": true,
"module": "esnext",
"moduleResolution": "node",
"importHelpers": true,
"target": "es2015",
"typeRoots": ["node_modules/@types"],
"lib": ["es2018", "dom"],
"paths": {
"@proxy": ["src/app/proxy/index.ts"],
"@proxy/*": ["src/app/proxy/*"]
}
},
"angularCompilerOptions": {
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableIvy": true
}
}

@ -1,17 +1,26 @@
/*
This is a "Solution Style" tsconfig.json file, and is used by editors and TypeScripts language server to improve development experience.
It is not intended to be used to perform a compilation.
To learn more about this file see: https://angular.io/config/solution-tsconfig.
*/
{
"files": [],
"references": [
{
"path": "./tsconfig.app.json"
},
{
"path": "./tsconfig.spec.json"
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"downlevelIteration": true,
"experimentalDecorators": true,
"module": "esnext",
"moduleResolution": "node",
"importHelpers": true,
"target": "es2015",
"typeRoots": ["node_modules/@types"],
"lib": ["es2018", "dom"],
"paths": {
"@proxy": ["src/app/proxy/index.ts"],
"@proxy/*": ["src/app/proxy/*"]
}
]
}
},
"angularCompilerOptions": {
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableIvy": true
}
}

@ -1,5 +1,5 @@
{
"extends": "./tsconfig.base.json",
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/spec",
"types": [

File diff suppressed because it is too large Load Diff

@ -0,0 +1,5 @@
{
"singleQuote": true,
"printWidth": 100,
"arrowParens": "avoid"
}

@ -20,40 +20,40 @@
"@abp/ng.setting-management": "~3.2.0-rc.2",
"@abp/ng.tenant-management": "~3.2.0-rc.2",
"@abp/ng.theme.basic": "~3.2.0-rc.2",
"@angular/animations": "~10.0.0",
"@angular/common": "~10.0.0",
"@angular/compiler": "~10.0.0",
"@angular/core": "~10.0.0",
"@angular/forms": "~10.0.0",
"@angular/platform-browser": "~10.0.0",
"@angular/platform-browser-dynamic": "~10.0.0",
"@angular/router": "~10.0.0",
"rxjs": "~6.5.4",
"@angular/animations": "~10.1.2",
"@angular/common": "~10.1.2",
"@angular/compiler": "~10.1.2",
"@angular/core": "~10.1.2",
"@angular/forms": "~10.1.2",
"@angular/platform-browser": "~10.1.2",
"@angular/platform-browser-dynamic": "~10.1.2",
"@angular/router": "~10.1.2",
"rxjs": "~6.6.3",
"tslib": "^2.0.0",
"zone.js": "~0.10.2"
},
"devDependencies": {
"@abp/ng.schematics": "~3.2.0-rc.2",
"@angular-devkit/build-angular": "~0.1000.0",
"@angular-devkit/build-ng-packagr": "~0.1000.0",
"@angular/cli": "~10.0.0",
"@angular/compiler-cli": "~10.0.0",
"@angular-devkit/build-angular": "~0.1001.2",
"@angular-devkit/build-ng-packagr": "~0.1001.2",
"@angular/cli": "~10.1.2",
"@angular/compiler-cli": "~10.1.2",
"@types/jasmine": "~3.5.0",
"@types/jasminewd2": "~2.0.3",
"@types/node": "^12.11.1",
"codelyzer": "^5.1.2",
"jasmine-core": "~3.5.0",
"codelyzer": "^6.0.0",
"jasmine-core": "~3.6.0",
"jasmine-spec-reporter": "~5.0.0",
"karma": "~5.0.0",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~3.0.2",
"karma-jasmine": "~3.3.0",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"ng-packagr": "^10.0.0",
"protractor": "~7.0.0",
"symlink-manager": "^1.5.0",
"ts-node": "~8.3.0",
"tslint": "~6.1.0",
"typescript": "~3.9.5"
"typescript": "~4.0.3"
}
}
}

@ -1,5 +1,5 @@
{
"extends": "../../../tsconfig.base.json",
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/e2e",
"module": "commonjs",

@ -1,5 +1,5 @@
{
"extends": "../../tsconfig.base.json",
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/app",
"types": []

@ -1,5 +1,5 @@
{
"extends": "../../tsconfig.base.json",
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/spec",
"types": [

@ -1,5 +1,5 @@
{
"extends": "../../tsconfig.base.json",
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/spec",
"types": [

@ -1,15 +0,0 @@
{
"extends": "./tsconfig.prod.json",
"compilerOptions": {
"paths": {
"@my-company-name/my-project-name": [
"projects/my-project-name/src/public-api.ts"
],
"@my-company-name/my-project-name/config": [
"projects/my-project-name/config/src/public-api.ts"
],
"@proxy": ["projects/my-project-name/src/lib/proxy/index.ts"],
"@proxy/*": ["projects/my-project-name/src/lib/proxy/*"]
}
}
}

@ -1,23 +1,15 @@
/*
This is a "Solution Style" tsconfig.json file, and is used by editors and TypeScripts language server to improve development experience.
It is not intended to be used to perform a compilation.
To learn more about this file see: https://angular.io/config/solution-tsconfig.
*/
{
"files": [],
"references": [
{
"path": "./projects/my-project-name/tsconfig.lib.json"
},
{
"path": "./projects/my-project-name/tsconfig.spec.json"
},
{
"path": "./projects/dev-app/tsconfig.app.json"
},
{
"path": "./projects/dev-app/tsconfig.spec.json"
"extends": "./tsconfig.prod.json",
"compilerOptions": {
"paths": {
"@my-company-name/my-project-name": [
"projects/my-project-name/src/public-api.ts"
],
"@my-company-name/my-project-name/config": [
"projects/my-project-name/config/src/public-api.ts"
],
"@proxy": ["projects/my-project-name/src/lib/proxy/index.ts"],
"@proxy/*": ["projects/my-project-name/src/lib/proxy/*"]
}
]
}
}
}

Loading…
Cancel
Save