diff --git a/docs/en/Upgrading.md b/docs/en/Upgrading.md new file mode 100644 index 0000000000..1140c5d573 --- /dev/null +++ b/docs/en/Upgrading.md @@ -0,0 +1,41 @@ +# Upgrading the ABP Framework + +This document explains how to upgrade your existing solution when a new ABP Framework version is published. + +## ABP UPDATE Command + +ABP Framework & module ecosystem consist of hundreds of NuGet and NPM packages. It would be tedious to manually update all these packages to upgrade your application. + +[ABP CLI](CLI.md) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command: + +````bash +abp update +```` + +Run this command in the terminal while you are in the root folder of your solution. + +> If your solution has the Angular UI, you probably have `aspnet-core` and `angular` folders in the solution. Run this command in the parent folder of these two folders. + +## The Blog Posts + +Sometimes we introduce new features/changes that requires to make changes in the startup template. We already implement the changes in the startup template for new applications. However, in some cases you need to manually make some minor changes in your solution. + +Whenever you upgrade your solution, it is strongly suggested to check the [ABP BLOG](https://blog.abp.io/?_ga=2.177248992.411298747.1597771169-1910388957.1594128976) to learn the new features and changes coming with the new version. We regularly publish posts and write these kind of changes. If the changes are not trivial, we also provide migration guides. + +## Semantic Versioning & Breaking Changes + +We are working hard to keep the semantic versioning rules, so you don't get breaking changes for minor (feature) versions like 3.1, 3.2, 3.3... + +However, there are some cases we may introduce breaking changes in feature versions too; + +* ABP has many integration packages and sometimes the integrated libraries/frameworks releases major versions and makes breaking changes. In such cases, we carefully check these changes and decide to upgrade the integration package or not. If the impact of the change is relatively small, we update the integration package and explain the change in the release blog post. In such a case, if you've used this integration package, you should follow the instructions explained in the blog post. If the change may break many applications and not easy to fix, we decide to wait this upgrade until the next major ABP Framework release. +* Sometimes we have to make breaking change to fix a major bug or usage problem. In this case, we think that developer already can't properly use that feature, so no problem to fix it with a breaking change. In such cases, the feature will generally be a rarely used feature. Again, we try to keep the impact minimum. + +## Preview Releases & Nightly Builds + +Preview releases and nightly builds can help you to try new features and adapt your solution earlier than a new stable release. + +* [Preview releases](Previews.md) are typically published ~2 weeks before a minor (feature) version (our minor version development cycle is about ~4 weeks). +* [Nightly builds](Nightly-Builds.md) are published in every night (except weekends) from the development branch. That means you can try the previous day's development. + +Refer to the their documents to learn details about these kind of releases. \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 4c7703ff70..1e6e02855f 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -684,6 +684,10 @@ "text": "Road Map", "path": "Road-Map.md" }, + { + "text": "Upgrading", + "path": "Upgrading.md" + }, { "text": "Contribution Guide", "path": "Contribution/Index.md" diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 26ea07313c..7c1514e29f 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -30,6 +30,7 @@ "@abp/ng.feature-management": "~3.1.0-rc.4", "@abp/ng.identity": "~3.1.0-rc.4", "@abp/ng.permission-management": "~3.1.0-rc.4", + "@abp/ng.schematics": "~3.1.0-rc.4", "@abp/ng.setting-management": "~3.1.0-rc.4", "@abp/ng.tenant-management": "~3.1.0-rc.4", "@abp/ng.theme.basic": "~3.1.0-rc.4", diff --git a/npm/ng-packs/packages/core/src/lib/services/routes.service.ts b/npm/ng-packs/packages/core/src/lib/services/routes.service.ts index c2b90a91c7..16fc4c238b 100644 --- a/npm/ng-packs/packages/core/src/lib/services/routes.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/routes.service.ts @@ -133,8 +133,8 @@ export abstract class AbstractNavTreeService extends Abstract readonly parentId = 'parentName'; readonly hide = (item: T) => item.invisible || !this.isGranted(item); readonly sort = (a: T, b: T) => { - if (!a.order) return 1; - if (!b.order) return -1; + if (!Number.isInteger(a.order)) return 1; + if (!Number.isInteger(b.order)) return -1; return a.order - b.order; }; diff --git a/npm/ng-packs/packages/schematics/src/commands/api/index.ts b/npm/ng-packs/packages/schematics/src/commands/api/index.ts index 646f2170ea..5254f816b6 100644 --- a/npm/ng-packs/packages/schematics/src/commands/api/index.ts +++ b/npm/ng-packs/packages/schematics/src/commands/api/index.ts @@ -19,10 +19,10 @@ import { createImportRefToEnumMapper, createProxyConfigReader, createProxyConfigWriterCreator, + createRootNamespaceGetter, EnumGeneratorParams, generateProxyConfigJson, getEnumNamesFromImports, - getRootNamespace, interpolate, ModelGeneratorParams, removeDefaultPlaceholders, @@ -37,9 +37,10 @@ export default function(schema: GenerateProxySchema) { return chain([ async (tree: Tree, _context: SchematicContext) => { - const source = await resolveProject(tree, params.source!); + const getRootNamespace = createRootNamespaceGetter(params); + const solution = await getRootNamespace(tree); + const target = await resolveProject(tree, params.target!); - const solution = getRootNamespace(tree, source, moduleName); const targetPath = buildDefaultPath(target.definition); const readProxyConfig = createProxyConfigReader(targetPath); const createProxyConfigWriter = createProxyConfigWriterCreator(targetPath); diff --git a/npm/ng-packs/packages/schematics/src/commands/api/schema.json b/npm/ng-packs/packages/schematics/src/commands/api/schema.json index 4411418c34..db58ed73ce 100644 --- a/npm/ng-packs/packages/schematics/src/commands/api/schema.json +++ b/npm/ng-packs/packages/schematics/src/commands/api/schema.json @@ -5,34 +5,40 @@ "type": "object", "properties": { "module": { - "alias": "m", - "description": "Backend module to generate code for", + "description": "Backend module name", "type": "string", "$default": { "$source": "argv", "index": 0 }, - "x-prompt": "Please enter name of the backend module you wish to generate proxies for. (default: \"app\")" + "x-prompt": "Please enter backend module name. (default: \"app\")" }, - "source": { - "alias": "s", - "description": "Angular project to resolve root namespace & API definition URL from", + "api-name": { + "description": "Backend api name, a.k.a. remoteServiceName", "type": "string", "$default": { "$source": "argv", "index": 1 }, - "x-prompt": "Plese enter Angular project name to resolve root namespace & API definition URL from. (default: workspace \"defaultProject\")" + "x-prompt": "Please enter backend api name, a.k.a. remoteServiceName. (default: \"default\")" }, - "target": { - "alias": "t", - "description": "Angular project to generate code in", + "source": { + "description": "Source Angular project for API definition URL & root namespace resolution", "type": "string", "$default": { "$source": "argv", "index": 2 }, - "x-prompt": "Plese enter Angular project name to place generated code in. (default: workspace \"defaultProject\")" + "x-prompt": "Plese enter source Angular project for API definition URL & root namespace resolution. (default: workspace \"defaultProject\")" + }, + "target": { + "description": "Target Angular project to place the generated code", + "type": "string", + "$default": { + "$source": "argv", + "index": 3 + }, + "x-prompt": "Plese enter target Angular project to place the generated code. (default: workspace \"defaultProject\")" } }, "required": [] diff --git a/npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json b/npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json index f9e762c597..c817882730 100644 --- a/npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json +++ b/npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json @@ -5,7 +5,6 @@ "type": "object", "properties": { "module": { - "alias": "m", "description": "Backend module name", "type": "string", "$default": { @@ -14,23 +13,30 @@ }, "x-prompt": "Please enter backend module name. (default: \"app\")" }, + "api-name": { + "description": "Backend api name, a.k.a. remoteServiceName", + "type": "string", + "$default": { + "$source": "argv", + "index": 1 + }, + "x-prompt": "Please enter backend api name, a.k.a. remoteServiceName. (default: \"default\")" + }, "source": { - "alias": "s", "description": "Source Angular project for API definition URL & root namespace resolution", "type": "string", "$default": { "$source": "argv", - "index": 1 + "index": 2 }, "x-prompt": "Plese enter source Angular project for API definition URL & root namespace resolution. (default: workspace \"defaultProject\")" }, "target": { - "alias": "t", "description": "Target Angular project to place the generated code", "type": "string", "$default": { "$source": "argv", - "index": 2 + "index": 3 }, "x-prompt": "Plese enter target Angular project to place the generated code. (default: workspace \"defaultProject\")" } diff --git a/npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json b/npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json index f9e762c597..c817882730 100644 --- a/npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json +++ b/npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json @@ -5,7 +5,6 @@ "type": "object", "properties": { "module": { - "alias": "m", "description": "Backend module name", "type": "string", "$default": { @@ -14,23 +13,30 @@ }, "x-prompt": "Please enter backend module name. (default: \"app\")" }, + "api-name": { + "description": "Backend api name, a.k.a. remoteServiceName", + "type": "string", + "$default": { + "$source": "argv", + "index": 1 + }, + "x-prompt": "Please enter backend api name, a.k.a. remoteServiceName. (default: \"default\")" + }, "source": { - "alias": "s", "description": "Source Angular project for API definition URL & root namespace resolution", "type": "string", "$default": { "$source": "argv", - "index": 1 + "index": 2 }, "x-prompt": "Plese enter source Angular project for API definition URL & root namespace resolution. (default: workspace \"defaultProject\")" }, "target": { - "alias": "t", "description": "Target Angular project to place the generated code", "type": "string", "$default": { "$source": "argv", - "index": 2 + "index": 3 }, "x-prompt": "Plese enter target Angular project to place the generated code. (default: workspace \"defaultProject\")" } diff --git a/npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json b/npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json index f9e762c597..c817882730 100644 --- a/npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json +++ b/npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json @@ -5,7 +5,6 @@ "type": "object", "properties": { "module": { - "alias": "m", "description": "Backend module name", "type": "string", "$default": { @@ -14,23 +13,30 @@ }, "x-prompt": "Please enter backend module name. (default: \"app\")" }, + "api-name": { + "description": "Backend api name, a.k.a. remoteServiceName", + "type": "string", + "$default": { + "$source": "argv", + "index": 1 + }, + "x-prompt": "Please enter backend api name, a.k.a. remoteServiceName. (default: \"default\")" + }, "source": { - "alias": "s", "description": "Source Angular project for API definition URL & root namespace resolution", "type": "string", "$default": { "$source": "argv", - "index": 1 + "index": 2 }, "x-prompt": "Plese enter source Angular project for API definition URL & root namespace resolution. (default: workspace \"defaultProject\")" }, "target": { - "alias": "t", "description": "Target Angular project to place the generated code", "type": "string", "$default": { "$source": "argv", - "index": 2 + "index": 3 }, "x-prompt": "Plese enter target Angular project to place the generated code. (default: workspace \"defaultProject\")" } diff --git a/npm/ng-packs/packages/schematics/src/enums/exception.ts b/npm/ng-packs/packages/schematics/src/enums/exception.ts index 98c92493d6..b267ad6674 100644 --- a/npm/ng-packs/packages/schematics/src/enums/exception.ts +++ b/npm/ng-packs/packages/schematics/src/enums/exception.ts @@ -11,6 +11,6 @@ export const enum Exception { NoTypeDefinition = '[Type Definition Not Found] There is no type definition for "{0}".', NoWorkspace = '[Workspace Not Found] Make sure you are running schematics at the root directory of your workspace and it has an angular.json file.', NoEnvironment = '[Environment Not Found] An environment file cannot be located in "{0}" project.', - NoApiUrl = '[API URL Not Found] Cannot resolve API URL for "{1}" module from "{0}" project.', - NoRootNamespace = '[Root Namespace Not Found] Cannot resolve root namespace for "{1}" module from "{0}" project.', + NoApiUrl = '[API URL Not Found] Cannot resolve API URL for "{1}" remote service name from "{0}" project.', + NoRootNamespace = '[Root Namespace Not Found] Cannot resolve root namespace for "{1}" api from "{0}" project.', } diff --git a/npm/ng-packs/packages/schematics/src/models/generate-proxy-schema.ts b/npm/ng-packs/packages/schematics/src/models/generate-proxy-schema.ts index 59c4e6adab..5e305923c4 100644 --- a/npm/ng-packs/packages/schematics/src/models/generate-proxy-schema.ts +++ b/npm/ng-packs/packages/schematics/src/models/generate-proxy-schema.ts @@ -4,6 +4,11 @@ export interface GenerateProxySchema { */ module?: string; + /** + * Backend api name, a.k.a. remoteServiceName + */ + ['api-name']?: string; + /** * Source Angular project for API definition URL & root namespace resolution */ diff --git a/npm/ng-packs/packages/schematics/src/utils/source.ts b/npm/ng-packs/packages/schematics/src/utils/source.ts index d555e2ec1f..e1e965744f 100644 --- a/npm/ng-packs/packages/schematics/src/utils/source.ts +++ b/npm/ng-packs/packages/schematics/src/utils/source.ts @@ -1,4 +1,3 @@ -import { strings } from '@angular-devkit/core'; import { SchematicsException, Tree } from '@angular-devkit/schematics'; import got from 'got'; import { @@ -15,11 +14,11 @@ import { interpolate } from './common'; import { readEnvironment, resolveProject } from './workspace'; export function createApiDefinitionGetter(params: GenerateProxySchema) { - const moduleName = strings.camelize(params.module || 'app'); + const apiName = params['api-name'] || 'default'; return async (host: Tree) => { const source = await resolveProject(host, params.source!); - const sourceUrl = getSourceUrl(host, source, moduleName); + const sourceUrl = getSourceUrl(host, source, apiName); return await getApiDefinition(sourceUrl); }; } @@ -36,7 +35,7 @@ async function getApiDefinition(sourceUrl: string) { })); } catch ({ response }) { // handle redirects - if (response.statusCode >= 400 || !response?.body) + if (!response?.body || response.statusCode >= 400) throw new SchematicsException(Exception.NoApi); body = response.body; @@ -45,48 +44,49 @@ async function getApiDefinition(sourceUrl: string) { return body; } -export function getRootNamespace(tree: Tree, project: Project, moduleName: string) { - const environmentExpr = readEnvironment(tree, project.definition); +export function createRootNamespaceGetter(params: GenerateProxySchema) { + const apiName = params['api-name'] || 'default'; - if (!environmentExpr) - throw new SchematicsException(interpolate(Exception.NoEnvironment, project.name)); + return async (tree: Tree) => { + const project = await resolveProject(tree, params.source!); + const environmentExpr = readEnvironment(tree, project.definition); - let assignment = getAssignedPropertyFromObjectliteral(environmentExpr, [ - 'apis', - moduleName, - 'rootNamespace', - ]); + if (!environmentExpr) + throw new SchematicsException(interpolate(Exception.NoEnvironment, project.name)); - if (!assignment) - assignment = getAssignedPropertyFromObjectliteral(environmentExpr, [ + let assignment = getAssignedPropertyFromObjectliteral(environmentExpr, [ 'apis', - 'default', + apiName, 'rootNamespace', ]); - if (!assignment) - throw new SchematicsException(interpolate(Exception.NoRootNamespace, project.name, moduleName)); + if (!assignment) + assignment = getAssignedPropertyFromObjectliteral(environmentExpr, [ + 'apis', + 'default', + 'rootNamespace', + ]); - return assignment.replace(/[`'"]/g, ''); + if (!assignment) + throw new SchematicsException(interpolate(Exception.NoRootNamespace, project.name, apiName)); + + return assignment.replace(/[`'"]/g, ''); + }; } -export function getSourceUrl(tree: Tree, project: Project, moduleName: string) { +export function getSourceUrl(tree: Tree, project: Project, apiName: string) { const environmentExpr = readEnvironment(tree, project.definition); if (!environmentExpr) throw new SchematicsException(interpolate(Exception.NoEnvironment, project.name)); - let assignment = getAssignedPropertyFromObjectliteral(environmentExpr, [ - 'apis', - moduleName, - 'url', - ]); + let assignment = getAssignedPropertyFromObjectliteral(environmentExpr, ['apis', apiName, 'url']); if (!assignment) assignment = getAssignedPropertyFromObjectliteral(environmentExpr, ['apis', 'default', 'url']); if (!assignment) - throw new SchematicsException(interpolate(Exception.NoApiUrl, project.name, moduleName)); + throw new SchematicsException(interpolate(Exception.NoApiUrl, project.name, apiName)); return assignment.replace(/[`'"]/g, ''); } diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts index 542d06e9a4..de1b6199ee 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts @@ -13,6 +13,6 @@ export class RoutesComponent { constructor(public readonly routes: RoutesService) {} isDropdown(node: TreeNode) { - return !node.isLeaf || this.routes.hasChildren(node.name); + return !node?.isLeaf || this.routes.hasChildren(node.name); } } diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index 2a9cd4b404..5739a50274 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -2,20 +2,20 @@ # yarn lockfile v1 -"@abp/ng.account@~3.1.0-rc.3": - version "3.1.0-rc.3" - resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.1.0-rc.3.tgz#098a559e83d505b51f54343d6cd5be3e70b11869" - integrity sha512-hFFWa0tBPlpVtLuZo7MRc+s0ODHEtJ8eQJc8H+TyFqTItk158XOjgHdKX0RYqt+Tn+0Iy/TJ1vKfupzuDqUBkg== +"@abp/ng.account@~3.1.0-rc.4": + version "3.1.0-rc.4" + resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.1.0-rc.4.tgz#af4039b286fe44929327e93dba9991cb273d5336" + integrity sha512-wYkSz1HlPwMPUMAfCe404LCb15ZDEV5GfNIZuHeyiNtC/AcvqZEbBBpM2xMZ3uMcvxH/72IrLFBpxemCY+6euw== dependencies: - "@abp/ng.theme.shared" "~3.1.0-rc.3" + "@abp/ng.theme.shared" "~3.1.0-rc.4" tslib "^2.0.0" -"@abp/ng.core@~3.1.0-rc.3": - version "3.1.0-rc.3" - resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.1.0-rc.3.tgz#aefa4a2f7b418087f7a3c6c6faa9a936ce9011cb" - integrity sha512-zU2jx9gTCwz26OW/umxGqSBluq1vnazYHqunnGFvH7wLcAoKHikpQv4kx4tR1dMn+7BZ1/MFwCYVxDYLtxWxdw== +"@abp/ng.core@~3.1.0-rc.4": + version "3.1.0-rc.4" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.1.0-rc.4.tgz#cc0d237de4de5eac6006d1cdd2bb4014a7ecebb8" + integrity sha512-H/kC8dLvbdHS/cEh2GHWw3vjjN2R5P0eAz+2bhC18kW/EQo6EgNckTbhgvYre9FtJPHbT2Prs1v1CWe1lB5Rnw== dependencies: - "@abp/utils" "^3.1.0-rc.2" + "@abp/utils" "^3.1.0-rc.3" "@angular/localize" "~10.0.10" "@ngxs/router-plugin" "^3.6.2" "@ngxs/storage-plugin" "^3.6.2" @@ -27,62 +27,73 @@ ts-toolbelt "6.15.4" tslib "^2.0.0" -"@abp/ng.feature-management@~3.1.0-rc.3": - version "3.1.0-rc.3" - resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.1.0-rc.3.tgz#ed8a8e69d2ee69d07341c33e44e504b0638ad673" - integrity sha512-KGykQd3AclkLTyQuSpVm3R6U2YD0pptF1A/rrdeA7BT5kQ3d/JgXboEkVrCyRnT4dTKWVjiweoXz1AaKj7HpzA== +"@abp/ng.feature-management@~3.1.0-rc.4": + version "3.1.0-rc.4" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.1.0-rc.4.tgz#d9a85fbe8a780664c9474df9b0d2fe6874530781" + integrity sha512-y3xUFJSHmBCBivE6YRgUgA/XK/jIX1h+JdIsVwRQg9VoKq4Ba7xSF1uffYkbiZhELv9lUZ4t+r100nL64yj/kQ== dependencies: - "@abp/ng.theme.shared" "~3.1.0-rc.3" + "@abp/ng.theme.shared" "~3.1.0-rc.4" tslib "^2.0.0" -"@abp/ng.identity@~3.1.0-rc.3": - version "3.1.0-rc.3" - resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.1.0-rc.3.tgz#d32730f1968224f3d0e48bb44efafa6d01dfb330" - integrity sha512-YkPN4oYRhQ70N+LL890Yt99SIs874nn4MNWZbfm3JRlndT9gsvDLAZwqDtVbsqKanz7ymT4yCoa5t7Sakts2Tw== +"@abp/ng.identity@~3.1.0-rc.4": + version "3.1.0-rc.4" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.1.0-rc.4.tgz#6f04d8231fce78ee3a2de387e81aade5ac3fa9a3" + integrity sha512-mRI6uZ0PlbDhNNX1BGYECN5fDPyENnpudbo09SMSVGK99BSa+pJAvOMLWQTp8WJuo/C8kl/Mz17cAhp/EirgYQ== dependencies: - "@abp/ng.permission-management" "~3.1.0-rc.3" - "@abp/ng.theme.shared" "~3.1.0-rc.3" + "@abp/ng.permission-management" "~3.1.0-rc.4" + "@abp/ng.theme.shared" "~3.1.0-rc.4" tslib "^2.0.0" -"@abp/ng.permission-management@~3.1.0-rc.3": - version "3.1.0-rc.3" - resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.1.0-rc.3.tgz#211c5ff854a62c924307dfbb8bdbb501479f1a86" - integrity sha512-nir4rYN2cWhwNPzLVT4TMhpVDkVJQJpp6B13YwjQ7O0B8rty/ongO343YcvbmkwwLqK9pBEjYTtXbuOnSLnvew== +"@abp/ng.permission-management@~3.1.0-rc.4": + version "3.1.0-rc.4" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.1.0-rc.4.tgz#b0415fc62ecfc03b57810e6a82fadeec887b64e4" + integrity sha512-/U5ehBn1dQYGcy++/EtciUlz69+WZ+ZXbxJ3MF7cNNy7BwZCyjKc7my2Uh2HrP+Ce3q1h11obX15KpB7uCggCg== dependencies: - "@abp/ng.theme.shared" "~3.1.0-rc.3" + "@abp/ng.theme.shared" "~3.1.0-rc.4" tslib "^2.0.0" -"@abp/ng.setting-management@~3.1.0-rc.3": - version "3.1.0-rc.3" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.1.0-rc.3.tgz#539226e81f1d15a294ca7cdbb0b40cf94bc3d073" - integrity sha512-kkumvT81zUUy44XLxX9qII2DXFoPl9gzXmJlAeCoh2cCofU5Ja4AxNkunZfzTTqLm6y/UDPjkzgYBa4KMOspdQ== +"@abp/ng.schematics@~3.1.0-rc.4": + version "3.1.0-rc.4" + resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.1.0-rc.4.tgz#9f711466db0d46eb08ff14a19e930dbd7cb6aa59" + integrity sha512-nn94E2JB0N5pcDNCh1JtyHV/ZhAnG+d+wKGzhZSOFEWZvPOREQs1OI4aKrBF94DYWy8yWxKZtPWEMwkmX+yXMg== + dependencies: + "@angular-devkit/core" "~10.0.3" + "@angular-devkit/schematics" "~10.0.3" + got "^11.5.2" + jsonc-parser "^2.3.0" + typescript "~3.9.2" + +"@abp/ng.setting-management@~3.1.0-rc.4": + version "3.1.0-rc.4" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.1.0-rc.4.tgz#777b8487e6b6811c28375bf695d6db96ca59cc28" + integrity sha512-Mwx5nILDdqT7aEktv0gK1wxhtNuD9W67dlIcunwD/YD60hwAnRX3yFeg1aDHVF70EykY9UMerBGAG3J2Loclhg== dependencies: - "@abp/ng.theme.shared" "~3.1.0-rc.3" + "@abp/ng.theme.shared" "~3.1.0-rc.4" tslib "^2.0.0" -"@abp/ng.tenant-management@~3.1.0-rc.3": - version "3.1.0-rc.3" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.1.0-rc.3.tgz#1678bae916387c99baa371d35a692197f719f278" - integrity sha512-icvhvzSYjLH8dlrKL0HBtACkA0Q5JozILgYGEnUtPLuO4xpU3oiGGBA8AxB5gSkQ0C3/QiPRawQ9mhiTcnYoAQ== +"@abp/ng.tenant-management@~3.1.0-rc.4": + version "3.1.0-rc.4" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.1.0-rc.4.tgz#c8ad9a927045599bec309408b3cdd741935fac7f" + integrity sha512-DK5J0FjA9fR1crvaNa6o5WPjS8/8cDij65GHJb1RzXm8ZfpNoXlcZEUv3MXBJt4zIU3l5ZTDSH3skmNQaobosg== dependencies: - "@abp/ng.feature-management" "~3.1.0-rc.3" - "@abp/ng.theme.shared" "~3.1.0-rc.3" + "@abp/ng.feature-management" "~3.1.0-rc.4" + "@abp/ng.theme.shared" "~3.1.0-rc.4" tslib "^2.0.0" -"@abp/ng.theme.basic@~3.1.0-rc.3": - version "3.1.0-rc.3" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.1.0-rc.3.tgz#25654f6c55245645a4495c314cf575d159dd98d1" - integrity sha512-ibfycWkE+7CnT/IafgoC89/w/kojp0ylw00kAm6toXTgRVE4eI2KmO1Wdc6Qyu5n/4SF3UnbH546odgUsjHvGA== +"@abp/ng.theme.basic@~3.1.0-rc.4": + version "3.1.0-rc.4" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.1.0-rc.4.tgz#36a627ab520046f5978ec60ae9c03b723a879b66" + integrity sha512-SJmc1KrLc3K1Njf+0UUXHB/ABdVbzIzYKT8GbCf0E/Nw6KgVufIpB+g92rqxkeqG9jKEASAnSomYRJeMJJ3bVQ== dependencies: - "@abp/ng.theme.shared" "~3.1.0-rc.3" + "@abp/ng.theme.shared" "~3.1.0-rc.4" tslib "^2.0.0" -"@abp/ng.theme.shared@~3.1.0-rc.3": - version "3.1.0-rc.3" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.1.0-rc.3.tgz#2fe6821f5aff7066d2a0a74296aeef205506d553" - integrity sha512-Z7QbckMhc1j00iVYDUBqeCliTs0I1TxW1c6pgYdNXHKB4Djp9BBxw517Elj14zIhCQbnHUIcXDu2ZUTdx2hbMg== +"@abp/ng.theme.shared@~3.1.0-rc.4": + version "3.1.0-rc.4" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.1.0-rc.4.tgz#516a9d65229b1ddd1891edad8c1bd45ca3729228" + integrity sha512-wfMZSO0fwKDphAq8fWwvd7gxybY4LzQJNZdWYbBg12ePzXzRYCxxDg4xLzUetFYZQS+xSA9xoyGuCR8WT2OQEg== dependencies: - "@abp/ng.core" "~3.1.0-rc.3" + "@abp/ng.core" "~3.1.0-rc.4" "@fortawesome/fontawesome-free" "^5.14.0" "@ng-bootstrap/ng-bootstrap" "^7.0.0" "@ngx-validate/core" "^0.0.11" @@ -91,13 +102,6 @@ chart.js "^2.9.3" tslib "^2.0.0" -"@abp/utils@^3.1.0-rc.2": - version "3.1.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0-rc.2.tgz#c3774246f01f4b032b2d229457c3bd93f7d14048" - integrity sha512-lgHy/OAEBau2Qyr0mZUjOWU8uBFBFIBvGnUKgSqKRxTqf5GyNvkKO8GPpqGSmyIsYUfW2UUsRhaLW7K85T9CZw== - dependencies: - just-compare "^1.3.0" - "@abp/utils@^3.1.0-rc.3": version "3.1.0-rc.3" resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0-rc.3.tgz#3cbc50c1f8fdf6592d66f8ea4b5a9c4249a5e46a" @@ -105,6 +109,13 @@ dependencies: just-compare "^1.3.0" +"@abp/utils@^3.1.0-rc.4": + version "3.1.0-rc.4" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0-rc.4.tgz#e0d25d60b1806d4bee23e1c9c0ffa7855cdffc2a" + integrity sha512-qzUqqkLJcrQV3OngDyQ0S8hEh3D1MxvvlFLOo77ajnaTO2X8hgnFm9mgQ2QnvH2QbKttaWpaaTX7TCYu/d7nBg== + dependencies: + just-compare "^1.3.0" + "@angular-builders/jest@^10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@angular-builders/jest/-/jest-10.0.0.tgz#1d4f80c15544a2a13de9e335b0d2d8f076026388" @@ -232,6 +243,17 @@ rxjs "6.5.5" source-map "0.7.3" +"@angular-devkit/core@10.0.8", "@angular-devkit/core@~10.0.3": + version "10.0.8" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.0.8.tgz#ca4ea9f464cfa7ff17e2dab3bcd4c59da1ea450d" + integrity sha512-d9S8VQuqaYg0c/Y2kl/MtICtZ+UKlH5bLm8y2fb2WfSL4A5XIqMGdEVxzFSiR0b1Bnt4NAoQMcBec1blHAqMSQ== + dependencies: + ajv "6.12.3" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.5.5" + source-map "0.7.3" + "@angular-devkit/core@8.3.29", "@angular-devkit/core@^8.0.3": version "8.3.29" resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-8.3.29.tgz#3477edd6458653f83e6d78684b100c1bef81382f" @@ -260,6 +282,15 @@ "@angular-devkit/core" "8.3.29" rxjs "6.4.0" +"@angular-devkit/schematics@~10.0.3": + version "10.0.8" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-10.0.8.tgz#6064d6323a1c9abc195e67ae4c88e373ce36b5e2" + integrity sha512-p2PjvrExuzOe/azyOEcBeIgwZIk4D6VeLkJf/KVjhXOVu13pjIXHX7/qWl+IYnbtj3NZGHqXM5Cr8nxsJNIMpw== + dependencies: + "@angular-devkit/core" "10.0.8" + ora "4.0.4" + rxjs "6.5.5" + "@angular/animations@~10.0.10": version "10.0.10" resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-10.0.10.tgz#c4f872e2917e9e7d4ffd04a64539e2aae67eef0c" @@ -13350,7 +13381,7 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.5.2, typescript@~3.9.5: +typescript@^3.5.2, typescript@~3.9.2, typescript@~3.9.5: version "3.9.7" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==