From 8954f5b41ca19c176fb6518e66c39a8f64bf9a34 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 11 Aug 2021 16:21:59 +0300 Subject: [PATCH 01/56] create nx workspace --- npm/ng-packs/nx/ng-packs/.eslintrc.json | 35 + npm/ng-packs/nx/ng-packs/.gitignore | 39 + npm/ng-packs/nx/ng-packs/.prettierignore | 4 + npm/ng-packs/nx/ng-packs/.prettierrc | 3 + .../nx/ng-packs/.vscode/extensions.json | 9 + npm/ng-packs/nx/ng-packs/README.md | 98 + npm/ng-packs/nx/ng-packs/angular.json | 196 + npm/ng-packs/nx/ng-packs/apps/.gitkeep | 0 .../ng-packs/apps/dev-app-e2e/.eslintrc.json | 17 + .../nx/ng-packs/apps/dev-app-e2e/cypress.json | 12 + .../dev-app-e2e/src/fixtures/example.json | 4 + .../dev-app-e2e/src/integration/app.spec.ts | 13 + .../apps/dev-app-e2e/src/plugins/index.js | 22 + .../apps/dev-app-e2e/src/support/app.po.ts | 1 + .../apps/dev-app-e2e/src/support/commands.ts | 33 + .../apps/dev-app-e2e/src/support/index.ts | 17 + .../apps/dev-app-e2e/tsconfig.e2e.json | 19 + .../ng-packs/apps/dev-app-e2e/tsconfig.json | 10 + .../nx/ng-packs/apps/dev-app/.browserslistrc | 17 + .../nx/ng-packs/apps/dev-app/.eslintrc.json | 36 + .../nx/ng-packs/apps/dev-app/jest.config.js | 20 + .../apps/dev-app/src/app/app.component.html | 138 + .../apps/dev-app/src/app/app.component.scss | 133 + .../dev-app/src/app/app.component.spec.ts | 31 + .../apps/dev-app/src/app/app.component.ts | 10 + .../apps/dev-app/src/app/app.module.ts | 12 + .../ng-packs/apps/dev-app/src/assets/.gitkeep | 0 .../src/environments/environment.prod.ts | 3 + .../dev-app/src/environments/environment.ts | 16 + .../nx/ng-packs/apps/dev-app/src/favicon.ico | Bin 0 -> 15086 bytes .../nx/ng-packs/apps/dev-app/src/index.html | 13 + .../nx/ng-packs/apps/dev-app/src/main.ts | 13 + .../nx/ng-packs/apps/dev-app/src/polyfills.ts | 64 + .../nx/ng-packs/apps/dev-app/src/styles.scss | 1 + .../ng-packs/apps/dev-app/src/test-setup.ts | 1 + .../ng-packs/apps/dev-app/tsconfig.app.json | 9 + .../apps/dev-app/tsconfig.editor.json | 7 + .../nx/ng-packs/apps/dev-app/tsconfig.json | 27 + .../ng-packs/apps/dev-app/tsconfig.spec.json | 10 + .../nx/ng-packs/decorate-angular-cli.js | 73 + npm/ng-packs/nx/ng-packs/jest.config.js | 5 + npm/ng-packs/nx/ng-packs/jest.preset.js | 3 + npm/ng-packs/nx/ng-packs/libs/.gitkeep | 0 .../nx/ng-packs/libs/core/.eslintrc.json | 36 + npm/ng-packs/nx/ng-packs/libs/core/README.md | 7 + .../nx/ng-packs/libs/core/jest.config.js | 20 + .../nx/ng-packs/libs/core/ng-package.json | 7 + .../nx/ng-packs/libs/core/package.json | 11 + .../nx/ng-packs/libs/core/src/index.ts | 1 + .../ng-packs/libs/core/src/lib/core.module.ts | 7 + .../nx/ng-packs/libs/core/src/test-setup.ts | 1 + .../nx/ng-packs/libs/core/tsconfig.json | 24 + .../nx/ng-packs/libs/core/tsconfig.lib.json | 14 + .../ng-packs/libs/core/tsconfig.lib.prod.json | 10 + .../nx/ng-packs/libs/core/tsconfig.spec.json | 10 + npm/ng-packs/nx/ng-packs/nx.json | 41 + npm/ng-packs/nx/ng-packs/package.json | 111 + .../nx/ng-packs/tools/generators/.gitkeep | 0 .../nx/ng-packs/tools/tsconfig.tools.json | 12 + npm/ng-packs/nx/ng-packs/tsconfig.base.json | 22 + npm/ng-packs/nx/ng-packs/yarn.lock | 15659 ++++++++++++++++ .../packages/theme-shared/ng-package.json | 1 - npm/ng-packs/yarn.lock | 120 +- 63 files changed, 17227 insertions(+), 61 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/.gitignore create mode 100644 npm/ng-packs/nx/ng-packs/.prettierignore create mode 100644 npm/ng-packs/nx/ng-packs/.prettierrc create mode 100644 npm/ng-packs/nx/ng-packs/.vscode/extensions.json create mode 100644 npm/ng-packs/nx/ng-packs/README.md create mode 100644 npm/ng-packs/nx/ng-packs/angular.json create mode 100644 npm/ng-packs/nx/ng-packs/apps/.gitkeep create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/cypress.json create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/fixtures/example.json create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/integration/app.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/plugins/index.js create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/support/app.po.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/support/commands.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/support/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/tsconfig.e2e.json create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/.browserslistrc create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.html create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.scss create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/assets/.gitkeep create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.prod.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/favicon.ico create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/index.html create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/main.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/polyfills.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/styles.scss create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.app.json create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.editor.json create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.spec.json create mode 100644 npm/ng-packs/nx/ng-packs/decorate-angular-cli.js create mode 100644 npm/ng-packs/nx/ng-packs/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/jest.preset.js create mode 100644 npm/ng-packs/nx/ng-packs/libs/.gitkeep create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/README.md create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/package.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/core.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/tsconfig.spec.json create mode 100644 npm/ng-packs/nx/ng-packs/nx.json create mode 100644 npm/ng-packs/nx/ng-packs/package.json create mode 100644 npm/ng-packs/nx/ng-packs/tools/generators/.gitkeep create mode 100644 npm/ng-packs/nx/ng-packs/tools/tsconfig.tools.json create mode 100644 npm/ng-packs/nx/ng-packs/tsconfig.base.json create mode 100644 npm/ng-packs/nx/ng-packs/yarn.lock diff --git a/npm/ng-packs/nx/ng-packs/.eslintrc.json b/npm/ng-packs/nx/ng-packs/.eslintrc.json new file mode 100644 index 0000000000..06cc47d9a2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/.eslintrc.json @@ -0,0 +1,35 @@ +{ + "root": true, + "ignorePatterns": ["**/*"], + "plugins": ["@nrwl/nx"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": { + "@nrwl/nx/enforce-module-boundaries": [ + "error", + { + "enforceBuildableLibDependency": true, + "allow": [], + "depConstraints": [ + { + "sourceTag": "*", + "onlyDependOnLibsWithTags": ["*"] + } + ] + } + ] + } + }, + { + "files": ["*.ts", "*.tsx"], + "extends": ["plugin:@nrwl/nx/typescript"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "extends": ["plugin:@nrwl/nx/javascript"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/.gitignore b/npm/ng-packs/nx/ng-packs/.gitignore new file mode 100644 index 0000000000..ee5c9d8336 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/.gitignore @@ -0,0 +1,39 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc + +# dependencies +/node_modules + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db diff --git a/npm/ng-packs/nx/ng-packs/.prettierignore b/npm/ng-packs/nx/ng-packs/.prettierignore new file mode 100644 index 0000000000..d0b804da2a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/.prettierignore @@ -0,0 +1,4 @@ +# Add files here to ignore them from prettier formatting + +/dist +/coverage diff --git a/npm/ng-packs/nx/ng-packs/.prettierrc b/npm/ng-packs/nx/ng-packs/.prettierrc new file mode 100644 index 0000000000..544138be45 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/.prettierrc @@ -0,0 +1,3 @@ +{ + "singleQuote": true +} diff --git a/npm/ng-packs/nx/ng-packs/.vscode/extensions.json b/npm/ng-packs/nx/ng-packs/.vscode/extensions.json new file mode 100644 index 0000000000..cbe2e9105f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + "recommendations": [ + "angular.ng-template", + "nrwl.angular-console", + "esbenp.prettier-vscode", + "firsttris.vscode-jest-runner", + "dbaeumer.vscode-eslint" + ] +} diff --git a/npm/ng-packs/nx/ng-packs/README.md b/npm/ng-packs/nx/ng-packs/README.md new file mode 100644 index 0000000000..c8cabe505c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/README.md @@ -0,0 +1,98 @@ +# NgPacks + +This project was generated using [Nx](https://nx.dev). + +

+ +🔎 **Smart, Extensible Build Framework** + +## Quick Start & Documentation + +[Nx Documentation](https://nx.dev/angular) + +[10-minute video showing all Nx features](https://nx.dev/getting-started/intro) + +[Interactive Tutorial](https://nx.dev/tutorial/01-create-application) + +## Adding capabilities to your workspace + +Nx supports many plugins which add capabilities for developing different types of applications and different tools. + +These capabilities include generating applications, libraries, etc as well as the devtools to test, and build projects as well. + +Below are our core plugins: + +- [Angular](https://angular.io) + - `ng add @nrwl/angular` +- [React](https://reactjs.org) + - `ng add @nrwl/react` +- Web (no framework frontends) + - `ng add @nrwl/web` +- [Nest](https://nestjs.com) + - `ng add @nrwl/nest` +- [Express](https://expressjs.com) + - `ng add @nrwl/express` +- [Node](https://nodejs.org) + - `ng add @nrwl/node` + +There are also many [community plugins](https://nx.dev/community) you could add. + +## Generate an application + +Run `ng g @nrwl/angular:app my-app` to generate an application. + +> You can use any of the plugins above to generate applications as well. + +When using Nx, you can create multiple applications and libraries in the same workspace. + +## Generate a library + +Run `ng g @nrwl/angular:lib my-lib` to generate a library. + +> You can also use any of the plugins above to generate libraries as well. + +Libraries are shareable across libraries and applications. They can be imported from `@ng-packs/mylib`. + +## Development server + +Run `ng serve my-app` for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng g component my-component --project=my-app` to generate a new component. + +## Build + +Run `ng build my-app` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. + +## Running unit tests + +Run `ng test my-app` to execute the unit tests via [Jest](https://jestjs.io). + +Run `nx affected:test` to execute the unit tests affected by a change. + +## Running end-to-end tests + +Run `ng e2e my-app` to execute the end-to-end tests via [Cypress](https://www.cypress.io). + +Run `nx affected:e2e` to execute the end-to-end tests affected by a change. + +## Understand your workspace + +Run `nx dep-graph` to see a diagram of the dependencies of your projects. + +## Further help + +Visit the [Nx Documentation](https://nx.dev/angular) to learn more. + +## ☁ Nx Cloud + +### Distributed Computation Caching & Distributed Task Execution + +

+ +Nx Cloud pairs with Nx in order to enable you to build and test code more rapidly, by up to 10 times. Even teams that are new to Nx can connect to Nx Cloud and start saving time instantly. + +Teams using Nx gain the advantage of building full-stack applications with their preferred framework alongside Nx’s advanced code generation and project dependency graph, plus a unified experience for both frontend and backend developers. + +Visit [Nx Cloud](https://nx.app/) to learn more. diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json new file mode 100644 index 0000000000..b8ff6319a1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -0,0 +1,196 @@ +{ + "version": 1, + "projects": { + "core": { + "projectType": "library", + "root": "libs/core", + "sourceRoot": "libs/core/src", + "prefix": "abp", + "architect": { + "build": { + "builder": "@nrwl/angular:ng-packagr-lite", + "outputs": ["dist/libs/core"], + "options": { + "project": "libs/core/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/core/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/core/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/libs/core"], + "options": { + "jestConfig": "libs/core/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "libs/core/src/**/*.ts", + "libs/core/src/**/*.html" + ] + } + } + } + }, + "dev-app": { + "projectType": "application", + "root": "apps/dev-app", + "sourceRoot": "apps/dev-app/src", + "prefix": "ng-packs", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/apps/dev-app", + "index": "apps/dev-app/src/index.html", + "main": "apps/dev-app/src/main.ts", + "polyfills": "apps/dev-app/src/polyfills.ts", + "tsConfig": "apps/dev-app/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "apps/dev-app/src/favicon.ico", + "apps/dev-app/src/assets" + ], + "styles": ["apps/dev-app/src/styles.scss"], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "fileReplacements": [ + { + "replace": "apps/dev-app/src/environments/environment.ts", + "with": "apps/dev-app/src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "dev-app:build:production" + }, + "development": { + "browserTarget": "dev-app:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "dev-app:build" + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "apps/dev-app/src/**/*.ts", + "apps/dev-app/src/**/*.html" + ] + } + }, + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/apps/dev-app"], + "options": { + "jestConfig": "apps/dev-app/jest.config.js", + "passWithNoTests": true + } + } + } + }, + "dev-app-e2e": { + "root": "apps/dev-app-e2e", + "sourceRoot": "apps/dev-app-e2e/src", + "projectType": "application", + "architect": { + "e2e": { + "builder": "@nrwl/cypress:cypress", + "options": { + "cypressConfig": "apps/dev-app-e2e/cypress.json", + "tsConfig": "apps/dev-app-e2e/tsconfig.e2e.json", + "devServerTarget": "dev-app:serve:development" + }, + "configurations": { + "production": { + "devServerTarget": "dev-app:serve:production" + } + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": ["apps/dev-app-e2e/**/*.{js,ts}"] + } + } + } + } + }, + "cli": { + "defaultCollection": "@nrwl/angular" + }, + "schematics": { + "@nrwl/angular": { + "application": { + "linter": "eslint" + }, + "library": { + "linter": "eslint" + }, + "storybook-configuration": { + "linter": "eslint" + } + }, + "@nrwl/angular:application": { + "style": "scss", + "linter": "eslint", + "unitTestRunner": "jest", + "e2eTestRunner": "cypress" + }, + "@nrwl/angular:library": { + "style": "scss", + "linter": "eslint", + "unitTestRunner": "jest" + }, + "@nrwl/angular:component": { + "style": "scss" + } + }, + "defaultProject": "dev-app" +} diff --git a/npm/ng-packs/nx/ng-packs/apps/.gitkeep b/npm/ng-packs/nx/ng-packs/apps/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/.eslintrc.json b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/.eslintrc.json new file mode 100644 index 0000000000..4c5989b23b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/.eslintrc.json @@ -0,0 +1,17 @@ +{ + "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["src/plugins/index.js"], + "rules": { + "@typescript-eslint/no-var-requires": "off", + "no-undef": "off" + } + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/cypress.json b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/cypress.json new file mode 100644 index 0000000000..ae1fa3a1f2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/cypress.json @@ -0,0 +1,12 @@ +{ + "fileServerFolder": ".", + "fixturesFolder": "./src/fixtures", + "integrationFolder": "./src/integration", + "modifyObstructiveCode": false, + "pluginsFile": "./src/plugins/index", + "supportFile": "./src/support/index.ts", + "video": true, + "videosFolder": "../../dist/cypress/apps/dev-app-e2e/videos", + "screenshotsFolder": "../../dist/cypress/apps/dev-app-e2e/screenshots", + "chromeWebSecurity": false +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/fixtures/example.json b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/fixtures/example.json new file mode 100644 index 0000000000..294cbed6ce --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/fixtures/example.json @@ -0,0 +1,4 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io" +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/integration/app.spec.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/integration/app.spec.ts new file mode 100644 index 0000000000..0176a64eef --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/integration/app.spec.ts @@ -0,0 +1,13 @@ +import { getGreeting } from '../support/app.po'; + +describe('dev-app', () => { + beforeEach(() => cy.visit('/')); + + it('should display welcome message', () => { + // Custom command example, see `../support/commands.ts` file + cy.login('my-email@something.com', 'myPassword'); + + // Function helper example, see `../support/app.po.ts` file + getGreeting().contains('Welcome to dev-app!'); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/plugins/index.js b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/plugins/index.js new file mode 100644 index 0000000000..9067e75a25 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/plugins/index.js @@ -0,0 +1,22 @@ +// *********************************************************** +// This example plugins/index.js can be used to load plugins +// +// You can change the location of this file or turn off loading +// the plugins file with the 'pluginsFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/plugins-guide +// *********************************************************** + +// This function is called when a project is opened or re-opened (e.g. due to +// the project's config changing) + +const { preprocessTypescript } = require('@nrwl/cypress/plugins/preprocessor'); + +module.exports = (on, config) => { + // `on` is used to hook into various events Cypress emits + // `config` is the resolved Cypress config + + // Preprocess Typescript file using Nx helper + on('file:preprocessor', preprocessTypescript(config)); +}; diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/support/app.po.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/support/app.po.ts new file mode 100644 index 0000000000..3293424696 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/support/app.po.ts @@ -0,0 +1 @@ +export const getGreeting = () => cy.get('h1'); diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/support/commands.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/support/commands.ts new file mode 100644 index 0000000000..310f1fa0e0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/support/commands.ts @@ -0,0 +1,33 @@ +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** + +// eslint-disable-next-line @typescript-eslint/no-namespace +declare namespace Cypress { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + interface Chainable { + login(email: string, password: string): void; + } +} +// +// -- This is a parent command -- +Cypress.Commands.add('login', (email, password) => { + console.log('Custom command example: Login', email, password); +}); +// +// -- This is a child command -- +// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/support/index.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/support/index.ts new file mode 100644 index 0000000000..3d469a6b6c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/src/support/index.ts @@ -0,0 +1,17 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/tsconfig.e2e.json b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/tsconfig.e2e.json new file mode 100644 index 0000000000..ca4d1e0305 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/tsconfig.e2e.json @@ -0,0 +1,19 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "sourceMap": false, + "outDir": "../../dist/out-tsc", + "allowJs": true, + "types": ["cypress", "node"], + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src/**/*.ts", "src/**/*.js"], + "angularCompilerOptions": { + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/tsconfig.json b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/tsconfig.json new file mode 100644 index 0000000000..08841a7f56 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.e2e.json" + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/.browserslistrc b/npm/ng-packs/nx/ng-packs/apps/dev-app/.browserslistrc new file mode 100644 index 0000000000..427441dc93 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/.browserslistrc @@ -0,0 +1,17 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +Firefox ESR +not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/.eslintrc.json b/npm/ng-packs/nx/ng-packs/apps/dev-app/.eslintrc.json new file mode 100644 index 0000000000..c0fe044e83 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "ngPacks", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "ng-packs", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/jest.config.js b/npm/ng-packs/nx/ng-packs/apps/dev-app/jest.config.js new file mode 100644 index 0000000000..2abc61f048 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'dev-app', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/apps/dev-app', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.html b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.html new file mode 100644 index 0000000000..6d75a0402d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.html @@ -0,0 +1,138 @@ +
+ + + + + + + + +

Welcome to {{ title }}!

+
+
+

Resources & Tools

+

Thank you for using and showing some ♥ for Nx.

+ +

Here are some links to help you get started.

+ +

Next Steps

+

Here are some things you can do with Nx.

+
+ Add UI library +
+  # Generate UI lib
+  nx g @nrwl/angular:lib ui
+  
+  # Add a component
+  nx g @nrwl/angular:component xyz --project ui
+
+
+ View dependency graph +
nx dep-graph
+
+
+ Run affected commands +
+  # see what's been affected by changes
+  nx affected:dep-graph
+  
+  # run tests for current changes
+  nx affected:test
+  
+  # run e2e tests for current changes
+  nx affected:e2e
+  
+
+
diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.scss b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.scss new file mode 100644 index 0000000000..cf89c35ba7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.scss @@ -0,0 +1,133 @@ +/* + * Remove template code below + */ +:host { + display: block; + font-family: sans-serif; + min-width: 300px; + max-width: 600px; + margin: 50px auto; +} + +.gutter-left { + margin-left: 9px; +} + +.col-span-2 { + grid-column: span 2; +} + +.flex { + display: flex; + align-items: center; + justify-content: center; +} + +header { + background-color: #143055; + color: white; + padding: 5px; + border-radius: 3px; +} + +main { + padding: 0 36px; +} + +p { + text-align: center; +} + +h1 { + text-align: center; + margin-left: 18px; + font-size: 24px; +} + +h2 { + text-align: center; + font-size: 20px; + margin: 40px 0 10px 0; +} + +.resources { + text-align: center; + list-style: none; + padding: 0; + display: grid; + grid-gap: 9px; + grid-template-columns: 1fr 1fr; +} + +.resource { + color: #0094ba; + height: 36px; + background-color: rgba(0, 0, 0, 0); + border: 1px solid rgba(0, 0, 0, 0.12); + border-radius: 4px; + padding: 3px 9px; + text-decoration: none; +} + +.resource:hover { + background-color: rgba(68, 138, 255, 0.04); +} + +pre { + padding: 9px; + border-radius: 4px; + background-color: black; + color: #eee; +} + +details { + border-radius: 4px; + color: #333; + background-color: rgba(0, 0, 0, 0); + border: 1px solid rgba(0, 0, 0, 0.12); + padding: 3px 9px; + margin-bottom: 9px; +} + +summary { + cursor: pointer; + outline: none; + height: 36px; + line-height: 36px; +} + +.github-star-container { + margin-top: 12px; + line-height: 20px; +} + +.github-star-container a { + display: flex; + align-items: center; + text-decoration: none; + color: #333; +} + +.github-star-badge { + color: #24292e; + display: flex; + align-items: center; + font-size: 12px; + padding: 3px 10px; + border: 1px solid rgba(27, 31, 35, 0.2); + border-radius: 3px; + background-image: linear-gradient(-180deg, #fafbfc, #eff3f6 90%); + margin-left: 4px; + font-weight: 600; +} + +.github-star-badge:hover { + background-image: linear-gradient(-180deg, #f0f3f6, #e6ebf1 90%); + border-color: rgba(27, 31, 35, 0.35); + background-position: -0.5em; +} +.github-star-badge .material-icons { + height: 16px; + width: 16px; + margin-right: 4px; +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.spec.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.spec.ts new file mode 100644 index 0000000000..b3c0270527 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.spec.ts @@ -0,0 +1,31 @@ +import { TestBed } from '@angular/core/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [AppComponent], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have as title 'dev-app'`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('dev-app'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('h1')?.textContent).toContain( + 'Welcome to dev-app!' + ); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.ts new file mode 100644 index 0000000000..e2593f977e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'ng-packs-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'], +}) +export class AppComponent { + title = 'dev-app'; +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.module.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.module.ts new file mode 100644 index 0000000000..7bcb9e9a51 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; + +@NgModule({ + declarations: [AppComponent], + imports: [BrowserModule], + providers: [], + bootstrap: [AppComponent], +}) +export class AppModule {} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/assets/.gitkeep b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/assets/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.prod.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.prod.ts new file mode 100644 index 0000000000..c9669790be --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true, +}; diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.ts new file mode 100644 index 0000000000..66998ae9a7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false, +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/favicon.ico b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..317ebcb2336e0833a22dddf0ab287849f26fda57 GIT binary patch literal 15086 zcmeI332;U^%p|z7g|#(P)qFEA@4f!_@qOK2 z_lJl}!lhL!VT_U|uN7%8B2iKH??xhDa;*`g{yjTFWHvXn;2s{4R7kH|pKGdy(7z!K zgftM+Ku7~24TLlh(!g)gz|foI94G^t2^IO$uvX$3(OR0<_5L2sB)lMAMy|+`xodJ{ z_Uh_1m)~h?a;2W{dmhM;u!YGo=)OdmId_B<%^V^{ovI@y`7^g1_V9G}*f# zNzAtvou}I!W1#{M^@ROc(BZ! z+F!!_aR&Px3_reO(EW+TwlW~tv*2zr?iP7(d~a~yA|@*a89IUke+c472NXM0wiX{- zl`UrZC^1XYyf%1u)-Y)jj9;MZ!SLfd2Hl?o|80Su%Z?To_=^g_Jt0oa#CT*tjx>BI z16wec&AOWNK<#i0Qd=1O$fymLRoUR*%;h@*@v7}wApDl^w*h}!sYq%kw+DKDY)@&A z@9$ULEB3qkR#85`lb8#WZw=@})#kQig9oqy^I$dj&k4jU&^2(M3q{n1AKeGUKPFbr z1^<)aH;VsG@J|B&l>UtU#Ejv3GIqERzYgL@UOAWtW<{p#zy`WyJgpCy8$c_e%wYJL zyGHRRx38)HyjU3y{-4z6)pzb>&Q1pR)B&u01F-|&Gx4EZWK$nkUkOI|(D4UHOXg_- zw{OBf!oWQUn)Pe(=f=nt=zkmdjpO^o8ZZ9o_|4tW1ni+Un9iCW47*-ut$KQOww!;u z`0q)$s6IZO!~9$e_P9X!hqLxu`fpcL|2f^I5d4*a@Dq28;@2271v_N+5HqYZ>x;&O z05*7JT)mUe&%S0@UD)@&8SmQrMtsDfZT;fkdA!r(S=}Oz>iP)w=W508=Rc#nNn7ym z1;42c|8($ALY8#a({%1#IXbWn9-Y|0eDY$_L&j{63?{?AH{);EzcqfydD$@-B`Y3<%IIj7S7rK_N}je^=dEk%JQ4c z!tBdTPE3Tse;oYF>cnrapWq*o)m47X1`~6@(!Y29#>-#8zm&LXrXa(3=7Z)ElaQqj z-#0JJy3Fi(C#Rx(`=VXtJ63E2_bZGCz+QRa{W0e2(m3sI?LOcUBx)~^YCqZ{XEPX)C>G>U4tfqeH8L(3|pQR*zbL1 zT9e~4Tb5p9_G}$y4t`i*4t_Mr9QYvL9C&Ah*}t`q*}S+VYh0M6GxTTSXI)hMpMpIq zD1ImYqJLzbj0}~EpE-aH#VCH_udYEW#`P2zYmi&xSPs_{n6tBj=MY|-XrA;SGA_>y zGtU$?HXm$gYj*!N)_nQ59%lQdXtQZS3*#PC-{iB_sm+ytD*7j`D*k(P&IH2GHT}Eh z5697eQECVIGQAUe#eU2I!yI&%0CP#>%6MWV z@zS!p@+Y1i1b^QuuEF*13CuB zu69dve5k7&Wgb+^s|UB08Dr3u`h@yM0NTj4h7MnHo-4@xmyr7(*4$rpPwsCDZ@2be zRz9V^GnV;;?^Lk%ynzq&K(Aix`mWmW`^152Hoy$CTYVehpD-S1-W^#k#{0^L`V6CN+E z!w+xte;2vu4AmVNEFUOBmrBL>6MK@!O2*N|2=d|Y;oN&A&qv=qKn73lDD zI(+oJAdgv>Yr}8(&@ZuAZE%XUXmX(U!N+Z_sjL<1vjy1R+1IeHt`79fnYdOL{$ci7 z%3f0A*;Zt@ED&Gjm|OFTYBDe%bbo*xXAQsFz+Q`fVBH!N2)kaxN8P$c>sp~QXnv>b zwq=W3&Mtmih7xkR$YA)1Yi?avHNR6C99!u6fh=cL|KQ&PwF!n@ud^n(HNIImHD!h87!i*t?G|p0o+eelJ?B@A64_9%SBhNaJ64EvKgD&%LjLCYnNfc; znj?%*p@*?dq#NqcQFmmX($wms@CSAr9#>hUR^=I+=0B)vvGX%T&#h$kmX*s=^M2E!@N9#m?LhMvz}YB+kd zG~mbP|D(;{s_#;hsKK9lbVK&Lo734x7SIFJ9V_}2$@q?zm^7?*XH94w5Qae{7zOMUF z^?%F%)c1Y)Q?Iy?I>knw*8gYW#ok|2gdS=YYZLiD=CW|Nj;n^x!=S#iJ#`~Ld79+xXpVmUK^B(xO_vO!btA9y7w3L3-0j-y4 z?M-V{%z;JI`bk7yFDcP}OcCd*{Q9S5$iGA7*E1@tfkyjAi!;wP^O71cZ^Ep)qrQ)N z#wqw0_HS;T7x3y|`P==i3hEwK%|>fZ)c&@kgKO1~5<5xBSk?iZV?KI6&i72H6S9A* z=U(*e)EqEs?Oc04)V-~K5AUmh|62H4*`UAtItO$O(q5?6jj+K^oD!04r=6#dsxp?~}{`?&sXn#q2 zGuY~7>O2=!u@@Kfu7q=W*4egu@qPMRM>(eyYyaIE<|j%d=iWNdGsx%c!902v#ngNg z@#U-O_4xN$s_9?(`{>{>7~-6FgWpBpqXb`Ydc3OFL#&I}Irse9F_8R@4zSS*Y*o*B zXL?6*Aw!AfkNCgcr#*yj&p3ZDe2y>v$>FUdKIy_2N~}6AbHc7gA3`6$g@1o|dE>vz z4pl(j9;kyMsjaw}lO?(?Xg%4k!5%^t#@5n=WVc&JRa+XT$~#@rldvN3S1rEpU$;XgxVny7mki3 z-Hh|jUCHrUXuLr!)`w>wgO0N%KTB-1di>cj(x3Bav`7v z3G7EIbU$z>`Nad7Rk_&OT-W{;qg)-GXV-aJT#(ozdmnA~Rq3GQ_3mby(>q6Ocb-RgTUhTN)))x>m&eD;$J5Bg zo&DhY36Yg=J=$Z>t}RJ>o|@hAcwWzN#r(WJ52^g$lh^!63@hh+dR$&_dEGu&^CR*< z!oFqSqO@>xZ*nC2oiOd0eS*F^IL~W-rsrO`J`ej{=ou_q^_(<$&-3f^J z&L^MSYWIe{&pYq&9eGaArA~*kA + + + + DevApp + + + + + + + + diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/main.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/main.ts new file mode 100644 index 0000000000..d9a2e7e4a5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/main.ts @@ -0,0 +1,13 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic() + .bootstrapModule(AppModule) + .catch((err) => console.error(err)); diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/polyfills.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/polyfills.ts new file mode 100644 index 0000000000..8a120c374d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/polyfills.ts @@ -0,0 +1,64 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** + * IE11 requires the following for NgClass support on SVG elements + */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). + */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js'; // Included with Angular CLI. + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/styles.scss b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/styles.scss new file mode 100644 index 0000000000..90d4ee0072 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/styles.scss @@ -0,0 +1 @@ +/* You can add global styles to this file, and also import other style files */ diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.app.json b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.app.json new file mode 100644 index 0000000000..30b04680c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.app.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "types": [] + }, + "files": ["src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.editor.json b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.editor.json new file mode 100644 index 0000000000..20c4afdbf4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.editor.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "include": ["**/*.ts"], + "compilerOptions": { + "types": ["jest", "node"] + } +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.json b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.json new file mode 100644 index 0000000000..755a8750e6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.json @@ -0,0 +1,27 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" + }, + { + "path": "./tsconfig.editor.json" + } + ], + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "angularCompilerOptions": { + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/decorate-angular-cli.js b/npm/ng-packs/nx/ng-packs/decorate-angular-cli.js new file mode 100644 index 0000000000..773cbc4ffb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/decorate-angular-cli.js @@ -0,0 +1,73 @@ +/** + * This file decorates the Angular CLI with the Nx CLI to enable features such as computation caching + * and faster execution of tasks. + * + * It does this by: + * + * - Patching the Angular CLI to warn you in case you accidentally use the undecorated ng command. + * - Symlinking the ng to nx command, so all commands run through the Nx CLI + * - Updating the package.json postinstall script to give you control over this script + * + * The Nx CLI decorates the Angular CLI, so the Nx CLI is fully compatible with it. + * Every command you run should work the same when using the Nx CLI, except faster. + * + * Because of symlinking you can still type `ng build/test/lint` in the terminal. The ng command, in this case, + * will point to nx, which will perform optimizations before invoking ng. So the Angular CLI is always invoked. + * The Nx CLI simply does some optimizations before invoking the Angular CLI. + * + * To opt out of this patch: + * - Replace occurrences of nx with ng in your package.json + * - Remove the script from your postinstall script in your package.json + * - Delete and reinstall your node_modules + */ + +const fs = require('fs'); +const os = require('os'); +const cp = require('child_process'); +const isWindows = os.platform() === 'win32'; +let output; +try { + output = require('@nrwl/workspace').output; +} catch (e) { + console.warn( + 'Angular CLI could not be decorated to enable computation caching. Please ensure @nrwl/workspace is installed.', + ); + process.exit(0); +} + +/** + * Symlink of ng to nx, so you can keep using `ng build/test/lint` and still + * invoke the Nx CLI and get the benefits of computation caching. + */ +function symlinkNgCLItoNxCLI() { + try { + const ngPath = './node_modules/.bin/ng'; + const nxPath = './node_modules/.bin/nx'; + if (isWindows) { + /** + * This is the most reliable way to create symlink-like behavior on Windows. + * Such that it works in all shells and works with npx. + */ + ['', '.cmd', '.ps1'].forEach(ext => { + if (fs.existsSync(nxPath + ext)) + fs.writeFileSync(ngPath + ext, fs.readFileSync(nxPath + ext)); + }); + } else { + // If unix-based, symlink + cp.execSync(`ln -sf ./nx ${ngPath}`); + } + } catch (e) { + output.error({ + title: 'Unable to create a symlink from the Angular CLI to the Nx CLI:' + e.message, + }); + throw e; + } +} + +try { + symlinkNgCLItoNxCLI(); + require('@nrwl/cli/lib/decorate-cli').decorateCli(); + output.log({ title: 'Angular CLI has been decorated to enable computation caching.' }); +} catch (e) { + output.error({ title: 'Decoration of the Angular CLI did not complete successfully' }); +} diff --git a/npm/ng-packs/nx/ng-packs/jest.config.js b/npm/ng-packs/nx/ng-packs/jest.config.js new file mode 100644 index 0000000000..42c86fd0ca --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/jest.config.js @@ -0,0 +1,5 @@ +const { getJestProjects } = require('@nrwl/jest'); + +module.exports = { + projects: getJestProjects(), +}; diff --git a/npm/ng-packs/nx/ng-packs/jest.preset.js b/npm/ng-packs/nx/ng-packs/jest.preset.js new file mode 100644 index 0000000000..c93ed9dc77 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/jest.preset.js @@ -0,0 +1,3 @@ +const nxPreset = require('@nrwl/jest/preset'); + +module.exports = { ...nxPreset }; diff --git a/npm/ng-packs/nx/ng-packs/libs/.gitkeep b/npm/ng-packs/nx/ng-packs/libs/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/npm/ng-packs/nx/ng-packs/libs/core/.eslintrc.json b/npm/ng-packs/nx/ng-packs/libs/core/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/README.md b/npm/ng-packs/nx/ng-packs/libs/core/README.md new file mode 100644 index 0000000000..c68e5a2c21 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/README.md @@ -0,0 +1,7 @@ +# core + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test core` to execute the unit tests. diff --git a/npm/ng-packs/nx/ng-packs/libs/core/jest.config.js b/npm/ng-packs/nx/ng-packs/libs/core/jest.config.js new file mode 100644 index 0000000000..4efbc9ed82 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'core', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/libs/core', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json new file mode 100644 index 0000000000..424d8a48a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/libs/core", + "lib": { + "entryFile": "src/index.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/package.json b/npm/ng-packs/nx/ng-packs/libs/core/package.json new file mode 100644 index 0000000000..f37a73b096 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/package.json @@ -0,0 +1,11 @@ +{ + "name": "@ng-packs/core", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^12.1.0", + "@angular/core": "^12.1.0" + }, + "dependencies": { + "tslib": "^2.2.0" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/index.ts new file mode 100644 index 0000000000..ab5a2f7c2a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/index.ts @@ -0,0 +1 @@ +export * from './lib/core.module'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/core.module.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/core.module.ts new file mode 100644 index 0000000000..12d44b2a97 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/core.module.ts @@ -0,0 +1,7 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +@NgModule({ + imports: [CommonModule], +}) +export class CoreModule {} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json new file mode 100644 index 0000000000..d7a0c76294 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "angularCompilerOptions": { + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.json new file mode 100644 index 0000000000..bbcc12b1c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json new file mode 100644 index 0000000000..06de549e10 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/nx.json b/npm/ng-packs/nx/ng-packs/nx.json new file mode 100644 index 0000000000..f0d3529b9c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/nx.json @@ -0,0 +1,41 @@ +{ + "npmScope": "ng-packs", + "affected": { + "defaultBase": "master" + }, + "implicitDependencies": { + "package.json": { + "dependencies": "*", + "devDependencies": "*" + }, + ".eslintrc.json": "*" + }, + "tasksRunnerOptions": { + "default": { + "runner": "@nrwl/workspace/tasks-runners/default", + "options": { + "cacheableOperations": ["build", "lint", "test", "e2e"] + } + } + }, + "targetDependencies": { + "build": [ + { + "target": "build", + "projects": "dependencies" + } + ] + }, + "projects": { + "core": { + "tags": [] + }, + "dev-app": { + "tags": [] + }, + "dev-app-e2e": { + "tags": [], + "implicitDependencies": ["dev-app"] + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/package.json b/npm/ng-packs/nx/ng-packs/package.json new file mode 100644 index 0000000000..28f5ee18dc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/package.json @@ -0,0 +1,111 @@ +{ + "name": "ng-packs", + "version": "0.0.0", + "license": "MIT", + "scripts": { + "ng": "nx", + "postinstall": "node ./decorate-angular-cli.js && ngcc --properties es2015 browser module main", + "nx": "nx", + "start": "ng serve", + "build": "ng build", + "test": "ng test", + "lint": "nx workspace-lint && ng lint", + "e2e": "ng e2e", + "affected:apps": "nx affected:apps", + "affected:libs": "nx affected:libs", + "affected:build": "nx affected:build", + "affected:e2e": "nx affected:e2e", + "affected:test": "nx affected:test", + "affected:lint": "nx affected:lint", + "affected:dep-graph": "nx affected:dep-graph", + "affected": "nx affected", + "format": "nx format:write", + "format:write": "nx format:write", + "format:check": "nx format:check", + "update": "nx migrate latest", + "workspace-generator": "nx workspace-generator", + "dep-graph": "nx dep-graph", + "help": "nx help" + }, + "private": true, + "devDependencies": { + "@abp/ng.core": "~4.4.0", + "@abp/ng.feature-management": "~4.4.0", + "@abp/ng.identity": "~4.4.0", + "@abp/ng.permission-management": "~4.4.0", + "@abp/ng.schematics": "~4.4.0", + "@abp/ng.setting-management": "~4.4.0", + "@abp/ng.tenant-management": "~4.4.0", + "@abp/ng.theme.basic": "~4.4.0", + "@abp/ng.theme.shared": "~4.4.0", + "@abp/utils": "^4.4.0", + "@angular-devkit/build-angular": "~12.1.0", + "@angular-devkit/schematics-cli": "~12.2.0", + "@angular-eslint/eslint-plugin-template": "~12.3.0", + "@angular-eslint/eslint-plugin": "~12.3.0", + "@angular-eslint/template-parser": "~12.3.0", + "@angular/animations": "~12.2.0", + "@angular/cli": "~12.1.0", + "@angular/common": "~12.2.0", + "@angular/compiler-cli": "^12.1.0", + "@angular/compiler": "~12.2.0", + "@angular/core": "~12.2.0", + "@angular/forms": "~12.2.0", + "@angular/language-service": "^12.1.0", + "@angular/localize": "~12.2.0", + "@angular/platform-browser-dynamic": "~12.2.0", + "@angular/platform-browser": "~12.2.0", + "@angular/router": "~12.2.0", + "@fortawesome/fontawesome-free": "^5.14.0", + "@ng-bootstrap/ng-bootstrap": "^7.0.0", + "@ngneat/spectator": "^8.0.3", + "@ngx-validate/core": "^0.1.1", + "@ngxs/store": "^3.7.0", + "@nrwl/angular": "12.6.5", + "@nrwl/cli": "12.6.5", + "@nrwl/cypress": "12.6.5", + "@nrwl/eslint-plugin-nx": "12.6.5", + "@nrwl/jest": "12.6.5", + "@nrwl/linter": "12.6.5", + "@nrwl/tao": "12.6.5", + "@nrwl/workspace": "12.6.5", + "@schematics/angular": "~12.2.0", + "@swimlane/ngx-datatable": "^19.0.0", + "@types/jest": "26.0.24", + "@types/node": "14.14.33", + "@typescript-eslint/eslint-plugin": "~4.28.3", + "@typescript-eslint/parser": "~4.28.3", + "angular-oauth2-oidc": "^12.0.2", + "bootstrap": "^4.5.0", + "chart.js": "^2.9.3", + "cypress": "^7.3.0", + "dotenv": "~10.0.0", + "eslint-config-prettier": "8.1.0", + "eslint-plugin-cypress": "^2.10.3", + "eslint": "7.22.0", + "got": "^11.5.2", + "jest-preset-angular": "9.0.4", + "jest": "27.0.3", + "jsonc-parser": "^2.3.0", + "just-clone": "^3.1.0", + "just-compare": "^1.3.0", + "lerna": "^3.19.0", + "ng-packagr": "^12.1.0", + "ng-zorro-antd": "^11.0.1", + "ngxs-schematic": "^1.1.9", + "prettier": "^2.3.1", + "protractor": "~7.0.0", + "rxjs": "~6.6.0", + "should-quote": "^1.0.0", + "snq": "^1.0.3", + "symlink-manager": "^1.5.0", + "ts-jest": "27.0.3", + "ts-node": "~9.1.1", + "ts-toolbelt": "6.15.4", + "tsickle": "^0.39.1", + "tslib": "^2.0.0", + "tslint": "~6.1.0", + "typescript": "~4.3.5", + "zone.js": "~0.11.4" + } +} diff --git a/npm/ng-packs/nx/ng-packs/tools/generators/.gitkeep b/npm/ng-packs/nx/ng-packs/tools/generators/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/npm/ng-packs/nx/ng-packs/tools/tsconfig.tools.json b/npm/ng-packs/nx/ng-packs/tools/tsconfig.tools.json new file mode 100644 index 0000000000..99428e1473 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/tools/tsconfig.tools.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "outDir": "../dist/out-tsc/tools", + "rootDir": ".", + "module": "commonjs", + "target": "es5", + "types": ["node"], + "importHelpers": false + }, + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json new file mode 100644 index 0000000000..39234d3ed6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -0,0 +1,22 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "rootDir": ".", + "sourceMap": true, + "declaration": false, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "es2015", + "module": "esnext", + "lib": ["es2017", "dom"], + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "baseUrl": ".", + "paths": { + "@ng-packs/core": ["libs/core/src/index.ts"] + } + }, + "exclude": ["node_modules", "tmp"] +} diff --git a/npm/ng-packs/nx/ng-packs/yarn.lock b/npm/ng-packs/nx/ng-packs/yarn.lock new file mode 100644 index 0000000000..d0e453948e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/yarn.lock @@ -0,0 +1,15659 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@abp/ng.account.core@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.account.core/-/ng.account.core-4.4.0.tgz#347f5559d019618cd4cb7129389f303e382a0508" + integrity sha512-Doqy39F8TIxSBaEwLMKgR2OUdt8p4TO7fHKWSRzwHeeGlPsJ/cfNWI8xdMl7C0kLGuhX6BQj2+rzx9miGW0T0g== + dependencies: + tslib "^2.0.0" + +"@abp/ng.components@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.components/-/ng.components-4.4.0.tgz#5eefed4c486de0a83431fe9740567b88fd70a36f" + integrity sha512-Ar0pzVhGEnGWR2w0g/RE5tvwArx4HYpSasGdipyKecevC0cubYDvpsX/KicdvC93RnLXgd3bCq7WUs1hkC04rQ== + dependencies: + ng-zorro-antd "^11.0.0" + tslib "^2.0.0" + +"@abp/ng.core@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-4.4.0.tgz#e5026caaaa9afd5a17a07e49bbb39020516e7c54" + integrity sha512-mF746bWt7bFS5dcRMAQCbm523/mABulWKJWDT/igNg0h19Lfnr9juaKz3eVrOixoxygBcSpK6tqv0C0Adxzr7Q== + dependencies: + "@abp/utils" "^4.4.0" + "@angular/localize" "~10.0.10" + "@ngxs/store" "^3.7.0" + angular-oauth2-oidc "^10.0.0" + just-clone "^3.1.0" + just-compare "^1.3.0" + snq "^1.0.3" + ts-toolbelt "6.15.4" + tslib "^2.0.0" + +"@abp/ng.feature-management@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-4.4.0.tgz#3b63b5e1101d9f92772d5b8c3b80f12b8cebec51" + integrity sha512-9mZ1cl/qu6D/flWcQRklL6No89gE/MjJuMjVjr+qwZabyU6Y/h3ATM1l+CL3+Z1hJ3TKO4Au28FqbxfzycOu/w== + dependencies: + "@abp/ng.theme.shared" "~4.4.0" + tslib "^2.0.0" + +"@abp/ng.identity@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-4.4.0.tgz#22c34b3962844bbbd891a560d8eb46f8f0c1fffb" + integrity sha512-x1E6NBJiaCWjbicuey+8Z40izFpXnflZWEjjSxeCXgVCcAjxZyXOra7iGC/19Q4MNphFVa0cpgEPPI2bltA7yA== + dependencies: + "@abp/ng.permission-management" "~4.4.0" + "@abp/ng.theme.shared" "~4.4.0" + tslib "^2.0.0" + +"@abp/ng.permission-management@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-4.4.0.tgz#81730f10d84f5d683a2bb11ce2c892cb8624327c" + integrity sha512-uW0/tin7JslUa4LYdqIvF86scGBYb38q5I1AHBLnO9GRw0VQRkCO2RSES6td4Qu1cBnfV0rjGFKJLScwQ9nTpw== + dependencies: + "@abp/ng.theme.shared" "~4.4.0" + tslib "^2.0.0" + +"@abp/ng.schematics@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-4.4.0.tgz#e13689b85a4724736b79ca7257af3bee093e1d2a" + integrity sha512-UFJait7QGGVK3YKF0JvWghIvF7mxn5nnUaGckcNhZA7N1+FFYwTtLqdAscPgA7HjsQch/c9eRd+jROJreiHdrw== + dependencies: + "@angular-devkit/core" "~11.0.2" + "@angular-devkit/schematics" "~11.0.2" + got "^11.5.2" + jsonc-parser "^2.3.0" + should-quote "^1.0.0" + typescript "~3.9.2" + +"@abp/ng.setting-management@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-4.4.0.tgz#ebcadabcdbafbbc1b7015012d82b767661096040" + integrity sha512-ji4v/6iFmLT8ANZfGieI/dGgoOsGLX4dzIfMjqe7ktobTsg5dcj4fUKVhxmPVq2FeiOT6r3znQREMMaWj6v1Bg== + dependencies: + "@abp/ng.components" "~4.4.0" + "@abp/ng.theme.shared" "~4.4.0" + tslib "^2.0.0" + +"@abp/ng.tenant-management@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-4.4.0.tgz#e9e06876917d41dafec339eeea2f25428c8d5c14" + integrity sha512-j92AVEkM+nnoYrR+RphZcb/X1CJ8SjzPby2/cIBr8VeW32TvRKIAD38Bkjm73Cju3D0Qbx5gyPYZiYyTLaxn6Q== + dependencies: + "@abp/ng.feature-management" "~4.4.0" + "@abp/ng.theme.shared" "~4.4.0" + tslib "^2.0.0" + +"@abp/ng.theme.basic@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-4.4.0.tgz#50053faf58016a330ca7ba1ef5f00559396f9dbf" + integrity sha512-vSuetQRXQhpxWx2sNriLRCpKhyhGNdywYsjbFqLUuTDaTQI+UYEprGG87Pt4HqOsXJujuPtnySxQsp9zJH25+g== + dependencies: + "@abp/ng.account.core" "~4.4.0" + "@abp/ng.theme.shared" "~4.4.0" + tslib "^2.0.0" + +"@abp/ng.theme.shared@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-4.4.0.tgz#ba70fcdb9f7c064f0523ee63145b3b769ddfa419" + integrity sha512-x49NAyxs7pKAoUFSh7ms3QXz7kh4nP2x0TuiipMM7ika29Nc9m5B0DQ9kj9jFLEC53b/sx15fAkfrXUY6yHSsA== + dependencies: + "@abp/ng.core" "~4.4.0" + "@fortawesome/fontawesome-free" "^5.14.0" + "@ng-bootstrap/ng-bootstrap" "^7.0.0" + "@ngx-validate/core" "^0.0.13" + "@swimlane/ngx-datatable" "^17.1.0" + bootstrap "~4.6.0" + chart.js "^2.9.3" + tslib "^2.0.0" + +"@abp/utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.0.tgz#b74b5cfb8e9b078d8b7a724cac73d348f854e89c" + integrity sha512-EgLqGmfwNuDgPIoqrSJZMWvXKhScj3FE2hG0kmIBtCyj3SOaHgYVFuTqs4hx2WoBB6YUNhG3U1hn6c1EzIrIcQ== + dependencies: + just-compare "^1.3.0" + +"@angular-devkit/architect@0.1201.4": + version "0.1201.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1201.4.tgz#bdd4ed088845bc5412ac8ab9dd4355953f09ea70" + integrity sha512-hGO5NrZxV8Z7sILwokt7H+1sMf+5tJS9PJszvYlIBSzG0LBkOwwLQDb4MD42ATXFru57SXNqMZDVKoi1kTgxAw== + dependencies: + "@angular-devkit/core" "12.1.4" + rxjs "6.6.7" + +"@angular-devkit/build-angular@~12.1.0": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-12.1.4.tgz#3af88acb0a7e2fadd418103f6b5bb0b40c60b670" + integrity sha512-9kMdnaU2dr8o7gJpuBsEHLUpa6huF8uZQEd1+jhKfByEY/xTQo8qztvmbhFhrSfDvdYRygNHItpt3pYEoCEOig== + dependencies: + "@angular-devkit/architect" "0.1201.4" + "@angular-devkit/build-optimizer" "0.1201.4" + "@angular-devkit/build-webpack" "0.1201.4" + "@angular-devkit/core" "12.1.4" + "@babel/core" "7.14.6" + "@babel/generator" "7.14.5" + "@babel/helper-annotate-as-pure" "7.14.5" + "@babel/plugin-proposal-async-generator-functions" "7.14.7" + "@babel/plugin-transform-async-to-generator" "7.14.5" + "@babel/plugin-transform-runtime" "7.14.5" + "@babel/preset-env" "7.14.7" + "@babel/runtime" "7.14.6" + "@babel/template" "7.14.5" + "@discoveryjs/json-ext" "0.5.3" + "@jsdevtools/coverage-istanbul-loader" "3.0.5" + "@ngtools/webpack" "12.1.4" + ansi-colors "4.1.1" + babel-loader "8.2.2" + browserslist "^4.9.1" + cacache "15.2.0" + caniuse-lite "^1.0.30001032" + circular-dependency-plugin "5.2.2" + copy-webpack-plugin "9.0.0" + core-js "3.15.1" + critters "0.0.10" + css-loader "5.2.6" + css-minimizer-webpack-plugin "3.0.1" + find-cache-dir "3.3.1" + glob "7.1.7" + https-proxy-agent "5.0.0" + inquirer "8.1.1" + jest-worker "27.0.2" + karma-source-map-support "1.4.0" + less "4.1.1" + less-loader "10.0.0" + license-webpack-plugin "2.3.20" + loader-utils "2.0.0" + mini-css-extract-plugin "1.6.2" + minimatch "3.0.4" + open "8.2.1" + ora "5.4.1" + parse5-html-rewriting-stream "6.0.1" + postcss "8.3.5" + postcss-import "14.0.2" + postcss-loader "6.1.0" + postcss-preset-env "6.7.0" + raw-loader "4.0.2" + regenerator-runtime "0.13.7" + resolve-url-loader "4.0.0" + rxjs "6.6.7" + sass "1.35.1" + sass-loader "12.1.0" + semver "7.3.5" + source-map "0.7.3" + source-map-loader "3.0.0" + source-map-support "0.5.19" + style-loader "2.0.0" + stylus "0.54.8" + stylus-loader "6.1.0" + terser "5.7.0" + terser-webpack-plugin "5.1.3" + text-table "0.2.0" + tree-kill "1.2.2" + tslib "2.3.0" + webpack "5.44.0" + webpack-dev-middleware "5.0.0" + webpack-dev-server "3.11.2" + webpack-merge "5.8.0" + webpack-subresource-integrity "1.5.2" + +"@angular-devkit/build-optimizer@0.1201.4": + version "0.1201.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1201.4.tgz#79bf972b5905d7d193c838c496febfff6923ec2c" + integrity sha512-Hq+mDUe4xIyq4939JZaUkptsM89WnZOk8Qel6mS0T/bxMX/qs+nuGD5o+xDKkuayogbiTrLmyZBib0/90eSXEA== + dependencies: + source-map "0.7.3" + tslib "2.3.0" + typescript "4.3.4" + +"@angular-devkit/build-webpack@0.1201.4": + version "0.1201.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1201.4.tgz#a05ca7ee84d6bdd4a9227fd8a826f73a5bec0a4e" + integrity sha512-eMmbyHyWJZMQ1tfwVdja/iAk/eXJFYrF8b27gDV9gGI7MGB3KJ93AhkbPbcvlw4Hhx4+6M11GfeXzbwH0q9pnQ== + dependencies: + "@angular-devkit/architect" "0.1201.4" + rxjs "6.6.7" + +"@angular-devkit/core@11.0.7", "@angular-devkit/core@~11.0.2": + version "11.0.7" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-11.0.7.tgz#05b82be7e11ddc2a7836c777297ee45eee20ff55" + integrity sha512-1GKnIT++YSUHpzzRx9QC0+8yOw4wy+ZpiJVDlroPSeK4FGrTCJqJKenkfRjVFRFOSrzTiJds+IU6kI4+bFbw9g== + dependencies: + ajv "6.12.6" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.3" + source-map "0.7.3" + +"@angular-devkit/core@12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-12.1.4.tgz#7a5e745918f2099de97367ff917b3b057f6c18e1" + integrity sha512-KOzGD8JbP/7EeUwPiU5x+fo3ZEQ5R4IVW5WoH92PaO3mdpqXC7UL2MWLct8PUe9il9nqJMvrBMldSSvP9PCT2w== + dependencies: + ajv "8.6.0" + ajv-formats "2.1.0" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.7" + source-map "0.7.3" + +"@angular-devkit/core@12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-12.2.0.tgz#6ba67f5299d172a29a90394a3a8df2a164e0c15d" + integrity sha512-9H2NfE4eazpMPwbAx4ZbtTNijo6419DZsmQzlzwQWzTInO3+CAjQuyW53W5Nt/IoauNVOgOEsC8/YbYjNmN0Aw== + dependencies: + ajv "8.6.2" + ajv-formats "2.1.0" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.7" + 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" + integrity sha512-4jdja9QPwR6XG14ZSunyyOWT3nE2WtZC5IMDIBZADxujXvhzOU0n4oWpy6/JVHLUAxYNNgzLz+/LQORRWndcPg== + dependencies: + ajv "6.12.3" + fast-json-stable-stringify "2.0.0" + magic-string "0.25.3" + rxjs "6.4.0" + source-map "0.7.3" + +"@angular-devkit/schematics-cli@~12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics-cli/-/schematics-cli-12.2.0.tgz#59719e877b0278f8447b2dfede8cd55832748a87" + integrity sha512-S6KSneLJfyMd711jzimgP/bVh0lZjWUgGCy21WmQuH2PWxPi4lYixtRZwgk2JmVkVYvA0F202GAYAO4G5ak0tQ== + dependencies: + "@angular-devkit/core" "12.2.0" + "@angular-devkit/schematics" "12.2.0" + ansi-colors "4.1.1" + inquirer "8.1.2" + minimist "1.2.5" + symbol-observable "4.0.0" + +"@angular-devkit/schematics@12.1.4", "@angular-devkit/schematics@~12.1.0": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-12.1.4.tgz#8f20886bc8c56eb25d67981107f00298276dae79" + integrity sha512-yD3y3pK/K5piOgvALFoCCiPp4H8emNa3yZL+vlpEpewVLpF1MM55LeTxc0PI5s0uqtOGVnvcbA5wYgMm3YsUEA== + dependencies: + "@angular-devkit/core" "12.1.4" + ora "5.4.1" + rxjs "6.6.7" + +"@angular-devkit/schematics@12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-12.2.0.tgz#8e35c20ec539c3acf92a6d4e9673050cf3241461" + integrity sha512-C+eutMKtOLROk/2zs1NkXeLZJpFtvZm7ctWmcns0Yh83Di2sCgGiSqdqNZFyDplxkt5W5lF2cdBSGyP8ZH+/ug== + dependencies: + "@angular-devkit/core" "12.2.0" + ora "5.4.1" + rxjs "6.6.7" + +"@angular-devkit/schematics@^8.0.6": + version "8.3.29" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-8.3.29.tgz#b3ba658b90fb3226a80ff12977be7dd583e99c49" + integrity sha512-AFJ9EK0XbcNlO5Dm9vr0OlBo1Nw6AaFXPR+DmHGBdcDDHxqEmYYLWfT+JU/8U2YFIdgrtlwvdtf6UQ3V2jdz1g== + dependencies: + "@angular-devkit/core" "8.3.29" + rxjs "6.4.0" + +"@angular-devkit/schematics@~11.0.2": + version "11.0.7" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-11.0.7.tgz#7cd2398c98d82f8e5bdc3bb5c70e92d6b1d12a12" + integrity sha512-mKkXWmSTlZYjQO4i7xUX+bG1E9h9Ke3GgGQQouA+kth06IPO+VcywLQNsui4qcyLDUjyo8CaX+44aoSXoX3Tgg== + dependencies: + "@angular-devkit/core" "11.0.7" + ora "5.1.0" + rxjs "6.6.3" + +"@angular-eslint/eslint-plugin-template@~12.3.0": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-12.3.1.tgz#33260cd5356df5db7e27719443eabcf6c214e32e" + integrity sha512-pz+nO64ma/9Sp2aeRnQ+Vktt7Fo1Lay/J+CG//3TIc3lYsoCTj4h42P6yCcxxJ9b4N7SUxMAnchA8eE5mJS4Ug== + dependencies: + "@typescript-eslint/experimental-utils" "4.28.2" + aria-query "^4.2.2" + axobject-query "^2.2.0" + +"@angular-eslint/eslint-plugin@~12.3.0": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin/-/eslint-plugin-12.3.1.tgz#00ac44d5986d86113d65a5373746e1fc22fd8702" + integrity sha512-KBm27onYggRcusA/BxuSkDGpVnIs8yG4ARio8ZAhe0H2XIRJTzJZ7oIBBjugDau03AGX3VMG6wAXailjJvsywg== + dependencies: + "@typescript-eslint/experimental-utils" "4.28.2" + +"@angular-eslint/template-parser@~12.3.0": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@angular-eslint/template-parser/-/template-parser-12.3.1.tgz#561fe1bd3fb4a4d75cc55366d27818bca22204c9" + integrity sha512-6DkXqTaVEHZdcN3isHQ2CDoTsKLuJ5C1SYEOuFzOU1Zp85SvjxO92v6gPkFPKk0iQNVRmQS2XcKef6weehUUGA== + dependencies: + eslint-scope "^5.1.0" + +"@angular/animations@~12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-12.2.0.tgz#85e4e738bd72011067836b63bb8fc51a44646a7e" + integrity sha512-BCta/HT0VaM0hzsyRyb24UIaV7vlpo2jJjSwnBhO5RosH+bAaA3Faa3ps3AjCDCEXo9z99dvxJFm8WqdunPYyw== + dependencies: + tslib "^2.2.0" + +"@angular/cdk@^11.0.2": + version "11.2.13" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-11.2.13.tgz#d54c9187e3b8cf3f8ba190b1edddc08ed2b740de" + integrity sha512-FkE4iCwoLbQxLDUOjV1I7M/6hmpyb7erAjEdWgch7nGRNxF1hqX5Bqf1lvLFKPNCbx5NRI5K7YVAdIUQUR8vug== + dependencies: + tslib "^2.0.0" + optionalDependencies: + parse5 "^5.0.0" + +"@angular/cli@~12.1.0": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-12.1.4.tgz#58e50bc2907ecc415224162af51626fcbba917d6" + integrity sha512-LpyhyqWe3bFcuH3MrXeYoIPI1htjwG1b5ehETfq4qsMvNmuFON6QI+F7EWEpX7lItVQc2bES+ogasTZsZue/uw== + dependencies: + "@angular-devkit/architect" "0.1201.4" + "@angular-devkit/core" "12.1.4" + "@angular-devkit/schematics" "12.1.4" + "@schematics/angular" "12.1.4" + "@yarnpkg/lockfile" "1.1.0" + ansi-colors "4.1.1" + debug "4.3.1" + ini "2.0.0" + inquirer "8.1.1" + jsonc-parser "3.0.0" + npm-package-arg "8.1.5" + npm-pick-manifest "6.1.1" + open "8.2.1" + ora "5.4.1" + pacote "11.3.4" + resolve "1.20.0" + semver "7.3.5" + symbol-observable "4.0.0" + uuid "8.3.2" + +"@angular/common@~12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-12.2.0.tgz#b8bb889f310ae2af359120e110634cf356a6d142" + integrity sha512-9OaqH5WhfJ/YpN9b4TmiGHdOar/3NiGjktwG1/5jV4mTO+tOP25yNO4zCd4RuaRURipWUEa8mSaesgUgTb3jmQ== + dependencies: + tslib "^2.2.0" + +"@angular/compiler-cli@^12.1.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-12.2.0.tgz#af6c653ed7ae3f0555eb8c8062faa6523ac67f12" + integrity sha512-VjGb4gty8JSkmcBvdc4QzQx6mPT7cXs42Hu8IDK7dQma3nTRmwbX0BF1m7i+kbrjWHK8I85FbsYbSzfzZid2NA== + dependencies: + "@babel/core" "^7.8.6" + "@babel/types" "^7.8.6" + canonical-path "1.0.0" + chokidar "^3.0.0" + convert-source-map "^1.5.1" + dependency-graph "^0.11.0" + magic-string "^0.25.0" + minimist "^1.2.0" + reflect-metadata "^0.1.2" + semver "^7.0.0" + source-map "^0.6.1" + sourcemap-codec "^1.4.8" + tslib "^2.2.0" + yargs "^17.0.0" + +"@angular/compiler@~12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-12.2.0.tgz#d1585f7b7a67b8393eef2aa4cd3ef47c9d7fc3c0" + integrity sha512-24G1joE699gbAHRAIESVQBI797Q506MZ/LWyFHRjfdlfXgltDN63j5dpNJzb/rUK1/uHGGAJaEH+OE60ZK2q9Q== + dependencies: + tslib "^2.2.0" + +"@angular/core@~12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-12.2.0.tgz#29869aec3f624f6d4e1b5eedc25475cd5235a2e8" + integrity sha512-zy/gqSlSEmi85HVbpoQ0nhC74xoL+aoofvbkKPgdgyEcnqzBt4IFzH++0EZ+GMeZ2pVoNfiXklUhAy2OBAiR/g== + dependencies: + tslib "^2.2.0" + +"@angular/forms@~12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-12.2.0.tgz#ae43c044404b7cac3595ea2500abb2368889b6ef" + integrity sha512-lhKin5IHElH5qk2Su/o0YMF9JYb84grz0WMIHYmt3EASw/EGvzZwUBd76anJWWwFig6GLw/ZdNC9zLW2Leh06Q== + dependencies: + tslib "^2.2.0" + +"@angular/language-service@^12.1.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-12.2.0.tgz#f863fa6f586e28b8fcb3024fff70ddae534d3ab2" + integrity sha512-oWZ3E+640iRxkf+tStNpDbJT4mc7zNdOCg4L0YjpBuDOiStJ0YDgtJfNdYE+Ap7fsb0QvUuXpU0QGnDVazQ1PQ== + +"@angular/localize@~10.0.10": + version "10.0.14" + resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-10.0.14.tgz#99064a3b12e94e54e791c0638fbbbcc8783d8a62" + integrity sha512-tV1oUii6bxpQ6bKELcZsibUEEGmNiROxy8xRW015VgrgMFhuNuesHSmNUIstZ7ag8/sjh0/w1p55PUB6LEiPFA== + dependencies: + "@babel/core" "7.8.3" + glob "7.1.2" + yargs "15.3.0" + +"@angular/localize@~12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-12.2.0.tgz#d27c053306976ce8017f9cda3e8bd5118fc9c2ae" + integrity sha512-LGPWzosJPJX1zI48rNelzjRBMjS7krpp+Mp8p6GdIn79cZCOzdR1/gpqHLPpJyNYBytQP/Ep0kP81LKctpWEzg== + dependencies: + "@babel/core" "7.8.3" + glob "7.1.7" + yargs "^17.0.0" + +"@angular/platform-browser-dynamic@~12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.0.tgz#d6d882129b5a0cf201c50f0839e5b434e822f0b0" + integrity sha512-mvUo1WEI8PrJxIer0RLXSW9raYDrKarUQ9T2Q0/R3ZgS6Y1WvoJe+qSZ7K/hCbErH4zd+64TuJHlj+g2WHPLug== + dependencies: + tslib "^2.2.0" + +"@angular/platform-browser@~12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-12.2.0.tgz#d3d01602e331ace3752111e7e64efc9c4a10e561" + integrity sha512-MIoWBhhMmPBFfuOPBgEG21uqCZVudTj4YMGxQH4iVlI9GD9ZAht8XgopN9Vw4cytPNfKWsspLoruhIWRNSJlNA== + dependencies: + tslib "^2.2.0" + +"@angular/router@~12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-12.2.0.tgz#b833706e2d935da9dbc828e280f0f566458531bc" + integrity sha512-C5S0bU8KtU/2wBQ76AZVFivWbGYJCDwkVg2Lk4ddjqs/pKWb0vg2Baa3DfJrIz3esqfYUJl00HMYQVM9+QtZQA== + dependencies: + tslib "^2.2.0" + +"@ant-design/colors@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-5.1.1.tgz#800b2186b1e27e66432e67d03ed96af3e21d8940" + integrity sha512-Txy4KpHrp3q4XZdfgOBqLl+lkQIc3tEvHXOimRN1giX1AEC7mGtyrO9p8iRGJ3FLuVMGa2gNEzQyghVymLttKQ== + dependencies: + "@ctrl/tinycolor" "^3.3.1" + +"@ant-design/icons-angular@^11.0.1": + version "11.0.1" + resolved "https://registry.yarnpkg.com/@ant-design/icons-angular/-/icons-angular-11.0.1.tgz#8ff3131f3d9b4b25fd28c64c4a9bdfe36da54942" + integrity sha512-WwxVx/aToxTjWmB5+O+3rOjSYdF8FC/Yd/8jF1ZGQMtLWAzP8/foQmKvPAktTUsh0/Ijhtur7LrHN2VuUedMcA== + dependencies: + "@ant-design/colors" "^5.0.0" + tslib "^2.0.0" + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + dependencies: + "@babel/highlight" "^7.14.5" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.7", "@babel/compat-data@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== + +"@babel/core@7.14.6": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" + integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.14.5" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helpers" "^7.14.6" + "@babel/parser" "^7.14.6" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/core@7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" + integrity sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.3" + "@babel/helpers" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.0.1", "@babel/core@^7.1.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.6": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.0.tgz#749e57c68778b73ad8082775561f67f5196aafa8" + integrity sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.0" + "@babel/helper-module-transforms" "^7.15.0" + "@babel/helpers" "^7.14.8" + "@babel/parser" "^7.15.0" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" + integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== + dependencies: + "@babel/types" "^7.14.5" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.14.5", "@babel/generator@^7.15.0", "@babel/generator@^7.7.2", "@babel/generator@^7.8.3": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15" + integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ== + dependencies: + "@babel/types" "^7.15.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@7.14.5", "@babel/helper-annotate-as-pure@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" + integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" + integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5", "@babel/helper-compilation-targets@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz#973df8cbd025515f3ff25db0c05efc704fa79818" + integrity sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A== + dependencies: + "@babel/compat-data" "^7.15.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.14.5": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz#c9a137a4d137b2d0e2c649acf536d7ba1a76c0f7" + integrity sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.15.0" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-replace-supers" "^7.15.0" + "@babel/helper-split-export-declaration" "^7.14.5" + +"@babel/helper-create-regexp-features-plugin@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" + integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + regexpu-core "^4.7.1" + +"@babel/helper-define-polyfill-provider@^0.2.2": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" + integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-explode-assignable-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" + integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" + integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== + dependencies: + "@babel/helper-get-function-arity" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-get-function-arity@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" + integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-hoist-variables@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" + integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-member-expression-to-functions@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz#0ddaf5299c8179f27f37327936553e9bba60990b" + integrity sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg== + dependencies: + "@babel/types" "^7.15.0" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" + integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz#679275581ea056373eddbe360e1419ef23783b08" + integrity sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-replace-supers" "^7.15.0" + "@babel/helper-simple-access" "^7.14.8" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.9" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" + +"@babel/helper-optimise-call-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" + integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-remap-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" + integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-wrap-function" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz#ace07708f5bf746bf2e6ba99572cce79b5d4e7f4" + integrity sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.15.0" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" + +"@babel/helper-simple-access@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924" + integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg== + dependencies: + "@babel/types" "^7.14.8" + +"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" + integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-split-export-declaration@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" + integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" + integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== + +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + +"@babel/helper-wrap-function@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" + integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== + dependencies: + "@babel/helper-function-name" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helpers@^7.14.6", "@babel/helpers@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.8.tgz#839f88f463025886cff7f85a35297007e2da1b77" + integrity sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw== + dependencies: + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.8" + "@babel/types" "^7.14.8" + +"@babel/helpers@^7.8.3": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.3.tgz#c96838b752b95dcd525b4e741ed40bb1dc2a1357" + integrity sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g== + dependencies: + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.15.0", "@babel/parser@^7.7.2": + version "7.15.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.2.tgz#08d4ffcf90d211bf77e7cc7154c6f02d468d2b1d" + integrity sha512-bMJXql1Ss8lFnvr11TZDH4ArtwlAS5NG9qBmdiFW2UHHm6MVoR+GDc5XE2b9K938cyjc9O6/+vjjcffLDtfuDg== + +"@babel/parser@^7.8.3": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862" + integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA== + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" + integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" + +"@babel/plugin-proposal-async-generator-functions@7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace" + integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-async-generator-functions@^7.14.7", "@babel/plugin-proposal-async-generator-functions@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz#7028dc4fa21dc199bbacf98b39bab1267d0eaf9a" + integrity sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" + integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" + integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" + integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" + integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" + integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" + integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" + integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" + integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" + integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== + dependencies: + "@babel/compat-data" "^7.14.7" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.14.5" + +"@babel/plugin-proposal-optional-catch-binding@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" + integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" + integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" + integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" + integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" + integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716" + integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-arrow-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" + integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-async-to-generator@7.14.5", "@babel/plugin-transform-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" + integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" + +"@babel/plugin-transform-block-scoped-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" + integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-block-scoping@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" + integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-classes@^7.14.5", "@babel/plugin-transform-classes@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz#2a391ffb1e5292710b00f2e2c210e1435e7d449f" + integrity sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" + integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-destructuring@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" + integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" + integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-duplicate-keys@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" + integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-exponentiation-operator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" + integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-for-of@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" + integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" + integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== + dependencies: + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" + integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-member-expression-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" + integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-modules-amd@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" + integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== + dependencies: + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.14.5", "@babel/plugin-transform-modules-commonjs@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz#3305896e5835f953b5cdb363acd9e8c2219a5281" + integrity sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig== + dependencies: + "@babel/helper-module-transforms" "^7.15.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.14.8" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" + integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== + dependencies: + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" + integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== + dependencies: + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7", "@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" + integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + +"@babel/plugin-transform-new-target@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" + integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-object-super@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" + integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + +"@babel/plugin-transform-parameters@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" + integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" + integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-regenerator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" + integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" + integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-runtime@7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz#30491dad49c6059f8f8fa5ee8896a0089e987523" + integrity sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-polyfill-corejs2 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.2" + babel-plugin-polyfill-regenerator "^0.2.2" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" + integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-spread@^7.14.6": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" + integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + +"@babel/plugin-transform-sticky-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" + integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-template-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" + integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-typeof-symbol@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" + integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-unicode-escapes@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" + integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-unicode-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" + integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/preset-env@7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.7.tgz#5c70b22d4c2d893b03d8c886a5c17422502b932a" + integrity sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA== + dependencies: + "@babel/compat-data" "^7.14.7" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-async-generator-functions" "^7.14.7" + "@babel/plugin-proposal-class-properties" "^7.14.5" + "@babel/plugin-proposal-class-static-block" "^7.14.5" + "@babel/plugin-proposal-dynamic-import" "^7.14.5" + "@babel/plugin-proposal-export-namespace-from" "^7.14.5" + "@babel/plugin-proposal-json-strings" "^7.14.5" + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" + "@babel/plugin-proposal-numeric-separator" "^7.14.5" + "@babel/plugin-proposal-object-rest-spread" "^7.14.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-private-methods" "^7.14.5" + "@babel/plugin-proposal-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.14.5" + "@babel/plugin-transform-async-to-generator" "^7.14.5" + "@babel/plugin-transform-block-scoped-functions" "^7.14.5" + "@babel/plugin-transform-block-scoping" "^7.14.5" + "@babel/plugin-transform-classes" "^7.14.5" + "@babel/plugin-transform-computed-properties" "^7.14.5" + "@babel/plugin-transform-destructuring" "^7.14.7" + "@babel/plugin-transform-dotall-regex" "^7.14.5" + "@babel/plugin-transform-duplicate-keys" "^7.14.5" + "@babel/plugin-transform-exponentiation-operator" "^7.14.5" + "@babel/plugin-transform-for-of" "^7.14.5" + "@babel/plugin-transform-function-name" "^7.14.5" + "@babel/plugin-transform-literals" "^7.14.5" + "@babel/plugin-transform-member-expression-literals" "^7.14.5" + "@babel/plugin-transform-modules-amd" "^7.14.5" + "@babel/plugin-transform-modules-commonjs" "^7.14.5" + "@babel/plugin-transform-modules-systemjs" "^7.14.5" + "@babel/plugin-transform-modules-umd" "^7.14.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7" + "@babel/plugin-transform-new-target" "^7.14.5" + "@babel/plugin-transform-object-super" "^7.14.5" + "@babel/plugin-transform-parameters" "^7.14.5" + "@babel/plugin-transform-property-literals" "^7.14.5" + "@babel/plugin-transform-regenerator" "^7.14.5" + "@babel/plugin-transform-reserved-words" "^7.14.5" + "@babel/plugin-transform-shorthand-properties" "^7.14.5" + "@babel/plugin-transform-spread" "^7.14.6" + "@babel/plugin-transform-sticky-regex" "^7.14.5" + "@babel/plugin-transform-template-literals" "^7.14.5" + "@babel/plugin-transform-typeof-symbol" "^7.14.5" + "@babel/plugin-transform-unicode-escapes" "^7.14.5" + "@babel/plugin-transform-unicode-regex" "^7.14.5" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.14.5" + babel-plugin-polyfill-corejs2 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.2" + babel-plugin-polyfill-regenerator "^0.2.2" + core-js-compat "^3.15.0" + semver "^6.3.0" + +"@babel/preset-env@^7.0.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.0.tgz#e2165bf16594c9c05e52517a194bf6187d6fe464" + integrity sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q== + dependencies: + "@babel/compat-data" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-async-generator-functions" "^7.14.9" + "@babel/plugin-proposal-class-properties" "^7.14.5" + "@babel/plugin-proposal-class-static-block" "^7.14.5" + "@babel/plugin-proposal-dynamic-import" "^7.14.5" + "@babel/plugin-proposal-export-namespace-from" "^7.14.5" + "@babel/plugin-proposal-json-strings" "^7.14.5" + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" + "@babel/plugin-proposal-numeric-separator" "^7.14.5" + "@babel/plugin-proposal-object-rest-spread" "^7.14.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-private-methods" "^7.14.5" + "@babel/plugin-proposal-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.14.5" + "@babel/plugin-transform-async-to-generator" "^7.14.5" + "@babel/plugin-transform-block-scoped-functions" "^7.14.5" + "@babel/plugin-transform-block-scoping" "^7.14.5" + "@babel/plugin-transform-classes" "^7.14.9" + "@babel/plugin-transform-computed-properties" "^7.14.5" + "@babel/plugin-transform-destructuring" "^7.14.7" + "@babel/plugin-transform-dotall-regex" "^7.14.5" + "@babel/plugin-transform-duplicate-keys" "^7.14.5" + "@babel/plugin-transform-exponentiation-operator" "^7.14.5" + "@babel/plugin-transform-for-of" "^7.14.5" + "@babel/plugin-transform-function-name" "^7.14.5" + "@babel/plugin-transform-literals" "^7.14.5" + "@babel/plugin-transform-member-expression-literals" "^7.14.5" + "@babel/plugin-transform-modules-amd" "^7.14.5" + "@babel/plugin-transform-modules-commonjs" "^7.15.0" + "@babel/plugin-transform-modules-systemjs" "^7.14.5" + "@babel/plugin-transform-modules-umd" "^7.14.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9" + "@babel/plugin-transform-new-target" "^7.14.5" + "@babel/plugin-transform-object-super" "^7.14.5" + "@babel/plugin-transform-parameters" "^7.14.5" + "@babel/plugin-transform-property-literals" "^7.14.5" + "@babel/plugin-transform-regenerator" "^7.14.5" + "@babel/plugin-transform-reserved-words" "^7.14.5" + "@babel/plugin-transform-shorthand-properties" "^7.14.5" + "@babel/plugin-transform-spread" "^7.14.6" + "@babel/plugin-transform-sticky-regex" "^7.14.5" + "@babel/plugin-transform-template-literals" "^7.14.5" + "@babel/plugin-transform-typeof-symbol" "^7.14.5" + "@babel/plugin-transform-unicode-escapes" "^7.14.5" + "@babel/plugin-transform-unicode-regex" "^7.14.5" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.15.0" + babel-plugin-polyfill-corejs2 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.2" + babel-plugin-polyfill-regenerator "^0.2.2" + core-js-compat "^3.16.0" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime-corejs3@^7.10.2": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.9.tgz#fb21b1cf11650dcb8fcf4de2e6b3b8cf411da3f3" + integrity sha512-64RiH2ON4/y8qYtoa8rUiyam/tUVyGqRyNYhe+vCRGmjnV4bUlZvY+mwd0RrmLoCpJpdq3RsrNqKb7SJdw/4kw== + dependencies: + core-js-pure "^3.16.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@7.14.6": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" + integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.8.4": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.8.tgz#7119a56f421018852694290b9f9148097391b446" + integrity sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.10.3": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b" + integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@7.14.5", "@babel/template@^7.14.5", "@babel/template@^7.3.3", "@babel/template@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" + integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.14.8", "@babel/traverse@^7.15.0", "@babel/traverse@^7.7.2", "@babel/traverse@^7.8.3": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98" + integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.0" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/parser" "^7.15.0" + "@babel/types" "^7.15.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.15.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd" + integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ== + dependencies: + "@babel/helper-validator-identifier" "^7.14.9" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== + +"@ctrl/tinycolor@^3.3.1": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz#c3c5ae543c897caa9c2a68630bed355be5f9990f" + integrity sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ== + +"@cypress/request@^2.88.5": + version "2.88.5" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.5.tgz#8d7ecd17b53a849cfd5ab06d5abe7d84976375d7" + integrity sha512-TzEC1XMi1hJkywWpRfD2clreTa/Z+lOrXDCxxBTBPEcY5azdPi56A6Xw+O4tWJnaJH3iIE7G5aDXZC6JgRZLcA== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +"@cypress/webpack-preprocessor@4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-4.1.5.tgz#b47d515d2540af977ee8b69d7c4eed64e3027668" + integrity sha512-B4miSaS3VCMVSlfuvbWCjytTywdnquRsF1tQ3quC7TGUzEXnQZ4+o8WUKibjMozrOomALkUdMxqOJ1ib5oFkKw== + dependencies: + bluebird "3.7.1" + debug "4.1.1" + optionalDependencies: + "@babel/core" "^7.0.1" + "@babel/preset-env" "^7.0.0" + babel-loader "^8.0.2" + +"@cypress/xvfb@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + +"@discoveryjs/json-ext@0.5.3": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" + integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== + +"@eslint/eslintrc@^0.4.0": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@evocateur/libnpmaccess@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" + integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + +"@evocateur/libnpmpublish@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" + integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + semver "^5.5.1" + ssri "^6.0.1" + +"@evocateur/npm-registry-fetch@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" + integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.1.2" + +"@evocateur/pacote@^9.6.3": + version "9.6.5" + resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" + integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + bluebird "^3.5.3" + cacache "^12.0.3" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.5.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.4.4" + npm-pick-manifest "^3.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.3" + safe-buffer "^5.2.0" + semver "^5.7.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + +"@fortawesome/fontawesome-free@^5.14.0": + version "5.15.4" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" + integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.0.6.tgz#3eb72ea80897495c3d73dd97aab7f26770e2260f" + integrity sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg== + dependencies: + "@jest/types" "^27.0.6" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.0.6" + jest-util "^27.0.6" + slash "^3.0.0" + +"@jest/core@^27.0.3", "@jest/core@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.0.6.tgz#c5f642727a0b3bf0f37c4b46c675372d0978d4a1" + integrity sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow== + dependencies: + "@jest/console" "^27.0.6" + "@jest/reporters" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^27.0.6" + jest-config "^27.0.6" + jest-haste-map "^27.0.6" + jest-message-util "^27.0.6" + jest-regex-util "^27.0.6" + jest-resolve "^27.0.6" + jest-resolve-dependencies "^27.0.6" + jest-runner "^27.0.6" + jest-runtime "^27.0.6" + jest-snapshot "^27.0.6" + jest-util "^27.0.6" + jest-validate "^27.0.6" + jest-watcher "^27.0.6" + micromatch "^4.0.4" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.6.tgz#ee293fe996db01d7d663b8108fa0e1ff436219d2" + integrity sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg== + dependencies: + "@jest/fake-timers" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + jest-mock "^27.0.6" + +"@jest/fake-timers@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.6.tgz#cbad52f3fe6abe30e7acb8cd5fa3466b9588e3df" + integrity sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ== + dependencies: + "@jest/types" "^27.0.6" + "@sinonjs/fake-timers" "^7.0.2" + "@types/node" "*" + jest-message-util "^27.0.6" + jest-mock "^27.0.6" + jest-util "^27.0.6" + +"@jest/globals@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.6.tgz#48e3903f99a4650673d8657334d13c9caf0e8f82" + integrity sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw== + dependencies: + "@jest/environment" "^27.0.6" + "@jest/types" "^27.0.6" + expect "^27.0.6" + +"@jest/reporters@27.0.6", "@jest/reporters@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.6.tgz#91e7f2d98c002ad5df94d5b5167c1eb0b9fd5b00" + integrity sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^27.0.6" + jest-resolve "^27.0.6" + jest-util "^27.0.6" + jest-worker "^27.0.6" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.0.0" + +"@jest/source-map@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.6.tgz#be9e9b93565d49b0548b86e232092491fb60551f" + integrity sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@27.0.6", "@jest/test-result@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.6.tgz#3fa42015a14e4fdede6acd042ce98c7f36627051" + integrity sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w== + dependencies: + "@jest/console" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz#80a913ed7a1130545b1cd777ff2735dd3af5d34b" + integrity sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA== + dependencies: + "@jest/test-result" "^27.0.6" + graceful-fs "^4.2.4" + jest-haste-map "^27.0.6" + jest-runtime "^27.0.6" + +"@jest/transform@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.6.tgz#189ad7107413208f7600f4719f81dd2f7278cc95" + integrity sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^27.0.6" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^27.0.6" + jest-regex-util "^27.0.6" + jest-util "^27.0.6" + micromatch "^4.0.4" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@jest/types@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.6.tgz#9a992bc517e0c49f035938b8549719c2de40706b" + integrity sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + +"@jsdevtools/coverage-istanbul-loader@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz#2a4bc65d0271df8d4435982db4af35d81754ee26" + integrity sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA== + dependencies: + convert-source-map "^1.7.0" + istanbul-lib-instrument "^4.0.3" + loader-utils "^2.0.0" + merge-source-map "^1.1.0" + schema-utils "^2.7.0" + +"@lerna/add@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.21.0.tgz#27007bde71cc7b0a2969ab3c2f0ae41578b4577b" + integrity sha512-vhUXXF6SpufBE1EkNEXwz1VLW03f177G9uMOFMQkp6OJ30/PWg4Ekifuz9/3YfgB2/GH8Tu4Lk3O51P2Hskg/A== + dependencies: + "@evocateur/pacote" "^9.6.3" + "@lerna/bootstrap" "3.21.0" + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + npm-package-arg "^6.1.0" + p-map "^2.1.0" + semver "^6.2.0" + +"@lerna/bootstrap@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.21.0.tgz#bcd1b651be5b0970b20d8fae04c864548123aed6" + integrity sha512-mtNHlXpmvJn6JTu0KcuTTPl2jLsDNud0QacV/h++qsaKbhAaJr/FElNZ5s7MwZFUM3XaDmvWzHKaszeBMHIbBw== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/has-npm-version" "3.16.5" + "@lerna/npm-install" "3.16.5" + "@lerna/package-graph" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.16.5" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/symlink-binary" "3.17.0" + "@lerna/symlink-dependencies" "3.17.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + get-port "^4.2.0" + multimatch "^3.0.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^2.1.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + read-package-tree "^5.1.6" + semver "^6.2.0" + +"@lerna/changed@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.21.0.tgz#108e15f679bfe077af500f58248c634f1044ea0b" + integrity sha512-hzqoyf8MSHVjZp0gfJ7G8jaz+++mgXYiNs9iViQGA8JlN/dnWLI5sWDptEH3/B30Izo+fdVz0S0s7ydVE3pWIw== + dependencies: + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.21.0" + "@lerna/listable" "3.18.5" + "@lerna/output" "3.13.0" + +"@lerna/check-working-tree@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" + integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ== + dependencies: + "@lerna/collect-uncommitted" "3.16.5" + "@lerna/describe-ref" "3.16.5" + "@lerna/validation-error" "3.13.0" + +"@lerna/child-process@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" + integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg== + dependencies: + chalk "^2.3.1" + execa "^1.0.0" + strong-log-transformer "^2.0.0" + +"@lerna/clean@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.21.0.tgz#c0b46b5300cc3dae2cda3bec14b803082da3856d" + integrity sha512-b/L9l+MDgE/7oGbrav6rG8RTQvRiZLO1zTcG17zgJAAuhlsPxJExMlh2DFwJEVi2les70vMhHfST3Ue1IMMjpg== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.16.5" + p-map "^2.1.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + +"@lerna/cli@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242" + integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA== + dependencies: + "@lerna/global-options" "3.13.0" + dedent "^0.7.0" + npmlog "^4.1.2" + yargs "^14.2.2" + +"@lerna/collect-uncommitted@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" + integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg== + dependencies: + "@lerna/child-process" "3.16.5" + chalk "^2.3.1" + figgy-pudding "^3.5.1" + npmlog "^4.1.2" + +"@lerna/collect-updates@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1" + integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/describe-ref" "3.16.5" + minimatch "^3.0.4" + npmlog "^4.1.2" + slash "^2.0.0" + +"@lerna/command@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.21.0.tgz#9a2383759dc7b700dacfa8a22b2f3a6e190121f7" + integrity sha512-T2bu6R8R3KkH5YoCKdutKv123iUgUbW8efVjdGCDnCMthAQzoentOJfDeodBwn0P2OqCl3ohsiNVtSn9h78fyQ== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/package-graph" "3.18.5" + "@lerna/project" "3.21.0" + "@lerna/validation-error" "3.13.0" + "@lerna/write-log-file" "3.13.0" + clone-deep "^4.0.1" + dedent "^0.7.0" + execa "^1.0.0" + is-ci "^2.0.0" + npmlog "^4.1.2" + +"@lerna/conventional-commits@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.22.0.tgz#2798f4881ee2ef457bdae027ab7d0bf0af6f1e09" + integrity sha512-z4ZZk1e8Mhz7+IS8NxHr64wyklHctCJyWpJKEZZPJiLFJ8yKto/x38O80R10pIzC0rr8Sy/OsjSH4bl0TbbgqA== + dependencies: + "@lerna/validation-error" "3.13.0" + conventional-changelog-angular "^5.0.3" + conventional-changelog-core "^3.1.6" + conventional-recommended-bump "^5.0.0" + fs-extra "^8.1.0" + get-stream "^4.0.0" + lodash.template "^4.5.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + pify "^4.0.1" + semver "^6.2.0" + +"@lerna/create-symlink@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" + integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== + dependencies: + "@zkochan/cmd-shim" "^3.1.0" + fs-extra "^8.1.0" + npmlog "^4.1.2" + +"@lerna/create@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.22.0.tgz#d6bbd037c3dc5b425fe5f6d1b817057c278f7619" + integrity sha512-MdiQQzCcB4E9fBF1TyMOaAEz9lUjIHp1Ju9H7f3lXze5JK6Fl5NYkouAvsLgY6YSIhXMY8AHW2zzXeBDY4yWkw== + dependencies: + "@evocateur/pacote" "^9.6.3" + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/validation-error" "3.13.0" + camelcase "^5.0.0" + dedent "^0.7.0" + fs-extra "^8.1.0" + globby "^9.2.0" + init-package-json "^1.10.3" + npm-package-arg "^6.1.0" + p-reduce "^1.0.0" + pify "^4.0.1" + semver "^6.2.0" + slash "^2.0.0" + validate-npm-package-license "^3.0.3" + validate-npm-package-name "^3.0.0" + whatwg-url "^7.0.0" + +"@lerna/describe-ref@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" + integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw== + dependencies: + "@lerna/child-process" "3.16.5" + npmlog "^4.1.2" + +"@lerna/diff@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.21.0.tgz#e6df0d8b9916167ff5a49fcb02ac06424280a68d" + integrity sha512-5viTR33QV3S7O+bjruo1SaR40m7F2aUHJaDAC7fL9Ca6xji+aw1KFkpCtVlISS0G8vikUREGMJh+c/VMSc8Usw== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + "@lerna/validation-error" "3.13.0" + npmlog "^4.1.2" + +"@lerna/exec@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.21.0.tgz#17f07533893cb918a17b41bcc566dc437016db26" + integrity sha512-iLvDBrIE6rpdd4GIKTY9mkXyhwsJ2RvQdB9ZU+/NhR3okXfqKc6py/24tV111jqpXTtZUW6HNydT4dMao2hi1Q== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/profiler" "3.20.0" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + p-map "^2.1.0" + +"@lerna/filter-options@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b" + integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g== + dependencies: + "@lerna/collect-updates" "3.20.0" + "@lerna/filter-packages" "3.18.0" + dedent "^0.7.0" + figgy-pudding "^3.5.1" + npmlog "^4.1.2" + +"@lerna/filter-packages@3.18.0": + version "3.18.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70" + integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ== + dependencies: + "@lerna/validation-error" "3.13.0" + multimatch "^3.0.0" + npmlog "^4.1.2" + +"@lerna/get-npm-exec-opts@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" + integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== + dependencies: + npmlog "^4.1.2" + +"@lerna/get-packed@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" + integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== + dependencies: + fs-extra "^8.1.0" + ssri "^6.0.1" + tar "^4.4.8" + +"@lerna/github-client@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.22.0.tgz#5d816aa4f76747ed736ae64ff962b8f15c354d95" + integrity sha512-O/GwPW+Gzr3Eb5bk+nTzTJ3uv+jh5jGho9BOqKlajXaOkMYGBELEAqV5+uARNGWZFvYAiF4PgqHb6aCUu7XdXg== + dependencies: + "@lerna/child-process" "3.16.5" + "@octokit/plugin-enterprise-rest" "^6.0.1" + "@octokit/rest" "^16.28.4" + git-url-parse "^11.1.2" + npmlog "^4.1.2" + +"@lerna/gitlab-client@3.15.0": + version "3.15.0" + resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" + integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== + dependencies: + node-fetch "^2.5.0" + npmlog "^4.1.2" + whatwg-url "^7.0.0" + +"@lerna/global-options@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" + integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== + +"@lerna/has-npm-version@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" + integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q== + dependencies: + "@lerna/child-process" "3.16.5" + semver "^6.2.0" + +"@lerna/import@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.22.0.tgz#1a5f0394f38e23c4f642a123e5e1517e70d068d2" + integrity sha512-uWOlexasM5XR6tXi4YehODtH9Y3OZrFht3mGUFFT3OIl2s+V85xIGFfqFGMTipMPAGb2oF1UBLL48kR43hRsOg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + fs-extra "^8.1.0" + p-map-series "^1.0.0" + +"@lerna/info@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.21.0.tgz#76696b676fdb0f35d48c83c63c1e32bb5e37814f" + integrity sha512-0XDqGYVBgWxUquFaIptW2bYSIu6jOs1BtkvRTWDDhw4zyEdp6q4eaMvqdSap1CG+7wM5jeLCi6z94wS0AuiuwA== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/output" "3.13.0" + envinfo "^7.3.1" + +"@lerna/init@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.21.0.tgz#1e810934dc8bf4e5386c031041881d3b4096aa5c" + integrity sha512-6CM0z+EFUkFfurwdJCR+LQQF6MqHbYDCBPyhu/d086LRf58GtYZYj49J8mKG9ktayp/TOIxL/pKKjgLD8QBPOg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + fs-extra "^8.1.0" + p-map "^2.1.0" + write-json-file "^3.2.0" + +"@lerna/link@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.21.0.tgz#8be68ff0ccee104b174b5bbd606302c2f06e9d9b" + integrity sha512-tGu9GxrX7Ivs+Wl3w1+jrLi1nQ36kNI32dcOssij6bg0oZ2M2MDEFI9UF2gmoypTaN9uO5TSsjCFS7aR79HbdQ== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/package-graph" "3.18.5" + "@lerna/symlink-dependencies" "3.17.0" + p-map "^2.1.0" + slash "^2.0.0" + +"@lerna/list@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.21.0.tgz#42f76fafa56dea13b691ec8cab13832691d61da2" + integrity sha512-KehRjE83B1VaAbRRkRy6jLX1Cin8ltsrQ7FHf2bhwhRHK0S54YuA6LOoBnY/NtA8bHDX/Z+G5sMY78X30NS9tg== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/listable" "3.18.5" + "@lerna/output" "3.13.0" + +"@lerna/listable@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a" + integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg== + dependencies: + "@lerna/query-graph" "3.18.5" + chalk "^2.3.1" + columnify "^1.5.4" + +"@lerna/log-packed@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" + integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== + dependencies: + byte-size "^5.0.1" + columnify "^1.5.4" + has-unicode "^2.0.1" + npmlog "^4.1.2" + +"@lerna/npm-conf@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" + integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== + dependencies: + config-chain "^1.1.11" + pify "^4.0.1" + +"@lerna/npm-dist-tag@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55" + integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + "@lerna/otplease" "3.18.5" + figgy-pudding "^3.5.1" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + +"@lerna/npm-install@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" + integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/get-npm-exec-opts" "3.13.0" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + signal-exit "^3.0.2" + write-pkg "^3.1.0" + +"@lerna/npm-publish@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af" + integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg== + dependencies: + "@evocateur/libnpmpublish" "^1.2.2" + "@lerna/otplease" "3.18.5" + "@lerna/run-lifecycle" "3.16.2" + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + pify "^4.0.1" + read-package-json "^2.0.13" + +"@lerna/npm-run-script@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" + integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/get-npm-exec-opts" "3.13.0" + npmlog "^4.1.2" + +"@lerna/otplease@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231" + integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog== + dependencies: + "@lerna/prompt" "3.18.5" + figgy-pudding "^3.5.1" + +"@lerna/output@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" + integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== + dependencies: + npmlog "^4.1.2" + +"@lerna/pack-directory@3.16.4": + version "3.16.4" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" + integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== + dependencies: + "@lerna/get-packed" "3.16.0" + "@lerna/package" "3.16.0" + "@lerna/run-lifecycle" "3.16.2" + figgy-pudding "^3.5.1" + npm-packlist "^1.4.4" + npmlog "^4.1.2" + tar "^4.4.10" + temp-write "^3.4.0" + +"@lerna/package-graph@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b" + integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA== + dependencies: + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/validation-error" "3.13.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + semver "^6.2.0" + +"@lerna/package@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" + integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== + dependencies: + load-json-file "^5.3.0" + npm-package-arg "^6.1.0" + write-pkg "^3.1.0" + +"@lerna/prerelease-id-from-version@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" + integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== + dependencies: + semver "^6.2.0" + +"@lerna/profiler@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051" + integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg== + dependencies: + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npmlog "^4.1.2" + upath "^1.2.0" + +"@lerna/project@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.21.0.tgz#5d784d2d10c561a00f20320bcdb040997c10502d" + integrity sha512-xT1mrpET2BF11CY32uypV2GPtPVm6Hgtha7D81GQP9iAitk9EccrdNjYGt5UBYASl4CIDXBRxwmTTVGfrCx82A== + dependencies: + "@lerna/package" "3.16.0" + "@lerna/validation-error" "3.13.0" + cosmiconfig "^5.1.0" + dedent "^0.7.0" + dot-prop "^4.2.0" + glob-parent "^5.0.0" + globby "^9.2.0" + load-json-file "^5.3.0" + npmlog "^4.1.2" + p-map "^2.1.0" + resolve-from "^4.0.0" + write-json-file "^3.2.0" + +"@lerna/prompt@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1" + integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ== + dependencies: + inquirer "^6.2.0" + npmlog "^4.1.2" + +"@lerna/publish@3.22.1": + version "3.22.1" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.22.1.tgz#b4f7ce3fba1e9afb28be4a1f3d88222269ba9519" + integrity sha512-PG9CM9HUYDreb1FbJwFg90TCBQooGjj+n/pb3gw/eH5mEDq0p8wKdLFe0qkiqUkm/Ub5C8DbVFertIo0Vd0zcw== + dependencies: + "@evocateur/libnpmaccess" "^3.1.2" + "@evocateur/npm-registry-fetch" "^4.0.0" + "@evocateur/pacote" "^9.6.3" + "@lerna/check-working-tree" "3.16.5" + "@lerna/child-process" "3.16.5" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.21.0" + "@lerna/describe-ref" "3.16.5" + "@lerna/log-packed" "3.16.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/npm-dist-tag" "3.18.5" + "@lerna/npm-publish" "3.18.5" + "@lerna/otplease" "3.18.5" + "@lerna/output" "3.13.0" + "@lerna/pack-directory" "3.16.4" + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + "@lerna/version" "3.22.1" + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^2.1.0" + p-pipe "^1.2.0" + semver "^6.2.0" + +"@lerna/pulse-till-done@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" + integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== + dependencies: + npmlog "^4.1.2" + +"@lerna/query-graph@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86" + integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA== + dependencies: + "@lerna/package-graph" "3.18.5" + figgy-pudding "^3.5.1" + +"@lerna/resolve-symlink@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" + integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== + dependencies: + fs-extra "^8.1.0" + npmlog "^4.1.2" + read-cmd-shim "^1.0.1" + +"@lerna/rimraf-dir@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" + integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA== + dependencies: + "@lerna/child-process" "3.16.5" + npmlog "^4.1.2" + path-exists "^3.0.0" + rimraf "^2.6.2" + +"@lerna/run-lifecycle@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" + integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== + dependencies: + "@lerna/npm-conf" "3.16.0" + figgy-pudding "^3.5.1" + npm-lifecycle "^3.1.2" + npmlog "^4.1.2" + +"@lerna/run-topologically@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3" + integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg== + dependencies: + "@lerna/query-graph" "3.18.5" + figgy-pudding "^3.5.1" + p-queue "^4.0.0" + +"@lerna/run@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.21.0.tgz#2a35ec84979e4d6e42474fe148d32e5de1cac891" + integrity sha512-fJF68rT3veh+hkToFsBmUJ9MHc9yGXA7LSDvhziAojzOb0AI/jBDp6cEcDQyJ7dbnplba2Lj02IH61QUf9oW0Q== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/npm-run-script" "3.16.5" + "@lerna/output" "3.13.0" + "@lerna/profiler" "3.20.0" + "@lerna/run-topologically" "3.18.5" + "@lerna/timer" "3.13.0" + "@lerna/validation-error" "3.13.0" + p-map "^2.1.0" + +"@lerna/symlink-binary@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" + integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ== + dependencies: + "@lerna/create-symlink" "3.16.2" + "@lerna/package" "3.16.0" + fs-extra "^8.1.0" + p-map "^2.1.0" + +"@lerna/symlink-dependencies@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" + integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q== + dependencies: + "@lerna/create-symlink" "3.16.2" + "@lerna/resolve-symlink" "3.16.0" + "@lerna/symlink-binary" "3.17.0" + fs-extra "^8.1.0" + p-finally "^1.0.0" + p-map "^2.1.0" + p-map-series "^1.0.0" + +"@lerna/timer@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" + integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== + +"@lerna/validation-error@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" + integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== + dependencies: + npmlog "^4.1.2" + +"@lerna/version@3.22.1": + version "3.22.1" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.22.1.tgz#9805a9247a47ee62d6b81bd9fa5fb728b24b59e2" + integrity sha512-PSGt/K1hVqreAFoi3zjD0VEDupQ2WZVlVIwesrE5GbrL2BjXowjCsTDPqblahDUPy0hp6h7E2kG855yLTp62+g== + dependencies: + "@lerna/check-working-tree" "3.16.5" + "@lerna/child-process" "3.16.5" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.21.0" + "@lerna/conventional-commits" "3.22.0" + "@lerna/github-client" "3.22.0" + "@lerna/gitlab-client" "3.15.0" + "@lerna/output" "3.13.0" + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/prompt" "3.18.5" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + chalk "^2.3.1" + dedent "^0.7.0" + load-json-file "^5.3.0" + minimatch "^3.0.4" + npmlog "^4.1.2" + p-map "^2.1.0" + p-pipe "^1.2.0" + p-reduce "^1.0.0" + p-waterfall "^1.0.0" + semver "^6.2.0" + slash "^2.0.0" + temp-write "^3.4.0" + write-json-file "^3.2.0" + +"@lerna/write-log-file@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" + integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== + dependencies: + npmlog "^4.1.2" + write-file-atomic "^2.3.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@ng-bootstrap/ng-bootstrap@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-7.0.0.tgz#3bfa62eb52fdb891b1ce693ea11c39127e2d1ab7" + integrity sha512-SxUaptGWJmCxM0d2Zy1mx7K7p/YBwGZ69NmmBQVY4BE6p5av0hWrVmv9rzzfBz0rhxU7RPZLor2Jpaoq8Xyl4w== + dependencies: + tslib "^2.0.0" + +"@ngneat/spectator@^8.0.3": + version "8.0.3" + resolved "https://registry.yarnpkg.com/@ngneat/spectator/-/spectator-8.0.3.tgz#fe6c4d8f6fb9a9aa2017e85e54ae3ef413e9478e" + integrity sha512-9dgsvbgWu9T43yDSNWnb7UshjirHcF+l/02RV8IcX2Kcthqe0n1cz78EmOv2uN7ZZS2xtmYJhZzdysQ8u5mpog== + dependencies: + "@testing-library/dom" "7.26.5" + jquery "3.6.0" + replace-in-file "6.2.0" + tslib "^2.1.0" + +"@ngtools/webpack@12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-12.1.4.tgz#9f7ac5e26b366831b50558bf71dd6e1689743def" + integrity sha512-hXc8dTnRfDB7o1Pd7a07aw0rjGmVLXU28+cTHQJliosgD3obcjfZ4QPA0k97vlQMtqVJawuShRfyiUKrpsJf8Q== + dependencies: + enhanced-resolve "5.8.2" + +"@ngx-validate/core@^0.0.13": + version "0.0.13" + resolved "https://registry.yarnpkg.com/@ngx-validate/core/-/core-0.0.13.tgz#954c6d247df8107668f23a39db24ca45c274f3d9" + integrity sha512-H0RohQz1AAx8J5KlbP0+hcApukA5uVxWg2eQve5YuKYpaD4sC8T613ZzoJEFVua5AfKbWqMXm4hx8mG3ISm7Ig== + dependencies: + tslib "^1.9.0" + +"@ngx-validate/core@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@ngx-validate/core/-/core-0.1.1.tgz#bb7615e4fcca86fe21319b99a3c2c0cb8dc31285" + integrity sha512-632XUkV/QEIwAawESvFs7mGonDJZao/J/1kb6UgBSF3CYe9ub6alLf1T/5HMmyHpmBujNaFZndJpd28pdvPptA== + dependencies: + tslib "^1.9.0" + +"@ngxs/store@^3.7.0": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@ngxs/store/-/store-3.7.2.tgz#1088b0669adc382d36ca7ae8438c603e55879b42" + integrity sha512-1cnAjHOGCovfvhjtcAWBajrMXos97Un3c8ekKoS8FIHnq3aQOzY/ePspDRNi9kTcuBJ/r/xl097JC1ssEuNbyg== + dependencies: + tslib "^1.9.0" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@npmcli/git@^2.0.1": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.1.0.tgz#2fbd77e147530247d37f325930d457b3ebe894f6" + integrity sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw== + dependencies: + "@npmcli/promise-spawn" "^1.3.2" + lru-cache "^6.0.0" + mkdirp "^1.0.4" + npm-pick-manifest "^6.1.1" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^2.0.2" + +"@npmcli/installed-package-contents@^1.0.6": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/node-gyp@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz#3cdc1f30e9736dbc417373ed803b42b1a0a29ede" + integrity sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg== + +"@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" + integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/run-script@^1.8.2": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.5.tgz#f250a0c5e1a08a792d775a315d0ff42fc3a51e1d" + integrity sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A== + dependencies: + "@npmcli/node-gyp" "^1.0.2" + "@npmcli/promise-spawn" "^1.3.2" + infer-owner "^1.0.4" + node-gyp "^7.1.0" + read-package-json-fast "^2.0.1" + +"@nrwl/angular@12.6.5": + version "12.6.5" + resolved "https://registry.yarnpkg.com/@nrwl/angular/-/angular-12.6.5.tgz#a30b7281e71b2fae8a05b44f26f20d62b4a2c88f" + integrity sha512-bBpTwBrcippIPRIlhEyPaCgLIwpe16dZS9mQjPNiA15u/zqexb4a9rGPm2swRhvQvu3Ad3YMMd0P3hrEGzNszw== + dependencies: + "@angular-devkit/schematics" "~12.1.0" + "@nrwl/cypress" "12.6.5" + "@nrwl/devkit" "12.6.5" + "@nrwl/jest" "12.6.5" + "@nrwl/linter" "12.6.5" + "@nrwl/storybook" "12.6.5" + "@phenomnomnominal/tsquery" "4.1.1" + "@schematics/angular" "~12.1.0" + ignore "^5.0.4" + jasmine-marbles "~0.8.3" + rxjs-for-await "0.0.2" + tslib "^2.2.0" + webpack-merge "5.7.3" + +"@nrwl/cli@12.6.5": + version "12.6.5" + resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-12.6.5.tgz#368de95f3252ab9b459e98ab9cddb751fe7ef240" + integrity sha512-LGZcBnnbvj+Qma5kTxQK/baAsGCwHQCkG+e14nEhfhitEYyuK7Afe8Ddp6SqMhiRTVw+navtkECZNcke7+APrw== + dependencies: + "@nrwl/tao" "12.6.5" + chalk "4.1.0" + v8-compile-cache "2.3.0" + yargs "15.4.1" + yargs-parser "20.0.0" + +"@nrwl/cypress@12.6.5": + version "12.6.5" + resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-12.6.5.tgz#018b73b9dcf1fa11c9dab6c8c28c35427e98cc3a" + integrity sha512-DCHJ3+0zUFEjmzuR8nldAv4ZdiL6pAPSlAgiZPKaf//Jn9ddi4XEGGEmTFsIxrnOrx2mROTQCmWCjESMVDh0uQ== + dependencies: + "@cypress/webpack-preprocessor" "4.1.5" + "@nrwl/devkit" "12.6.5" + "@nrwl/linter" "12.6.5" + "@nrwl/workspace" "12.6.5" + chalk "4.1.0" + fork-ts-checker-webpack-plugin "6.2.10" + rxjs "^6.5.4" + ts-loader "5.4.5" + tsconfig-paths-webpack-plugin "3.4.1" + tslib "^2.0.0" + webpack "4.46.0" + webpack-node-externals "1.7.2" + yargs-parser "20.0.0" + +"@nrwl/devkit@12.6.5": + version "12.6.5" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-12.6.5.tgz#fcf633a2220fea37d4648b1ee3dcf5b52adb0630" + integrity sha512-gISNyT67OKwx+e3nZufE6vgATZTIFYLpQXqDkrXvBvgA8PXHUFtYiRKhs3MOoBqFAVOkb+jQuxWlLqm5hJGGSg== + dependencies: + "@nrwl/tao" "12.6.5" + ejs "^3.1.5" + ignore "^5.0.4" + rxjs "^6.5.4" + semver "7.3.4" + tslib "^2.0.0" + +"@nrwl/eslint-plugin-nx@12.6.5": + version "12.6.5" + resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-12.6.5.tgz#5e2dd8e6a0387c4823e21118cb26f6ac1bd68c76" + integrity sha512-DUoR02Ei5dWVJd/JECCEzJf0xx2Zmgmxh1CBycywPg0rNCcEvIS2NHuXYqUpgIhOoJY1DAC/7uKoas94AGcFVw== + dependencies: + "@nrwl/devkit" "12.6.5" + "@nrwl/workspace" "12.6.5" + "@typescript-eslint/experimental-utils" "~4.28.3" + confusing-browser-globals "^1.0.9" + +"@nrwl/jest@12.6.5": + version "12.6.5" + resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-12.6.5.tgz#1e6d0cc5580233be376d470eadbd67ecadae4d24" + integrity sha512-YJSDavHLkna+/8YZHrRD52P57kkA2aX+1uBbk0eeV6aZ5RAsp0ZVZrfINZOtSob51xZHyMTtdn+Zj6hsVlI4Kw== + dependencies: + "@jest/reporters" "27.0.6" + "@jest/test-result" "27.0.6" + "@nrwl/devkit" "12.6.5" + chalk "4.1.0" + identity-obj-proxy "3.0.0" + jest-config "27.0.6" + jest-resolve "27.0.6" + jest-util "27.0.6" + rxjs "^6.5.4" + tslib "^2.0.0" + +"@nrwl/linter@12.6.5": + version "12.6.5" + resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-12.6.5.tgz#339c89707e578c48e79cd43e8c1d43f8ecbc7217" + integrity sha512-O4mhkZzaxUyXs3CGnmEN+UuvL2gCEn6V2X1laUIP13hZ7DRkCSPwkMcS9OSHTsCS/CLnLsRg6pi/PxEqhV7kCw== + dependencies: + "@nrwl/devkit" "12.6.5" + glob "7.1.4" + minimatch "3.0.4" + tmp "~0.2.1" + tslib "^2.0.0" + +"@nrwl/storybook@12.6.5": + version "12.6.5" + resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-12.6.5.tgz#d63722b8cdf782e46ed9f8f47c5481c120ffaf91" + integrity sha512-gdOO0XDtQ5XiYFuKscjMdaJvgZuYps18HLk5L8YJZeERDMUwai031Vi1doPQSE2d7t435A7V18FnzlyKAJO6bA== + dependencies: + "@nrwl/cypress" "12.6.5" + "@nrwl/devkit" "12.6.5" + "@nrwl/linter" "12.6.5" + "@nrwl/workspace" "12.6.5" + core-js "^3.6.5" + semver "7.3.4" + ts-loader "5.4.5" + tsconfig-paths-webpack-plugin "3.4.1" + +"@nrwl/tao@12.6.5": + version "12.6.5" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-12.6.5.tgz#81a8420c3b76f4c09029ef2dade9020a024798f3" + integrity sha512-YnWYDmMjMu+IdlB1ab+eEUoqKiFScmQIYzQe62KFcjfThajbO66BAijg6CW8E6I+bEbpS6J6uwqoZex2Povq3Q== + dependencies: + chalk "4.1.0" + enquirer "~2.3.6" + fs-extra "^9.1.0" + jsonc-parser "3.0.0" + rxjs "^6.5.4" + rxjs-for-await "0.0.2" + semver "7.3.4" + tmp "~0.2.1" + tslib "^2.0.0" + yargs-parser "20.0.0" + +"@nrwl/workspace@12.6.5": + version "12.6.5" + resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-12.6.5.tgz#d3b5348cc8048dec1e212473d26f6512268b10dc" + integrity sha512-VFeViV9p36sYmAiAjX+ZHLlWDOSr+cACa+LKmXGV5Z60A4epZlJcheFcVS0daZEgia/VAFJHDtIdVIsy1pRoMQ== + dependencies: + "@nrwl/cli" "12.6.5" + "@nrwl/devkit" "12.6.5" + "@nrwl/jest" "12.6.5" + "@nrwl/linter" "12.6.5" + chalk "4.1.0" + chokidar "^3.5.1" + cosmiconfig "^4.0.0" + dotenv "~10.0.0" + enquirer "~2.3.6" + flat "^5.0.2" + fs-extra "^9.1.0" + glob "7.1.4" + ignore "^5.0.4" + minimatch "3.0.4" + npm-run-all "^4.1.5" + open "^7.4.2" + rxjs "^6.5.4" + semver "7.3.4" + tmp "~0.2.1" + tslib "^2.0.0" + yargs "15.4.1" + yargs-parser "20.0.0" + +"@octokit/auth-token@^2.4.0": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3" + integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA== + dependencies: + "@octokit/types" "^6.0.3" + +"@octokit/endpoint@^6.0.1": + version "6.0.12" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" + integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== + dependencies: + "@octokit/types" "^6.0.3" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^9.5.0": + version "9.6.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-9.6.0.tgz#0260a84f5c61c01755402ab5ac5b1ab46e7c0730" + integrity sha512-L+8x7DpcNtHkMbTxxCxg3cozvHUNP46rOIzFwoMs0piWwQzAGNXqlIQO2GLvnKTWLUh99DkY+UyHVrP4jXlowg== + +"@octokit/plugin-enterprise-rest@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" + integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== + dependencies: + "@octokit/types" "^2.0.1" + +"@octokit/plugin-request-log@^1.0.0": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" + integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== + dependencies: + "@octokit/types" "^2.0.1" + deprecation "^2.3.1" + +"@octokit/request-error@^1.0.2": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" + integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== + dependencies: + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request-error@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" + integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== + dependencies: + "@octokit/types" "^6.0.3" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.2.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.0.tgz#6084861b6e4fa21dc40c8e2a739ec5eff597e672" + integrity sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.1.0" + "@octokit/types" "^6.16.1" + is-plain-object "^5.0.0" + node-fetch "^2.6.1" + universal-user-agent "^6.0.0" + +"@octokit/rest@^16.28.4": + version "16.43.2" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" + integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ== + dependencies: + "@octokit/auth-token" "^2.4.0" + "@octokit/plugin-paginate-rest" "^1.1.1" + "@octokit/plugin-request-log" "^1.0.0" + "@octokit/plugin-rest-endpoint-methods" "2.4.0" + "@octokit/request" "^5.2.0" + "@octokit/request-error" "^1.0.2" + atob-lite "^2.0.0" + before-after-hook "^2.0.0" + btoa-lite "^1.0.0" + deprecation "^2.0.0" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + lodash.uniq "^4.5.0" + octokit-pagination-methods "^1.1.0" + once "^1.4.0" + universal-user-agent "^4.0.0" + +"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": + version "2.16.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" + integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q== + dependencies: + "@types/node" ">= 8" + +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1": + version "6.25.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.25.0.tgz#c8e37e69dbe7ce55ed98ee63f75054e7e808bf1a" + integrity sha512-bNvyQKfngvAd/08COlYIN54nRgxskmejgywodizQNyiKoXmWRAjKup2/LYwm+T9V0gsKH6tuld1gM0PzmOiB4Q== + dependencies: + "@octokit/openapi-types" "^9.5.0" + +"@phenomnomnominal/tsquery@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz#42971b83590e9d853d024ddb04a18085a36518df" + integrity sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ== + dependencies: + esquery "^1.0.1" + +"@rollup/plugin-commonjs@^20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz#3246872dcbcb18a54aaa6277a8c7d7f1b155b745" + integrity sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + commondir "^1.0.1" + estree-walker "^2.0.1" + glob "^7.1.6" + is-reference "^1.2.1" + magic-string "^0.25.7" + resolve "^1.17.0" + +"@rollup/plugin-json@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" + integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== + dependencies: + "@rollup/pluginutils" "^3.0.8" + +"@rollup/plugin-node-resolve@^13.0.0": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz#b10222f4145a019740acb7738402130d848660c0" + integrity sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.0.9", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@schematics/angular@12.1.4", "@schematics/angular@~12.1.0": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-12.1.4.tgz#13035db487c850ea53029a17b1de49062aa4888b" + integrity sha512-xGqgGI6GWk4EFdKis8FmSESxoLgjnLQbaRE1t1KZCkSKJzqkOj0R9wiDrtZfcrbPxIkLL+3fAk2ThwwPznT6yw== + dependencies: + "@angular-devkit/core" "12.1.4" + "@angular-devkit/schematics" "12.1.4" + jsonc-parser "3.0.0" + +"@schematics/angular@~12.2.0": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-12.2.0.tgz#0c5f30cffa1aef5d7700505ba475007fc1c29a96" + integrity sha512-2NolT/PNKgjINIHvz6o4sYFj4D4ai7Usf+HspQCi9W30qtLV4Z6hRXoEhmDxrGSlF67vJdwUwDM3sP+6Tg8XEw== + dependencies: + "@angular-devkit/core" "12.2.0" + "@angular-devkit/schematics" "12.2.0" + jsonc-parser "3.0.0" + +"@sindresorhus/is@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.1.tgz#d26729db850fa327b7cacc5522252194404226f5" + integrity sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^7.0.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5" + integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@swimlane/ngx-datatable@^17.1.0": + version "17.1.0" + resolved "https://registry.yarnpkg.com/@swimlane/ngx-datatable/-/ngx-datatable-17.1.0.tgz#ef2f91c3783526e7e89ac7a62a53e7bc9e1c90d5" + integrity sha512-zYUS7uNO9OJ5UQZFuuTRjlPu6vdKA+FHYLfeEs7PgSuUiDCcbl2SWoUdS/3zIoWn/qQyws767ueWiAvvWUbpEw== + +"@swimlane/ngx-datatable@^19.0.0": + version "19.0.0" + resolved "https://registry.yarnpkg.com/@swimlane/ngx-datatable/-/ngx-datatable-19.0.0.tgz#7eed84ba276ebb9e4761233f8ac95d38fdff45b7" + integrity sha512-S8eknIQeZtr5aPZgBUItHmt+aQwrI32Hm3jvrxqJXK9J43oDzhIKT2qR1rre3s0XlBn6Zl8LAbmlKotQ5nnxnQ== + dependencies: + tslib "^2.0.0" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@testing-library/dom@7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.26.5.tgz#804a74fc893bf6da1a7970dbca7b94c2bbfe983d" + integrity sha512-2v/fv0s4keQjJIcD4bjfJMFtvxz5icartxUWdIZVNJR539WD9oxVrvIAPw+3Ydg4RLgxt0rvQx3L9cAjCci0Kg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.10.3" + "@types/aria-query" "^4.2.0" + aria-query "^4.2.2" + chalk "^4.1.0" + dom-accessibility-api "^0.5.1" + lz-string "^1.4.4" + pretty-format "^26.4.2" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@trysound/sax@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669" + integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow== + +"@types/aria-query@^4.2.0": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" + integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": + version "7.1.15" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.15.tgz#2ccfb1ad55a02c83f8e0ad327cbc332f55eb1024" + integrity sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" + integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + dependencies: + "@babel/types" "^7.3.0" + +"@types/cacheable-request@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" + integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + +"@types/eslint-scope@^3.7.0": + version "3.7.1" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e" + integrity sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.0.tgz#7e41f2481d301c68e14f483fe10b017753ce8d5a" + integrity sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^0.0.50": + version "0.0.50" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" + integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/glob@^7.1.1": + version "7.1.4" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" + integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jasmine@^3.3.9": + version "3.8.2" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.8.2.tgz#27ab0aaac29581bcbde5774e1843f90df977078e" + integrity sha512-u5h7dqzy2XpXTzhOzSNQUQpKGFvROF8ElNX9P/TJvsHnTg/JvsAseVsGWQAQQldqanYaM+5kwxW909BBFAUYsg== + +"@types/jest@26.0.24": + version "26.0.24" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" + integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== + dependencies: + jest-diff "^26.0.0" + pretty-format "^26.0.0" + +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + +"@types/keyv@*": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.2.tgz#5d97bb65526c20b6e0845f6b0d2ade4f28604ee5" + integrity sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg== + dependencies: + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/minimist@^1.2.0": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + +"@types/node@*", "@types/node@>= 8": + version "16.4.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.13.tgz#7dfd9c14661edc65cccd43a29eb454174642370d" + integrity sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg== + +"@types/node@14.14.33": + version "14.14.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.33.tgz#9e4f8c64345522e4e8ce77b334a8aaa64e2b6c78" + integrity sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g== + +"@types/node@^14.14.31": + version "14.17.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.9.tgz#b97c057e6138adb7b720df2bd0264b03c9f504fd" + integrity sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g== + +"@types/node@^8.0.31": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prettier@^2.1.5": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.2.tgz#fc8c2825e4ed2142473b4a81064e6e081463d1b3" + integrity sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog== + +"@types/q@^0.0.32": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" + integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/responselike@*", "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +"@types/selenium-webdriver@^3.0.0": + version "3.0.19" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.19.tgz#28ecede76f15b13553b4e86074d4cf9a0bbe49c4" + integrity sha512-OFUilxQg+rWL2FMxtmIgCkUDlJB6pskkpvmew7yeXfzzsOBb5rc+y2+DjHm+r3r1ZPPcJefK3DveNSYWGiy68g== + +"@types/sinonjs__fake-timers@^6.0.2": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.3.tgz#79df6f358ae8f79e628fe35a63608a0ea8e7cf08" + integrity sha512-E1dU4fzC9wN2QK2Cr1MLCfyHM8BoNnRFvuf45LYMPNDA+WqbNzC45S4UzPxvp1fFJ1rvSGU0bPvdd35VLmXG8g== + +"@types/sizzle@^2.3.2": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" + integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/webpack-sources@^0.1.5": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.9.tgz#da69b06eb34f6432e6658acb5a6893c55d983920" + integrity sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.6.1" + +"@types/yargs-parser@*": + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + +"@types/yargs@^15.0.0": + version "15.0.14" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" + integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + dependencies: + "@types/yargs-parser" "*" + +"@types/yauzl@^2.9.1": + version "2.9.2" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a" + integrity sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@~4.28.3": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz#8197f1473e7da8218c6a37ff308d695707835684" + integrity sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q== + dependencies: + "@typescript-eslint/experimental-utils" "4.28.5" + "@typescript-eslint/scope-manager" "4.28.5" + debug "^4.3.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@4.28.2": + version "4.28.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.2.tgz#4ebdec06a10888e9326e1d51d81ad52a361bd0b0" + integrity sha512-MwHPsL6qo98RC55IoWWP8/opTykjTp4JzfPu1VfO2Z0MshNP0UZ1GEV5rYSSnZSUI8VD7iHvtIPVGW5Nfh7klQ== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.28.2" + "@typescript-eslint/types" "4.28.2" + "@typescript-eslint/typescript-estree" "4.28.2" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/experimental-utils@4.28.5", "@typescript-eslint/experimental-utils@~4.28.3": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz#66c28bef115b417cf9d80812a713e0e46bb42a64" + integrity sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.28.5" + "@typescript-eslint/types" "4.28.5" + "@typescript-eslint/typescript-estree" "4.28.5" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/parser@~4.28.3": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.5.tgz#9c971668f86d1b5c552266c47788a87488a47d1c" + integrity sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw== + dependencies: + "@typescript-eslint/scope-manager" "4.28.5" + "@typescript-eslint/types" "4.28.5" + "@typescript-eslint/typescript-estree" "4.28.5" + debug "^4.3.1" + +"@typescript-eslint/scope-manager@4.28.2": + version "4.28.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz#451dce90303a3ce283750111495d34c9c204e510" + integrity sha512-MqbypNjIkJFEFuOwPWNDjq0nqXAKZvDNNs9yNseoGBB1wYfz1G0WHC2AVOy4XD7di3KCcW3+nhZyN6zruqmp2A== + dependencies: + "@typescript-eslint/types" "4.28.2" + "@typescript-eslint/visitor-keys" "4.28.2" + +"@typescript-eslint/scope-manager@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz#3a1b70c50c1535ac33322786ea99ebe403d3b923" + integrity sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ== + dependencies: + "@typescript-eslint/types" "4.28.5" + "@typescript-eslint/visitor-keys" "4.28.5" + +"@typescript-eslint/types@4.28.2": + version "4.28.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.2.tgz#e6b9e234e0e9a66c4d25bab881661e91478223b5" + integrity sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA== + +"@typescript-eslint/types@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.5.tgz#d33edf8e429f0c0930a7c3d44e9b010354c422e9" + integrity sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA== + +"@typescript-eslint/typescript-estree@4.28.2": + version "4.28.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz#680129b2a285289a15e7c6108c84739adf3a798c" + integrity sha512-86lLstLvK6QjNZjMoYUBMMsULFw0hPHJlk1fzhAVoNjDBuPVxiwvGuPQq3fsBMCxuDJwmX87tM/AXoadhHRljg== + dependencies: + "@typescript-eslint/types" "4.28.2" + "@typescript-eslint/visitor-keys" "4.28.2" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz#4906d343de693cf3d8dcc301383ed638e0441cd1" + integrity sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw== + dependencies: + "@typescript-eslint/types" "4.28.5" + "@typescript-eslint/visitor-keys" "4.28.5" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@4.28.2": + version "4.28.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz#bf56a400857bb68b59b311e6d0a5fbef5c3b5130" + integrity sha512-aT2B4PLyyRDUVUafXzpZFoc0C9t0za4BJAKP5sgWIhG+jHECQZUEjuQSCIwZdiJJ4w4cgu5r3Kh20SOdtEBl0w== + dependencies: + "@typescript-eslint/types" "4.28.2" + eslint-visitor-keys "^2.0.0" + +"@typescript-eslint/visitor-keys@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz#ffee2c602762ed6893405ee7c1144d9cc0a29675" + integrity sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg== + dependencies: + "@typescript-eslint/types" "4.28.5" + eslint-visitor-keys "^2.0.0" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +"@yarnpkg/lockfile@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@zkochan/cmd-shim@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" + integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== + dependencies: + is-windows "^1.0.0" + mkdirp-promise "^5.0.1" + mz "^2.5.0" + +JSONStream@^1.0.4, JSONStream@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-import-assertions@^1.7.6: + version "1.7.6" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz#580e3ffcae6770eebeec76c3b9723201e9d01f78" + integrity sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA== + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.2.4, acorn@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" + integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== + +adjust-sourcemap-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99" + integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A== + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" + +adm-zip@^0.4.9: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + +agentkeepalive@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b" + integrity sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-formats@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.0.tgz#96eaf83e38d32108b66d82a9cb0cfa24886cdfeb" + integrity sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@6.12.3: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@6.12.6, ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" + integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@8.6.2, ajv@^8.0.0, ajv@^8.0.1: + version "8.6.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" + integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +angular-oauth2-oidc@^10.0.0: + version "10.0.3" + resolved "https://registry.yarnpkg.com/angular-oauth2-oidc/-/angular-oauth2-oidc-10.0.3.tgz#612ef75c2e07b56592d2506f9618ee6a61857ad9" + integrity sha512-9wC8I3e3cN6rMBOlo5JB2y3Fd2erp8pJ67t4vEVzyPbnRG6BJ4rreSOznSL9zw/2SjhC9kRV2OfFie29CUCzEg== + dependencies: + tslib "^2.0.0" + +angular-oauth2-oidc@^12.0.2: + version "12.0.2" + resolved "https://registry.yarnpkg.com/angular-oauth2-oidc/-/angular-oauth2-oidc-12.0.2.tgz#092b44d05345750c8b4280f9a30e93bb4b4bde01" + integrity sha512-QWZE8tE1uP6T2qRIIWOaga1sHtbT4rhrEc8h/QCDHbo3X4jjtPKFQYHL+OJArDrrIymtzAVmJe2jNN9NauLYdQ== + dependencies: + tslib "^2.0.0" + +ansi-colors@4.1.1, ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +arch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-differ@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" + integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + +array-union@^1.0.1, array-union@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@0.9.x: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +async@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.1.tgz#d3274ec66d107a47476a4c49136aacdb00665fc8" + integrity sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^9.6.1: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +babel-jest@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.6.tgz#e99c6e0577da2655118e3608b68761a5a69bd0d8" + integrity sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA== + dependencies: + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^27.0.6" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-loader@8.2.2, babel-loader@^8.0.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz#f7c6b3d764af21cb4a2a1ab6870117dbde15b456" + integrity sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" + integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.2" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz#68cb81316b0e8d9d721a92e0009ec6ecd4cd2ca9" + integrity sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + core-js-compat "^3.14.0" + +babel-plugin-polyfill-regenerator@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" + integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz#909ef08e9f24a4679768be2f60a3df0856843f9d" + integrity sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw== + dependencies: + babel-plugin-jest-hoist "^27.0.6" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +before-after-hook@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" + integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blob-util@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== + +blocking-proxy@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" + integrity sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA== + dependencies: + minimist "^1.2.0" + +bluebird@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" + integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== + +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5, bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +bootstrap@^4.5.0, bootstrap@~4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.6.0.tgz#97b9f29ac98f98dfa43bf7468262d84392552fd7" + integrity sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.16.1, browserslist@^4.16.6, browserslist@^4.16.7, browserslist@^4.6.4, browserslist@^4.9.1: + version "4.16.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.7.tgz#108b0d1ef33c4af1b587c54f390e7041178e4335" + integrity sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA== + dependencies: + caniuse-lite "^1.0.30001248" + colorette "^1.2.2" + electron-to-chromium "^1.3.793" + escalade "^3.1.1" + node-releases "^1.1.73" + +browserstack@^1.5.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.6.1.tgz#e051f9733ec3b507659f395c7a4765a1b1e358b3" + integrity sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw== + dependencies: + https-proxy-agent "^2.2.1" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-from@1.x, buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= + +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@15.2.0, cacache@^15.0.5, cacache@^15.0.6, cacache@^15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389" + integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw== + dependencies: + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +cachedir@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001248: + version "1.0.30001249" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001249.tgz#90a330057f8ff75bfe97a94d047d5e14fabb2ee8" + integrity sha512-vcX4U8lwVXPdqzPWi6cAJ3FnQaqXbBqy/GZseKNQzRj37J7qZdGcBtxq/QLFNLLlfsoXLUdHw8Iwenri86Tagw== + +canonical-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/canonical-path/-/canonical-path-1.0.0.tgz#fcb470c23958def85081856be7a86e904f180d1d" + integrity sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chart.js@^2.9.3: + version "2.9.4" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.9.4.tgz#0827f9563faffb2dc5c06562f8eb10337d5b9684" + integrity sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A== + dependencies: + chartjs-color "^2.1.0" + moment "^2.10.2" + +chartjs-color-string@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz#1df096621c0e70720a64f4135ea171d051402f71" + integrity sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A== + dependencies: + color-name "^1.0.0" + +chartjs-color@^2.1.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chartjs-color/-/chartjs-color-2.4.1.tgz#6118bba202fe1ea79dd7f7c0f9da93467296c3b0" + integrity sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w== + dependencies: + chartjs-color-string "^0.6.0" + color-convert "^1.9.3" + +check-more-types@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= + +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.0.2, chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" + integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-dependency-plugin@5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz#39e836079db1d3cf2f988dc48c5188a44058b600" + integrity sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.0.0, cli-spinners@^2.4.0, cli-spinners@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" + integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== + +cli-table3@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" + integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== + dependencies: + object-assign "^4.1.0" + string-width "^4.2.0" + optionalDependencies: + colors "^1.1.2" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colord@^2.0.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.6.0.tgz#6cd716e1270cfff8d6f66e751768749650e209cd" + integrity sha512-8yMrtE20ZxH1YWvvSoeJFtvqY+GIAOfU+mZ3jx7ZSiEMasnAmNqD1BKUP3CuCWcy/XHgcXkLW6YU8C35nhOYVg== + +colorette@^1.2.1, colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +columnify@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.12.1, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commander@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.1.0.tgz#db36e3e66edf24ff591d639862c6ab2c52664362" + integrity sha512-mf45ldcuHSYShkplHHGKWb4TrmwQadxOn7v4WuhDJy0ZVoY5JFajaRDKD0PNe5qXzBX0rhovjTnP6Kz9LETcuA== + +common-tags@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +confusing-browser-globals@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" + integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +conventional-changelog-angular@^5.0.3: + version "5.0.12" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" + integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-core@^3.1.6: + version "3.2.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" + integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== + dependencies: + conventional-changelog-writer "^4.0.6" + conventional-commits-parser "^3.0.3" + dateformat "^3.0.0" + get-pkg-repo "^1.0.0" + git-raw-commits "2.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^2.0.3" + lodash "^4.2.1" + normalize-package-data "^2.3.5" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^3.0.0" + +conventional-changelog-preset-loader@^2.1.1: + version "2.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^4.0.6: + version "4.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz#1ca7880b75aa28695ad33312a1f2366f4b12659f" + integrity sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw== + dependencies: + compare-func "^2.0.0" + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.6" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + +conventional-commits-filter@^2.0.2, conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.0.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2" + integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + trim-off-newlines "^1.0.0" + +conventional-recommended-bump@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" + integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.1.1" + conventional-commits-filter "^2.0.2" + conventional-commits-parser "^3.0.3" + git-raw-commits "2.0.0" + git-semver-tags "^2.0.3" + meow "^4.0.0" + q "^1.5.1" + +convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-anything@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.3.tgz#842407ba02466b0df844819bbe3baebbe5d45d87" + integrity sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ== + dependencies: + is-what "^3.12.0" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-webpack-plugin@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-9.0.0.tgz#2bf592785d2fcdde9342dfed3676490fe0aa7ce8" + integrity sha512-k8UB2jLIb1Jip2nZbCz83T/XfhfjX6mB1yLJNYKrpYi7FQimfOoFv/0//iT6HV1K8FwUB5yUbCcnpLebJXJTug== + dependencies: + fast-glob "^3.2.5" + glob-parent "^6.0.0" + globby "^11.0.3" + normalize-path "^3.0.0" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + +core-js-compat@^3.14.0, core-js-compat@^3.15.0, core-js-compat@^3.16.0: + version "3.16.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.16.1.tgz#c44b7caa2dcb94b673a98f27eee1c8312f55bc2d" + integrity sha512-NHXQXvRbd4nxp9TEmooTJLUf94ySUG6+DSsscBpTftN1lQLQ4LjnWvc7AoIo4UjDsFF3hB8Uh5LLCRRdaiT5MQ== + dependencies: + browserslist "^4.16.7" + semver "7.0.0" + +core-js-pure@^3.16.0: + version "3.16.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.16.1.tgz#b997df2669c957a5b29f06e95813a171f993592e" + integrity sha512-TyofCdMzx0KMhi84mVRS8rL1XsRk2SPUNz2azmth53iRN0/08Uim9fdhQTaZTG1LqaXHYVci4RDHka6WrXfnvg== + +core-js@3.15.1: + version "3.15.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.1.tgz#6c08ab88abdf56545045ccf5fd81f47f407e7f1a" + integrity sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg== + +core-js@^3.6.5: + version "3.16.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.16.1.tgz#f4485ce5c9f3c6a7cb18fa80488e08d362097249" + integrity sha512-AAkP8i35EbefU+JddyWi12AWE9f2N/qr/pwnDtWz4nyUIBGMJPX99ANFFRSw6FefM374lDujdtLDyhN2A/btHw== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" + integrity sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ== + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + require-from-string "^2.0.1" + +cosmiconfig@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +critters@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/critters/-/critters-0.0.10.tgz#edd0e962fc5af6c4adb6dbf1a71bae2d3f917000" + integrity sha512-p5VKhP1803+f+0Jq5P03w1SbiHtpAKm+1EpJHkiPxQPq0Vu9QLZHviJ02GRrWi0dlcJqrmzMWInbwp4d22RsGw== + dependencies: + chalk "^4.1.0" + css "^3.0.0" + parse5 "^6.0.1" + parse5-htmlparser2-tree-adapter "^6.0.1" + pretty-bytes "^5.3.0" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== + dependencies: + postcss "^7.0.5" + +css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-color-names@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-1.0.1.tgz#6ff7ee81a823ad46e020fa2fd6ab40a887e2ba67" + integrity sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA== + +css-declaration-sorter@^6.0.3: + version "6.1.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.1.1.tgz#77b32b644ba374bc562c0fc6f4fdaba4dfb0b749" + integrity sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q== + dependencies: + timsort "^0.3.0" + +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + +css-loader@5.2.6: + version "5.2.6" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.6.tgz#c3c82ab77fea1f360e587d871a6811f4450cc8d1" + integrity sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w== + dependencies: + icss-utils "^5.1.0" + loader-utils "^2.0.0" + postcss "^8.2.15" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^3.0.0" + semver "^7.3.5" + +css-minimizer-webpack-plugin@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.1.tgz#2f866079411d42309a485512642c0cb08b5468ae" + integrity sha512-RGFIv6iZWUPO2T1vE5+5pNCSs2H2xtHYRdfZPiiNH8Of6QOn9BeFnZSoHiQMkmsxOO/JkPe4BpKfs7slFIWcTA== + dependencies: + cssnano "^5.0.0" + jest-worker "^27.0.2" + p-limit "^3.0.2" + postcss "^8.2.9" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + +css-parse@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" + integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= + dependencies: + css "^2.0.0" + +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + dependencies: + postcss "^7.0.5" + +css-select@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" + integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== + dependencies: + boolbase "^1.0.0" + css-what "^5.0.0" + domhandler "^4.2.0" + domutils "^2.6.0" + nth-check "^2.0.0" + +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" + integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +css@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" + integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== + dependencies: + inherits "^2.0.4" + source-map "^0.6.1" + source-map-resolve "^0.6.0" + +cssdb@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz#caa54183a8c8df03124a9e23f374ab89df5a9a99" + integrity sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ== + dependencies: + css-declaration-sorter "^6.0.3" + cssnano-utils "^2.0.1" + postcss-calc "^8.0.0" + postcss-colormin "^5.2.0" + postcss-convert-values "^5.0.1" + postcss-discard-comments "^5.0.1" + postcss-discard-duplicates "^5.0.1" + postcss-discard-empty "^5.0.1" + postcss-discard-overridden "^5.0.1" + postcss-merge-longhand "^5.0.2" + postcss-merge-rules "^5.0.2" + postcss-minify-font-values "^5.0.1" + postcss-minify-gradients "^5.0.1" + postcss-minify-params "^5.0.1" + postcss-minify-selectors "^5.1.0" + postcss-normalize-charset "^5.0.1" + postcss-normalize-display-values "^5.0.1" + postcss-normalize-positions "^5.0.1" + postcss-normalize-repeat-style "^5.0.1" + postcss-normalize-string "^5.0.1" + postcss-normalize-timing-functions "^5.0.1" + postcss-normalize-unicode "^5.0.1" + postcss-normalize-url "^5.0.2" + postcss-normalize-whitespace "^5.0.1" + postcss-ordered-values "^5.0.2" + postcss-reduce-initial "^5.0.1" + postcss-reduce-transforms "^5.0.1" + postcss-svgo "^5.0.2" + postcss-unique-selectors "^5.0.1" + +cssnano-utils@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-2.0.1.tgz#8660aa2b37ed869d2e2f22918196a9a8b6498ce2" + integrity sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ== + +cssnano@^5.0.0: + version "5.0.7" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.0.7.tgz#e81894bdf31aa01a0ca3d1d0eee47be18f7f3012" + integrity sha512-7C0tbb298hef3rq+TtBbMuezBQ9VrFtrQEsPNuBKNVgWny/67vdRsnq8EoNu7TRjAHURgYvWlRIpCUmcMZkRzw== + dependencies: + cssnano-preset-default "^5.1.3" + is-resolvable "^1.1.0" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +cuint@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +cypress@^7.3.0: + version "7.7.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-7.7.0.tgz#0839ae28e5520536f9667d6c9ae81496b3836e64" + integrity sha512-uYBYXNoI5ym0UxROwhQXWTi8JbUEjpC6l/bzoGZNxoKGsLrC1SDPgIDJMgLX/MeEdPL0UInXLDUWN/rSyZUCjQ== + dependencies: + "@cypress/request" "^2.88.5" + "@cypress/xvfb" "^1.2.4" + "@types/node" "^14.14.31" + "@types/sinonjs__fake-timers" "^6.0.2" + "@types/sizzle" "^2.3.2" + arch "^2.2.0" + blob-util "^2.0.2" + bluebird "^3.7.2" + cachedir "^2.3.0" + chalk "^4.1.0" + check-more-types "^2.24.0" + cli-cursor "^3.1.0" + cli-table3 "~0.6.0" + commander "^5.1.0" + common-tags "^1.8.0" + dayjs "^1.10.4" + debug "^4.3.2" + enquirer "^2.3.6" + eventemitter2 "^6.4.3" + execa "4.1.0" + executable "^4.1.1" + extract-zip "2.0.1" + figures "^3.2.0" + fs-extra "^9.1.0" + getos "^3.2.1" + is-ci "^3.0.0" + is-installed-globally "~0.4.0" + lazy-ass "^1.6.0" + listr2 "^3.8.3" + lodash "^4.17.21" + log-symbols "^4.0.0" + minimist "^1.2.5" + ospath "^1.2.2" + pretty-bytes "^5.6.0" + ramda "~0.27.1" + request-progress "^3.0.0" + supports-color "^8.1.1" + tmp "~0.2.1" + untildify "^4.0.0" + url "^0.11.0" + yauzl "^2.10.0" + +dargs@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= + dependencies: + number-is-nan "^1.0.0" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +date-fns@^2.10.0: + version "2.23.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.23.0.tgz#4e886c941659af0cf7b30fafdd1eaa37e88788a9" + integrity sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA== + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +dayjs@^1.10.4: + version "1.10.6" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.6.tgz#288b2aa82f2d8418a6c9d4df5898c0737ad02a63" + integrity sha512-AztC/IOW4L1Q41A86phW5Thhcrco3xuAA+YX/BLpLWWjRcTj5TOt/QImBLmCKlrF7u7k47arTnOyL6GnbG8Hvw== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.1.0, debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +debug@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debug@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@^1.1.2, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +dependency-graph@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" + integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + +diff-sequences@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" + integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" + integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-accessibility-api@^0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.7.tgz#8c2aa6325968f2933160a0b7dbb380893ddf3e7d" + integrity sha512-ml3lJIq9YjUfM9TUnEPvEYWFSwivwIGBPKpewX7tii7fwCazA8yCioGdqQcNsItPpfFvSJ3VIdMQPj60LJhcQA== + +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" + integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" + integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-prop@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== + dependencies: + is-obj "^1.0.0" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a" + integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw== + dependencies: + jake "^10.6.1" + +electron-to-chromium@^1.3.793: + version "1.3.801" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.801.tgz#f41c588e408ad1a4f794f91f38aa94a89c492f51" + integrity sha512-xapG8ekC+IAHtJrGBMQSImNuN+dm+zl7UP1YbhvTkwQn8zf/yYuoxfTSAEiJ9VDD+kjvXaAhNDPSxJ+VImtAJA== + +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding@^0.1.11, encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@5.8.2, enhanced-resolve@^5.7.0, enhanced-resolve@^5.8.0: + version "5.8.2" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" + integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +enhanced-resolve@^4.0.0, enhanced-resolve@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enquirer@^2.3.5, enquirer@^2.3.6, enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@^7.3.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.18.0-next.2: + version "1.18.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.5.tgz#9b10de7d4c206a3581fd5b2124233e04db49ae19" + integrity sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-module-lexer@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.7.1.tgz#c2c8e0f46f2df06274cdaf0dd3f3b33e0a0b267d" + integrity sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw== + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +esbuild@^0.12.15: + version "0.12.19" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.19.tgz#ab849766705a5093df5acd8ec2f6ba2159a38a6c" + integrity sha512-5NuT1G6THW7l3fsSCDkcPepn24R0XtyPjKoqKHD8LfhqMXzCdz0mrS9HgO6hIhzVT7zt0T+JGbzCqF5AH8hS9w== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-prettier@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz#4ef1eaf97afe5176e6a75ddfb57c335121abc5a6" + integrity sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw== + +eslint-plugin-cypress@^2.10.3: + version "2.11.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.11.3.tgz#54ee4067aa8192aa62810cd35080eb577e191ab7" + integrity sha512-hOoAid+XNFtpvOzZSNWP5LDrQBEJwbZwjib4XJ1KcRYKjeVj0mAmPmucG4Egli4j/aruv+Ow/acacoloWWCl9Q== + dependencies: + globals "^11.12.0" + +eslint-scope@5.1.1, eslint-scope@^5.1.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@7.22.0: + version "7.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.22.0.tgz#07ecc61052fec63661a2cab6bd507127c07adc6f" + integrity sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.21" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +esm@^3.2.25: + version "3.2.25" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1, esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter2@^6.4.3: + version "6.4.4" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.4.tgz#aa96e8275c4dbeb017a5d0e03780c65612a1202b" + integrity sha512-HLU3NDY6wARrLCEwyGKRBvuWYyvW6mHYv72SJJAH3iJN3a6eVUvkjFkcxah1bcTgGVBBrFdIopBJPhCQFMLyXw== + +eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0, events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@4.1.0, execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +executable@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.0.6.tgz#a4d74fbe27222c718fff68ef49d78e26a8fd4c05" + integrity sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw== + dependencies: + "@jest/types" "^27.0.6" + ansi-styles "^5.0.0" + jest-get-type "^27.0.6" + jest-matcher-utils "^27.0.6" + jest-message-util "^27.0.6" + jest-regex-util "^27.0.6" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-glob@^3.1.1, fast-glob@^3.2.5: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" + integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figlet@^1.2.3: + version "1.5.0" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.0.tgz#2db4d00a584e5155a96080632db919213c3e003c" + integrity sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.0.0, figures@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filelist@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b" + integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ== + dependencies: + minimatch "^3.0.4" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +filter-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@3.3.1, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-parent-dir@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.1.tgz#c5c385b96858c3351f95d446cab866cbf9f11125" + integrity sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A== + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.1.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" + integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== + +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" + integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +fork-ts-checker-webpack-plugin@6.2.10: + version "6.2.10" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.10.tgz#800ab1fa523c76011a3413bc4e7815e45b63e826" + integrity sha512-HveFCHWSH2WlYU1tU3PkrupvW8lNFMTfH3Jk0TfC2mtktE9ibHGcifhCsCFvj+kqlDfNIlwmNLiNqR9jnSA7OQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.0, fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-monkey@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" + integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= + dependencies: + hosted-git-info "^2.1.4" + meow "^3.3.0" + normalize-package-data "^2.3.0" + parse-github-repo-url "^1.3.0" + through2 "^2.0.0" + +get-port@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" + integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getos@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== + dependencies: + async "^3.2.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" + integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== + dependencies: + dargs "^4.0.1" + lodash.template "^4.0.2" + meow "^4.0.0" + split2 "^2.0.0" + through2 "^2.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" + integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== + dependencies: + meow "^4.0.0" + semver "^6.0.0" + +git-up@^4.0.0: + version "4.0.5" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.5.tgz#e7bb70981a37ea2fb8fe049669800a1f9a01d759" + integrity sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA== + dependencies: + is-ssh "^1.3.0" + parse-url "^6.0.0" + +git-url-parse@^11.1.2: + version "11.5.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.5.0.tgz#acaaf65239cb1536185b19165a24bbc754b3f764" + integrity sha512-TZYSMDeM37r71Lqg1mbnMlOqlHd7BSij9qN7XwTkRqSAYFMihGLGhfHwgqQob3GUhEneKnV4nskN9rbQw2KGxA== + dependencies: + git-up "^4.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= + dependencies: + ini "^1.3.2" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.1.tgz#42054f685eb6a44e7a7d189a96efa40a54971aa7" + integrity sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.1.7, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" + integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== + dependencies: + ini "2.0.0" + +globals@^11.1.0, globals@^11.12.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.6.0, globals@^13.9.0: + version "13.10.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" + integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.3: + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" + +got@^11.5.2: + version "11.8.2" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599" + integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.1" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +handlebars@^4.7.6: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +harmony-reflect@^1.4.6: + version "1.6.2" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" + integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@^2.0.0, has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" + integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== + dependencies: + lru-cache "^6.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^2.2.1, https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +identity-obj-proxy@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= + dependencies: + harmony-reflect "^1.4.6" + +ieee754@^1.1.13, ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1, ignore-walk@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" + integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== + dependencies: + minimatch "^3.0.4" + +ignore@^4.0.3, ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.0.4, ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +ini@^1.3.2, ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + +injection-js@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/injection-js/-/injection-js-2.4.0.tgz#ebe8871b1a349f23294eaa751bbd8209a636e754" + integrity sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA== + dependencies: + tslib "^2.0.0" + +inquirer-file-tree-selection-prompt@^1.0.2: + version "1.0.12" + resolved "https://registry.yarnpkg.com/inquirer-file-tree-selection-prompt/-/inquirer-file-tree-selection-prompt-1.0.12.tgz#f30f696532ced0bc862454ae076a83ba236d16f7" + integrity sha512-XUdh+lxTnj+nNoO38MgLWvO/btCyXJkHpRK5F2q+Wh6NLbSjuVaPeQ1OVPkvB3ZS7DtXzK0uDzGXv9tQqbr4lA== + dependencies: + chalk "^4.1.1" + cli-cursor "^3.1.0" + figures "^3.0.0" + lodash "^4.17.11" + rxjs "^6.5.2" + +inquirer@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.1.tgz#7c53d94c6d03011c7bb2a947f0dca3b98246c26a" + integrity sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.3.0" + run-async "^2.4.0" + rxjs "^6.6.6" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +inquirer@8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.2.tgz#65b204d2cd7fb63400edd925dfe428bafd422e3d" + integrity sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.3.0" + run-async "^2.4.0" + rxjs "^7.2.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +inquirer@^6.2.0, inquirer@^6.4.1: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@1.1.5, ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-bigint@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.3.tgz#fc9d9e364210480675653ddaea0518528d49a581" + integrity sha512-ZU538ajmYJmzysE5yU4Y7uIrPQ2j704u+hXFiIPQExpqzzUbpe5jCPdTfmz7jXRxZdvjY3KZ3ZNenoXQovX+Dg== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-ci@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.0.tgz#c7e7be3c9d8eef7d0fa144390bd1e4b88dc4c994" + integrity sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ== + dependencies: + ci-info "^3.1.1" + +is-color-stop@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.2.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" + integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-reference@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +is-regex@^1.0.4, is-regex@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-resolvable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-ssh@^1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.3.tgz#7f133285ccd7f2c2c7fc897b771b53d95a2b2c7e" + integrity sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ== + dependencies: + protocols "^1.1.0" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + dependencies: + text-extensions "^1.0.0" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-what@^3.12.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" + integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== + +is-windows@^1.0.0, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jake@^10.6.1: + version "10.8.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" + integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== + dependencies: + async "0.9.x" + chalk "^2.4.2" + filelist "^1.0.1" + minimatch "^3.0.4" + +jasmine-core@~2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" + integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= + +jasmine-core@~3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.8.0.tgz#815399aae5aa5d9beeb1262805f981b99ffc9bf0" + integrity sha512-zl0nZWDrmbCiKns0NcjkFGYkVTGCPUgoHypTaj+G2AzaWus7QGoXARSlYsSle2VRpSdfJmM+hzmFKzQNhF2kHg== + +jasmine-marbles@~0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/jasmine-marbles/-/jasmine-marbles-0.8.3.tgz#a27253d1d52dfe49d8f145aba63f0bf18147b4ff" + integrity sha512-aaf7ObOC9X1jZ8VyIG49+vOTycRqIWT5Jt3vHHbECE9tN7U05mnpxi20thth02HzasOv/Fmqf+uGhcLE/f8NYg== + dependencies: + lodash "^4.17.20" + +jasmine@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" + integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= + dependencies: + exit "^0.1.2" + glob "^7.0.6" + jasmine-core "~2.8.0" + +jasmine@^3.3.1: + version "3.8.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.8.0.tgz#4497bc797eede7ca9de18179aedd4cf50245d8dc" + integrity sha512-kdQ3SfcNpMbbMdgJPLyFe9IksixdnrgYaCJapP9sS0aLgdWdIZADNXEr+11Zafxm1VDfRSC5ZL4fzXT0bexzXw== + dependencies: + glob "^7.1.6" + jasmine-core "~3.8.0" + +jasminewd2@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" + integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= + +jest-changed-files@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.6.tgz#bed6183fcdea8a285482e3b50a9a7712d49a7a8b" + integrity sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA== + dependencies: + "@jest/types" "^27.0.6" + execa "^5.0.0" + throat "^6.0.1" + +jest-circus@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.6.tgz#dd4df17c4697db6a2c232aaad4e9cec666926668" + integrity sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q== + dependencies: + "@jest/environment" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.0.6" + is-generator-fn "^2.0.0" + jest-each "^27.0.6" + jest-matcher-utils "^27.0.6" + jest-message-util "^27.0.6" + jest-runtime "^27.0.6" + jest-snapshot "^27.0.6" + jest-util "^27.0.6" + pretty-format "^27.0.6" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.0.3: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.6.tgz#d021e5f4d86d6a212450d4c7b86cb219f1e6864f" + integrity sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg== + dependencies: + "@jest/core" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/types" "^27.0.6" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + jest-config "^27.0.6" + jest-util "^27.0.6" + jest-validate "^27.0.6" + prompts "^2.0.1" + yargs "^16.0.3" + +jest-config@27.0.6, jest-config@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.6.tgz#119fb10f149ba63d9c50621baa4f1f179500277f" + integrity sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^27.0.6" + "@jest/types" "^27.0.6" + babel-jest "^27.0.6" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + is-ci "^3.0.0" + jest-circus "^27.0.6" + jest-environment-jsdom "^27.0.6" + jest-environment-node "^27.0.6" + jest-get-type "^27.0.6" + jest-jasmine2 "^27.0.6" + jest-regex-util "^27.0.6" + jest-resolve "^27.0.6" + jest-runner "^27.0.6" + jest-util "^27.0.6" + jest-validate "^27.0.6" + micromatch "^4.0.4" + pretty-format "^27.0.6" + +jest-diff@^26.0.0: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-diff@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.0.6.tgz#4a7a19ee6f04ad70e0e3388f35829394a44c7b5e" + integrity sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.0.6" + jest-get-type "^27.0.6" + pretty-format "^27.0.6" + +jest-docblock@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.6.tgz#cc78266acf7fe693ca462cbbda0ea4e639e4e5f3" + integrity sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA== + dependencies: + detect-newline "^3.0.0" + +jest-each@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.0.6.tgz#cee117071b04060158dc8d9a66dc50ad40ef453b" + integrity sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA== + dependencies: + "@jest/types" "^27.0.6" + chalk "^4.0.0" + jest-get-type "^27.0.6" + jest-util "^27.0.6" + pretty-format "^27.0.6" + +jest-environment-jsdom@^27.0.0, jest-environment-jsdom@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz#f66426c4c9950807d0a9f209c590ce544f73291f" + integrity sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw== + dependencies: + "@jest/environment" "^27.0.6" + "@jest/fake-timers" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + jest-mock "^27.0.6" + jest-util "^27.0.6" + jsdom "^16.6.0" + +jest-environment-node@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.6.tgz#a6699b7ceb52e8d68138b9808b0c404e505f3e07" + integrity sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w== + dependencies: + "@jest/environment" "^27.0.6" + "@jest/fake-timers" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + jest-mock "^27.0.6" + jest-util "^27.0.6" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-get-type@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" + integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== + +jest-haste-map@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.6.tgz#4683a4e68f6ecaa74231679dca237279562c8dc7" + integrity sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w== + dependencies: + "@jest/types" "^27.0.6" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^27.0.6" + jest-serializer "^27.0.6" + jest-util "^27.0.6" + jest-worker "^27.0.6" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +jest-jasmine2@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz#fd509a9ed3d92bd6edb68a779f4738b100655b37" + integrity sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^27.0.6" + "@jest/source-map" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.0.6" + is-generator-fn "^2.0.0" + jest-each "^27.0.6" + jest-matcher-utils "^27.0.6" + jest-message-util "^27.0.6" + jest-runtime "^27.0.6" + jest-snapshot "^27.0.6" + jest-util "^27.0.6" + pretty-format "^27.0.6" + throat "^6.0.1" + +jest-leak-detector@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz#545854275f85450d4ef4b8fe305ca2a26450450f" + integrity sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ== + dependencies: + jest-get-type "^27.0.6" + pretty-format "^27.0.6" + +jest-matcher-utils@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz#2a8da1e86c620b39459f4352eaa255f0d43e39a9" + integrity sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA== + dependencies: + chalk "^4.0.0" + jest-diff "^27.0.6" + jest-get-type "^27.0.6" + pretty-format "^27.0.6" + +jest-message-util@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.6.tgz#158bcdf4785706492d164a39abca6a14da5ab8b5" + integrity sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.0.6" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.4" + pretty-format "^27.0.6" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.0.6.tgz#0efdd40851398307ba16778728f6d34d583e3467" + integrity sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw== + dependencies: + "@jest/types" "^27.0.6" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-preset-angular@9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/jest-preset-angular/-/jest-preset-angular-9.0.4.tgz#d3a8dbc7902d6034ecf83122f5eb2e417fdea352" + integrity sha512-N/nPUwMXTW3bUiSzijn5vlQ51cuVEzJxDJ3s6EN8e3Wx2SF4Q9DBJIWpW+LVvSinLljYXJN9jPwkVstnnoJd9g== + dependencies: + jest-environment-jsdom "^27.0.0" + pretty-format "^27.0.0" + ts-jest "^27.0.0" + optionalDependencies: + webpack "^4.0.0 || ^5.30.0" + +jest-regex-util@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" + integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== + +jest-resolve-dependencies@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz#3e619e0ef391c3ecfcf6ef4056207a3d2be3269f" + integrity sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA== + dependencies: + "@jest/types" "^27.0.6" + jest-regex-util "^27.0.6" + jest-snapshot "^27.0.6" + +jest-resolve@27.0.6, jest-resolve@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.6.tgz#e90f436dd4f8fbf53f58a91c42344864f8e55bff" + integrity sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA== + dependencies: + "@jest/types" "^27.0.6" + chalk "^4.0.0" + escalade "^3.1.1" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^27.0.6" + jest-validate "^27.0.6" + resolve "^1.20.0" + slash "^3.0.0" + +jest-runner@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.6.tgz#1325f45055539222bbc7256a6976e993ad2f9520" + integrity sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ== + dependencies: + "@jest/console" "^27.0.6" + "@jest/environment" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-docblock "^27.0.6" + jest-environment-jsdom "^27.0.6" + jest-environment-node "^27.0.6" + jest-haste-map "^27.0.6" + jest-leak-detector "^27.0.6" + jest-message-util "^27.0.6" + jest-resolve "^27.0.6" + jest-runtime "^27.0.6" + jest-util "^27.0.6" + jest-worker "^27.0.6" + source-map-support "^0.5.6" + throat "^6.0.1" + +jest-runtime@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.6.tgz#45877cfcd386afdd4f317def551fc369794c27c9" + integrity sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q== + dependencies: + "@jest/console" "^27.0.6" + "@jest/environment" "^27.0.6" + "@jest/fake-timers" "^27.0.6" + "@jest/globals" "^27.0.6" + "@jest/source-map" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-haste-map "^27.0.6" + jest-message-util "^27.0.6" + jest-mock "^27.0.6" + jest-regex-util "^27.0.6" + jest-resolve "^27.0.6" + jest-snapshot "^27.0.6" + jest-util "^27.0.6" + jest-validate "^27.0.6" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^16.0.3" + +jest-serializer@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.6.tgz#93a6c74e0132b81a2d54623251c46c498bb5bec1" + integrity sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.6.tgz#f4e6b208bd2e92e888344d78f0f650bcff05a4bf" + integrity sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A== + dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/parser" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.0.0" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^27.0.6" + graceful-fs "^4.2.4" + jest-diff "^27.0.6" + jest-get-type "^27.0.6" + jest-haste-map "^27.0.6" + jest-matcher-utils "^27.0.6" + jest-message-util "^27.0.6" + jest-resolve "^27.0.6" + jest-util "^27.0.6" + natural-compare "^1.4.0" + pretty-format "^27.0.6" + semver "^7.3.2" + +jest-util@27.0.6, jest-util@^27.0.0, jest-util@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.6.tgz#e8e04eec159de2f4d5f57f795df9cdc091e50297" + integrity sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ== + dependencies: + "@jest/types" "^27.0.6" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^3.0.0" + picomatch "^2.2.3" + +jest-validate@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.0.6.tgz#930a527c7a951927df269f43b2dc23262457e2a6" + integrity sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA== + dependencies: + "@jest/types" "^27.0.6" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^27.0.6" + leven "^3.1.0" + pretty-format "^27.0.6" + +jest-watcher@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.6.tgz#89526f7f9edf1eac4e4be989bcb6dec6b8878d9c" + integrity sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ== + dependencies: + "@jest/test-result" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.0.6" + string-length "^4.0.1" + +jest-worker@27.0.2: + version "27.0.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05" + integrity sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^27.0.2, jest-worker@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.6.tgz#a5fdb1e14ad34eb228cfe162d9f729cdbfa28aed" + integrity sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@27.0.3: + version "27.0.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.0.3.tgz#0b4ac738c93612f778d58250aee026220487e5a4" + integrity sha512-0G9+QqXFIZWgf5rs3yllpaA+13ZawVHfyuhuCV1EnoFbX++rVMRrYWCAnk+dfhwyv9/VTQvn+XG969u8aPRsBg== + dependencies: + "@jest/core" "^27.0.3" + import-local "^3.0.2" + jest-cli "^27.0.3" + +jquery@3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" + integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1, js-yaml@^3.9.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@2.x, json5@^2.1.0, json5@^2.1.2, json5@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonc-parser@3.0.0, jsonc-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" + integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== + +jsonc-parser@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" + integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jszip@^3.1.3: + version "3.7.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.7.1.tgz#bd63401221c15625a1228c556ca8a68da6fda3d9" + integrity sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + +just-clone@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/just-clone/-/just-clone-3.2.1.tgz#7396be5790d33f0fa7e8a145d7983b986a8cee39" + integrity sha512-PFotEVrrzAnwuWTUOFquDShWrHnUnhxNrVs1VFqkNfnoH3Sn5XUlDOePYn2Vv5cN8xV2y69jf8qEoQHm7eoLnw== + +just-compare@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/just-compare/-/just-compare-1.4.0.tgz#079b7f37312c7a22517b3bf2aa7131bfd24c29dd" + integrity sha512-uNZ4VC7/WoBWAasr2FDOYtIb7S6e4K4ERJTnyYHSBltJQ3/Qg2c/HX+vFT4Zas5tw/e/jWxvaaOD84QcgCxRGw== + +karma-source-map-support@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz#58526ceccf7e8730e56effd97a4de8d712ac0d6b" + integrity sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A== + dependencies: + source-map-support "^0.5.5" + +keyv@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254" + integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA== + dependencies: + json-buffer "3.0.1" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + +lazy-ass@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= + +lerna@^3.19.0: + version "3.22.1" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62" + integrity sha512-vk1lfVRFm+UuEFA7wkLKeSF7Iz13W+N/vFd48aW2yuS7Kv0RbNm2/qcDPV863056LMfkRlsEe+QYOw3palj5Lg== + dependencies: + "@lerna/add" "3.21.0" + "@lerna/bootstrap" "3.21.0" + "@lerna/changed" "3.21.0" + "@lerna/clean" "3.21.0" + "@lerna/cli" "3.18.5" + "@lerna/create" "3.22.0" + "@lerna/diff" "3.21.0" + "@lerna/exec" "3.21.0" + "@lerna/import" "3.22.0" + "@lerna/info" "3.21.0" + "@lerna/init" "3.21.0" + "@lerna/link" "3.21.0" + "@lerna/list" "3.21.0" + "@lerna/publish" "3.22.1" + "@lerna/run" "3.21.0" + "@lerna/version" "3.22.1" + import-local "^2.0.0" + npmlog "^4.1.2" + +less-loader@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-10.0.0.tgz#2c21a204a29a46cba7de4e7d3659efa1e303c7d1" + integrity sha512-JjioAkw9qyavL0BzMPUOHJa0a20fh+ipq/MNZH4OkU8qERsCMeZIWRE0FDBIx2O+cFguvY01vHh/lmBA9LyWDg== + dependencies: + klona "^2.0.4" + +less@4.1.1, less@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/less/-/less-4.1.1.tgz#15bf253a9939791dc690888c3ff424f3e6c7edba" + integrity sha512-w09o8tZFPThBscl5d0Ggp3RcrKIouBoQscnOMgFH3n5V3kN/CXGHNfCkRPtxJk6nKryDXaV9aHLK55RXuH4sAw== + dependencies: + copy-anything "^2.0.1" + parse-node-version "^1.0.1" + tslib "^1.10.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + needle "^2.5.2" + source-map "~0.6.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +license-webpack-plugin@2.3.20: + version "2.3.20" + resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-2.3.20.tgz#f51fb674ca31519dbedbe1c7aabc036e5a7f2858" + integrity sha512-AHVueg9clOKACSHkhmEI+PCC9x8+qsQVuKECZD3ETxETK5h/PCv5/MUzyG1gm8OMcip/s1tcNxqo9Qb7WhjGsg== + dependencies: + "@types/webpack-sources" "^0.1.5" + webpack-sources "^1.2.0" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +lilconfig@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.3.tgz#68f3005e921dafbd2a2afb48379986aa6d2579fd" + integrity sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg== + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +listr2@^3.8.3: + version "3.11.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.11.0.tgz#9771b02407875aa78e73d6e0ff6541bbec0aaee9" + integrity sha512-XLJVe2JgXCyQTa3FbSv11lkKExYmEyA4jltVo8z4FX10Vt1Yj8IMekBfwim0BSOM9uj1QMTJvDQQpHyuPbB/dQ== + dependencies: + cli-truncate "^2.1.0" + colorette "^1.2.2" + log-update "^4.0.0" + p-map "^4.0.0" + rxjs "^6.6.7" + through "^2.3.8" + wrap-ansi "^7.0.0" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-json-file@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" + integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== + dependencies: + graceful-fs "^4.1.15" + parse-json "^4.0.0" + pify "^4.0.1" + strip-bom "^3.0.0" + type-fest "^0.3.0" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-runner@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== + +loader-utils@2.0.0, loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^1.0.2, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.template@^4.0.2, lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@4.x, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.2.1, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +log-symbols@^4.0.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" + integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= + +macos-release@^2.2.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.0.tgz#067c2c88b5f3fb3c56a375b2ec93826220fa1ff2" + integrity sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g== + +magic-string@0.25.3: + version "0.25.3" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.3.tgz#34b8d2a2c7fec9d9bdf9929a3fd81d271ef35be9" + integrity sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA== + dependencies: + sourcemap-codec "^1.4.4" + +magic-string@0.25.7, magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0, make-dir@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +make-fetch-happen@^9.0.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.0.4.tgz#ceaa100e60e0ef9e8d1ede94614bb2ba83c8bb24" + integrity sha512-sQWNKMYqSmbAGXqJg2jZ+PmHh5JAybvwu0xM8mZR/bsTjGiTASj3ldXJV7KFHy1k/IJIBkjxQFoWIVsv9+PQMg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^5.0.0" + ssri "^8.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-age-cleaner@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + +map-obj@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7" + integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +mem@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/mem/-/mem-8.1.1.tgz#cf118b357c65ab7b7e0817bdf00c8062297c0122" + integrity sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA== + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^3.1.0" + +memfs@^3.1.2, memfs@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.2.2.tgz#5de461389d596e3f23d48bb7c2afb6161f4df40e" + integrity sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q== + dependencies: + fs-monkey "1.0.3" + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +meow@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist "^1.1.3" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.49.0, "mime-db@>= 1.43.0 < 2": + version "1.49.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" + integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.32" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" + integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== + dependencies: + mime-db "1.49.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4, mime@~2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" + integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +mini-css-extract-plugin@1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz#83172b4fd812f8fc4a09d6f6d16f924f53990ca8" + integrity sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist@1.2.5, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: + version "1.3.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.4.tgz#63f5af868a38746ca7b33b03393ddf8c291244fe" + integrity sha512-TielGogIzbUEtd1LsjZFs47RWuHHfhl6TiCx1InVxApBAmQ8bL0dL5ilkLGcRvuyW/A9nE+Lvn855Ewz8S0PnQ== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + dependencies: + mkdirp "*" + +mkdirp@*, mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4, mkdirp@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +moment@^2.10.2: + version "2.29.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +multimatch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" + integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== + dependencies: + array-differ "^2.0.3" + array-union "^1.0.2" + arrify "^1.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mute-stream@0.0.8, mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.12.1: + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + +nanoid@^3.1.23: + version "3.1.23" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" + integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.5.2: + version "2.8.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.8.0.tgz#1c8ef9c1a2c29dcc1e83d73809d7bc681c80a048" + integrity sha512-ZTq6WYkN/3782H1393me3utVYdq2XyqNUFBsprEE3VMAT0+hP/cItpnITpqsY6ep2yeFE4Tqtqwc74VqUlUYtw== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.2, negotiator@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +ng-packagr@^12.1.0: + version "12.2.0" + resolved "https://registry.yarnpkg.com/ng-packagr/-/ng-packagr-12.2.0.tgz#53fe47391b5ddaf5f2c24eaecb23d8a10235d887" + integrity sha512-M/qq78Gb4q13t6SFX70W2DrPxyooSkLwXzhWozjD8yWGihx4q+54a72ODGx7jIrB4fQgrGDcMUTM7t1zGYir8Q== + dependencies: + "@rollup/plugin-commonjs" "^20.0.0" + "@rollup/plugin-json" "^4.1.0" + "@rollup/plugin-node-resolve" "^13.0.0" + ajv "^8.0.0" + ansi-colors "^4.1.1" + browserslist "^4.16.1" + cacache "^15.0.6" + chokidar "^3.5.1" + commander "^8.0.0" + dependency-graph "^0.11.0" + esbuild "^0.12.15" + find-cache-dir "^3.3.1" + glob "^7.1.6" + injection-js "^2.4.0" + jsonc-parser "^3.0.0" + less "^4.1.0" + node-sass-tilde-importer "^1.0.2" + ora "^5.1.0" + postcss "^8.2.4" + postcss-preset-env "^6.7.0" + postcss-url "^10.1.1" + rollup "^2.45.1" + rollup-plugin-sourcemaps "^0.6.3" + rxjs "^6.5.0" + sass "^1.32.8" + stylus "^0.54.8" + +ng-zorro-antd@^11.0.0, ng-zorro-antd@^11.0.1: + version "11.4.2" + resolved "https://registry.yarnpkg.com/ng-zorro-antd/-/ng-zorro-antd-11.4.2.tgz#c19f12fee9166cbed0b6c7c63fa37da0464413e7" + integrity sha512-1dMIz5zBma+CfUYYKmIKWIB9mXX837L+WKGGHhl2KrmIIbsbNLh3WTKudCBuyqL58EEgiVhTZYwl841xdz+vLw== + dependencies: + "@angular/cdk" "^11.0.2" + "@ant-design/icons-angular" "^11.0.1" + date-fns "^2.10.0" + resize-observer-polyfill "^1.5.1" + tslib "^2.0.0" + +ngxs-schematic@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/ngxs-schematic/-/ngxs-schematic-1.1.9.tgz#45f55777944b5e2d542e5a246046194ad522816e" + integrity sha512-l8mX/hKXoYw5a+kDXycSoY/3NqyWR6LhmKmiw3Fij3cVkxVCWRy2OByNEFi9Qm3sSIQpeo7aDGHWNcCXS0AYPA== + dependencies: + "@angular-devkit/core" "^8.0.3" + "@angular-devkit/schematics" "^8.0.6" + "@types/jasmine" "^3.3.9" + "@types/node" "^8.0.31" + jasmine "^3.3.1" + typescript "^3.5.2" + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-fetch@^2.5.0, node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-gyp@^5.0.2: + version "5.1.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" + integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" + tar "^4.4.12" + which "^1.3.1" + +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.3" + nopt "^5.0.0" + npmlog "^4.1.2" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-releases@^1.1.73: + version "1.1.73" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" + integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== + +node-sass-tilde-importer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/node-sass-tilde-importer/-/node-sass-tilde-importer-1.0.2.tgz#1a15105c153f648323b4347693fdb0f331bad1ce" + integrity sha512-Swcmr38Y7uB78itQeBm3mThjxBy9/Ah/ykPIaURY/L6Nec9AyRoL/jJ7ECfMR+oZeCTVQNxVMu/aHU+TLRVbdg== + dependencies: + find-parent-dir "^0.3.0" + +nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.2.tgz#cae5c410ae2434f9a6c1baa65d5bc3b9366c8699" + integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg== + dependencies: + hosted-git-info "^4.0.1" + resolve "^1.20.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@^6.0.1, normalize-url@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-bundled@^1.0.1, npm-bundled@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-install-checks@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== + dependencies: + semver "^7.1.1" + +npm-lifecycle@^3.1.2: + version "3.1.5" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" + integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-package-arg@8.1.5, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.2: + version "8.1.5" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" + integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== + dependencies: + hosted-git-info "^4.0.1" + semver "^7.3.4" + validate-npm-package-name "^3.0.0" + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-packlist@^2.1.4: + version "2.2.2" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8" + integrity sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg== + dependencies: + glob "^7.1.6" + ignore-walk "^3.0.3" + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@6.1.1, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" + integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== + dependencies: + npm-install-checks "^4.0.0" + npm-normalize-package-bin "^1.0.1" + npm-package-arg "^8.1.2" + semver "^7.3.4" + +npm-pick-manifest@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-registry-fetch@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" + integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== + dependencies: + make-fetch-happen "^9.0.1" + minipass "^3.1.3" + minipass-fetch "^1.3.0" + minipass-json-stream "^1.0.1" + minizlib "^2.0.0" + npm-package-arg "^8.0.0" + +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0, npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" + integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== + dependencies: + boolbase "^1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.11.0, object-inspect@^1.9.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" + integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +octokit-pagination-methods@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" + integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@8.2.1: + version "8.2.1" + resolved "https://registry.yarnpkg.com/open/-/open-8.2.1.tgz#82de42da0ccbf429bc12d099dad2e0975e14e8af" + integrity sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +open@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ora@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.1.0.tgz#b188cf8cd2d4d9b13fd25383bc3e5cba352c94f8" + integrity sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w== + dependencies: + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.4.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +ora@5.4.1, ora@^5.1.0, ora@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +ora@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== + dependencies: + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-spinners "^2.0.0" + log-symbols "^2.2.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-name@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" + integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== + dependencies: + macos-release "^2.2.0" + windows-release "^3.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4, osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +ospath@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= + dependencies: + p-reduce "^1.0.0" + +p-map@^2.0.0, p-map@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-pipe@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" + integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= + +p-queue@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" + integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg== + dependencies: + eventemitter3 "^3.1.0" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +p-waterfall@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" + integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= + dependencies: + p-reduce "^1.0.0" + +pacote@11.3.4: + version "11.3.4" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.4.tgz#c290b790a5cee3082bb8fa223f3f3e2fdf3d0bfc" + integrity sha512-RfahPCunM9GI7ryJV/zY0bWQiokZyLqaSNHXtbNSoLb7bwTvBbJBEyCJ01KWs4j1Gj7GmX8crYXQ1sNX6P2VKA== + dependencies: + "@npmcli/git" "^2.0.1" + "@npmcli/installed-package-contents" "^1.0.6" + "@npmcli/promise-spawn" "^1.2.0" + "@npmcli/run-script" "^1.8.2" + cacache "^15.0.5" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.3" + mkdirp "^1.0.3" + npm-package-arg "^8.0.1" + npm-packlist "^2.1.4" + npm-pick-manifest "^6.0.0" + npm-registry-fetch "^11.0.0" + promise-retry "^2.0.1" + read-package-json-fast "^2.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.1.0" + +pako@~1.0.2, pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-github-repo-url@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" + integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-node-version@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + +parse-path@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.3.tgz#82d81ec3e071dcc4ab49aa9f2c9c0b8966bb22bf" + integrity sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA== + dependencies: + is-ssh "^1.3.0" + protocols "^1.4.0" + qs "^6.9.4" + query-string "^6.13.8" + +parse-url@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-6.0.0.tgz#f5dd262a7de9ec00914939220410b66cff09107d" + integrity sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw== + dependencies: + is-ssh "^1.3.0" + normalize-url "^6.1.0" + parse-path "^4.0.0" + protocols "^1.4.0" + +parse5-html-rewriting-stream@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz#de1820559317ab4e451ea72dba05fddfd914480b" + integrity sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg== + dependencies: + parse5 "^6.0.1" + parse5-sax-parser "^6.0.1" + +parse5-htmlparser2-tree-adapter@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5-sax-parser@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz#98b4d366b5b266a7cd90b4b58906667af882daba" + integrity sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg== + dependencies: + parse5 "^6.0.1" + +parse5@6.0.1, parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" + integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^6.0.2" + +postcss-calc@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.0.0.tgz#a05b87aacd132740a5db09462a3612453e5df90a" + integrity sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g== + dependencies: + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" + integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" + integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-color-hex-alpha@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" + integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== + dependencies: + postcss "^7.0.14" + postcss-values-parser "^2.0.1" + +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" + integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" + integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-colormin@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.2.0.tgz#2b620b88c0ff19683f3349f4cf9e24ebdafb2c88" + integrity sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + colord "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-convert-values@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz#4ec19d6016534e30e3102fdf414e753398645232" + integrity sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg== + dependencies: + postcss-value-parser "^4.1.0" + +postcss-custom-media@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" + integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== + dependencies: + postcss "^7.0.14" + +postcss-custom-properties@^8.0.11: + version "8.0.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" + integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== + dependencies: + postcss "^7.0.17" + postcss-values-parser "^2.0.1" + +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" + integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" + integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-discard-comments@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz#9eae4b747cf760d31f2447c27f0619d5718901fe" + integrity sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg== + +postcss-discard-duplicates@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz#68f7cc6458fe6bab2e46c9f55ae52869f680e66d" + integrity sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA== + +postcss-discard-empty@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz#ee136c39e27d5d2ed4da0ee5ed02bc8a9f8bf6d8" + integrity sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw== + +postcss-discard-overridden@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz#454b41f707300b98109a75005ca4ab0ff2743ac6" + integrity sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q== + +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" + integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== + dependencies: + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-env-function@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" + integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" + integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== + dependencies: + postcss "^7.0.2" + +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" + integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== + dependencies: + postcss "^7.0.2" + +postcss-font-variant@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" + integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== + dependencies: + postcss "^7.0.2" + +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" + integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== + dependencies: + postcss "^7.0.2" + +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" + integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-import@14.0.2: + version "14.0.2" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.0.2.tgz#60eff77e6be92e7b67fe469ec797d9424cae1aa1" + integrity sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-initial@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" + integrity sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg== + dependencies: + postcss "^7.0.2" + +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" + integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-loader@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.1.0.tgz#13c800a00b3c7d434a1319a73d85e2df0714cdde" + integrity sha512-yA/cXBfACkthZNA2hQxOnaReVfQ6uLmvbEDQzNafpbK40URZJvP/28dL1DG174Gvz3ptkkHbbwDBCh+gXR94CA== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.4" + semver "^7.3.5" + +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" + integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + dependencies: + postcss "^7.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" + integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + dependencies: + postcss "^7.0.2" + +postcss-merge-longhand@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz#277ada51d9a7958e8ef8cf263103c9384b322a41" + integrity sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw== + dependencies: + css-color-names "^1.0.1" + postcss-value-parser "^4.1.0" + stylehacks "^5.0.1" + +postcss-merge-rules@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz#d6e4d65018badbdb7dcc789c4f39b941305d410a" + integrity sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + cssnano-utils "^2.0.1" + postcss-selector-parser "^6.0.5" + vendors "^1.0.3" + +postcss-minify-font-values@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz#a90cefbfdaa075bd3dbaa1b33588bb4dc268addf" + integrity sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA== + dependencies: + postcss-value-parser "^4.1.0" + +postcss-minify-gradients@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz#2dc79fd1a1afcb72a9e727bc549ce860f93565d2" + integrity sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g== + dependencies: + cssnano-utils "^2.0.1" + is-color-stop "^1.1.0" + postcss-value-parser "^4.1.0" + +postcss-minify-params@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz#371153ba164b9d8562842fdcd929c98abd9e5b6c" + integrity sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw== + dependencies: + alphanum-sort "^1.0.2" + browserslist "^4.16.0" + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz#4385c845d3979ff160291774523ffa54eafd5a54" + integrity sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og== + dependencies: + alphanum-sort "^1.0.2" + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + dependencies: + postcss "^7.0.2" + +postcss-normalize-charset@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz#121559d1bebc55ac8d24af37f67bd4da9efd91d0" + integrity sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg== + +postcss-normalize-display-values@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz#62650b965981a955dffee83363453db82f6ad1fd" + integrity sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ== + dependencies: + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-normalize-positions@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz#868f6af1795fdfa86fbbe960dceb47e5f9492fe5" + integrity sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg== + dependencies: + postcss-value-parser "^4.1.0" + +postcss-normalize-repeat-style@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz#cbc0de1383b57f5bb61ddd6a84653b5e8665b2b5" + integrity sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w== + dependencies: + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-normalize-string@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz#d9eafaa4df78c7a3b973ae346ef0e47c554985b0" + integrity sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA== + dependencies: + postcss-value-parser "^4.1.0" + +postcss-normalize-timing-functions@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz#8ee41103b9130429c6cbba736932b75c5e2cb08c" + integrity sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q== + dependencies: + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-normalize-unicode@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz#82d672d648a411814aa5bf3ae565379ccd9f5e37" + integrity sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA== + dependencies: + browserslist "^4.16.0" + postcss-value-parser "^4.1.0" + +postcss-normalize-url@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz#ddcdfb7cede1270740cf3e4dfc6008bd96abc763" + integrity sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ== + dependencies: + is-absolute-url "^3.0.3" + normalize-url "^6.0.1" + postcss-value-parser "^4.1.0" + +postcss-normalize-whitespace@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz#b0b40b5bcac83585ff07ead2daf2dcfbeeef8e9a" + integrity sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA== + dependencies: + postcss-value-parser "^4.1.0" + +postcss-ordered-values@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz#1f351426977be00e0f765b3164ad753dac8ed044" + integrity sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ== + dependencies: + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" + integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== + dependencies: + postcss "^7.0.2" + +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" + integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== + dependencies: + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" + integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@6.7.0, postcss-preset-env@^6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" + integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + dependencies: + autoprefixer "^9.6.1" + browserslist "^4.6.4" + caniuse-lite "^1.0.30000981" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.4.0" + postcss "^7.0.17" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.3" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.8" + postcss-custom-properties "^8.0.11" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" + integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-reduce-initial@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz#9d6369865b0f6f6f6b165a0ef5dc1a4856c7e946" + integrity sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw== + dependencies: + browserslist "^4.16.0" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz#93c12f6a159474aa711d5269923e2383cedcf640" + integrity sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA== + dependencies: + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" + integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== + dependencies: + postcss "^7.0.2" + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" + integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" + integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5: + version "6.0.6" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" + integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.0.2.tgz#bc73c4ea4c5a80fbd4b45e29042c34ceffb9257f" + integrity sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A== + dependencies: + postcss-value-parser "^4.1.0" + svgo "^2.3.0" + +postcss-unique-selectors@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz#3be5c1d7363352eff838bd62b0b07a0abad43bfc" + integrity sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w== + dependencies: + alphanum-sort "^1.0.2" + postcss-selector-parser "^6.0.5" + uniqs "^2.0.0" + +postcss-url@^10.1.1: + version "10.1.3" + resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-10.1.3.tgz#54120cc910309e2475ec05c2cfa8f8a2deafdf1e" + integrity sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw== + dependencies: + make-dir "~3.1.0" + mime "~2.5.2" + minimatch "~3.0.4" + xxhashjs "~0.2.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@8.3.5: + version "8.3.5" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.5.tgz#982216b113412bc20a86289e91eb994952a5b709" + integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.23" + source-map-js "^0.6.2" + +postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.36" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" + integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^8.2.15, postcss@^8.2.4, postcss@^8.2.9: + version "8.3.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" + integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.23" + source-map-js "^0.6.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" + integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== + +pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-format@^26.0.0, pretty-format@^26.4.2, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +pretty-format@^27.0.0, pretty-format@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.6.tgz#ab770c47b2c6f893a21aefc57b75da63ef49a11f" + integrity sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ== + dependencies: + "@jest/types" "^27.0.6" + ansi-regex "^5.0.0" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +prompts@^2.0.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" + integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= + dependencies: + read "1" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.8" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" + integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" + +protractor@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-7.0.0.tgz#c3e263608bd72e2c2dc802b11a772711a4792d03" + integrity sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw== + dependencies: + "@types/q" "^0.0.32" + "@types/selenium-webdriver" "^3.0.0" + blocking-proxy "^1.0.0" + browserstack "^1.5.1" + chalk "^1.1.3" + glob "^7.0.3" + jasmine "2.8.0" + jasminewd2 "^2.1.0" + q "1.4.1" + saucelabs "^1.5.0" + selenium-webdriver "3.6.0" + source-map-support "~0.4.0" + webdriver-js-extender "2.1.0" + webdriver-manager "^12.1.7" + yargs "^15.3.1" + +proxy-addr@~2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28, psl@^1.1.33: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= + +q@^1.4.1, q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@^6.9.4: + version "6.10.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^6.13.8: + version "6.14.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" + integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== + dependencies: + decode-uri-component "^0.2.0" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +ramda@~0.27.1: + version "0.27.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9" + integrity sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" + integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= + dependencies: + pify "^2.3.0" + +read-cmd-shim@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== + dependencies: + graceful-fs "^4.1.2" + +read-package-json-fast@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== + dependencies: + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: + version "2.1.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" + integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== + dependencies: + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + +read-package-tree@^5.1.6: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read@1, read@~1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdir-scoped-modules@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +reflect-metadata@^0.1.2: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@0.13.7: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regex-parser@^2.2.11: + version "2.2.11" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + +regexp.prototype.flags@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.9" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" + integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +replace-in-file@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/replace-in-file/-/replace-in-file-6.2.0.tgz#9c0e381b0e02f27f83d5ba500bb4046f63d18566" + integrity sha512-Im2AF9G/qgkYneOc9QwWwUS/efyyonTUBvzXS2VXuxPawE5yQIjT/e6x4CTijO0Quq48lfAujuo+S89RR2TP2Q== + dependencies: + chalk "^4.1.0" + glob "^7.1.6" + yargs "^16.2.0" + +request-progress@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" + integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= + dependencies: + throttleit "^1.0.0" + +request@^2.87.0, request@^2.88.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.1, require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-alpn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.0.tgz#058bb0888d1cd4d12474e9a4b6eb17bdd5addc44" + integrity sha512-e4FNQs+9cINYMO5NMFc6kOUCdohjqFPSgMuwuZAOUWqrfWsen+Yjy5qZFkV5K7VO7tFSLKcUL97olkED7sCBHA== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url-loader@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57" + integrity sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA== + dependencies: + adjust-sourcemap-loader "^4.0.0" + convert-source-map "^1.7.0" + loader-utils "^2.0.0" + postcss "^7.0.35" + source-map "0.6.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.20.0, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.2: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +responselike@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" + integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rollup-plugin-sourcemaps@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz#bf93913ffe056e414419607f1d02780d7ece84ed" + integrity sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw== + dependencies: + "@rollup/pluginutils" "^3.0.9" + source-map-resolve "^0.6.0" + +rollup@^2.45.1: + version "2.56.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.56.2.tgz#a045ff3f6af53ee009b5f5016ca3da0329e5470f" + integrity sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ== + optionalDependencies: + fsevents "~2.3.2" + +run-async@^2.2.0, run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs-for-await@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/rxjs-for-await/-/rxjs-for-await-0.0.2.tgz#26598a1d6167147cc192172970e7eed4e620384b" + integrity sha512-IJ8R/ZCFMHOcDIqoABs82jal00VrZx8Xkgfe7TOKoaRPAW5nH/VFlG23bXpeGdrmtqI9UobFPgUKgCuFc7Lncw== + +rxjs@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" + integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== + dependencies: + tslib "^1.9.0" + +rxjs@6.6.3: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + +rxjs@6.6.7, rxjs@^6.4.0, rxjs@^6.5.0, rxjs@^6.5.2, rxjs@^6.5.4, rxjs@^6.6.6, rxjs@^6.6.7, rxjs@~6.6.0: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^7.2.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6" + integrity sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw== + dependencies: + tslib "~2.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-loader@12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.1.0.tgz#b73324622231009da6fba61ab76013256380d201" + integrity sha512-FVJZ9kxVRYNZTIe2xhw93n3xJNYZADr+q69/s98l9nTCrWASo+DR2Ot0s5xTKQDDEosUkatsGeHxcH4QBp5bSg== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + +sass@1.35.1: + version "1.35.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.35.1.tgz#90ecf774dfe68f07b6193077e3b42fb154b9e1cd" + integrity sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ== + dependencies: + chokidar ">=3.0.0 <4.0.0" + +sass@^1.32.8: + version "1.37.5" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.37.5.tgz#f6838351f7cc814c4fcfe1d9a20e0cabbd1e7b3c" + integrity sha512-Cx3ewxz9QB/ErnVIiWg2cH0kiYZ0FPvheDTVC6BsiEGBTZKKZJ1Gq5Kq6jy3PKtL6+EJ8NIoaBW/RSd2R6cZOA== + dependencies: + chokidar ">=3.0.0 <4.0.0" + +saucelabs@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" + integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ== + dependencies: + https-proxy-agent "^2.2.1" + +sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" + integrity sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q== + dependencies: + jszip "^3.1.3" + rimraf "^2.5.4" + tmp "0.0.30" + xml2js "^0.4.17" + +selfsigned@^1.10.8: + version "1.10.11" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" + integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== + dependencies: + node-forge "^0.10.0" + +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.0.1, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +semver@7.3.5, semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +should-quote@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/should-quote/-/should-quote-1.0.0.tgz#18e58cb92a3fecb6e163cf92c8158847058589d7" + integrity sha512-mQN5Meec3CTPmykzwXfDGWDpi75HUD8NT21wRWaJ7oqxpFIhXq80Hiy4ziccUNOwzhWeFkT9/kNSZbaugL9jsA== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slide@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +smart-buffer@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +snq@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/snq/-/snq-1.0.3.tgz#f9661d10eebb224c52fc3c50106445c268618168" + integrity sha512-bXcxd1ppFnSNYKq84HyOYuYtbMHCFTZvuPSNCn/80yx9+DLkU/hLqjqCRKRHSDISrL1T/lWGXJyQxWS8TnutFA== + +sockjs-client@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" + integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== + dependencies: + debug "^3.2.6" + eventsource "^1.0.7" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.5.1" + +sockjs@^0.3.21: + version "0.3.21" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" + integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== + dependencies: + faye-websocket "^0.11.3" + uuid "^3.4.0" + websocket-driver "^0.7.4" + +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" + integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== + dependencies: + agent-base "^6.0.2" + debug "4" + socks "^2.3.3" + +socks@^2.3.3: + version "2.6.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" + integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.1.0" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0, source-list-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-js@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" + integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== + +source-map-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.0.tgz#f2a04ee2808ad01c774dea6b7d2639839f3b3049" + integrity sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw== + dependencies: + abab "^2.0.5" + iconv-lite "^0.6.2" + source-map-js "^0.6.2" + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-resolve@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" + integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + +source-map-support@0.5.19, source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.4.0: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@0.7.3, source-map@^0.7.3, source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.10" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" + integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== + dependencies: + through2 "^2.0.2" + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.0, ssri@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== + dependencies: + escape-string-regexp "^2.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.padend@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz#6858ca4f35c5268ebd5e8615e1327d55f59ee311" + integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strong-log-transformer@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +style-loader@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" + integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +stylehacks@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.0.1.tgz#323ec554198520986806388c7fdaebc38d2c06fb" + integrity sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA== + dependencies: + browserslist "^4.16.0" + postcss-selector-parser "^6.0.4" + +stylus-loader@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-6.1.0.tgz#7a3a719a27cb2b9617896d6da28fda94c3ed9762" + integrity sha512-qKO34QCsOtSJrXxQQmXsPeaVHh6hMumBAFIoJTcsSr2VzrA6o/CW9HCGR8spCjzJhN8oKQHdj/Ytx0wwXyElkw== + dependencies: + fast-glob "^3.2.5" + klona "^2.0.4" + normalize-path "^3.0.0" + +stylus@0.54.8, stylus@^0.54.8: + version "0.54.8" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147" + integrity sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg== + dependencies: + css-parse "~2.0.0" + debug "~3.1.0" + glob "^7.1.6" + mkdirp "~1.0.4" + safer-buffer "^2.1.2" + sax "~1.2.4" + semver "^6.3.0" + source-map "^0.7.3" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +svgo@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.3.1.tgz#603a69ce50311c0e36791528f549644ec1b3f4bc" + integrity sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw== + dependencies: + "@trysound/sax" "0.1.1" + chalk "^4.1.0" + commander "^7.1.0" + css-select "^4.1.3" + css-tree "^1.1.2" + csso "^4.2.0" + stable "^0.1.8" + +symbol-observable@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" + integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +symlink-manager@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/symlink-manager/-/symlink-manager-1.5.1.tgz#75721cacf2247ad6817b0ca5c033b87c8d4599fd" + integrity sha512-LKRsow5vrpOpk7dOxfj9uWDfb2g+f7GoaJdvTnUm5NyodQuHZJxHZpqsHvoKIvMyrlpkL4qbC8HXx2DbkQ+w8Q== + dependencies: + arg "^4.1.0" + chokidar "^3.0.2" + color-support "^1.1.3" + esm "^3.2.25" + execa "^4.0.0" + figlet "^1.2.3" + fs-extra "^8.1.0" + inquirer "^6.4.1" + inquirer-file-tree-selection-prompt "^1.0.2" + kleur "^3.0.3" + lodash "^4.17.11" + ora "^3.4.0" + rxjs "^6.5.2" + +table@^6.0.4: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" + integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== + +tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: + version "4.4.16" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.16.tgz#4a48b3c025e77d9d0c788f038a09b91c594d326d" + integrity sha512-gOVUT/KWPkGFZQmCRDVFNUWBl7niIo/PRR7lzrIqtZpit+st54lGROuVjc6zEQM9FhH+dJfQIl+9F0k8GNXg5g== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +tar@^6.0.2, tar@^6.1.0: + version "6.1.7" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.7.tgz#c566d1107d38b09e92983a68db5534fc7f6cab42" + integrity sha512-PBoRkOJU0X3lejJ8GaRCsobjXTgFofRDSPdSUhRSdlwJfifRlQBwGXitDItdGFu0/h0XDMCkig0RN1iT7DBxhA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +temp-write@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" + integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= + dependencies: + graceful-fs "^4.1.2" + is-stream "^1.1.0" + make-dir "^1.0.0" + pify "^3.0.0" + temp-dir "^1.0.0" + uuid "^3.0.1" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz#30033e955ca28b55664f1e4b30a1347e61aa23af" + integrity sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A== + dependencies: + jest-worker "^27.0.2" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + terser "^5.7.0" + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser-webpack-plugin@^5.1.3: + version "5.1.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz#c369cf8a47aa9922bd0d8a94fe3d3da11a7678a1" + integrity sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA== + dependencies: + jest-worker "^27.0.2" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + terser "^5.7.0" + +terser@5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" + integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +terser@^4.1.2: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.1.tgz#2dc7a61009b66bb638305cb2a824763b116bf784" + integrity sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@0.2.0, text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +throat@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" + integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== + +throttleit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" + integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= + +through2@^2.0.0, through2@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" + integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== + dependencies: + inherits "^2.0.4" + readable-stream "2 || 3" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tmp@0.0.30: + version "0.0.30" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" + integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= + dependencies: + os-tmpdir "~1.0.1" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tree-kill@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +trim-off-newlines@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + +ts-jest@27.0.3: + version "27.0.3" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.0.3.tgz#808492f022296cde19390bb6ad627c8126bf93f8" + integrity sha512-U5rdMjnYam9Ucw+h0QvtNDbc5+88nxt7tbIvqaZUhFrfG4+SkWhMXjejCLVGcpILTPuV+H3W/GZDZrnZFpPeXw== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + jest-util "^27.0.0" + json5 "2.x" + lodash "4.x" + make-error "1.x" + mkdirp "1.x" + semver "7.x" + yargs-parser "20.x" + +ts-jest@^27.0.0: + version "27.0.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.0.4.tgz#df49683535831560ccb58f94c023d831b1b80df0" + integrity sha512-c4E1ECy9Xz2WGfTMyHbSaArlIva7Wi2p43QOMmCqjSSjHP06KXv+aT+eSY+yZMuqsMi3k7pyGsGj2q5oSl5WfQ== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + jest-util "^27.0.0" + json5 "2.x" + lodash "4.x" + make-error "1.x" + mkdirp "1.x" + semver "7.x" + yargs-parser "20.x" + +ts-loader@5.4.5: + version "5.4.5" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-5.4.5.tgz#a0c1f034b017a9344cef0961bfd97cc192492b8b" + integrity sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw== + dependencies: + chalk "^2.3.0" + enhanced-resolve "^4.0.0" + loader-utils "^1.0.2" + micromatch "^3.1.4" + semver "^5.0.1" + +ts-node@~9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" + integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== + dependencies: + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +ts-toolbelt@6.15.4: + version "6.15.4" + resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.15.4.tgz#f7fad584e197d0f495f77b5e3ee75a8f4c4dd3da" + integrity sha512-Ifp2yNo4I8q5UwNARUBMnBiFpv5DEtTbCtS8RCjjLOz+PNcThbjUsPJCK3hRnz0dTygM1Fi3Mgvnt/DoKUTU2g== + +tsconfig-paths-webpack-plugin@3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.4.1.tgz#4f0d7aa7c8258e7f99e0aa9b27c5687693b55eb1" + integrity sha512-HN1aWCPOXLF3dDke1w4z3RfCgmm9yTppg51FMCqZ02p6leKD4JZvvnPZtqhvnQVmoWWaQjbpO93h2WFjRJjQcA== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.7.0" + tsconfig-paths "^3.9.0" + +tsconfig-paths@^3.9.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz#79ae67a68c15289fdf5c51cb74f397522d795ed7" + integrity sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q== + dependencies: + json5 "^2.2.0" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tsickle@^0.39.1: + version "0.39.1" + resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.39.1.tgz#7ccf672cde5b430f5dd0b281ee49e170ef390ff9" + integrity sha512-CCc9cZhZbKoNizVM+K3Uqgit/go8GacjpqTv1cpwG/n2P0gB9GMoWZbxrUULDE9Wz26Lh86CGf6QyIPUVV1lnQ== + +tslib@2.3.0, tslib@^2.0.0, tslib@^2.1.0, tslib@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + +tslib@^1.10.0, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + +tslint@~6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" + integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^4.0.1" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.3" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.13.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" + integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== + +typescript@^3.5.2, typescript@~3.9.2: + version "3.9.10" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" + integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== + +typescript@~4.3.5: + version "4.3.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" + integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== + +uglify-js@^3.1.4: + version "3.14.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.1.tgz#e2cb9fe34db9cb4cf7e35d1d26dfea28e09a7d06" + integrity sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g== + +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= + +umask@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" + integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== + dependencies: + os-name "^3.1.0" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + +universalify@^0.1.0, universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +upath@^1.1.1, upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse@^1.4.3, url-parse@^1.5.1: + version "1.5.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" + integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^3.0.1, uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@2.3.0, v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz#4229f2a99e367f3f018fa1d5c2b8ec684667c69c" + integrity sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +watchpack@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" + integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webdriver-js-extender@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" + integrity sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ== + dependencies: + "@types/selenium-webdriver" "^3.0.0" + selenium-webdriver "^3.0.1" + +webdriver-manager@^12.1.7: + version "12.1.8" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.8.tgz#5e70e73eaaf53a0767d5745270addafbc5905fd4" + integrity sha512-qJR36SXG2VwKugPcdwhaqcLQOD7r8P2Xiv9sfNbfZrKBnX243iAkOueX1yAmeNgIKhJ3YAT/F2gq6IiEZzahsg== + dependencies: + adm-zip "^0.4.9" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.87.0" + rimraf "^2.5.2" + semver "^5.3.0" + xml2js "^0.4.17" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-dev-middleware@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.0.0.tgz#0abe825275720e0a339978aea5f0b03b140c1584" + integrity sha512-9zng2Z60pm6A98YoRcA0wSxw1EYn7B7y5owX/Tckyt9KGyULTkLtiavjaXlWqOMkM0YtqGgL3PvMOFgyFLq8vw== + dependencies: + colorette "^1.2.2" + mem "^8.1.1" + memfs "^3.2.2" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^3.0.0" + +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@3.11.2: + version "3.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" + integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.8" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "^0.3.21" + sockjs-client "^1.5.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@5.7.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" + integrity sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-merge@5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-node-externals@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz#6e1ee79ac67c070402ba700ef033a9b8d52ac4e3" + integrity sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg== + +webpack-sources@^1.1.0, webpack-sources@^1.2.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-sources@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" + integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack-sources@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.0.tgz#b16973bcf844ebcdb3afde32eda1c04d0b90f89d" + integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== + +webpack-subresource-integrity@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.2.tgz#e40b6578d3072e2d24104975249c52c66e9a743e" + integrity sha512-GBWYBoyalbo5YClwWop9qe6Zclp8CIXYGIz12OPclJhIrSplDxs1Ls1JDMH8xBPPrg1T6ISaTW9Y6zOrwEiAzw== + dependencies: + webpack-sources "^1.3.0" + +webpack@4.46.0: + version "4.46.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" + integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.5.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +webpack@5.44.0: + version "5.44.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.44.0.tgz#97b13a02bd79fb71ac6301ce697920660fa214a1" + integrity sha512-I1S1w4QLoKmH19pX6YhYN0NiSXaWY8Ou00oA+aMcr9IUGeF5azns+IKBkfoAAG9Bu5zOIzZt/mN35OffBya8AQ== + dependencies: + "@types/eslint-scope" "^3.7.0" + "@types/estree" "^0.0.50" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.4.1" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.8.0" + es-module-lexer "^0.7.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.4" + json-parse-better-errors "^1.0.2" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.0.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.2.0" + webpack-sources "^2.3.0" + +"webpack@^4.0.0 || ^5.30.0": + version "5.49.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.49.0.tgz#e250362b781a9fb614ba0a97ed67c66b9c5310cd" + integrity sha512-XarsANVf28A7Q3KPxSnX80EkCcuOer5hTOEJWJNvbskOZ+EK3pobHarGHceyUZMxpsTHBHhlV7hiQyLZzGosYw== + dependencies: + "@types/eslint-scope" "^3.7.0" + "@types/estree" "^0.0.50" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.4.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.8.0" + es-module-lexer "^0.7.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.4" + json-parse-better-errors "^1.0.2" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.2.0" + webpack-sources "^3.2.0" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +windows-release@^3.1.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" + integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg== + dependencies: + execa "^1.0.0" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-json-file@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" + integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + pify "^3.0.0" + sort-keys "^2.0.0" + write-file-atomic "^2.0.0" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-pkg@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" + integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== + dependencies: + sort-keys "^2.0.0" + write-json-file "^2.2.0" + +ws@^6.2.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== + dependencies: + async-limiter "~1.0.0" + +ws@^7.4.6: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xml2js@^0.4.17: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xxhashjs@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" + integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw== + dependencies: + cuint "^0.2.2" + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.0.0.tgz#c65a1daaa977ad63cebdd52159147b789a4e19a9" + integrity sha512-8eblPHTL7ZWRkyjIZJjnGf+TijiKJSwA24svzLRVvtgoi/RZiKa9fFQTrlx0OKLnyHSdt/enrdadji6WFfESVA== + +yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^15.0.1: + version "15.0.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.3.tgz#316e263d5febe8b38eef61ac092b33dfcc9b1115" + integrity sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.0, yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@15.3.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.0.tgz#403af6edc75b3ae04bf66c94202228ba119f0976" + integrity sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.0" + +yargs@15.4.1, yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^14.2.2: + version "14.2.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" + integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== + dependencies: + cliui "^5.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^15.0.1" + +yargs@^16.0.3, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.0.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.1.0.tgz#0cd9827a0572c9a1795361c4d1530e53ada168cf" + integrity sha512-SQr7qqmQ2sNijjJGHL4u7t8vyDZdZ3Ahkmo4sc1w5xI9TBX0QDdG/g4SFnxtWOsGLjwHQue57eFALfwFCnixgg== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zone.js@~0.11.4: + version "0.11.4" + resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.11.4.tgz#0f70dcf6aba80f698af5735cbb257969396e8025" + integrity sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw== + dependencies: + tslib "^2.0.0" diff --git a/npm/ng-packs/packages/theme-shared/ng-package.json b/npm/ng-packs/packages/theme-shared/ng-package.json index 8af12353fd..c7227c7077 100644 --- a/npm/ng-packs/packages/theme-shared/ng-package.json +++ b/npm/ng-packs/packages/theme-shared/ng-package.json @@ -12,7 +12,6 @@ "@ngx-validate/core", "@swimlane/ngx-datatable", "bootstrap", - "font-awesome", "chart.js" ] } diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index 586f60b420..7048ede7f2 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -2,27 +2,27 @@ # yarn lockfile v1 -"@abp/ng.account.core@~4.4.0-rc.1": - version "4.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.account.core/-/ng.account.core-4.4.0-rc.1.tgz#1ad64c69327f4216e8d3f76cf12ea69f1c8e936d" - integrity sha512-erH5ZL63+Qs6hESPUUIA8qsDMguhFDyCgvbridqDNSEZdzA8cSO7KdjM0+XA77NbLItkHK/HRl80sEAOyY+myw== +"@abp/ng.account.core@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.account.core/-/ng.account.core-4.4.0.tgz#347f5559d019618cd4cb7129389f303e382a0508" + integrity sha512-Doqy39F8TIxSBaEwLMKgR2OUdt8p4TO7fHKWSRzwHeeGlPsJ/cfNWI8xdMl7C0kLGuhX6BQj2+rzx9miGW0T0g== dependencies: tslib "^2.0.0" -"@abp/ng.components@~4.4.0-rc.1": - version "4.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.components/-/ng.components-4.4.0-rc.1.tgz#4b7880a9a3f178468ee4b0c19746da8355ab36f2" - integrity sha512-BS5ekimWPm5OMM4cYMOS3gErRgl7k3aHV1RHCqA5pnVVBWFSyi2E0H93o42mmpxpv5nPENal1R8NaCd2Wxf1wA== +"@abp/ng.components@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.components/-/ng.components-4.4.0.tgz#5eefed4c486de0a83431fe9740567b88fd70a36f" + integrity sha512-Ar0pzVhGEnGWR2w0g/RE5tvwArx4HYpSasGdipyKecevC0cubYDvpsX/KicdvC93RnLXgd3bCq7WUs1hkC04rQ== dependencies: ng-zorro-antd "^11.0.0" tslib "^2.0.0" -"@abp/ng.core@~4.4.0-rc.1": - version "4.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-4.4.0-rc.1.tgz#d8b0640e515e9ee8f039b910d6b3570104d7e33b" - integrity sha512-qnP9HICCyehvzoEc0r6CXcs6vktDGLqPptmZiLlGULXPRQdd2DUpNv6INvKvOApiBMu/W9Tqbd6eZdwx1zAqfQ== +"@abp/ng.core@~4.4.0", "@abp/ng.core@~4.4.0-rc.2": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-4.4.0.tgz#e5026caaaa9afd5a17a07e49bbb39020516e7c54" + integrity sha512-mF746bWt7bFS5dcRMAQCbm523/mABulWKJWDT/igNg0h19Lfnr9juaKz3eVrOixoxygBcSpK6tqv0C0Adxzr7Q== dependencies: - "@abp/utils" "^4.4.0-rc.1" + "@abp/utils" "^4.4.0" "@angular/localize" "~10.0.10" "@ngxs/store" "^3.7.0" angular-oauth2-oidc "^10.0.0" @@ -32,35 +32,35 @@ ts-toolbelt "6.15.4" tslib "^2.0.0" -"@abp/ng.feature-management@~4.4.0-rc.1": - version "4.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-4.4.0-rc.1.tgz#f4777a65571ba04dac92dbc23b71d71e9d68ff5b" - integrity sha512-+A/fvT7UGV3/XCC0/WEt2li/0t1JxYm+HItEHaBNCzwT8No+v9EClD2uHO2LGDFms5/j8P3Ap61lGHGcwgjaJw== +"@abp/ng.feature-management@~4.4.0", "@abp/ng.feature-management@~4.4.0-rc.2": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-4.4.0.tgz#3b63b5e1101d9f92772d5b8c3b80f12b8cebec51" + integrity sha512-9mZ1cl/qu6D/flWcQRklL6No89gE/MjJuMjVjr+qwZabyU6Y/h3ATM1l+CL3+Z1hJ3TKO4Au28FqbxfzycOu/w== dependencies: - "@abp/ng.theme.shared" "~4.4.0-rc.1" + "@abp/ng.theme.shared" "~4.4.0" tslib "^2.0.0" -"@abp/ng.identity@~4.4.0-rc.1": - version "4.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-4.4.0-rc.1.tgz#ce5b2f6b52b97b0bff87e85144097300cdbf2a90" - integrity sha512-Fye/t+G6k/DBnAqk1zDxJo3p8ad2fRmzOBV0LTr9b5QVX5Qfbk74VDRED70KYrGn+oL8HD23HuLgGNZO1eCJpg== +"@abp/ng.identity@~4.4.0-rc.2": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-4.4.0.tgz#22c34b3962844bbbd891a560d8eb46f8f0c1fffb" + integrity sha512-x1E6NBJiaCWjbicuey+8Z40izFpXnflZWEjjSxeCXgVCcAjxZyXOra7iGC/19Q4MNphFVa0cpgEPPI2bltA7yA== dependencies: - "@abp/ng.permission-management" "~4.4.0-rc.1" - "@abp/ng.theme.shared" "~4.4.0-rc.1" + "@abp/ng.permission-management" "~4.4.0" + "@abp/ng.theme.shared" "~4.4.0" tslib "^2.0.0" -"@abp/ng.permission-management@~4.4.0-rc.1": - version "4.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-4.4.0-rc.1.tgz#fefde68d532e4a3556071792cc428d0c943c359c" - integrity sha512-uzA36OwryQcDSevzqfFfOra7f1O/ix/cn7ItkReFQGE148fpg5gH55gua/tl+qAEjWYBPCpfaZH8FKSPD2Bv/Q== +"@abp/ng.permission-management@~4.4.0", "@abp/ng.permission-management@~4.4.0-rc.2": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-4.4.0.tgz#81730f10d84f5d683a2bb11ce2c892cb8624327c" + integrity sha512-uW0/tin7JslUa4LYdqIvF86scGBYb38q5I1AHBLnO9GRw0VQRkCO2RSES6td4Qu1cBnfV0rjGFKJLScwQ9nTpw== dependencies: - "@abp/ng.theme.shared" "~4.4.0-rc.1" + "@abp/ng.theme.shared" "~4.4.0" tslib "^2.0.0" -"@abp/ng.schematics@~4.4.0-rc.1": - version "4.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-4.4.0-rc.1.tgz#6c5179d75e7409b2efd3153ad87dae2561cb4c9b" - integrity sha512-9nrBUa1mx88VvhVJupODFb/8rKq4ZBUXGK1Fjrt0oXfsXvKreQ3egHOmXhvRkVYkYm3sUkXS2CwddXoGm3/uQw== +"@abp/ng.schematics@~4.4.0-rc.2": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-4.4.0.tgz#e13689b85a4724736b79ca7257af3bee093e1d2a" + integrity sha512-UFJait7QGGVK3YKF0JvWghIvF7mxn5nnUaGckcNhZA7N1+FFYwTtLqdAscPgA7HjsQch/c9eRd+jROJreiHdrw== dependencies: "@angular-devkit/core" "~11.0.2" "@angular-devkit/schematics" "~11.0.2" @@ -69,39 +69,39 @@ should-quote "^1.0.0" typescript "~3.9.2" -"@abp/ng.setting-management@~4.4.0-rc.1": - version "4.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-4.4.0-rc.1.tgz#6dfe99eef262ed1d780682d37c58cf1bf174fecf" - integrity sha512-YH6f6a76rLcZPvcbEkfF0hbyPAc8qClfdGvCX2lFIrd9aCR2fsPcNAK0Ro1H40YAtWZdHvs2PWwcLJs7dJaqqg== +"@abp/ng.setting-management@~4.4.0-rc.2": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-4.4.0.tgz#ebcadabcdbafbbc1b7015012d82b767661096040" + integrity sha512-ji4v/6iFmLT8ANZfGieI/dGgoOsGLX4dzIfMjqe7ktobTsg5dcj4fUKVhxmPVq2FeiOT6r3znQREMMaWj6v1Bg== dependencies: - "@abp/ng.components" "~4.4.0-rc.1" - "@abp/ng.theme.shared" "~4.4.0-rc.1" + "@abp/ng.components" "~4.4.0" + "@abp/ng.theme.shared" "~4.4.0" tslib "^2.0.0" -"@abp/ng.tenant-management@~4.4.0-rc.1": - version "4.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-4.4.0-rc.1.tgz#4ed9c5a2a9c59622653a0db889163ce42430a7d9" - integrity sha512-y20T9TpQg4iCbYixEmgwyno8fOcF6BWP7pxVpcNWWFJqR+QYvCFUYRS0hPvTU9PTsdvCGlzwXKL9Pb/rCv6PEA== +"@abp/ng.tenant-management@~4.4.0-rc.2": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-4.4.0.tgz#e9e06876917d41dafec339eeea2f25428c8d5c14" + integrity sha512-j92AVEkM+nnoYrR+RphZcb/X1CJ8SjzPby2/cIBr8VeW32TvRKIAD38Bkjm73Cju3D0Qbx5gyPYZiYyTLaxn6Q== dependencies: - "@abp/ng.feature-management" "~4.4.0-rc.1" - "@abp/ng.theme.shared" "~4.4.0-rc.1" + "@abp/ng.feature-management" "~4.4.0" + "@abp/ng.theme.shared" "~4.4.0" tslib "^2.0.0" -"@abp/ng.theme.basic@~4.4.0-rc.1": - version "4.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-4.4.0-rc.1.tgz#65c4748c919106e49d78ca28a6b93f4dfde3e97b" - integrity sha512-u7HMHgeW9ly/Nrs1xXHeDbcg0V6OuD9tYXQ34YJKQhkJzMO4tsuYWLvlyfoSRhdFRxmTSAIypLhDEbpcWO1mHA== +"@abp/ng.theme.basic@~4.4.0-rc.2": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-4.4.0.tgz#50053faf58016a330ca7ba1ef5f00559396f9dbf" + integrity sha512-vSuetQRXQhpxWx2sNriLRCpKhyhGNdywYsjbFqLUuTDaTQI+UYEprGG87Pt4HqOsXJujuPtnySxQsp9zJH25+g== dependencies: - "@abp/ng.account.core" "~4.4.0-rc.1" - "@abp/ng.theme.shared" "~4.4.0-rc.1" + "@abp/ng.account.core" "~4.4.0" + "@abp/ng.theme.shared" "~4.4.0" tslib "^2.0.0" -"@abp/ng.theme.shared@~4.4.0-rc.1": - version "4.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-4.4.0-rc.1.tgz#0695ecd4ef77b8f0708590d80211f51731b4a309" - integrity sha512-yTn7NnZbLoe5BE7dTJWBgzOOYS6Ekjnp9xcAxFBrOvBc76+Dv0TekRTtaGANNFXAXieodeF2cbnMssO+B265Fg== +"@abp/ng.theme.shared@~4.4.0", "@abp/ng.theme.shared@~4.4.0-rc.2": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-4.4.0.tgz#ba70fcdb9f7c064f0523ee63145b3b769ddfa419" + integrity sha512-x49NAyxs7pKAoUFSh7ms3QXz7kh4nP2x0TuiipMM7ika29Nc9m5B0DQ9kj9jFLEC53b/sx15fAkfrXUY6yHSsA== dependencies: - "@abp/ng.core" "~4.4.0-rc.1" + "@abp/ng.core" "~4.4.0" "@fortawesome/fontawesome-free" "^5.14.0" "@ng-bootstrap/ng-bootstrap" "^7.0.0" "@ngx-validate/core" "^0.0.13" @@ -110,10 +110,10 @@ chart.js "^2.9.3" tslib "^2.0.0" -"@abp/utils@^4.4.0-rc.1": - version "4.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.0-rc.1.tgz#704764e60aae7beec2fc3ac9fff6217c1c70ddf6" - integrity sha512-HOmxzOKueogv5mZ6b7SLzBlANYmtL3R8XFypPTky98qYYYWktSxgDkEnyvpe20+yuxKkzVW7sf/swKWEt2onIQ== +"@abp/utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.0.tgz#b74b5cfb8e9b078d8b7a724cac73d348f854e89c" + integrity sha512-EgLqGmfwNuDgPIoqrSJZMWvXKhScj3FE2hG0kmIBtCyj3SOaHgYVFuTqs4hx2WoBB6YUNhG3U1hn6c1EzIrIcQ== dependencies: just-compare "^1.3.0" From 81ba13107964415cc3dcffea4efea509ea5578ad Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 11 Aug 2021 17:31:10 +0300 Subject: [PATCH 02/56] clone core module to nx repo --- .../apps/dev-app-e2e/tsconfig.e2e.json | 12 +- .../nx/ng-packs/apps/dev-app/tsconfig.json | 11 +- .../ng-packs/libs/core/locale/ng-package.json | 7 + .../libs/core/locale/src/public-api.ts | 1 + .../core/locale/src/utils/register-locale.ts | 66 + .../nx/ng-packs/libs/core/ng-package.json | 12 +- .../nx/ng-packs/libs/core/package.json | 24 +- .../nx/ng-packs/libs/core/src/index.ts | 30 + .../libs/core/src/lib/abstracts/index.ts | 1 + .../src/lib/abstracts/ng-model.component.ts | 70 + .../core/src/lib/actions/config.actions.ts | 24 + .../libs/core/src/lib/actions/index.ts | 4 + .../core/src/lib/actions/loader.actions.ts | 11 + .../core/src/lib/actions/profile.actions.ts | 15 + .../libs/core/src/lib/actions/rest.actions.ts | 6 + .../components/dynamic-layout.component.ts | 102 + .../libs/core/src/lib/components/index.ts | 3 + .../replaceable-route-container.component.ts | 44 + .../lib/components/router-outlet.component.ts | 9 + .../src/lib/constants/different-locales.ts | 338 + .../libs/core/src/lib/constants/index.ts | 1 + .../ng-packs/libs/core/src/lib/core.module.ts | 189 +- .../src/lib/directives/autofocus.directive.ts | 16 + .../src/lib/directives/debounce.directive.ts | 25 + .../src/lib/directives/ellipsis.directive.ts | 38 + .../core/src/lib/directives/for.directive.ts | 178 + .../lib/directives/form-submit.directive.ts | 86 + .../libs/core/src/lib/directives/index.ts | 9 + .../core/src/lib/directives/init.directive.ts | 12 + .../lib/directives/permission.directive.ts | 72 + .../replaceable-template.directive.ts | 164 + .../directives/stop-propagation.directive.ts | 21 + .../lib/directives/visibility.directive.ts | 69 + .../libs/core/src/lib/enums/common.ts | 5 + .../ng-packs/libs/core/src/lib/enums/index.ts | 1 + .../libs/core/src/lib/guards/auth.guard.ts | 22 + .../libs/core/src/lib/guards/index.ts | 2 + .../core/src/lib/guards/permission.guard.ts | 40 + .../libs/core/src/lib/handlers/index.ts | 2 + .../handlers/oauth-configuration.handler.ts | 32 + .../core/src/lib/handlers/routes.handler.ts | 45 + .../src/lib/interceptors/api.interceptor.ts | 51 + .../libs/core/src/lib/interceptors/index.ts | 1 + .../libs/core/src/lib/localization.module.ts | 8 + .../lib/models/application-configuration.ts | 117 + .../ng-packs/libs/core/src/lib/models/auth.ts | 6 + .../libs/core/src/lib/models/common.ts | 80 + .../libs/core/src/lib/models/config.ts | 65 + .../ng-packs/libs/core/src/lib/models/dtos.ts | 219 + .../libs/core/src/lib/models/environment.ts | 39 + .../libs/core/src/lib/models/index.ts | 12 + .../libs/core/src/lib/models/localization.ts | 6 + .../libs/core/src/lib/models/profile.ts | 28 + .../src/lib/models/replaceable-components.ts | 47 + .../ng-packs/libs/core/src/lib/models/rest.ts | 41 + .../libs/core/src/lib/models/session.ts | 23 + .../libs/core/src/lib/models/utility.ts | 25 + .../ng-packs/libs/core/src/lib/pipes/index.ts | 2 + .../core/src/lib/pipes/localization.pipe.ts | 24 + .../libs/core/src/lib/pipes/sort.pipe.ts | 46 + .../libs/core/src/lib/providers/index.ts | 1 + .../core/src/lib/providers/locale.provider.ts | 24 + .../libs/core/src/lib/proxy/README.md | 17 + .../core/src/lib/proxy/generate-proxy.json | 21315 ++++++++++++++++ .../ng-packs/libs/core/src/lib/proxy/index.ts | 3 + .../core/src/lib/proxy/pages/abp/index.ts | 2 + .../abp/multi-tenancy/abp-tenant.service.ts | 32 + .../proxy/pages/abp/multi-tenancy/index.ts | 1 + .../libs/core/src/lib/proxy/pages/index.ts | 2 + .../lib/proxy/volo/abp/asp-net-core/index.ts | 2 + .../abp-api-definition.service.ts | 25 + .../asp-net-core/mvc/api-exploring/index.ts | 1 + .../abp-application-configuration.service.ts | 22 + .../mvc/application-configurations/index.ts | 4 + .../mvc/application-configurations/models.ts | 98 + .../object-extending/index.ts | 1 + .../object-extending/models.ts | 87 + .../proxy/volo/abp/asp-net-core/mvc/index.ts | 4 + .../asp-net-core/mvc/multi-tenancy/index.ts | 1 + .../asp-net-core/mvc/multi-tenancy/models.ts | 17 + .../core/src/lib/proxy/volo/abp/http/index.ts | 2 + .../lib/proxy/volo/abp/http/modeling/index.ts | 1 + .../proxy/volo/abp/http/modeling/models.ts | 81 + .../libs/core/src/lib/proxy/volo/abp/index.ts | 5 + .../lib/proxy/volo/abp/localization/index.ts | 1 + .../lib/proxy/volo/abp/localization/models.ts | 7 + .../core/src/lib/proxy/volo/abp/models.ts | 5 + .../libs/core/src/lib/proxy/volo/index.ts | 2 + .../application-configuration.service.ts | 24 + .../core/src/lib/services/auth.service.ts | 59 + .../src/lib/services/config-state.service.ts | 146 + .../services/content-projection.service.ts | 14 + .../src/lib/services/dom-insertion.service.ts | 34 + .../src/lib/services/environment.service.ts | 37 + .../src/lib/services/http-wait.service.ts | 103 + .../libs/core/src/lib/services/index.ts | 23 + .../src/lib/services/lazy-load.service.ts | 43 + .../core/src/lib/services/list.service.ts | 145 + .../src/lib/services/localization.service.ts | 186 + .../src/lib/services/multi-tenancy.service.ts | 71 + .../src/lib/services/permission.service.ts | 79 + .../src/lib/services/profile-state.service.ts | 28 + .../core/src/lib/services/profile.service.ts | 50 + .../replaceable-components.service.ts | 56 + .../src/lib/services/resource-wait.service.ts | 41 + .../core/src/lib/services/rest.service.ts | 62 + .../src/lib/services/router-events.service.ts | 61 + .../src/lib/services/router-wait.service.ts | 59 + .../core/src/lib/services/routes.service.ts | 185 + .../src/lib/services/session-state.service.ts | 87 + .../src/lib/services/subscription.service.ts | 54 + .../core/src/lib/services/track-by.service.ts | 17 + .../libs/core/src/lib/states/config.state.ts | 268 + .../libs/core/src/lib/states/index.ts | 2 + .../libs/core/src/lib/states/profile.state.ts | 47 + .../src/lib/strategies/auth-flow.strategy.ts | 264 + .../src/lib/strategies/container.strategy.ts | 44 + .../strategies/content-security.strategy.ts | 32 + .../src/lib/strategies/content.strategy.ts | 54 + .../src/lib/strategies/context.strategy.ts | 47 + .../lib/strategies/cross-origin.strategy.ts | 24 + .../core/src/lib/strategies/dom.strategy.ts | 28 + .../libs/core/src/lib/strategies/index.ts | 8 + .../src/lib/strategies/loading.strategy.ts | 97 + .../src/lib/strategies/projection.strategy.ts | 179 + .../src/lib/tests/api.interceptor.spec.ts | 81 + .../application-configuration.service.spec.ts | 27 + .../core/src/lib/tests/array-utils.spec.ts | 17 + .../core/src/lib/tests/auth.guard.spec.ts | 32 + .../src/lib/tests/autofocus.directive.spec.ts | 36 + .../core/src/lib/tests/common-utils.spec.ts | 118 + .../lib/tests/config-state.service.spec.ts | 185 + .../src/lib/tests/container.strategy.spec.ts | 80 + .../tests/content-projection.service.spec.ts | 38 + .../tests/content-security.strategy.spec.ts | 41 + .../src/lib/tests/content.strategy.spec.ts | 82 + .../src/lib/tests/context.strategy.spec.ts | 79 + .../lib/tests/cross-origin.strategy.spec.ts | 38 + .../src/lib/tests/date-extensions.spec.ts | 17 + .../core/src/lib/tests/date-utils.spec.ts | 50 + .../src/lib/tests/debounce.directive.spec.ts | 40 + .../lib/tests/dom-insertion.service.spec.ts | 63 + .../core/src/lib/tests/dom.strategy.spec.ts | 49 + .../tests/dynamic-layout.component.spec.ts | 203 + .../src/lib/tests/environment-utils.spec.ts | 99 + .../src/lib/tests/environment.service.spec.ts | 83 + .../core/src/lib/tests/factory-utils.spec.ts | 38 + .../core/src/lib/tests/for.directive.spec.ts | 191 + .../lib/tests/form-submit.directive.spec.ts | 46 + .../core/src/lib/tests/form-utils.spec.ts | 30 + .../src/lib/tests/generator-utils.spec.ts | 42 + .../core/src/lib/tests/initial-utils.spec.ts | 116 + .../core/src/lib/tests/internal-store.spec.ts | 146 + .../src/lib/tests/lazy-load-utils.spec.ts | 113 + .../src/lib/tests/lazy-load.service.spec.ts | 88 + .../core/src/lib/tests/list.service.spec.ts | 153 + .../src/lib/tests/loading.strategy.spec.ts | 104 + .../src/lib/tests/locale.provider.spec.ts | 37 + .../src/lib/tests/localization-utils.spec.ts | 190 + .../src/lib/tests/localization.pipe.spec.ts | 29 + .../lib/tests/localization.service.spec.ts | 266 + .../src/lib/tests/multi-tenancy-utils.spec.ts | 122 + .../src/lib/tests/ng-model.component.spec.ts | 63 + .../core/src/lib/tests/number-utils.spec.ts | 17 + .../core/src/lib/tests/object-utils.spec.ts | 141 + .../lib/tests/permission.directive.spec.ts | 73 + .../src/lib/tests/permission.guard.spec.ts | 109 + .../lib/tests/profile-state.service.spec.ts | 57 + .../src/lib/tests/profile.service.spec.ts | 56 + .../core/src/lib/tests/profile.state.spec.ts | 74 + .../src/lib/tests/projection.strategy.spec.ts | 276 + ...laceable-route-container.component.spec.ts | 65 + .../replaceable-template.directive.spec.ts | 173 + .../core/src/lib/tests/rest.service.spec.ts | 120 + .../core/src/lib/tests/route-utils.spec.ts | 82 + .../lib/tests/router-events.service.spec.ts | 111 + .../lib/tests/router-outlet.component.spec.ts | 14 + .../core/src/lib/tests/routes.handler.spec.ts | 40 + .../core/src/lib/tests/routes.service.spec.ts | 191 + .../libs/core/src/lib/tests/sort.pipe.spec.ts | 48 + .../tests/stop-propagation.directive.spec.ts | 39 + .../core/src/lib/tests/string-utils.spec.ts | 46 + .../lib/tests/subscription.service.spec.ts | 109 + .../src/lib/tests/track-by.service.spec.ts | 21 + .../core/src/lib/tests/tree-utils.spec.ts | 146 + .../core/src/lib/tests/utils/common.utils.ts | 28 + .../utils/permission-service.spec.utils.ts | 7 + .../core/src/lib/tests/validators.spec.ts | 181 + .../lib/tests/visibility.directive.spec.ts | 126 + .../core/src/lib/tokens/app-config.token.ts | 7 + .../libs/core/src/lib/tokens/index.ts | 6 + .../libs/core/src/lib/tokens/list.token.ts | 3 + .../core/src/lib/tokens/lodaer-delay.token.ts | 3 + .../src/lib/tokens/manage-profile.token.ts | 21 + .../libs/core/src/lib/tokens/options.token.ts | 10 + .../core/src/lib/tokens/tenant-key.token.ts | 3 + .../libs/core/src/lib/utils/array-utils.ts | 6 + .../libs/core/src/lib/utils/auth-utils.ts | 62 + .../libs/core/src/lib/utils/common-utils.ts | 37 + .../core/src/lib/utils/date-extensions.ts | 13 + .../libs/core/src/lib/utils/date-utils.ts | 27 + .../core/src/lib/utils/environment-utils.ts | 44 + .../libs/core/src/lib/utils/factory-utils.ts | 41 + .../libs/core/src/lib/utils/file-utils.ts | 20 + .../libs/core/src/lib/utils/form-utils.ts | 15 + .../core/src/lib/utils/generator-utils.ts | 43 + .../libs/core/src/lib/utils/http-utils.ts | 24 + .../ng-packs/libs/core/src/lib/utils/index.ts | 21 + .../libs/core/src/lib/utils/initial-utils.ts | 83 + .../src/lib/utils/internal-store-utils.ts | 52 + .../core/src/lib/utils/lazy-load-utils.ts | 51 + .../core/src/lib/utils/localization-utils.ts | 66 + .../core/src/lib/utils/multi-tenancy-utils.ts | 109 + .../libs/core/src/lib/utils/number-utils.ts | 4 + .../libs/core/src/lib/utils/object-utils.ts | 46 + .../libs/core/src/lib/utils/route-utils.ts | 36 + .../libs/core/src/lib/utils/rxjs-utils.ts | 32 + .../libs/core/src/lib/utils/string-utils.ts | 23 + .../libs/core/src/lib/utils/tree-utils.ts | 88 + .../core/src/lib/validators/age.validator.ts | 27 + .../lib/validators/credit-card.validator.ts | 32 + .../libs/core/src/lib/validators/index.ts | 23 + .../src/lib/validators/range.validator.ts | 30 + .../src/lib/validators/required.validator.ts | 23 + .../lib/validators/string-length.validator.ts | 36 + .../core/src/lib/validators/url.validator.ts | 23 + .../libs/core/testing/ng-package.json | 7 + .../testing/src/lib/core-testing.module.ts | 67 + .../core/testing/src/lib/services/index.ts | 2 + .../lib/services/mock-permission.service.ts | 34 + .../src/lib/services/mock-rest.service.ts | 21 + .../testing/src/lib/utils/clear-page.util.ts | 10 + .../libs/core/testing/src/lib/utils/index.ts | 2 + .../core/testing/src/lib/utils/wait.util.ts | 6 + .../libs/core/testing/src/public-api.ts | 3 + .../nx/ng-packs/libs/core/tsconfig.json | 11 +- .../ng-packs/libs/core/tsconfig.lib.prod.json | 3 +- npm/ng-packs/yarn.lock | 1064 +- 238 files changed, 34654 insertions(+), 528 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/locale/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/locale/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/locale/src/utils/register-locale.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/abstracts/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/abstracts/ng-model.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/config.actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/loader.actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/profile.actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/rest.actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/dynamic-layout.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/replaceable-route-container.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/router-outlet.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/constants/different-locales.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/constants/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/autofocus.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/debounce.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/ellipsis.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/for.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/form-submit.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/init.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/permission.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/replaceable-template.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/stop-propagation.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/visibility.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/enums/common.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/enums/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/auth.guard.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/permission.guard.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/oauth-configuration.handler.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/routes.handler.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/interceptors/api.interceptor.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/interceptors/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/localization.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/application-configuration.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/auth.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/common.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/config.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/dtos.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/environment.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/localization.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/profile.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/replaceable-components.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/rest.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/session.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/utility.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/localization.pipe.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/sort.pipe.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/providers/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/providers/locale.provider.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/README.md create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/generate-proxy.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/multi-tenancy/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/modeling/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/modeling/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/localization/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/localization/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/application-configuration.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/auth.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/config-state.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/content-projection.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/dom-insertion.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/environment.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/http-wait.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/lazy-load.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/list.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/localization.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/multi-tenancy.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/permission.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/profile-state.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/profile.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/replaceable-components.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/resource-wait.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/rest.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/router-events.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/router-wait.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/routes.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/session-state.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/subscription.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/track-by.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/config.state.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/profile.state.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/auth-flow.strategy.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/container.strategy.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/content-security.strategy.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/content.strategy.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/context.strategy.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/cross-origin.strategy.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/dom.strategy.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/loading.strategy.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/projection.strategy.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/api.interceptor.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/application-configuration.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/array-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/auth.guard.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/autofocus.directive.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/common-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/config-state.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/container.strategy.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content-projection.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content-security.strategy.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content.strategy.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/context.strategy.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/cross-origin.strategy.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/date-extensions.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/date-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/debounce.directive.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dom-insertion.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dom.strategy.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dynamic-layout.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/environment-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/environment.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/factory-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/for.directive.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/form-submit.directive.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/form-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/generator-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/initial-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/internal-store.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/lazy-load-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/lazy-load.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/list.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/loading.strategy.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/locale.provider.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization.pipe.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/multi-tenancy-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/ng-model.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/number-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/object-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/permission.directive.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/permission.guard.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile-state.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile.state.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/projection.strategy.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/replaceable-route-container.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/replaceable-template.directive.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/rest.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/route-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/router-events.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/router-outlet.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/routes.handler.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/routes.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/sort.pipe.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/stop-propagation.directive.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/string-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/subscription.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/track-by.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/tree-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/utils/common.utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/utils/permission-service.spec.utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/validators.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/visibility.directive.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/app-config.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/list.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/lodaer-delay.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/manage-profile.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/options.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/tenant-key.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/array-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/auth-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/common-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/date-extensions.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/date-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/environment-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/factory-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/file-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/form-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/generator-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/http-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/initial-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/internal-store-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/lazy-load-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/localization-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/multi-tenancy-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/number-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/object-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/route-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/rxjs-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/string-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/tree-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/age.validator.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/credit-card.validator.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/range.validator.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/required.validator.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/string-length.validator.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/url.validator.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/testing/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/core-testing.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/mock-permission.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/mock-rest.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/clear-page.util.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/wait.util.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/core/testing/src/public-api.ts diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/tsconfig.e2e.json b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/tsconfig.e2e.json index ca4d1e0305..02f1f2f787 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/tsconfig.e2e.json +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app-e2e/tsconfig.e2e.json @@ -6,14 +6,16 @@ "allowJs": true, "types": ["cypress", "node"], "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true + "strict": false, + "noImplicitReturns": false, + "noFallthroughCasesInSwitch": true, + "allowSyntheticDefaultImports": true, + }, "include": ["src/**/*.ts", "src/**/*.js"], "angularCompilerOptions": { "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true + "strictInputAccessModifiers": false, + "strictTemplates": false } } diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.json b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.json index 755a8750e6..54586174b3 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.json @@ -15,13 +15,14 @@ ], "compilerOptions": { "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true + "strict": false, + "noImplicitReturns": false, + "noFallthroughCasesInSwitch": true, + "allowSyntheticDefaultImports": true, }, "angularCompilerOptions": { "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true + "strictInputAccessModifiers": false, + "strictTemplates": false } } diff --git a/npm/ng-packs/nx/ng-packs/libs/core/locale/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/core/locale/ng-package.json new file mode 100644 index 0000000000..f2542d13fb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/locale/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/core/locale", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/locale/src/public-api.ts b/npm/ng-packs/nx/ng-packs/libs/core/locale/src/public-api.ts new file mode 100644 index 0000000000..10365ddce8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/locale/src/public-api.ts @@ -0,0 +1 @@ +export * from './utils/register-locale'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/locale/src/utils/register-locale.ts b/npm/ng-packs/nx/ng-packs/libs/core/locale/src/utils/register-locale.ts new file mode 100644 index 0000000000..f568c13c53 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/locale/src/utils/register-locale.ts @@ -0,0 +1,66 @@ +import { differentLocales } from '@abp/ng.core'; +import { isDevMode } from '@angular/core'; + +export interface LocaleErrorHandlerData { + resolve: any; + reject: any; + error: any; + locale: string; +} + +let localeMap = {}; + +export interface RegisterLocaleData { + cultureNameLocaleFileMap?: Record; + errorHandlerFn?: (data: LocaleErrorHandlerData) => any; +} + +export function registerLocale( + { + cultureNameLocaleFileMap = {}, + errorHandlerFn = defaultLocalErrorHandlerFn, + } = {} as RegisterLocaleData, +) { + return (locale: string): Promise => { + localeMap = { ...differentLocales, ...cultureNameLocaleFileMap }; + + return new Promise((resolve, reject) => { + return import( + /* webpackMode: "lazy-once" */ + /* webpackChunkName: "locales"*/ + /* webpackInclude: /[/\\](ar|cs|en|en-GB|es|de|fi|fr|pt|tr|ru|hu|sl|zh-Hans|zh-Hant).js/ */ + /* webpackExclude: /[/\\]global|extra/ */ + `@angular/common/locales/${localeMap[locale] || locale}.js` + ) + .then(resolve) + .catch(error => { + errorHandlerFn({ + resolve, + reject, + error, + locale, + }); + }); + }); + }; +} + +const extraLocales = {}; +export function storeLocaleData(data: any, localeId: string) { + extraLocales[localeId] = data; +} + +export async function defaultLocalErrorHandlerFn({ locale, resolve }: LocaleErrorHandlerData) { + if (extraLocales[locale]) { + resolve({ default: extraLocales[localeMap[locale] || locale] }); + return; + } + + if (isDevMode) { + console.error( + `Cannot find the ${locale} locale file. You can check how can add new culture at https://docs.abp.io/en/abp/latest/UI/Angular/Localization#adding-a-new-culture`, + ); + } + + resolve(); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json index 424d8a48a6..7ebb0a5287 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json @@ -3,5 +3,15 @@ "dest": "../../dist/libs/core", "lib": { "entryFile": "src/index.ts" - } + }, + "allowedNonPeerDependencies": [ + "@abp/utils", + "@angular/localize", + "@ngxs/store", + "angular-oauth2-oidc", + "just-compare", + "just-clone", + "snq", + "ts-toolbelt" + ] } diff --git a/npm/ng-packs/nx/ng-packs/libs/core/package.json b/npm/ng-packs/nx/ng-packs/libs/core/package.json index f37a73b096..954d6b61f6 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/package.json +++ b/npm/ng-packs/nx/ng-packs/libs/core/package.json @@ -1,11 +1,23 @@ { - "name": "@ng-packs/core", - "version": "0.0.1", - "peerDependencies": { - "@angular/common": "^12.1.0", - "@angular/core": "^12.1.0" + "name": "@abp/ng.core", + "version": "4.4.0", + "homepage": "https://abp.io", + "repository": { + "type": "git", + "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "tslib": "^2.2.0" + "@abp/utils": "^4.4.0-rc.2", + "@angular/localize": "~10.0.10", + "@ngxs/store": "^3.7.0", + "angular-oauth2-oidc": "^10.0.0", + "just-clone": "^3.1.0", + "just-compare": "^1.3.0", + "snq": "^1.0.3", + "ts-toolbelt": "6.15.4", + "tslib": "^2.0.0" + }, + "publishConfig": { + "access": "public" } } diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/index.ts index ab5a2f7c2a..906e9fc769 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/src/index.ts +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/index.ts @@ -1 +1,31 @@ +/* + * Public API Surface of core + */ + +// export * from './lib/handlers'; +export * from './lib/abstracts'; +export * from './lib/actions'; +export * from './lib/components'; +export * from './lib/constants'; export * from './lib/core.module'; +export * from './lib/directives'; +export * from './lib/enums'; +export * from './lib/guards'; +export * from './lib/interceptors'; +export * from './lib/localization.module'; +export * from './lib/models'; +export * from './lib/pipes'; +export * from './lib/proxy/pages/abp/multi-tenancy'; +export * from './lib/proxy/volo/abp/asp-net-core/mvc/api-exploring'; +export * from './lib/proxy/volo/abp/asp-net-core/mvc/application-configurations'; +export * from './lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending'; +export * from './lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy'; +export * from './lib/proxy/volo/abp/http/modeling'; +export * from './lib/proxy/volo/abp/localization'; +export * from './lib/proxy/volo/abp/models'; +export * from './lib/services'; +export * from './lib/states'; +export * from './lib/strategies'; +export * from './lib/tokens'; +export * from './lib/utils'; +export * from './lib/validators'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/abstracts/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/abstracts/index.ts new file mode 100644 index 0000000000..a4e501a850 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/abstracts/index.ts @@ -0,0 +1 @@ +export * from './ng-model.component'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/abstracts/ng-model.component.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/abstracts/ng-model.component.ts new file mode 100644 index 0000000000..7176803b74 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/abstracts/ng-model.component.ts @@ -0,0 +1,70 @@ +import { ControlValueAccessor } from '@angular/forms'; +import { ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; + +// Not an abstract class on purpose. Do not change! +// tslint:disable-next-line: use-component-selector +@Component({ template: '' }) +export class AbstractNgModelComponent implements ControlValueAccessor { + protected _value: T; + protected cdRef: ChangeDetectorRef; + onChange: (value: T) => {}; + onTouched: () => {}; + + @Input() + disabled: boolean; + + @Input() + readonly: boolean; + + @Input() + valueFn: (value: U, previousValue?: T) => T = value => (value as any) as T; + + @Input() + valueLimitFn: (value: T, previousValue?: T) => any = value => false; + + @Input() + set value(value: T) { + value = this.valueFn((value as any) as U, this._value); + + if (this.valueLimitFn(value, this._value) !== false || this.readonly) return; + + this._value = value; + this.notifyValueChange(); + } + + get value(): T { + return this._value || this.defaultValue; + } + + get defaultValue(): T { + return this._value; + } + + constructor(public injector: Injector) { + // tslint:disable-next-line: deprecation + this.cdRef = injector.get(ChangeDetectorRef); + } + + notifyValueChange(): void { + if (this.onChange) { + this.onChange(this.value); + } + } + + writeValue(value: T): void { + this._value = this.valueLimitFn(value, this._value) || value; + setTimeout(() => this.cdRef.markForCheck(), 0); + } + + registerOnChange(fn: any): void { + this.onChange = fn; + } + + registerOnTouched(fn: any): void { + this.onTouched = fn; + } + + setDisabledState(isDisabled: boolean): void { + this.disabled = isDisabled; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/config.actions.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/config.actions.ts new file mode 100644 index 0000000000..c13e1e8a2e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/config.actions.ts @@ -0,0 +1,24 @@ +import { Config } from '../models/config'; + +/** + * @deprecated Use ConfigStateService. To be deleted in v5.0. + */ +export class GetAppConfiguration { + static readonly type = '[Config] Get App Configuration'; +} + +/** + * @deprecated Use EnvironmentService instead. To be deleted in v5.0. + */ +export class SetEnvironment { + static readonly type = '[Config] Set Environment'; + constructor(public environment: Config.Environment) {} +} + +/** + * @deprecated Use EnvironmentService instead. To be deleted in v5.0. + */ +export class PatchConfigState { + static readonly type = '[Config] Set State'; + constructor(public state: Config.State) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/index.ts new file mode 100644 index 0000000000..03336d2668 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/index.ts @@ -0,0 +1,4 @@ +export { GetAppConfiguration, SetEnvironment } from './config.actions'; +export * from './loader.actions'; +export * from './profile.actions'; +export * from './rest.actions'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/loader.actions.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/loader.actions.ts new file mode 100644 index 0000000000..0bf5207dca --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/loader.actions.ts @@ -0,0 +1,11 @@ +import { HttpRequest } from '@angular/common/http'; + +export class StartLoader { + static readonly type = '[Loader] Start'; + constructor(public payload: HttpRequest) {} +} + +export class StopLoader { + static readonly type = '[Loader] Stop'; + constructor(public payload: HttpRequest) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/profile.actions.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/profile.actions.ts new file mode 100644 index 0000000000..03baceda8a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/profile.actions.ts @@ -0,0 +1,15 @@ +import { Profile } from '../models'; + +export class GetProfile { + static readonly type = '[Profile] Get'; +} + +export class UpdateProfile { + static readonly type = '[Profile] Update'; + constructor(public payload: Profile.Response) {} +} + +export class ChangePassword { + static readonly type = '[Profile] Change Password'; + constructor(public payload: Profile.ChangePasswordRequest) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/rest.actions.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/rest.actions.ts new file mode 100644 index 0000000000..5f00eea3d8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/rest.actions.ts @@ -0,0 +1,6 @@ +import { HttpErrorResponse } from '@angular/common/http'; + +export class RestOccurError { + static readonly type = '[Rest] Error'; + constructor(public payload: HttpErrorResponse | any) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/dynamic-layout.component.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/dynamic-layout.component.ts new file mode 100644 index 0000000000..c9a852ae08 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/dynamic-layout.component.ts @@ -0,0 +1,102 @@ +import { Component, Injector, Optional, SkipSelf, Type } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { eLayoutType } from '../enums/common'; +import { ABP } from '../models'; +import { ReplaceableComponents } from '../models/replaceable-components'; +import { LocalizationService } from '../services/localization.service'; +import { ReplaceableComponentsService } from '../services/replaceable-components.service'; +import { RouterEvents } from '../services/router-events.service'; +import { RoutesService } from '../services/routes.service'; +import { SubscriptionService } from '../services/subscription.service'; +import { findRoute, getRoutePath } from '../utils/route-utils'; +import { TreeNode } from '../utils/tree-utils'; + +@Component({ + selector: 'abp-dynamic-layout', + template: ` + + + + `, + providers: [SubscriptionService], +}) +export class DynamicLayoutComponent { + layout: Type; + layoutKey: eLayoutType; + + // TODO: Consider a shared enum (eThemeSharedComponents) for known layouts + readonly layouts = new Map([ + ['application', 'Theme.ApplicationLayoutComponent'], + ['account', 'Theme.AccountLayoutComponent'], + ['empty', 'Theme.EmptyLayoutComponent'], + ]); + + isLayoutVisible = true; + + private router: Router; + private route: ActivatedRoute; + private routes: RoutesService; + + constructor( + injector: Injector, + private localizationService: LocalizationService, + private replaceableComponents: ReplaceableComponentsService, + private subscription: SubscriptionService, + private routerEvents: RouterEvents, + @Optional() @SkipSelf() dynamicLayoutComponent: DynamicLayoutComponent, + ) { + if (dynamicLayoutComponent) return; + this.route = injector.get(ActivatedRoute); + this.router = injector.get(Router); + this.routes = injector.get(RoutesService); + + this.getLayout(); + this.checkLayoutOnNavigationEnd(); + + this.listenToLanguageChange(); + } + + private checkLayoutOnNavigationEnd() { + const navigationEnd$ = this.routerEvents.getNavigationEvents('End'); + this.subscription.addOne(navigationEnd$, () => this.getLayout()); + } + + private getLayout() { + let expectedLayout = (this.route.snapshot.data || {}).layout; + + if (!expectedLayout) { + let node = findRoute(this.routes, getRoutePath(this.router)); + node = { parent: node } as TreeNode; + + while (node.parent) { + node = node.parent; + + if (node.layout) { + expectedLayout = node.layout; + break; + } + } + } + + if (!expectedLayout) expectedLayout = eLayoutType.empty; + + if (this.layoutKey === expectedLayout) return; + + const key = this.layouts.get(expectedLayout); + this.layout = this.getComponent(key)?.component; + this.layoutKey = expectedLayout; + } + + private listenToLanguageChange() { + this.subscription.addOne(this.localizationService.languageChange$, () => { + this.isLayoutVisible = false; + setTimeout(() => (this.isLayoutVisible = true), 0); + }); + } + + private getComponent(key: string): ReplaceableComponents.ReplaceableComponent { + return this.replaceableComponents.get(key); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/index.ts new file mode 100644 index 0000000000..da3c72a69f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/index.ts @@ -0,0 +1,3 @@ +export * from './dynamic-layout.component'; +export * from './replaceable-route-container.component'; +export * from './router-outlet.component'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/replaceable-route-container.component.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/replaceable-route-container.component.ts new file mode 100644 index 0000000000..6c0dabd511 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/replaceable-route-container.component.ts @@ -0,0 +1,44 @@ +import { Component, OnInit, Type } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { distinctUntilChanged } from 'rxjs/operators'; +import { ReplaceableComponents } from '../models/replaceable-components'; +import { ReplaceableComponentsService } from '../services/replaceable-components.service'; +import { SubscriptionService } from '../services/subscription.service'; + +@Component({ + selector: 'abp-replaceable-route-container', + template: ` + + `, + providers: [SubscriptionService], +}) +export class ReplaceableRouteContainerComponent implements OnInit { + defaultComponent: Type; + + componentKey: string; + + externalComponent: Type; + + constructor( + private route: ActivatedRoute, + private replaceableComponents: ReplaceableComponentsService, + private subscription: SubscriptionService, + ) {} + + ngOnInit() { + this.defaultComponent = this.route.snapshot.data.replaceableComponent.defaultComponent; + this.componentKey = (this.route.snapshot.data + .replaceableComponent as ReplaceableComponents.RouteData).key; + + const component$ = this.replaceableComponents + .get$(this.componentKey) + .pipe(distinctUntilChanged()); + + this.subscription.addOne( + component$, + (res = {} as ReplaceableComponents.ReplaceableComponent) => { + this.externalComponent = res.component; + }, + ); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/router-outlet.component.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/router-outlet.component.ts new file mode 100644 index 0000000000..1fc5d002ac --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/router-outlet.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'abp-router-outlet', + template: ` + + `, +}) +export class RouterOutletComponent {} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/constants/different-locales.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/constants/different-locales.ts new file mode 100644 index 0000000000..d270e6d173 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/constants/different-locales.ts @@ -0,0 +1,338 @@ +// Different locales from .NET +// Key is .NET locale, value is Angular locale + +export const differentLocales = { + aa: 'en', + 'aa-DJ': 'en', + 'aa-ER': 'en', + 'aa-ET': 'en', + 'af-ZA': 'af', + 'agq-CM': 'agq', + 'ak-GH': 'ak', + 'am-ET': 'am', + 'ar-001': 'ar', + arn: 'en', + 'arn-CL': 'en', + 'as-IN': 'as', + 'asa-TZ': 'asa', + 'ast-ES': 'ast', + 'az-Cyrl-AZ': 'az-Cyrl', + 'az-Latn-AZ': 'az-Latn', + ba: 'ru', + 'ba-RU': 'ru', + 'bas-CM': 'bas', + 'be-BY': 'be', + 'bem-ZM': 'bem', + 'bez-TZ': 'bez', + 'bg-BG': 'bg', + bin: 'en', + 'bin-NG': 'en', + 'bm-Latn': 'bm', + 'bm-Latn-ML': 'bm', + 'bn-BD': 'bn', + 'bo-CN': 'bo', + 'br-FR': 'br', + 'brx-IN': 'brx', + 'bs-Cyrl-BA': 'bs-Cyrl', + 'bs-Latn-BA': 'bs-Latn', + byn: 'en', + 'byn-ER': 'en', + 'ca-ES': 'ca', + 'ca-ES-valencia': 'ca-ES-VALENCIA', + 'ce-RU': 'ce', + 'cgg-UG': 'cgg', + 'chr-Cher': 'chr', + 'chr-Cher-US': 'chr', + co: 'en', + 'co-FR': 'fr', + 'cs-CZ': 'cs', + 'cu-RU': 'cu', + 'cy-GB': 'cy', + 'da-DK': 'da', + 'dav-KE': 'dav', + 'de-DE': 'de', + 'dje-NE': 'dje', + 'dsb-DE': 'dsb', + 'dua-CM': 'dua', + dv: 'en', + 'dv-MV': 'en', + 'dyo-SN': 'dyo', + 'dz-BT': 'dz', + 'ebu-KE': 'ebu', + 'ee-GH': 'ee', + 'el-GR': 'el', + 'en-029': 'en', + 'en-ID': 'en', + 'en-US': 'en', + 'eo-001': 'en', + 'es-ES': 'es', + 'et-EE': 'et', + 'eu-ES': 'eu', + 'ewo-CM': 'ewo', + 'fa-IR': 'fa', + 'ff-Latn-SN': 'ff-Latn', + 'ff-NG': 'ff', + 'fi-FI': 'fi', + 'fil-PH': 'fil', + 'fo-FO': 'fo', + 'fr-029': 'fr', + 'fr-FR': 'fr', + 'fur-IT': 'fur', + 'fy-NL': 'fy', + 'ga-IE': 'ga', + 'gd-GB': 'gd', + 'gl-ES': 'gl', + gn: 'en', + 'gn-PY': 'en', + 'gsw-CH': 'gsw', + 'gu-IN': 'gu', + 'guz-KE': 'guz', + 'gv-IM': 'gv', + 'ha-Latn': 'ha', + 'ha-Latn-GH': 'ha-GH', + 'ha-Latn-NE': 'ha-NE', + 'ha-Latn-NG': 'ha', + 'haw-US': 'haw', + 'he-IL': 'he', + 'hi-IN': 'hi', + 'hr-HR': 'hr', + 'hsb-DE': 'hsb', + 'hu-HU': 'hu', + 'hy-AM': 'hy', + 'ia-001': 'ia', + 'ia-FR': 'ia', + ibb: 'en', + 'ibb-NG': 'en', + 'id-ID': 'id', + 'ig-NG': 'ig', + 'ii-CN': 'ii', + 'is-IS': 'is', + 'it-IT': 'it', + iu: 'en', + 'iu-Cans': 'en', + 'iu-Cans-CA': 'en', + 'iu-Latn': 'en', + 'iu-Latn-CA': 'en', + 'ja-JP': 'ja', + 'jgo-CM': 'jgo', + 'jmc-TZ': 'jmc', + 'jv-Java': 'jv', + 'jv-Java-ID': 'jv', + 'jv-Latn': 'jv', + 'jv-Latn-ID': 'jv', + 'ka-GE': 'ka', + 'kab-DZ': 'kab', + 'kam-KE': 'kam', + 'kde-TZ': 'kde', + 'kea-CV': 'kea', + 'khq-ML': 'khq', + 'ki-KE': 'ki', + 'kk-KZ': 'kk', + 'kkj-CM': 'kkj', + 'kl-GL': 'kl', + 'kln-KE': 'kln', + 'km-KH': 'km', + 'kn-IN': 'kn', + 'ko-KR': 'ko', + 'kok-IN': 'kok', + kr: 'en', + 'kr-NG': 'en', + 'ks-Arab': 'ks', + 'ks-Arab-IN': 'ks', + 'ks-Deva': 'ks', + 'ks-Deva-IN': 'ks', + 'ksb-TZ': 'ksb', + 'ksf-CM': 'ksf', + 'ksh-DE': 'ksh', + 'ku-Arab': 'ku', + 'ku-Arab-IQ': 'ku', + 'ku-Arab-IR': 'ku', + 'kw-GB': 'kw', + 'ky-KG': 'ky', + la: 'en', + 'la-001': 'en', + 'lag-TZ': 'lag', + 'lb-LU': 'lb', + 'lg-UG': 'lg', + 'lkt-US': 'lkt', + 'ln-CD': 'ln', + 'lo-LA': 'lo', + 'lrc-IR': 'lrc', + 'lt-LT': 'lt', + 'lu-CD': 'lu', + 'luo-KE': 'luo', + 'luy-KE': 'luy', + 'lv-LV': 'lv', + 'mas-KE': 'mas', + 'mer-KE': 'mer', + 'mfe-MU': 'mfe', + 'mg-MG': 'mg', + 'mgh-MZ': 'mgh', + 'mgo-CM': 'mgo', + 'mi-NZ': 'mi', + 'mk-MK': 'mk', + 'ml-IN': 'ml', + 'mn-Cyrl': 'mn', + 'mn-MN': 'mn', + 'mn-Mong': 'mn', + 'mn-Mong-CN': 'mn', + 'mn-Mong-MN': 'mn', + mni: 'en', + 'mni-IN': 'en', + moh: 'en', + 'moh-CA': 'en', + 'mr-IN': 'mr', + 'ms-MY': 'ms', + 'mt-MT': 'mt', + 'mua-CM': 'mua', + 'my-MM': 'my', + 'mzn-IR': 'mzn', + 'naq-NA': 'naq', + 'nb-NO': 'nb', + + 'nd-ZW': 'nd', + 'ne-NP': 'ne', + 'nl-NL': 'nl', + 'nmg-CM': 'ngm', + 'nn-NO': 'nn', + 'nnh-CM': 'nnh', + no: 'en', + nqo: 'en', + 'nqo-GN': 'en', + nr: 'en', + 'nr-ZA': 'en', + nso: 'en', + 'nso-ZA': 'en', + 'nus-SS': 'nus', + 'nyn-UG': 'nyn', + oc: 'en', + 'oc-FR': 'fr', + 'om-ET': 'om', + 'or-IN': 'or', + 'os-GE': 'os', + 'pa-Arab-PK': 'pa-Arab', + 'pa-IN': 'pa', + pap: 'en', + 'pap-029': 'en', + 'pl-PL': 'pl', + 'prg-001': 'prg', + prs: 'en', + 'prs-AF': 'en', + 'ps-AF': 'ps', + 'pt-BR': 'pt', + quc: 'en', + 'quc-Latn': 'en', + 'quc-Latn-GT': 'en', + quz: 'en', + 'quz-BO': 'en', + 'quz-EC': 'en', + 'quz-PE': 'en', + 'rm-CH': 'rm', + 'rn-BI': 'rn', + 'ro-RO': 'ro', + 'rof-TZ': 'rof', + 'ru-RU': 'ru', + 'rw-RW': 'rw', + 'rwk-TZ': 'rwk', + sa: 'en', + 'sa-IN': 'en', + 'sah-RU': 'sah', + 'saq-KE': 'saq', + 'sbp-TZ': 'en', + 'sd-Arab': 'sd', + 'sd-Arab-PK': 'sd', + 'sd-Deva': 'sd', + 'sd-Deva-IN': 'sd', + 'se-NO': 'se', + 'seh-MZ': 'seh', + 'ses-ML': 'ses', + 'sg-CF': 'sg', + 'shi-Latn-MA': 'shi-Latn', + 'shi-Tfng-MA': 'shi-Tfng', + 'si-LK': 'si', + 'sk-SK': 'sk', + 'sl-SI': 'sl', + sma: 'en', + 'sma-NO': 'en', + 'sma-SE': 'en', + smj: 'en', + 'smj-NO': 'en', + 'smj-SE': 'en', + 'smn-FI': 'en', + sms: 'en', + 'sms-FI': 'en', + 'sn-Latn': 'sn', + 'sn-Latn-ZW': 'sn', + 'so-SO': 'so', + 'sq-AL': 'so', + 'sr-Cyrl-RS': 'sr-Cryl', + 'sr-Latn-RS': 'sr-Latn', + ss: 'en', + 'ss-SZ': 'en', + 'ss-ZA': 'en', + ssy: 'en', + 'ssy-ER': 'en', + st: 'en', + 'st-LS': 'en', + 'st-ZA': 'en', + 'sv-SE': 'sv', + 'sw-TZ': 'sw', + syr: 'en', + 'syr-SY': 'en', + 'ta-IN': 'ta', + 'te-IN': 'te', + 'teo-UG': 'teo', + 'tg-Cyrl': 'tg', + 'tg-Cyrl-TJ': 'tg', + 'th-TH': 'th', + 'ti-ET': 'ti', + tig: 'en', + 'tig-ER': 'en', + 'tk-TM': 'tk', + tn: 'en', + 'tn-BW': 'en', + 'tn-ZA': 'en', + 'to-TO': 'to', + 'tr-TR': 'tr', + ts: 'en', + 'ts-ZA': 'en', + 'tt-RU': 'tt', + 'twq-NE': 'twq', + 'tzm-Arab': 'tzm', + 'tzm-Arab-MA': 'tzm', + 'tzm-Latn': 'tzm', + 'tzm-Latn-DZ': 'tzm', + 'tzm-Latn-MA': 'tzm', + 'tzm-Tfng': 'tzm', + 'tzm-Tfng-MA': 'tzm', + 'ug-CN': 'ug', + 'uk-UA': 'uk', + 'ur-PK': 'ur', + 'uz-Arab-AF': 'uz-Arab', + 'uz-Cyrl-UZ': 'uz-Cyrl', + 'uz-Latn-UZ': 'uz-Latn', + 'vai-Latn-LR': 'vai-Latn', + 'vai-Vaii-LR': 'vai-Vaii', + ve: 'en', + 've-ZA': 'en', + 'vi-VN': 'vi', + 'vo-001': 'vo', + 'vun-TZ': 'vun', + 'wae-CH': 'wae', + wal: 'en', + 'wal-ET': 'en', + 'wo-SN': 'wo', + 'xh-ZA': 'xh', + 'xog-UG': 'xog', + 'yav-CM': 'yav', + 'yi-001': 'yi', + 'yo-NG': 'yo', + 'zgh-Tfng': 'zgh', + 'zgh-Tfng-MA': 'zgh', + 'zh-CN': 'zh', + 'zh-HK': 'zh', + 'zh-MO': 'zh', + 'zh-SG': 'zh', + 'zh-TW': 'zh', + 'zu-ZA': 'zu', +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/constants/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/constants/index.ts new file mode 100644 index 0000000000..54aaba730c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/constants/index.ts @@ -0,0 +1 @@ +export * from './different-locales'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/core.module.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/core.module.ts index 12d44b2a97..5f986789f3 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/core.module.ts +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/core.module.ts @@ -1,7 +1,190 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { HttpClientModule, HttpClientXsrfModule, HTTP_INTERCEPTORS } from '@angular/common/http'; +import { APP_INITIALIZER, Injector, ModuleWithProviders, NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; +import { NgxsModule } from '@ngxs/store'; +import { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc'; +import { AbstractNgModelComponent } from './abstracts/ng-model.component'; +import { DynamicLayoutComponent } from './components/dynamic-layout.component'; +import { ReplaceableRouteContainerComponent } from './components/replaceable-route-container.component'; +import { RouterOutletComponent } from './components/router-outlet.component'; +import { AutofocusDirective } from './directives/autofocus.directive'; +import { InputEventDebounceDirective } from './directives/debounce.directive'; +import { ForDirective } from './directives/for.directive'; +import { FormSubmitDirective } from './directives/form-submit.directive'; +import { InitDirective } from './directives/init.directive'; +import { PermissionDirective } from './directives/permission.directive'; +import { ReplaceableTemplateDirective } from './directives/replaceable-template.directive'; +import { StopPropagationDirective } from './directives/stop-propagation.directive'; +import { VisibilityDirective } from './directives/visibility.directive'; +import { OAuthConfigurationHandler } from './handlers/oauth-configuration.handler'; +import { RoutesHandler } from './handlers/routes.handler'; +import { ApiInterceptor } from './interceptors/api.interceptor'; +import { LocalizationModule } from './localization.module'; +import { ABP } from './models/common'; +import { LocalizationPipe } from './pipes/localization.pipe'; +import { SortPipe } from './pipes/sort.pipe'; +import { LocaleProvider } from './providers/locale.provider'; +import { LocalizationService } from './services/localization.service'; +import { ProfileState } from './states/profile.state'; +import { oAuthStorage } from './strategies/auth-flow.strategy'; +import { coreOptionsFactory, CORE_OPTIONS } from './tokens/options.token'; +import { noop } from './utils/common-utils'; +import './utils/date-extensions'; +import { getInitialData, localeInitializer } from './utils/initial-utils'; +import { TENANT_KEY } from './tokens/tenant-key.token'; +export function storageFactory(): OAuthStorage { + return oAuthStorage; +} + +/** + * BaseCoreModule is the module that holds + * all imports, declarations, exports, and entryComponents + * but not the providers. + * This module will be imported and exported by all others. + */ +@NgModule({ + exports: [ + CommonModule, + HttpClientModule, + FormsModule, + ReactiveFormsModule, + RouterModule, + LocalizationModule, + AbstractNgModelComponent, + AutofocusDirective, + DynamicLayoutComponent, + ForDirective, + FormSubmitDirective, + InitDirective, + InputEventDebounceDirective, + PermissionDirective, + ReplaceableRouteContainerComponent, + ReplaceableTemplateDirective, + RouterOutletComponent, + SortPipe, + StopPropagationDirective, + VisibilityDirective, + ], + imports: [ + OAuthModule, + CommonModule, + HttpClientModule, + FormsModule, + ReactiveFormsModule, + RouterModule, + LocalizationModule, + ], + declarations: [ + AbstractNgModelComponent, + AutofocusDirective, + DynamicLayoutComponent, + ForDirective, + FormSubmitDirective, + InitDirective, + InputEventDebounceDirective, + PermissionDirective, + ReplaceableRouteContainerComponent, + ReplaceableTemplateDirective, + RouterOutletComponent, + SortPipe, + StopPropagationDirective, + VisibilityDirective, + ], + providers: [LocalizationPipe], + entryComponents: [ + RouterOutletComponent, + DynamicLayoutComponent, + ReplaceableRouteContainerComponent, + ], +}) +export class BaseCoreModule {} + +/** + * RootCoreModule is the module that will be used at root level + * and it introduces imports useful at root level (e.g. NGXS) + */ @NgModule({ - imports: [CommonModule], + exports: [BaseCoreModule, LocalizationModule], + imports: [ + BaseCoreModule, + LocalizationModule, + NgxsModule.forFeature([ProfileState]), + OAuthModule.forRoot(), + HttpClientXsrfModule.withOptions({ + cookieName: 'XSRF-TOKEN', + headerName: 'RequestVerificationToken', + }), + ], }) -export class CoreModule {} +export class RootCoreModule {} + +/** + * CoreModule is the module that is publicly available + */ +@NgModule({ + exports: [BaseCoreModule], + imports: [BaseCoreModule], +}) +export class CoreModule { + static forRoot(options = {} as ABP.Root): ModuleWithProviders { + return { + ngModule: RootCoreModule, + providers: [ + LocaleProvider, + { + provide: 'CORE_OPTIONS', + useValue: options, + }, + { + provide: CORE_OPTIONS, + useFactory: coreOptionsFactory, + deps: ['CORE_OPTIONS'], + }, + { + provide: HTTP_INTERCEPTORS, + useExisting: ApiInterceptor, + multi: true, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [OAuthConfigurationHandler], + useFactory: noop, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [Injector], + useFactory: getInitialData, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [Injector], + useFactory: localeInitializer, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [LocalizationService], + useFactory: noop, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [RoutesHandler], + useFactory: noop, + }, + { provide: OAuthStorage, useFactory: storageFactory }, + { provide: TENANT_KEY, useValue: options.tenantKey || '__tenant' }, + ], + }; + } +} + +export function ngxsStoragePluginSerialize(data) { + return data; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/autofocus.directive.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/autofocus.directive.ts new file mode 100644 index 0000000000..7fb7de34d1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/autofocus.directive.ts @@ -0,0 +1,16 @@ +import { Directive, ElementRef, Input, AfterViewInit } from '@angular/core'; + +@Directive({ + // tslint:disable-next-line: directive-selector + selector: '[autofocus]' +}) +export class AutofocusDirective implements AfterViewInit { + @Input('autofocus') + delay = 0; + + constructor(private elRef: ElementRef) {} + + ngAfterViewInit(): void { + setTimeout(() => this.elRef.nativeElement.focus(), this.delay); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/debounce.directive.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/debounce.directive.ts new file mode 100644 index 0000000000..f35b0c6768 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/debounce.directive.ts @@ -0,0 +1,25 @@ +import { Directive, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { fromEvent } from 'rxjs'; +import { debounceTime } from 'rxjs/operators'; +import { SubscriptionService } from '../services/subscription.service'; + +@Directive({ + // tslint:disable-next-line: directive-selector + selector: '[input.debounce]', + providers: [SubscriptionService], +}) +export class InputEventDebounceDirective implements OnInit { + @Input() debounce = 300; + + @Output('input.debounce') readonly debounceEvent = new EventEmitter(); + + constructor(private el: ElementRef, private subscription: SubscriptionService) {} + + ngOnInit(): void { + const input$ = fromEvent(this.el.nativeElement, 'input').pipe(debounceTime(this.debounce)); + + this.subscription.addOne(input$, (event: Event) => { + this.debounceEvent.emit(event); + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/ellipsis.directive.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/ellipsis.directive.ts new file mode 100644 index 0000000000..1837d1d8e1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/ellipsis.directive.ts @@ -0,0 +1,38 @@ +import { AfterViewInit, ChangeDetectorRef, Directive, ElementRef, HostBinding, Input } from '@angular/core'; + +@Directive({ + selector: '[abpEllipsis]', +}) +export class EllipsisDirective implements AfterViewInit { + @Input('abpEllipsis') + width: string; + + @HostBinding('title') + @Input() + title: string; + + @Input('abpEllipsisEnabled') + enabled = true; + + @HostBinding('class.abp-ellipsis-inline') + get inlineClass() { + return this.enabled && this.width; + } + + @HostBinding('class.abp-ellipsis') + get class() { + return this.enabled && !this.width; + } + + @HostBinding('style.max-width') + get maxWidth() { + return this.enabled && this.width ? this.width || '170px' : undefined; + } + + constructor(private cdRef: ChangeDetectorRef, private elRef: ElementRef) {} + + ngAfterViewInit() { + this.title = this.title || (this.elRef.nativeElement as HTMLElement).innerText; + this.cdRef.detectChanges(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/for.directive.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/for.directive.ts new file mode 100644 index 0000000000..ba3efd7c21 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/for.directive.ts @@ -0,0 +1,178 @@ +import { + Directive, + EmbeddedViewRef, + Input, + IterableChangeRecord, + IterableChanges, + IterableDiffer, + IterableDiffers, + OnChanges, + TemplateRef, + TrackByFunction, + ViewContainerRef, +} from '@angular/core'; +import compare from 'just-compare'; +import clone from 'just-clone'; + +export type CompareFn = (value: T, comparison: T) => boolean; + +class AbpForContext { + constructor(public $implicit: any, public index: number, public count: number, public list: any[]) {} +} + +class RecordView { + constructor(public record: IterableChangeRecord, public view: EmbeddedViewRef) {} +} + +@Directive({ + selector: '[abpFor]', +}) +export class ForDirective implements OnChanges { + @Input('abpForOf') + items: any[]; + + @Input('abpForOrderBy') + orderBy: string; + + @Input('abpForOrderDir') + orderDir: 'ASC' | 'DESC'; + + @Input('abpForFilterBy') + filterBy: string; + + @Input('abpForFilterVal') + filterVal: any; + + @Input('abpForTrackBy') + trackBy; + + @Input('abpForCompareBy') + compareBy: CompareFn; + + @Input('abpForEmptyRef') + emptyRef: TemplateRef; + + private differ: IterableDiffer; + + private isShowEmptyRef: boolean; + + get compareFn(): CompareFn { + return this.compareBy || compare; + } + + get trackByFn(): TrackByFunction { + return this.trackBy || ((index: number, item: any) => (item as any).id || index); + } + + constructor( + private tempRef: TemplateRef, + private vcRef: ViewContainerRef, + private differs: IterableDiffers, + ) {} + + private iterateOverAppliedOperations(changes: IterableChanges) { + const rw: RecordView[] = []; + + changes.forEachOperation((record: IterableChangeRecord, previousIndex: number, currentIndex: number) => { + if (record.previousIndex == null) { + const view = this.vcRef.createEmbeddedView( + this.tempRef, + new AbpForContext(null, -1, -1, this.items), + currentIndex, + ); + + rw.push(new RecordView(record, view)); + } else if (currentIndex == null) { + this.vcRef.remove(previousIndex); + } else { + const view = this.vcRef.get(previousIndex); + this.vcRef.move(view, currentIndex); + + rw.push(new RecordView(record, view as EmbeddedViewRef)); + } + }); + + for (let i = 0, l = rw.length; i < l; i++) { + rw[i].view.context.$implicit = rw[i].record.item; + } + } + + private iterateOverAttachedViews(changes: IterableChanges) { + for (let i = 0, l = this.vcRef.length; i < l; i++) { + const viewRef = this.vcRef.get(i) as EmbeddedViewRef; + viewRef.context.index = i; + viewRef.context.count = l; + viewRef.context.list = this.items; + } + + changes.forEachIdentityChange((record: IterableChangeRecord) => { + const viewRef = this.vcRef.get(record.currentIndex) as EmbeddedViewRef; + viewRef.context.$implicit = record.item; + }); + } + + private projectItems(items: any[]): void { + if (!items.length && this.emptyRef) { + this.vcRef.clear(); + // tslint:disable-next-line: no-unused-expression + this.vcRef.createEmbeddedView(this.emptyRef).rootNodes; + this.isShowEmptyRef = true; + this.differ = null; + + return; + } + + if (this.emptyRef && this.isShowEmptyRef) { + this.vcRef.clear(); + this.isShowEmptyRef = false; + } + + if (!this.differ && items) { + this.differ = this.differs.find(items).create(this.trackByFn); + } + + if (this.differ) { + const changes = this.differ.diff(items); + + if (changes) { + this.iterateOverAppliedOperations(changes); + this.iterateOverAttachedViews(changes); + } + } + } + + private sortItems(items: any[]) { + if (this.orderBy) { + items.sort((a, b) => (a[this.orderBy] > b[this.orderBy] ? 1 : a[this.orderBy] < b[this.orderBy] ? -1 : 0)); + } else { + items.sort(); + } + } + + ngOnChanges() { + let items = clone(this.items) as any[]; + if (!Array.isArray(items)) return; + + const compareFn = this.compareFn; + + if (typeof this.filterBy !== 'undefined' && typeof this.filterVal !== 'undefined' && this.filterVal !== '') { + items = items.filter(item => compareFn(item[this.filterBy], this.filterVal)); + } + + switch (this.orderDir) { + case 'ASC': + this.sortItems(items); + this.projectItems(items); + break; + + case 'DESC': + this.sortItems(items); + items.reverse(); + this.projectItems(items); + break; + + default: + this.projectItems(items); + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/form-submit.directive.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/form-submit.directive.ts new file mode 100644 index 0000000000..5f42a65681 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/form-submit.directive.ts @@ -0,0 +1,86 @@ +import { + ChangeDetectorRef, + Directive, + ElementRef, + EventEmitter, + Input, + OnInit, + Output, + Self, +} from '@angular/core'; +import { FormControl, FormGroup, FormGroupDirective } from '@angular/forms'; +import { fromEvent } from 'rxjs'; +import { debounceTime, filter } from 'rxjs/operators'; +import { SubscriptionService } from '../services/subscription.service'; + +type Controls = { [key: string]: FormControl } | FormGroup[]; + +@Directive({ + // tslint:disable-next-line: directive-selector + selector: 'form[ngSubmit][formGroup]', + providers: [SubscriptionService], +}) +export class FormSubmitDirective implements OnInit { + @Input() + debounce = 200; + + @Input() + notValidateOnSubmit: string | boolean; + + @Output() readonly ngSubmit = new EventEmitter(); + + executedNgSubmit = false; + + constructor( + @Self() private formGroupDirective: FormGroupDirective, + private host: ElementRef, + private cdRef: ChangeDetectorRef, + private subscription: SubscriptionService, + ) {} + + ngOnInit() { + this.subscription.addOne(this.formGroupDirective.ngSubmit, () => { + this.markAsDirty(); + this.executedNgSubmit = true; + }); + + const keyup$ = fromEvent(this.host.nativeElement as HTMLElement, 'keyup').pipe( + debounceTime(this.debounce), + filter(event => !(event.target instanceof HTMLTextAreaElement)), + filter((event: KeyboardEvent) => event && event.key === 'Enter'), + ); + + this.subscription.addOne(keyup$, () => { + if (!this.executedNgSubmit) { + this.host.nativeElement.dispatchEvent( + new Event('submit', { bubbles: true, cancelable: true }), + ); + } + + this.executedNgSubmit = false; + }); + } + + markAsDirty() { + const { form } = this.formGroupDirective; + + setDirty(form.controls as { [key: string]: FormControl }); + form.markAsDirty(); + + this.cdRef.detectChanges(); + } +} + +function setDirty(controls: Controls) { + if (Array.isArray(controls)) { + controls.forEach(group => { + setDirty(group.controls as { [key: string]: FormControl }); + }); + return; + } + + Object.keys(controls).forEach(key => { + controls[key].markAsDirty(); + controls[key].updateValueAndValidity(); + }); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/index.ts new file mode 100644 index 0000000000..3322b14257 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/index.ts @@ -0,0 +1,9 @@ +export * from './autofocus.directive'; +export * from './debounce.directive'; +export * from './for.directive'; +export * from './form-submit.directive'; +export * from './init.directive'; +export * from './permission.directive'; +export * from './replaceable-template.directive'; +export * from './stop-propagation.directive'; +export * from './visibility.directive'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/init.directive.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/init.directive.ts new file mode 100644 index 0000000000..ba55523757 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/init.directive.ts @@ -0,0 +1,12 @@ +import { Directive, Output, EventEmitter, ElementRef, AfterViewInit } from '@angular/core'; + +@Directive({ selector: '[abpInit]' }) +export class InitDirective implements AfterViewInit { + @Output('abpInit') readonly init = new EventEmitter>(); + + constructor(private elRef: ElementRef) {} + + ngAfterViewInit() { + this.init.emit(this.elRef); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/permission.directive.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/permission.directive.ts new file mode 100644 index 0000000000..2e16cc0f2f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/permission.directive.ts @@ -0,0 +1,72 @@ +import { + ChangeDetectorRef, + Directive, + ElementRef, + Input, + OnChanges, + OnDestroy, + Optional, + Renderer2, + TemplateRef, + ViewContainerRef, +} from '@angular/core'; +import { Subscription } from 'rxjs'; +import { distinctUntilChanged } from 'rxjs/operators'; +import { PermissionService } from '../services/permission.service'; + +@Directive({ + selector: '[abpPermission]', +}) +export class PermissionDirective implements OnDestroy, OnChanges { + @Input('abpPermission') condition: string; + + subscription: Subscription; + + constructor( + private elRef: ElementRef, + private renderer: Renderer2, + @Optional() private templateRef: TemplateRef, + private vcRef: ViewContainerRef, + private permissionService: PermissionService, + private cdRef: ChangeDetectorRef, + ) {} + + private check() { + if (this.subscription) { + this.subscription.unsubscribe(); + } + + this.subscription = this.permissionService + .getGrantedPolicy$(this.condition) + .pipe(distinctUntilChanged()) + .subscribe(isGranted => { + if (this.templateRef) this.initStructural(isGranted); + else this.initAttribute(isGranted); + + this.cdRef.detectChanges(); + }); + } + + private initStructural(isGranted: boolean) { + this.vcRef.clear(); + + if (isGranted) this.vcRef.createEmbeddedView(this.templateRef); + } + + /** + * @deprecated Will be deleted in v5.0 + */ + private initAttribute(isGranted: boolean) { + if (!isGranted) { + this.renderer.removeChild(this.elRef.nativeElement.parentElement, this.elRef.nativeElement); + } + } + + ngOnDestroy(): void { + if (this.subscription) this.subscription.unsubscribe(); + } + + ngOnChanges() { + this.check(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/replaceable-template.directive.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/replaceable-template.directive.ts new file mode 100644 index 0000000000..489d1afabc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/replaceable-template.directive.ts @@ -0,0 +1,164 @@ +import { + ComponentFactoryResolver, + Directive, + Injector, + Input, + OnChanges, + OnInit, + SimpleChanges, + TemplateRef, + Type, + ViewContainerRef, +} from '@angular/core'; +import compare from 'just-compare'; +import { Subscription } from 'rxjs'; +import { filter } from 'rxjs/operators'; +import snq from 'snq'; +import { ABP } from '../models/common'; +import { ReplaceableComponents } from '../models/replaceable-components'; +import { ReplaceableComponentsService } from '../services/replaceable-components.service'; +import { SubscriptionService } from '../services/subscription.service'; + +@Directive({ selector: '[abpReplaceableTemplate]', providers: [SubscriptionService] }) +export class ReplaceableTemplateDirective implements OnInit, OnChanges { + @Input('abpReplaceableTemplate') + data: ReplaceableComponents.ReplaceableTemplateDirectiveInput; + + providedData = { inputs: {}, outputs: {} } as ReplaceableComponents.ReplaceableTemplateData< + any, + any + >; + + context = {} as any; + + externalComponent: Type; + + defaultComponentRef: any; + + defaultComponentSubscriptions = {} as ABP.Dictionary; + + initialized = false; + + constructor( + private injector: Injector, + private templateRef: TemplateRef, + private cfRes: ComponentFactoryResolver, + private vcRef: ViewContainerRef, + private replaceableComponents: ReplaceableComponentsService, + private subscription: SubscriptionService, + ) { + this.context = { + initTemplate: ref => { + this.resetDefaultComponent(); + this.defaultComponentRef = ref; + this.setDefaultComponentInputs(); + }, + }; + } + + ngOnInit() { + const component$ = this.replaceableComponents + .get$(this.data.componentKey) + .pipe( + filter( + (res = {} as ReplaceableComponents.ReplaceableComponent) => + !this.initialized || !compare(res.component, this.externalComponent), + ), + ); + + this.subscription.addOne( + component$, + (res = {} as ReplaceableComponents.ReplaceableComponent) => { + this.vcRef.clear(); + this.externalComponent = res.component; + if (this.defaultComponentRef) { + this.resetDefaultComponent(); + } + + if (res.component) { + this.setProvidedData(); + const customInjector = Injector.create({ + providers: [{ provide: 'REPLACEABLE_DATA', useValue: this.providedData }], + parent: this.injector, + }); + this.vcRef.createComponent( + this.cfRes.resolveComponentFactory(res.component), + 0, + customInjector, + ); + } else { + this.vcRef.createEmbeddedView(this.templateRef, this.context); + } + + this.initialized = true; + }, + ); + } + + ngOnChanges(changes: SimpleChanges) { + if (snq(() => changes.data.currentValue.inputs) && this.defaultComponentRef) { + this.setDefaultComponentInputs(); + } + } + + setDefaultComponentInputs() { + if (!this.defaultComponentRef || (!this.data.inputs && !this.data.outputs)) return; + + if (this.data.inputs) { + for (const key in this.data.inputs) { + if (this.data.inputs.hasOwnProperty(key)) { + if (!compare(this.defaultComponentRef[key], this.data.inputs[key].value)) { + this.defaultComponentRef[key] = this.data.inputs[key].value; + } + } + } + } + + if (this.data.outputs) { + for (const key in this.data.outputs) { + if (this.data.outputs.hasOwnProperty(key)) { + if (!this.defaultComponentSubscriptions[key]) { + this.defaultComponentSubscriptions[key] = this.defaultComponentRef[key].subscribe( + value => { + this.data.outputs[key](value); + }, + ); + } + } + } + } + } + + setProvidedData() { + this.providedData = { ...this.data, inputs: {} }; + + if (!this.data.inputs) return; + Object.defineProperties(this.providedData.inputs, { + ...Object.keys(this.data.inputs).reduce( + (acc, key) => ({ + ...acc, + [key]: { + enumerable: true, + configurable: true, + get: () => this.data.inputs[key].value, + ...(this.data.inputs[key].twoWay && { + set: newValue => { + this.data.inputs[key].value = newValue; + this.data.outputs[`${key}Change`](newValue); + }, + }), + }, + }), + {}, + ), + }); + } + + resetDefaultComponent() { + Object.keys(this.defaultComponentSubscriptions).forEach(key => { + this.defaultComponentSubscriptions[key].unsubscribe(); + }); + this.defaultComponentSubscriptions = {} as ABP.Dictionary; + this.defaultComponentRef = null; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/stop-propagation.directive.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/stop-propagation.directive.ts new file mode 100644 index 0000000000..12c035cc19 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/stop-propagation.directive.ts @@ -0,0 +1,21 @@ +import { Directive, ElementRef, EventEmitter, OnInit, Output } from '@angular/core'; +import { fromEvent } from 'rxjs'; +import { SubscriptionService } from '../services/subscription.service'; + +@Directive({ + // tslint:disable-next-line: directive-selector + selector: '[click.stop]', + providers: [SubscriptionService], +}) +export class StopPropagationDirective implements OnInit { + @Output('click.stop') readonly stopPropEvent = new EventEmitter(); + + constructor(private el: ElementRef, private subscription: SubscriptionService) {} + + ngOnInit(): void { + this.subscription.addOne(fromEvent(this.el.nativeElement, 'click'), (event: MouseEvent) => { + event.stopPropagation(); + this.stopPropEvent.emit(event); + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/visibility.directive.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/visibility.directive.ts new file mode 100644 index 0000000000..6cb341117d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/visibility.directive.ts @@ -0,0 +1,69 @@ +import { AfterViewInit, Directive, ElementRef, Input, Optional, Renderer2 } from '@angular/core'; +import { Subject } from 'rxjs'; +import snq from 'snq'; + +/** + * + * @deprecated To be deleted in v5.0 + */ +@Directive({ + selector: '[abpVisibility]', +}) +export class VisibilityDirective implements AfterViewInit { + @Input('abpVisibility') + focusedElement: HTMLElement; + + completed$ = new Subject(); + + constructor(@Optional() private elRef: ElementRef, private renderer: Renderer2) {} + + ngAfterViewInit() { + if (!this.focusedElement && this.elRef) { + this.focusedElement = this.elRef.nativeElement; + } + + let observer: MutationObserver; + observer = new MutationObserver(mutations => { + mutations.forEach(mutation => { + if (!mutation.target) return; + + const htmlNodes = snq( + () => Array.from(mutation.target.childNodes).filter(node => node instanceof HTMLElement), + [], + ); + + if (!htmlNodes.length) { + this.removeFromDOM(); + } + }); + }); + + observer.observe(this.focusedElement, { + childList: true, + }); + + setTimeout(() => { + const htmlNodes = snq( + () => + Array.from(this.focusedElement.childNodes).filter(node => node instanceof HTMLElement), + [], + ); + + if (!htmlNodes.length) this.removeFromDOM(); + }, 0); + + this.completed$.subscribe(() => observer.disconnect()); + } + + disconnect() { + this.completed$.next(); + this.completed$.complete(); + } + + removeFromDOM() { + if (!this.elRef.nativeElement) return; + + this.renderer.removeChild(this.elRef.nativeElement.parentElement, this.elRef.nativeElement); + this.disconnect(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/enums/common.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/enums/common.ts new file mode 100644 index 0000000000..08ddf05b6d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/enums/common.ts @@ -0,0 +1,5 @@ +export const enum eLayoutType { + account = 'account', + application = 'application', + empty = 'empty', +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/enums/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/enums/index.ts new file mode 100644 index 0000000000..d0b9323665 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/enums/index.ts @@ -0,0 +1 @@ +export * from './common'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/auth.guard.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/auth.guard.ts new file mode 100644 index 0000000000..f1e73ab805 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/auth.guard.ts @@ -0,0 +1,22 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, UrlTree } from '@angular/router'; +import { OAuthService } from 'angular-oauth2-oidc'; +import { Observable } from 'rxjs'; +import { AuthService } from '../services/auth.service'; + +@Injectable({ + providedIn: 'root', +}) +export class AuthGuard implements CanActivate { + constructor(private oauthService: OAuthService, private authService: AuthService) {} + + canActivate(): Observable | boolean | UrlTree { + const hasValidAccessToken = this.oauthService.hasValidAccessToken(); + if (hasValidAccessToken) { + return true; + } + + this.authService.navigateToLogin(); + return false; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/index.ts new file mode 100644 index 0000000000..6d31d6bf14 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/index.ts @@ -0,0 +1,2 @@ +export * from './auth.guard'; +export * from './permission.guard'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/permission.guard.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/permission.guard.ts new file mode 100644 index 0000000000..8b18eec798 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/permission.guard.ts @@ -0,0 +1,40 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; +import { Store } from '@ngxs/store'; +import { Observable, of } from 'rxjs'; +import { tap } from 'rxjs/operators'; +import { RestOccurError } from '../actions/rest.actions'; +import { RoutesService } from '../services/routes.service'; +import { findRoute, getRoutePath } from '../utils/route-utils'; +import { PermissionService } from '../services/permission.service'; + +@Injectable({ + providedIn: 'root', +}) +export class PermissionGuard implements CanActivate { + constructor( + private router: Router, + private routesService: RoutesService, + private store: Store, + private permissionService: PermissionService, + ) {} + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + let { requiredPolicy } = route.data || {}; + + if (!requiredPolicy) { + const routeFound = findRoute(this.routesService, getRoutePath(this.router, state.url)); + requiredPolicy = routeFound?.requiredPolicy; + } + + if (!requiredPolicy) return of(true); + + return this.permissionService.getGrantedPolicy$(requiredPolicy).pipe( + tap(access => { + if (!access) { + this.store.dispatch(new RestOccurError({ status: 403 })); + } + }), + ); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/index.ts new file mode 100644 index 0000000000..e11b317f45 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/index.ts @@ -0,0 +1,2 @@ +export * from './oauth-configuration.handler'; +export * from './routes.handler'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/oauth-configuration.handler.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/oauth-configuration.handler.ts new file mode 100644 index 0000000000..f82e382fe7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/oauth-configuration.handler.ts @@ -0,0 +1,32 @@ +import { Inject, Injectable } from '@angular/core'; +import { OAuthService } from 'angular-oauth2-oidc'; +import compare from 'just-compare'; +import { filter, map } from 'rxjs/operators'; +import { ABP } from '../models/common'; +import { EnvironmentService } from '../services/environment.service'; +import { CORE_OPTIONS } from '../tokens/options.token'; + +@Injectable({ + providedIn: 'root', +}) +export class OAuthConfigurationHandler { + constructor( + private oAuthService: OAuthService, + private environmentService: EnvironmentService, + @Inject(CORE_OPTIONS) private options: ABP.Root, + ) { + this.listenToSetEnvironment(); + } + + private listenToSetEnvironment() { + this.environmentService + .createOnUpdateStream(state => state) + .pipe( + map(environment => environment.oAuthConfig), + filter(config => !compare(config, this.options.environment.oAuthConfig)), + ) + .subscribe(config => { + this.oAuthService.configure(config); + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/routes.handler.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/routes.handler.ts new file mode 100644 index 0000000000..9ddc03e493 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/routes.handler.ts @@ -0,0 +1,45 @@ +import { Injectable, Optional } from '@angular/core'; +import { Router } from '@angular/router'; +import { ABP } from '../models'; +import { RoutesService } from '../services/routes.service'; + +@Injectable({ + providedIn: 'root', +}) +export class RoutesHandler { + constructor(private routes: RoutesService, @Optional() private router: Router) { + this.addRoutes(); + } + + addRoutes() { + this.router?.config?.forEach(({ path = '', data }) => { + if (!data?.routes) return; + + if (Array.isArray(data.routes)) { + this.routes.add(data.routes); + return; + } + + const routes = flatRoutes([{ path, ...data.routes }], { path: '' }); + this.routes.add(routes); + }); + } +} + +function flatRoutes(routes: RouteDef[], parent: any) { + if (!routes) return []; + + return routes.reduce((acc, route) => { + const { children, ...current } = { + ...route, + parentName: parent.name, + path: (parent.path + '/' + route.path).replace(/\/\//g, '/'), + }; + + acc.push(current, ...flatRoutes(children, current)); + + return acc; + }, []); +} + +type RouteDef = ABP.Route & { children: RouteDef[] }; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/interceptors/api.interceptor.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/interceptors/api.interceptor.ts new file mode 100644 index 0000000000..da73b1ba55 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/interceptors/api.interceptor.ts @@ -0,0 +1,51 @@ +import { HttpHandler, HttpHeaders, HttpInterceptor, HttpRequest } from '@angular/common/http'; +import { Injectable, Inject } from '@angular/core'; +import { OAuthService } from 'angular-oauth2-oidc'; +import { finalize } from 'rxjs/operators'; +import { SessionStateService } from '../services/session-state.service'; +import { HttpWaitService } from '../services/http-wait.service'; +import { TENANT_KEY } from '../tokens/tenant-key.token'; + +@Injectable({ + providedIn: 'root', +}) +export class ApiInterceptor implements HttpInterceptor { + constructor( + private oAuthService: OAuthService, + private sessionState: SessionStateService, + private httpWaitService: HttpWaitService, + @Inject(TENANT_KEY) private tenantKey: string, + ) {} + + intercept(request: HttpRequest, next: HttpHandler) { + this.httpWaitService.addRequest(request); + return next + .handle( + request.clone({ + setHeaders: this.getAdditionalHeaders(request.headers), + }), + ) + .pipe(finalize(() => this.httpWaitService.deleteRequest(request))); + } + + getAdditionalHeaders(existingHeaders?: HttpHeaders) { + const headers = {} as any; + + const token = this.oAuthService.getAccessToken(); + if (!existingHeaders?.has('Authorization') && token) { + headers['Authorization'] = `Bearer ${token}`; + } + + const lang = this.sessionState.getLanguage(); + if (!existingHeaders?.has('Accept-Language') && lang) { + headers['Accept-Language'] = lang; + } + + const tenant = this.sessionState.getTenant(); + if (!existingHeaders?.has(this.tenantKey) && tenant?.id) { + headers[this.tenantKey] = tenant.id; + } + + return headers; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/interceptors/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/interceptors/index.ts new file mode 100644 index 0000000000..d7479a7684 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/interceptors/index.ts @@ -0,0 +1 @@ +export * from './api.interceptor'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/localization.module.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/localization.module.ts new file mode 100644 index 0000000000..315f27b1ff --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/localization.module.ts @@ -0,0 +1,8 @@ +import { NgModule } from '@angular/core'; +import { LocalizationPipe } from './pipes/localization.pipe'; + +@NgModule({ + exports: [LocalizationPipe], + declarations: [LocalizationPipe], +}) +export class LocalizationModule {} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/application-configuration.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/application-configuration.ts new file mode 100644 index 0000000000..eecc4874b9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/application-configuration.ts @@ -0,0 +1,117 @@ +import { ABP } from './common'; + +export namespace ApplicationConfiguration { + /** + * @deprecated Use the ApplicationConfigurationDto interface instead. To be deleted in v5.0. + */ + export interface Response { + localization: Localization; + auth: Auth; + setting: Value; + currentUser: CurrentUser; + currentTenant: CurrentTenant; + features: Value; + } + + /** + * @deprecated Use the ApplicationLocalizationConfigurationDto interface instead. To be deleted in v5.0. + */ + export interface Localization { + currentCulture: CurrentCulture; + defaultResourceName: string; + languages: Language[]; + values: LocalizationValue; + } + + /** + * @deprecated Use the Record> type instead. To be deleted in v5.0. + */ + export interface LocalizationValue { + [key: string]: { [key: string]: string }; + } + + /** + * @deprecated Use the LanguageInfo interface instead. To be deleted in v5.0. + */ + export interface Language { + cultureName: string; + uiCultureName: string; + displayName: string; + flagIcon: string; + } + + /** + * @deprecated Use the CurrentCultureDto interface instead. To be deleted in v5.0. + */ + export interface CurrentCulture { + cultureName: string; + dateTimeFormat: DateTimeFormat; + displayName: string; + englishName: string; + isRightToLeft: boolean; + name: string; + nativeName: string; + threeLetterIsoLanguageName: string; + twoLetterIsoLanguageName: string; + } + + /** + * @deprecated Use the DateTimeFormatDto interface instead. To be deleted in v5.0. + */ + export interface DateTimeFormat { + calendarAlgorithmType: string; + dateSeparator: string; + fullDateTimePattern: string; + longTimePattern: string; + shortDatePattern: string; + shortTimePattern: string; + } + + /** + * @deprecated Use the ApplicationAuthConfigurationDto interface instead. To be deleted in v5.0. + */ + export interface Auth { + policies: Policy; + grantedPolicies: Policy; + } + + /** + * @deprecated Use the Record type instead. To be deleted in v5.0. + */ + export interface Policy { + [key: string]: boolean; + } + + /** + * @deprecated To be deleted in v5.0. + */ + export interface Value { + values: ABP.Dictionary; + } + + /** + * @deprecated Use the CurrentUserDto interface instead. To be deleted in v5.0. + */ + export interface CurrentUser { + email: string; + emailVerified: false; + id: string; + isAuthenticated: boolean; + roles: string[]; + tenantId: string; + userName: string; + name: string; + phoneNumber: string; + phoneNumberVerified: boolean; + surName: string; + } + + /** + * @deprecated Use the CurrentTenantDto interface instead. To be deleted in v5.0. + */ + export interface CurrentTenant { + id: string; + name: string; + isAvailable?: boolean; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/auth.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/auth.ts new file mode 100644 index 0000000000..5621dc8655 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/auth.ts @@ -0,0 +1,6 @@ +export interface LoginParams { + username: string; + password: string; + rememberMe?: boolean; + redirectUrl?: string; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/common.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/common.ts new file mode 100644 index 0000000000..d99d591ad4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/common.ts @@ -0,0 +1,80 @@ +import { EventEmitter, Type } from '@angular/core'; +import { Routes } from '@angular/router'; +import { Subject } from 'rxjs'; +import { eLayoutType } from '../enums/common'; +import { Environment } from './environment'; + +export namespace ABP { + export interface Root { + environment: Partial; + registerLocaleFn: (locale: string) => Promise; + skipGetAppConfiguration?: boolean; + sendNullsAsQueryParam?: boolean; + tenantKey?: string; + } + + export interface HasPolicy { + requiredPolicy?: string; + } + + export interface Test extends Partial { + baseHref?: string; + listQueryDebounceTime?: number; + routes?: Routes; + } + + export type PagedResponse = { + totalCount: number; + } & PagedItemsResponse; + + export interface PagedItemsResponse { + items: T[]; + } + + export interface PageQueryParams { + filter?: string; + sorting?: string; + skipCount?: number; + maxResultCount?: number; + } + + export interface Lookup { + id: string; + displayName: string; + } + + export interface Nav { + name: string; + parentName?: string; + requiredPolicy?: string; + order?: number; + invisible?: boolean; + } + + export interface Route extends Nav { + path: string; + layout?: eLayoutType; + iconClass?: string; + } + + export interface Tab extends Nav { + component: Type; + } + + export interface BasicItem { + id: string; + name: string; + } + + export interface Option { + key: Extract; + value: T[Extract]; + } + + export interface Dictionary { + [key: string]: T; + } + + export type ExtractFromOutput | Subject> = + T extends EventEmitter ? X : T extends Subject ? Y : never; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/config.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/config.ts new file mode 100644 index 0000000000..8b1544b774 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/config.ts @@ -0,0 +1,65 @@ +import { ApplicationConfiguration } from './application-configuration'; +import { ABP } from './common'; +import { Environment as IEnvironment } from './environment'; +import { + LocalizationParam as ILocalizationParam, + LocalizationWithDefault as ILocalizationWithDefault, +} from './localization'; + +export namespace Config { + /** + * @deprecated Use ApplicationConfiguration.Response instead. To be deleted in v5.0. + */ + export type State = ApplicationConfiguration.Response & ABP.Root & { environment: IEnvironment }; + + export type Environment = IEnvironment; + + /** + * @deprecated Use ApplicationInfo interface instead. To be deleted in v5.0. + */ + export interface Application { + name: string; + baseUrl?: string; + logoUrl?: string; + } + + /** + * @deprecated Use ApiConfig interface instead. To be deleted in v5.0. + */ + export type ApiConfig = { + [key: string]: string; + url: string; + } & Partial<{ + rootNamespace: string; + }>; + + /** + * @deprecated Use Apis interface instead. To be deleted in v5.0. + */ + export interface Apis { + [key: string]: ApiConfig; + default: ApiConfig; + } + + export type LocalizationWithDefault = ILocalizationWithDefault; + + export type LocalizationParam = ILocalizationParam; + + /** + * @deprecated Use customMergeFn type instead. To be deleted in v5.0. + */ + export type customMergeFn = ( + localEnv: Partial, + remoteEnv: any, + ) => Config.Environment; + + /** + * @deprecated Use RemoteEnv interface instead. To be deleted in v5.0. + */ + export interface RemoteEnv { + url: string; + mergeStrategy: 'deepmerge' | 'overwrite' | customMergeFn; + method?: string; + headers?: ABP.Dictionary; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/dtos.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/dtos.ts new file mode 100644 index 0000000000..49c1d8e735 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/dtos.ts @@ -0,0 +1,219 @@ +import { ABP } from './common'; + +export class ListResultDto { + items?: T[]; + + constructor(initialValues: Partial> = {}) { + for (const key in initialValues) { + if (initialValues.hasOwnProperty(key)) { + this[key] = initialValues[key]; + } + } + } +} + +export class PagedResultDto extends ListResultDto { + totalCount?: number; + + constructor(initialValues: Partial> = {}) { + super(initialValues); + } +} + +export class LimitedResultRequestDto { + maxResultCount = 10; + + constructor(initialValues: Partial = {}) { + for (const key in initialValues) { + if (initialValues.hasOwnProperty(key) && initialValues[key] !== undefined) { + this[key] = initialValues[key]; + } + } + } +} + +export class PagedResultRequestDto extends LimitedResultRequestDto { + skipCount?: number; + + constructor(initialValues: Partial = {}) { + super(initialValues); + } +} + +export class PagedAndSortedResultRequestDto extends PagedResultRequestDto { + sorting?: string; + + constructor(initialValues: Partial = {}) { + super(initialValues); + } +} + +export class EntityDto { + id?: TKey; + + constructor(initialValues: Partial> = {}) { + for (const key in initialValues) { + if (initialValues.hasOwnProperty(key)) { + this[key] = initialValues[key]; + } + } + } +} + +export class CreationAuditedEntityDto extends EntityDto { + creationTime?: string | Date; + creatorId?: string; + + constructor(initialValues: Partial> = {}) { + super(initialValues); + } +} + +export class CreationAuditedEntityWithUserDto< + TUserDto, + TPrimaryKey = string +> extends CreationAuditedEntityDto { + creator?: TUserDto; + + constructor( + initialValues: Partial> = {}, + ) { + super(initialValues); + } +} + +export class AuditedEntityDto extends CreationAuditedEntityDto { + lastModificationTime?: string | Date; + lastModifierId?: string; + + constructor(initialValues: Partial> = {}) { + super(initialValues); + } +} + +export class AuditedEntityWithUserDto< + TUserDto, + TPrimaryKey = string +> extends AuditedEntityDto { + creator?: TUserDto; + lastModifier?: TUserDto; + + constructor(initialValues: Partial> = {}) { + super(initialValues); + } +} + +export class FullAuditedEntityDto extends AuditedEntityDto { + isDeleted?: boolean; + deleterId?: string; + deletionTime?: Date | string; + + constructor(initialValues: Partial> = {}) { + super(initialValues); + } +} + +export class FullAuditedEntityWithUserDto< + TUserDto, + TPrimaryKey = string +> extends FullAuditedEntityDto { + creator?: TUserDto; + lastModifier?: TUserDto; + deleter?: TUserDto; + + constructor(initialValues: Partial> = {}) { + super(initialValues); + } +} + +export class ExtensibleObject { + extraProperties: ABP.Dictionary; + + constructor(initialValues: Partial = {}) { + for (const key in initialValues) { + if (initialValues.hasOwnProperty(key)) { + this[key] = initialValues[key]; + } + } + } +} + +export class ExtensibleEntityDto extends ExtensibleObject { + id: TKey; + + constructor(initialValues: Partial> = {}) { + super(initialValues); + } +} + +export class ExtensibleCreationAuditedEntityDto< + TPrimaryKey = string +> extends ExtensibleEntityDto { + creationTime: Date | string; + creatorId?: string; + + constructor(initialValues: Partial> = {}) { + super(initialValues); + } +} + +export class ExtensibleAuditedEntityDto< + TPrimaryKey = string +> extends ExtensibleCreationAuditedEntityDto { + lastModificationTime?: Date | string; + lastModifierId?: string; + + constructor(initialValues: Partial> = {}) { + super(initialValues); + } +} + +export class ExtensibleAuditedEntityWithUserDto< + TPrimaryKey = string, + TUserDto = any +> extends ExtensibleAuditedEntityDto { + creator: TUserDto; + lastModifier: TUserDto; + + constructor(initialValues: Partial> = {}) { + super(initialValues); + } +} + +export class ExtensibleCreationAuditedEntityWithUserDto< + TPrimaryKey = string, + TUserDto = any +> extends ExtensibleCreationAuditedEntityDto { + creator: TUserDto; + + constructor( + initialValues: Partial> = {}, + ) { + super(initialValues); + } +} + +export class ExtensibleFullAuditedEntityDto< + TPrimaryKey = string +> extends ExtensibleAuditedEntityDto { + isDeleted: boolean; + deleterId?: string; + deletionTime: Date | string; + + constructor(initialValues: Partial> = {}) { + super(initialValues); + } +} + +export class ExtensibleFullAuditedEntityWithUserDto< + TPrimaryKey = string, + TUserDto = any +> extends ExtensibleFullAuditedEntityDto { + creator: TUserDto; + lastModifier: TUserDto; + deleter: TUserDto; + + constructor(initialValues: Partial> = {}) { + super(initialValues); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/environment.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/environment.ts new file mode 100644 index 0000000000..46596685b0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/environment.ts @@ -0,0 +1,39 @@ +import { AuthConfig } from 'angular-oauth2-oidc'; +import { ABP } from './common'; + +export interface Environment { + apis: Apis; + application: ApplicationInfo; + hmr?: boolean; + test?: boolean; + localization?: { defaultResourceName?: string }; + oAuthConfig: AuthConfig; + production: boolean; + remoteEnv?: RemoteEnv; +} + +export interface ApplicationInfo { + name: string; + baseUrl?: string; + logoUrl?: string; +} + +export interface ApiConfig { + [key: string]: string; + url: string; + rootNamespace?: string; +} + +export interface Apis { + [key: string]: Partial; + default: ApiConfig; +} + +export type customMergeFn = (localEnv: Partial, remoteEnv: any) => Environment; + +export interface RemoteEnv { + url: string; + mergeStrategy: 'deepmerge' | 'overwrite' | customMergeFn; + method?: string; + headers?: ABP.Dictionary; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/index.ts new file mode 100644 index 0000000000..f9f2bccb3f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/index.ts @@ -0,0 +1,12 @@ +export * from './application-configuration'; +export * from './auth'; +export * from './common'; +export * from './config'; +export * from './dtos'; +export * from './environment'; +export * from './localization'; +export * from './profile'; +export * from './replaceable-components'; +export * from './rest'; +export * from './session'; +export * from './utility'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/localization.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/localization.ts new file mode 100644 index 0000000000..1d0e4d91c2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/localization.ts @@ -0,0 +1,6 @@ +export interface LocalizationWithDefault { + key: string; + defaultValue: string; +} + +export type LocalizationParam = string | LocalizationWithDefault; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/profile.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/profile.ts new file mode 100644 index 0000000000..779c8c3b6a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/profile.ts @@ -0,0 +1,28 @@ +import { ExtensibleObject } from './dtos'; + +export namespace Profile { + export interface State { + profile: Response; + } + + export interface Response extends Partial { + userName: string; + email: string; + name: string; + surname: string; + phoneNumber: string; + /** + * Following 4 fields are added as optional (for backward compatibility) on 17.08.2020 + * Also, this interface extends `ExtensibleObject` as partial for extraProperties field. + */ + isExternal?: boolean; + hasPassword?: boolean; + emailConfirmed?: boolean; + phoneNumberConfirmed?: boolean; + } + + export interface ChangePasswordRequest { + currentPassword: string; + newPassword: string; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/replaceable-components.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/replaceable-components.ts new file mode 100644 index 0000000000..1c59ff3a05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/replaceable-components.ts @@ -0,0 +1,47 @@ +import { Type, EventEmitter } from '@angular/core'; +import { ABP } from './common'; +import { Subject, BehaviorSubject } from 'rxjs'; + +export namespace ReplaceableComponents { + export interface State { + replaceableComponents: ReplaceableComponent[]; + } + + export interface ReplaceableComponent { + component: Type; + key: string; + } + + export interface ReplaceableTemplateDirectiveInput< + I, + O extends { [K in keyof O]: EventEmitter | Subject } + > { + inputs: { -readonly [K in keyof I]: { value: I[K]; twoWay?: boolean } }; + outputs: { -readonly [K in keyof O]: (value: ABP.ExtractFromOutput) => void }; + componentKey: string; + } + + export interface ReplaceableTemplateData< + I, + O extends { [K in keyof O]: EventEmitter | Subject } + > { + inputs: ReplaceableTemplateInputs; + outputs: ReplaceableTemplateOutputs; + componentKey: string; + } + + export type ReplaceableTemplateInputs = { + [K in keyof T]: T[K]; + }; + + export type ReplaceableTemplateOutputs< + T extends { [K in keyof T]: EventEmitter | Subject } + > = { + [K in keyof T]: (value: ABP.ExtractFromOutput) => void; + }; + + export interface RouteData { + key: string; + defaultComponent: Type; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/rest.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/rest.ts new file mode 100644 index 0000000000..03d70161bc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/rest.ts @@ -0,0 +1,41 @@ +import { HttpHeaders, HttpParams } from '@angular/common/http'; + +export namespace Rest { + export type Config = Partial<{ + apiName: string; + skipHandleError: boolean; + observe: Observe; + }>; + + export const enum Observe { + Body = 'body', + Events = 'events', + Response = 'response', + } + + export const enum ResponseType { + ArrayBuffer = 'arraybuffer', + Blob = 'blob', + JSON = 'json', + Text = 'text', + } + + export interface Request { + body?: T; + headers?: + | HttpHeaders + | { + [header: string]: string | string[]; + }; + method: string; + params?: + | HttpParams + | { + [param: string]: any; + }; + reportProgress?: boolean; + responseType?: 'arraybuffer' | 'blob' | 'json' | 'text'; + url: string; + withCredentials?: boolean; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/session.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/session.ts new file mode 100644 index 0000000000..7ce516a180 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/session.ts @@ -0,0 +1,23 @@ +import { CurrentTenantDto } from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; + +export namespace Session { + export interface State { + language: string; + tenant: CurrentTenantDto; + /** + * + * @deprecated To be deleted in v5.0 + */ + sessionDetail: SessionDetail; + } + + /** + * + * @deprecated To be deleted in v5.0 + */ + export interface SessionDetail { + openedTabCount: number; + lastExitTime: number; + remember: boolean; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/utility.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/utility.ts new file mode 100644 index 0000000000..3f183d3944 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/utility.ts @@ -0,0 +1,25 @@ +/* tslint:disable:ban-types */ +import { TemplateRef, Type } from '@angular/core'; + +export type DeepPartial = Partible extends never + ? T + : { + [K in keyof T]?: DeepPartial; + }; + +type Partible = T extends Primitive | Array | Node + ? 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; + +export type Strict = Class extends Contract + ? { [K in keyof Class]: K extends keyof Contract ? Contract[K] : never } + : Contract; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/index.ts new file mode 100644 index 0000000000..eb028eee4f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/index.ts @@ -0,0 +1,2 @@ +export * from './localization.pipe'; +export * from './sort.pipe'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/localization.pipe.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/localization.pipe.ts new file mode 100644 index 0000000000..cf076d414c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/localization.pipe.ts @@ -0,0 +1,24 @@ +import { Injectable, Pipe, PipeTransform } from '@angular/core'; +import { Config } from '../models'; +import { LocalizationService } from '../services/localization.service'; + +@Injectable() +@Pipe({ + name: 'abpLocalization', +}) +export class LocalizationPipe implements PipeTransform { + constructor(private localization: LocalizationService) {} + + transform( + value: string | Config.LocalizationWithDefault = '', + ...interpolateParams: string[] + ): string { + return this.localization.instant( + value, + ...interpolateParams.reduce( + (acc, val) => (Array.isArray(val) ? [...acc, ...val] : [...acc, val]), + [], + ), + ); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/sort.pipe.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/sort.pipe.ts new file mode 100644 index 0000000000..4d634f33c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/sort.pipe.ts @@ -0,0 +1,46 @@ +import { Injectable, Pipe, PipeTransform } from '@angular/core'; +export type SortOrder = 'asc' | 'desc'; +@Injectable() +@Pipe({ + name: 'abpSort', +}) +export class SortPipe implements PipeTransform { + transform( + value: any[], + sortOrder: SortOrder | string = 'asc', + sortKey?: string, + ): any { + sortOrder = sortOrder && (sortOrder.toLowerCase() as any); + + if (!value || (sortOrder !== 'asc' && sortOrder !== 'desc')) return value; + + let numberArray = []; + let stringArray = []; + + if (!sortKey) { + numberArray = value.filter(item => typeof item === 'number').sort(); + stringArray = value.filter(item => typeof item === 'string').sort(); + } else { + numberArray = value + .filter(item => typeof item[sortKey] === 'number') + .sort((a, b) => a[sortKey] - b[sortKey]); + stringArray = value + .filter(item => typeof item[sortKey] === 'string') + .sort((a, b) => { + if (a[sortKey] < b[sortKey]) return -1; + else if (a[sortKey] > b[sortKey]) return 1; + else return 0; + }); + } + const sorted = [ + ...numberArray, + ...stringArray, + ...value.filter( + item => + typeof (sortKey ? item[sortKey] : item) !== 'number' && + typeof (sortKey ? item[sortKey] : item) !== 'string', + ), + ]; + return sortOrder === 'asc' ? sorted : sorted.reverse(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/providers/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/providers/index.ts new file mode 100644 index 0000000000..fcbdb58be2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/providers/index.ts @@ -0,0 +1 @@ +export * from './locale.provider'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/providers/locale.provider.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/providers/locale.provider.ts new file mode 100644 index 0000000000..b96069e75d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/providers/locale.provider.ts @@ -0,0 +1,24 @@ +import { LOCALE_ID, Provider } from '@angular/core'; +import { differentLocales } from '../constants/different-locales'; +import { LocalizationService } from '../services/localization.service'; + +export class LocaleId extends String { + constructor(private localizationService: LocalizationService) { + super(); + } + + toString(): string { + const { currentLang } = this.localizationService; + return differentLocales[currentLang] || currentLang; + } + + valueOf(): string { + return this.toString(); + } +} + +export const LocaleProvider: Provider = { + provide: LOCALE_ID, + useClass: LocaleId, + deps: [LocalizationService], +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/README.md b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/README.md new file mode 100644 index 0000000000..767dfd0f7c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/README.md @@ -0,0 +1,17 @@ +# Proxy Generation Output + +This directory includes the output of the latest proxy generation. +The files and folders in it will be overwritten when proxy generation is run again. +Therefore, please do not place your own content in this folder. + +In addition, `generate-proxy.json` works like a lock file. +It includes information used by the proxy generator, so please do not delete or modify it. + +Finally, the name of the files and folders should not be changed for two reasons: +- Proxy generator will keep creating them at those paths and you will have multiple copies of the same content. +- ABP Suite generates files which include imports from this folder. + +> **Important Notice:** If you are building a module and are planning to publish to npm, +> some of the generated proxies are likely to be exported from public-api.ts file. In such a case, +> please make sure you export files directly and not from barrel exports. In other words, +> do not include index.ts exports in your public-api.ts exports. diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/generate-proxy.json b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/generate-proxy.json new file mode 100644 index 0000000000..bb69808d57 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/generate-proxy.json @@ -0,0 +1,21315 @@ +{ + "generated": [ + "abp" + ], + "modules": { + "languageManagement": { + "rootPath": "languageManagement", + "remoteServiceName": "LanguageManagement", + "controllers": { + "Volo.Abp.LanguageManagement.LanguageController": { + "controllerName": "Language", + "type": "Volo.Abp.LanguageManagement.LanguageController", + "interfaces": [ + { + "type": "Volo.Abp.LanguageManagement.ILanguageAppService" + } + ], + "actions": { + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/language-management/languages/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/language-management/languages", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput, Volo.Abp.LanguageManagement.Application.Contracts", + "type": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ResourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "BaseCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "TargetCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "GetOnlyEmptyValues", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/language-management/languages/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.LanguageManagement.Dto.LanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/language-management/languages", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto, Volo.Abp.LanguageManagement.Application.Contracts", + "type": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.LanguageManagement.Dto.LanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/language-management/languages/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto, Volo.Abp.LanguageManagement.Application.Contracts", + "type": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.LanguageManagement.Dto.LanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/language-management/languages/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "SetAsDefaultAsyncById": { + "uniqueName": "SetAsDefaultAsyncById", + "name": "SetAsDefaultAsync", + "httpMethod": "PUT", + "url": "api/language-management/languages/{id}/set-as-default", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetResourcesAsync": { + "uniqueName": "GetResourcesAsync", + "name": "GetResourcesAsync", + "httpMethod": "GET", + "url": "api/language-management/languages/resources", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.LanguageManagement.Dto.LanguageResourceDto]" + } + }, + "GetCulturelistAsync": { + "uniqueName": "GetCulturelistAsync", + "name": "GetCulturelistAsync", + "httpMethod": "GET", + "url": "api/language-management/languages/culture-list", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.LanguageManagement.Dto.CultureInfoDto]" + } + }, + "GetFlagListAsync": { + "uniqueName": "GetFlagListAsync", + "name": "GetFlagListAsync", + "httpMethod": "GET", + "url": "api/language-management/languages/flag-list", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[string]" + } + } + } + }, + "Volo.Abp.LanguageManagement.LanguageTextController": { + "controllerName": "LanguageText", + "type": "Volo.Abp.LanguageManagement.LanguageTextController", + "interfaces": [ + { + "type": "Volo.Abp.LanguageManagement.ILanguageTextAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/language-management/language-texts", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput, Volo.Abp.LanguageManagement.Application.Contracts", + "type": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ResourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "BaseCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "TargetCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "GetOnlyEmptyValues", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncByResourceNameAndCultureNameAndNameAndBaseCultureName": { + "uniqueName": "GetAsyncByResourceNameAndCultureNameAndNameAndBaseCultureName", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/language-management/language-texts/{resourceName}/{cultureName}/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "resourceName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "cultureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "baseCultureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "resourceName", + "name": "resourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "cultureName", + "name": "cultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "name", + "name": "name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "baseCultureName", + "name": "baseCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.LanguageManagement.Dto.LanguageTextDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageTextDto" + } + }, + "UpdateAsyncByResourceNameAndCultureNameAndNameAndValue": { + "uniqueName": "UpdateAsyncByResourceNameAndCultureNameAndNameAndValue", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/language-management/language-texts/{resourceName}/{cultureName}/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "resourceName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "cultureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "value", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "resourceName", + "name": "resourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "cultureName", + "name": "cultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "name", + "name": "name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "value", + "name": "value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "RestoreToDefaultAsyncByResourceNameAndCultureNameAndName": { + "uniqueName": "RestoreToDefaultAsyncByResourceNameAndCultureNameAndName", + "name": "RestoreToDefaultAsync", + "httpMethod": "PUT", + "url": "api/language-management/language-texts/{resourceName}/{cultureName}/{name}/restore", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "resourceName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "cultureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "resourceName", + "name": "resourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "cultureName", + "name": "cultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "name", + "name": "name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "account": { + "rootPath": "account", + "remoteServiceName": "AbpAccountPublic", + "controllers": { + "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.AccountController", + "interfaces": [], + "actions": { + "LoginByLogin": { + "uniqueName": "LoginByLogin", + "name": "Login", + "httpMethod": "POST", + "url": "api/account/login", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Pro.Public.Web", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "jsonName": null, + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + }, + "LinkLoginByLogin": { + "uniqueName": "LinkLoginByLogin", + "name": "LinkLogin", + "httpMethod": "POST", + "url": "api/account/linkLogin", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.LinkUserLoginInfo, Volo.Abp.Account.Pro.Public.Web", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.LinkUserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.LinkUserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "jsonName": null, + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.LinkUserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.LinkUserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + }, + "Logout": { + "uniqueName": "Logout", + "name": "Logout", + "httpMethod": "GET", + "url": "api/account/logout", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "CheckPasswordByLogin": { + "uniqueName": "CheckPasswordByLogin", + "name": "CheckPassword", + "httpMethod": "POST", + "url": "api/account/checkPassword", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Pro.Public.Web", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "jsonName": null, + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + } + } + }, + "Volo.Abp.Account.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.AccountController", + "interfaces": [ + { + "type": "Volo.Abp.Account.IAccountAppService" + } + ], + "actions": { + "RegisterAsyncByInput": { + "uniqueName": "RegisterAsyncByInput", + "name": "RegisterAsync", + "httpMethod": "POST", + "url": "api/account/register", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.RegisterDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "SendPasswordResetCodeAsyncByInput": { + "uniqueName": "SendPasswordResetCodeAsyncByInput", + "name": "SendPasswordResetCodeAsync", + "httpMethod": "POST", + "url": "api/account/send-password-reset-code", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendPasswordResetCodeDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "ResetPasswordAsyncByInput": { + "uniqueName": "ResetPasswordAsyncByInput", + "name": "ResetPasswordAsync", + "httpMethod": "POST", + "url": "api/account/reset-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ResetPasswordDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetConfirmationStateAsyncById": { + "uniqueName": "GetConfirmationStateAsyncById", + "name": "GetConfirmationStateAsync", + "httpMethod": "GET", + "url": "api/account/confirmation-state", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.IdentityUserConfirmationStateDto", + "typeSimple": "Volo.Abp.Account.IdentityUserConfirmationStateDto" + } + }, + "SendPhoneNumberConfirmationTokenAsyncByInput": { + "uniqueName": "SendPhoneNumberConfirmationTokenAsyncByInput", + "name": "SendPhoneNumberConfirmationTokenAsync", + "httpMethod": "POST", + "url": "api/account/send-phone-number-confirmation-token", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendPhoneNumberConfirmationTokenDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.SendPhoneNumberConfirmationTokenDto", + "typeSimple": "Volo.Abp.Account.SendPhoneNumberConfirmationTokenDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.SendPhoneNumberConfirmationTokenDto", + "typeSimple": "Volo.Abp.Account.SendPhoneNumberConfirmationTokenDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "SendEmailConfirmationTokenAsyncByInput": { + "uniqueName": "SendEmailConfirmationTokenAsyncByInput", + "name": "SendEmailConfirmationTokenAsync", + "httpMethod": "POST", + "url": "api/account/send-email-confirmation-token", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendEmailConfirmationTokenDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.SendEmailConfirmationTokenDto", + "typeSimple": "Volo.Abp.Account.SendEmailConfirmationTokenDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.SendEmailConfirmationTokenDto", + "typeSimple": "Volo.Abp.Account.SendEmailConfirmationTokenDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "ConfirmPhoneNumberAsyncByInput": { + "uniqueName": "ConfirmPhoneNumberAsyncByInput", + "name": "ConfirmPhoneNumberAsync", + "httpMethod": "POST", + "url": "api/account/confirm-phone-number", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ConfirmPhoneNumberInput, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ConfirmPhoneNumberInput", + "typeSimple": "Volo.Abp.Account.ConfirmPhoneNumberInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.ConfirmPhoneNumberInput", + "typeSimple": "Volo.Abp.Account.ConfirmPhoneNumberInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "ConfirmEmailAsyncByInput": { + "uniqueName": "ConfirmEmailAsyncByInput", + "name": "ConfirmEmailAsync", + "httpMethod": "POST", + "url": "api/account/confirm-email", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ConfirmEmailInput, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ConfirmEmailInput", + "typeSimple": "Volo.Abp.Account.ConfirmEmailInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.ConfirmEmailInput", + "typeSimple": "Volo.Abp.Account.ConfirmEmailInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "SetProfilePictureAsyncByInput": { + "uniqueName": "SetProfilePictureAsyncByInput", + "name": "SetProfilePictureAsync", + "httpMethod": "POST", + "url": "api/account/profile-picture", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ProfilePictureInput, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ProfilePictureInput", + "typeSimple": "Volo.Abp.Account.ProfilePictureInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.ProfilePictureInput", + "typeSimple": "Volo.Abp.Account.ProfilePictureInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetProfilePictureAsyncById": { + "uniqueName": "GetProfilePictureAsyncById", + "name": "GetProfilePictureAsync", + "httpMethod": "GET", + "url": "api/account/profile-picture/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.ProfilePictureSourceDto", + "typeSimple": "Volo.Abp.Account.ProfilePictureSourceDto" + } + }, + "SendEmailSecurityCodeAsyncByInput": { + "uniqueName": "SendEmailSecurityCodeAsyncByInput", + "name": "SendEmailSecurityCodeAsync", + "httpMethod": "POST", + "url": "api/account/send-email-security-code", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendEmailSecurityCodeDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.SendEmailSecurityCodeDto", + "typeSimple": "Volo.Abp.Account.SendEmailSecurityCodeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.SendEmailSecurityCodeDto", + "typeSimple": "Volo.Abp.Account.SendEmailSecurityCodeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "SendPhoneSecurityCodeAsyncByInput": { + "uniqueName": "SendPhoneSecurityCodeAsyncByInput", + "name": "SendPhoneSecurityCodeAsync", + "httpMethod": "POST", + "url": "api/account/send-phone-security-code", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendPhoneSecurityCodeDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.SendPhoneSecurityCodeDto", + "typeSimple": "Volo.Abp.Account.SendPhoneSecurityCodeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.SendPhoneSecurityCodeDto", + "typeSimple": "Volo.Abp.Account.SendPhoneSecurityCodeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "UploadProfilePictureFileAsyncByImage": { + "uniqueName": "UploadProfilePictureFileAsyncByImage", + "name": "UploadProfilePictureFileAsync", + "httpMethod": "POST", + "url": "api/account/profile-picture-file", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "image", + "typeAsString": "Microsoft.AspNetCore.Http.IFormFile, Microsoft.AspNetCore.Http.Features", + "type": "Microsoft.AspNetCore.Http.IFormFile", + "typeSimple": "Microsoft.AspNetCore.Http.IFormFile", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "image", + "name": "image", + "jsonName": null, + "type": "Microsoft.AspNetCore.Http.IFormFile", + "typeSimple": "Microsoft.AspNetCore.Http.IFormFile", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "FormFile", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Microsoft.AspNetCore.Mvc.IActionResult", + "typeSimple": "Microsoft.AspNetCore.Mvc.IActionResult" + } + }, + "GetProfilePictureFileAsyncById": { + "uniqueName": "GetProfilePictureFileAsyncById", + "name": "GetProfilePictureFileAsync", + "httpMethod": "GET", + "url": "api/account/profile-picture-file/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Microsoft.AspNetCore.Mvc.IActionResult", + "typeSimple": "Microsoft.AspNetCore.Mvc.IActionResult" + } + }, + "RecaptchaByCaptchaResponse": { + "uniqueName": "RecaptchaByCaptchaResponse", + "name": "Recaptcha", + "httpMethod": "GET", + "url": "api/account/recaptcha-validate", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "captchaResponse", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "captchaResponse", + "name": "captchaResponse", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Account.AccountExternalProviderController": { + "controllerName": "AccountExternalProvider", + "type": "Volo.Abp.Account.AccountExternalProviderController", + "interfaces": [ + { + "type": "Volo.Abp.Account.ExternalProviders.IAccountExternalProviderAppService" + } + ], + "actions": { + "GetAllAsync": { + "uniqueName": "GetAllAsync", + "name": "GetAllAsync", + "httpMethod": "GET", + "url": "api/account/external-provider", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Account.ExternalProviders.ExternalProviderDto", + "typeSimple": "Volo.Abp.Account.ExternalProviders.ExternalProviderDto" + } + }, + "GetByNameAsyncByInput": { + "uniqueName": "GetByNameAsyncByInput", + "name": "GetByNameAsync", + "httpMethod": "GET", + "url": "api/account/external-provider/by-name", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ExternalProviders.GetByNameInput, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ExternalProviders.GetByNameInput", + "typeSimple": "Volo.Abp.Account.ExternalProviders.GetByNameInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.ExternalProviders.ExternalProviderItemWithSecretDto", + "typeSimple": "Volo.Abp.Account.ExternalProviders.ExternalProviderItemWithSecretDto" + } + } + } + } + } + }, + "identityServer": { + "rootPath": "identityServer", + "remoteServiceName": "AbpIdentityServer", + "controllers": { + "Volo.Abp.IdentityServer.ApiResourcesController": { + "controllerName": "ApiResources", + "type": "Volo.Abp.IdentityServer.ApiResourcesController", + "interfaces": [ + { + "type": "Volo.Abp.IdentityServer.ApiResource.IApiResourceAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity-server/api-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity-server/api-resources/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto]" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity-server/api-resources/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity-server/api-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity-server/api-resources/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity-server/api-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.IdentityServer.ApiScopesController": { + "controllerName": "ApiScopes", + "type": "Volo.Abp.IdentityServer.ApiScopesController", + "interfaces": [ + { + "type": "Volo.Abp.IdentityServer.ApiScope.IApiScopeAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity-server/apiScopes", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.ApiScope.Dtos.GetApiScopeListInput, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.ApiScope.Dtos.GetApiScopeListInput", + "typeSimple": "Volo.Abp.IdentityServer.ApiScope.Dtos.GetApiScopeListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity-server/apiScopes/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeWithDetailsDto]" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity-server/apiScopes/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeWithDetailsDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity-server/apiScopes", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.ApiScope.Dtos.CreateApiScopeDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.ApiScope.Dtos.CreateApiScopeDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiScope.Dtos.CreateApiScopeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.IdentityServer.ApiScope.Dtos.CreateApiScopeDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiScope.Dtos.CreateApiScopeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeWithDetailsDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity-server/apiScopes/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.ApiScope.Dtos.UpdateApiScopeDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.ApiScope.Dtos.UpdateApiScopeDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiScope.Dtos.UpdateApiScopeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.IdentityServer.ApiScope.Dtos.UpdateApiScopeDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiScope.Dtos.UpdateApiScopeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeWithDetailsDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity-server/apiScopes", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.IdentityServer.ClientsController": { + "controllerName": "Clients", + "type": "Volo.Abp.IdentityServer.ClientsController", + "interfaces": [ + { + "type": "Volo.Abp.IdentityServer.Client.IClientAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity-server/clients", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity-server/clients/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity-server/clients", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity-server/clients/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity-server/clients", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.IdentityServer.IdentityResourcesController": { + "controllerName": "IdentityResources", + "type": "Volo.Abp.IdentityServer.IdentityResourcesController", + "interfaces": [ + { + "type": "Volo.Abp.IdentityServer.IdentityResource.IIdentityResourceAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity-server/identity-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity-server/identity-resources/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto]" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity-server/identity-resources/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity-server/identity-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity-server/identity-resources/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity-server/identity-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "CreateStandardResourcesAsync": { + "uniqueName": "CreateStandardResourcesAsync", + "name": "CreateStandardResourcesAsync", + "httpMethod": "POST", + "url": "api/identity-server/identity-resources/create-standard-resources", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.IdentityServer.IdentityServerClaimTypesController": { + "controllerName": "IdentityServerClaimTypes", + "type": "Volo.Abp.IdentityServer.IdentityServerClaimTypesController", + "interfaces": [ + { + "type": "Volo.Abp.IdentityServer.ClaimType.IIdentityServerClaimTypeAppService" + } + ], + "actions": { + "GetListAsync": { + "uniqueName": "GetListAsync", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity-server/claim-types", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.IdentityServer.ClaimType.Dtos.IdentityClaimTypeDto]" + } + } + } + } + } + }, + "saas": { + "rootPath": "saas", + "remoteServiceName": "SaasHost", + "controllers": { + "Volo.Saas.Host.EditionController": { + "controllerName": "Edition", + "type": "Volo.Saas.Host.EditionController", + "interfaces": [ + { + "type": "Volo.Saas.Host.IEditionAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/saas/editions/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.EditionDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/saas/editions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.GetEditionsInput, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.GetEditionsInput", + "typeSimple": "Volo.Saas.Host.Dtos.GetEditionsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/saas/editions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.EditionCreateDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.EditionCreateDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Saas.Host.Dtos.EditionCreateDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.EditionDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/saas/editions/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.EditionUpdateDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.EditionUpdateDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Saas.Host.Dtos.EditionUpdateDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.EditionDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/saas/editions/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetUsageStatistics": { + "uniqueName": "GetUsageStatistics", + "name": "GetUsageStatistics", + "httpMethod": "GET", + "url": "api/saas/editions/statistics/usage-statistic", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Saas.Host.GetEditionUsageStatisticsResult", + "typeSimple": "Volo.Saas.Host.GetEditionUsageStatisticsResult" + } + } + } + }, + "Volo.Saas.Host.TenantController": { + "controllerName": "Tenant", + "type": "Volo.Saas.Host.TenantController", + "interfaces": [ + { + "type": "Volo.Saas.Host.ITenantAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/saas/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.SaasTenantDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/saas/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.GetTenantsInput, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.GetTenantsInput", + "typeSimple": "Volo.Saas.Host.Dtos.GetTenantsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "GetEditionNames", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/saas/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.SaasTenantCreateDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.SaasTenantDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/saas/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.SaasTenantDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/saas/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetConnectionStringsAsyncById": { + "uniqueName": "GetConnectionStringsAsyncById", + "name": "GetConnectionStringsAsync", + "httpMethod": "GET", + "url": "api/saas/tenants/{id}/connection-strings", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.SaasTenantConnectionStringsDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantConnectionStringsDto" + } + }, + "UpdateConnectionStringsAsyncByIdAndInput": { + "uniqueName": "UpdateConnectionStringsAsyncByIdAndInput", + "name": "UpdateConnectionStringsAsync", + "httpMethod": "PUT", + "url": "api/saas/tenants/{id}/connection-strings", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.SaasTenantConnectionStringsDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.SaasTenantConnectionStringsDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantConnectionStringsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Saas.Host.Dtos.SaasTenantConnectionStringsDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantConnectionStringsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "ApplyDatabaseMigrationsAsyncById": { + "uniqueName": "ApplyDatabaseMigrationsAsyncById", + "name": "ApplyDatabaseMigrationsAsync", + "httpMethod": "POST", + "url": "api/saas/tenants/{id}/apply-database-migrations", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "cms-kit": { + "rootPath": "cms-kit", + "remoteServiceName": "CmsKitAdmin", + "controllers": { + "Volo.CmsKit.Admin.Newsletters.NewsletterRecordAdminController": { + "controllerName": "NewsletterRecordAdmin", + "type": "Volo.CmsKit.Admin.Newsletters.NewsletterRecordAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.Newsletters.INewsletterRecordAdminAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/newsletter", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Newsletters.GetNewsletterRecordsRequestInput, Volo.CmsKit.Pro.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Newsletters.GetNewsletterRecordsRequestInput", + "typeSimple": "Volo.CmsKit.Admin.Newsletters.GetNewsletterRecordsRequestInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Preference", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Source", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/newsletter/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Newsletters.NewsletterRecordWithDetailsDto", + "typeSimple": "Volo.CmsKit.Admin.Newsletters.NewsletterRecordWithDetailsDto" + } + }, + "GetNewsletterPreferencesAsync": { + "uniqueName": "GetNewsletterPreferencesAsync", + "name": "GetNewsletterPreferencesAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/newsletter/preferences", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[string]" + } + }, + "ExportCsvByInput": { + "uniqueName": "ExportCsvByInput", + "name": "ExportCsv", + "httpMethod": "GET", + "url": "api/cms-kit-admin/newsletter/export-csv", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Newsletters.GetNewsletterRecordsCsvRequestInput, Volo.CmsKit.Pro.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Newsletters.GetNewsletterRecordsCsvRequestInput", + "typeSimple": "Volo.CmsKit.Admin.Newsletters.GetNewsletterRecordsCsvRequestInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Preference", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Source", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Microsoft.AspNetCore.Mvc.IActionResult", + "typeSimple": "Microsoft.AspNetCore.Mvc.IActionResult" + } + } + } + }, + "Volo.CmsKit.Admin.Contact.ContactSettingController": { + "controllerName": "ContactSetting", + "type": "Volo.CmsKit.Admin.Contact.ContactSettingController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.Contact.IContactSettingsAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/contact/settings", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.CmsKit.Admin.Contact.CmsKitContactSettingDto", + "typeSimple": "Volo.CmsKit.Admin.Contact.CmsKitContactSettingDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/contact/settings", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Contact.UpdateCmsKitContactSettingDto, Volo.CmsKit.Pro.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Contact.UpdateCmsKitContactSettingDto", + "typeSimple": "Volo.CmsKit.Admin.Contact.UpdateCmsKitContactSettingDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Contact.UpdateCmsKitContactSettingDto", + "typeSimple": "Volo.CmsKit.Admin.Contact.UpdateCmsKitContactSettingDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.CmsKit.Admin.Tags.EntityTagAdminController": { + "controllerName": "EntityTagAdmin", + "type": "Volo.CmsKit.Admin.Tags.EntityTagAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.Tags.IEntityTagAdminAppService" + } + ], + "actions": { + "AddTagToEntityAsyncByInput": { + "uniqueName": "AddTagToEntityAsyncByInput", + "name": "AddTagToEntityAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/entity-tags", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "RemoveTagFromEntityAsyncByInput": { + "uniqueName": "RemoveTagFromEntityAsyncByInput", + "name": "RemoveTagFromEntityAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-admin/entity-tags", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "TagId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "SetEntityTagsAsyncByInput": { + "uniqueName": "SetEntityTagsAsyncByInput", + "name": "SetEntityTagsAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-admin/entity-tags", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagSetDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.CmsKit.Admin.Tags.TagAdminController": { + "controllerName": "TagAdmin", + "type": "Volo.CmsKit.Admin.Tags.TagAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.Tags.ITagAdminAppService" + } + ], + "actions": { + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/tags", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.TagCreateDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.TagCreateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Tags.TagCreateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Tags.TagDto", + "typeSimple": "Volo.CmsKit.Tags.TagDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-admin/tags/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/tags/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Tags.TagDto", + "typeSimple": "Volo.CmsKit.Tags.TagDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/tags", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.TagGetListInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.TagGetListInput", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagGetListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-admin/tags/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.TagUpdateDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.TagUpdateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Tags.TagUpdateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Tags.TagDto", + "typeSimple": "Volo.CmsKit.Tags.TagDto" + } + }, + "GetTagDefinitionsAsync": { + "uniqueName": "GetTagDefinitionsAsync", + "name": "GetTagDefinitionsAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/tags/tag-definitions", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.CmsKit.Admin.Tags.TagDefinitionDto]" + } + } + } + }, + "Volo.CmsKit.Admin.Pages.PageAdminController": { + "controllerName": "PageAdmin", + "type": "Volo.CmsKit.Admin.Pages.PageAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.Pages.IPageAdminAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/pages/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Pages.PageDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/pages", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Pages.GetPagesInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Pages.GetPagesInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.GetPagesInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/pages", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Pages.CreatePageInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Pages.PageDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-admin/pages/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Pages.PageDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-admin/pages/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.CmsKit.Admin.MediaDescriptors.MediaDescriptorAdminController": { + "controllerName": "MediaDescriptorAdmin", + "type": "Volo.CmsKit.Admin.MediaDescriptors.MediaDescriptorAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.MediaDescriptors.IMediaDescriptorAdminAppService" + } + ], + "actions": { + "CreateAsyncByEntityTypeAndInputStream": { + "uniqueName": "CreateAsyncByEntityTypeAndInputStream", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/media/{entityType}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityType", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "inputStream", + "typeAsString": "Volo.CmsKit.Admin.MediaDescriptors.CreateMediaInputWithStream, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.MediaDescriptors.CreateMediaInputWithStream", + "typeSimple": "Volo.CmsKit.Admin.MediaDescriptors.CreateMediaInputWithStream", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityType", + "name": "entityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "inputStream", + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "inputStream" + }, + { + "nameOnMethod": "inputStream", + "name": "File", + "jsonName": null, + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "FormFile", + "descriptorName": "inputStream" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.MediaDescriptors.MediaDescriptorDto", + "typeSimple": "Volo.CmsKit.Admin.MediaDescriptors.MediaDescriptorDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-admin/media/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.CmsKit.Admin.Comments.CommentAdminController": { + "controllerName": "CommentAdmin", + "type": "Volo.CmsKit.Admin.Comments.CommentAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.Comments.ICommentAdminAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/comments", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Comments.CommentGetListInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Comments.CommentGetListInput", + "typeSimple": "Volo.CmsKit.Admin.Comments.CommentGetListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Text", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "RepliedCommentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Author", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CreationStartDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CreationEndDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/comments/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Comments.CommentWithAuthorDto", + "typeSimple": "Volo.CmsKit.Admin.Comments.CommentWithAuthorDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-admin/comments/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.CmsKit.Admin.Blogs.BlogAdminController": { + "controllerName": "BlogAdmin", + "type": "Volo.CmsKit.Admin.Blogs.BlogAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.Blogs.IBlogAdminAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/blogs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/blogs", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogGetListInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.BlogGetListInput", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogGetListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-admin/blogs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-admin/blogs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.CmsKit.Admin.Blogs.BlogFeatureAdminController": { + "controllerName": "BlogFeatureAdmin", + "type": "Volo.CmsKit.Admin.Blogs.BlogFeatureAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.Blogs.IBlogFeatureAdminAppService" + } + ], + "actions": { + "GetListAsyncByBlogId": { + "uniqueName": "GetListAsyncByBlogId", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/blogs/{blogId}/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "blogId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "blogId", + "name": "blogId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.CmsKit.Blogs.BlogFeatureDto]" + } + }, + "SetAsyncByBlogIdAndDto": { + "uniqueName": "SetAsyncByBlogIdAndDto", + "name": "SetAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-admin/blogs/{blogId}/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "blogId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "dto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "blogId", + "name": "blogId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "dto", + "name": "dto", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.CmsKit.Admin.Blogs.BlogPostAdminController": { + "controllerName": "BlogPostAdmin", + "type": "Volo.CmsKit.Admin.Blogs.BlogPostAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + } + ], + "actions": { + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs/blog-posts", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-admin/blogs/blog-posts/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/blogs/blog-posts/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [ + "GuidRouteConstraint" + ], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/blogs/blog-posts", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "BlogId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-admin/blogs/blog-posts/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + } + } + } + }, + "Volo.CmsKit.Public.Newsletters.NewsletterRecordPublicController": { + "controllerName": "NewsletterRecordPublic", + "type": "Volo.CmsKit.Public.Newsletters.NewsletterRecordPublicController", + "interfaces": [ + { + "type": "Volo.CmsKit.Public.Newsletters.INewsletterRecordPublicAppService" + } + ], + "actions": { + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/cms-kit-public/newsletter", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Public.Newsletters.CreateNewsletterRecordInput, Volo.CmsKit.Pro.Public.Application.Contracts", + "type": "Volo.CmsKit.Public.Newsletters.CreateNewsletterRecordInput", + "typeSimple": "Volo.CmsKit.Public.Newsletters.CreateNewsletterRecordInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Public.Newsletters.CreateNewsletterRecordInput", + "typeSimple": "Volo.CmsKit.Public.Newsletters.CreateNewsletterRecordInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetNewsletterPreferencesAsyncByEmailAddress": { + "uniqueName": "GetNewsletterPreferencesAsyncByEmailAddress", + "name": "GetNewsletterPreferencesAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/newsletter/emailAddress", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "emailAddress", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "emailAddress", + "name": "emailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.CmsKit.Public.Newsletters.NewsletterPreferenceDetailsDto]" + } + }, + "UpdatePreferencesAsyncByInput": { + "uniqueName": "UpdatePreferencesAsyncByInput", + "name": "UpdatePreferencesAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-public/newsletter", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Public.Newsletters.UpdatePreferenceRequestInput, Volo.CmsKit.Pro.Public.Application.Contracts", + "type": "Volo.CmsKit.Public.Newsletters.UpdatePreferenceRequestInput", + "typeSimple": "Volo.CmsKit.Public.Newsletters.UpdatePreferenceRequestInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Public.Newsletters.UpdatePreferenceRequestInput", + "typeSimple": "Volo.CmsKit.Public.Newsletters.UpdatePreferenceRequestInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetOptionByPreferenceByPreference": { + "uniqueName": "GetOptionByPreferenceByPreference", + "name": "GetOptionByPreference", + "httpMethod": "GET", + "url": "api/cms-kit-public/newsletter/preference-options", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "preference", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "preference", + "name": "preference", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Public.Newsletters.NewsletterEmailOptionsDto", + "typeSimple": "Volo.CmsKit.Public.Newsletters.NewsletterEmailOptionsDto" + } + } + } + }, + "Volo.CmsKit.Public.Contact.ContactPublicController": { + "controllerName": "ContactPublic", + "type": "Volo.CmsKit.Public.Contact.ContactPublicController", + "interfaces": [ + { + "type": "Volo.CmsKit.Public.Contact.IContactPublicAppService" + } + ], + "actions": { + "SendMessageAsyncByInput": { + "uniqueName": "SendMessageAsyncByInput", + "name": "SendMessageAsync", + "httpMethod": "POST", + "url": "api/cms-kit-public/contacts", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Public.Contact.ContactCreateInput, Volo.CmsKit.Pro.Public.Application.Contracts", + "type": "Volo.CmsKit.Public.Contact.ContactCreateInput", + "typeSimple": "Volo.CmsKit.Public.Contact.ContactCreateInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Public.Contact.ContactCreateInput", + "typeSimple": "Volo.CmsKit.Public.Contact.ContactCreateInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.CmsKit.Public.Tags.TagPublicController": { + "controllerName": "TagPublic", + "type": "Volo.CmsKit.Public.Tags.TagPublicController", + "interfaces": [ + { + "type": "Volo.CmsKit.Tags.ITagAppService" + } + ], + "actions": { + "GetAllRelatedTagsAsyncByEntityTypeAndEntityId": { + "uniqueName": "GetAllRelatedTagsAsyncByEntityTypeAndEntityId", + "name": "GetAllRelatedTagsAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/tags/{entityType}/{entityId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityType", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "entityId", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityType", + "name": "entityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "entityId", + "name": "entityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.CmsKit.Tags.TagDto]" + } + } + } + }, + "Volo.CmsKit.Public.Reactions.ReactionPublicController": { + "controllerName": "ReactionPublic", + "type": "Volo.CmsKit.Public.Reactions.ReactionPublicController", + "interfaces": [ + { + "type": "Volo.CmsKit.Public.Reactions.IReactionPublicAppService" + } + ], + "actions": { + "GetForSelectionAsyncByEntityTypeAndEntityId": { + "uniqueName": "GetForSelectionAsyncByEntityTypeAndEntityId", + "name": "GetForSelectionAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/reactions/{entityType}/{entityId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityType", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "entityId", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityType", + "name": "entityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "entityId", + "name": "entityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "CreateAsyncByEntityTypeAndEntityIdAndReaction": { + "uniqueName": "CreateAsyncByEntityTypeAndEntityIdAndReaction", + "name": "CreateAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-public/reactions/{entityType}/{entityId}/{reaction}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityType", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "entityId", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "reaction", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityType", + "name": "entityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "entityId", + "name": "entityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "reaction", + "name": "reaction", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "DeleteAsyncByEntityTypeAndEntityIdAndReaction": { + "uniqueName": "DeleteAsyncByEntityTypeAndEntityIdAndReaction", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-public/reactions/{entityType}/{entityId}/{reaction}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityType", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "entityId", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "reaction", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityType", + "name": "entityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "entityId", + "name": "entityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "reaction", + "name": "reaction", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.CmsKit.Public.Ratings.RatingPublicController": { + "controllerName": "RatingPublic", + "type": "Volo.CmsKit.Public.Ratings.RatingPublicController", + "interfaces": [ + { + "type": "Volo.CmsKit.Public.Ratings.IRatingPublicAppService" + } + ], + "actions": { + "CreateAsyncByEntityTypeAndEntityIdAndInput": { + "uniqueName": "CreateAsyncByEntityTypeAndEntityIdAndInput", + "name": "CreateAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-public/ratings/{entityType}/{entityId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityType", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "entityId", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.CmsKit.Public.Ratings.CreateUpdateRatingInput, Volo.CmsKit.Public.Application.Contracts", + "type": "Volo.CmsKit.Public.Ratings.CreateUpdateRatingInput", + "typeSimple": "Volo.CmsKit.Public.Ratings.CreateUpdateRatingInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityType", + "name": "entityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "entityId", + "name": "entityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Public.Ratings.CreateUpdateRatingInput", + "typeSimple": "Volo.CmsKit.Public.Ratings.CreateUpdateRatingInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Public.Ratings.RatingDto", + "typeSimple": "Volo.CmsKit.Public.Ratings.RatingDto" + } + }, + "DeleteAsyncByEntityTypeAndEntityId": { + "uniqueName": "DeleteAsyncByEntityTypeAndEntityId", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-public/ratings/{entityType}/{entityId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityType", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "entityId", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityType", + "name": "entityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "entityId", + "name": "entityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetGroupedStarCountsAsyncByEntityTypeAndEntityId": { + "uniqueName": "GetGroupedStarCountsAsyncByEntityTypeAndEntityId", + "name": "GetGroupedStarCountsAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/ratings/{entityType}/{entityId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityType", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "entityId", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityType", + "name": "entityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "entityId", + "name": "entityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.CmsKit.Public.Ratings.RatingWithStarCountDto]" + } + } + } + }, + "Volo.CmsKit.Public.Pages.PagesPublicController": { + "controllerName": "PagesPublic", + "type": "Volo.CmsKit.Public.Pages.PagesPublicController", + "interfaces": [ + { + "type": "Volo.CmsKit.Public.Pages.IPagePublicAppService" + } + ], + "actions": { + "FindBySlugAsyncBySlug": { + "uniqueName": "FindBySlugAsyncBySlug", + "name": "FindBySlugAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/pages/{slug}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "slug", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "slug", + "name": "slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Public.Pages.PageDto", + "typeSimple": "Volo.CmsKit.Public.Pages.PageDto" + } + } + } + }, + "Volo.CmsKit.Public.Comments.CommentPublicController": { + "controllerName": "CommentPublic", + "type": "Volo.CmsKit.Public.Comments.CommentPublicController", + "interfaces": [ + { + "type": "Volo.CmsKit.Public.Comments.ICommentPublicAppService" + } + ], + "actions": { + "GetListAsyncByEntityTypeAndEntityId": { + "uniqueName": "GetListAsyncByEntityTypeAndEntityId", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/comments/{entityType}/{entityId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityType", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "entityId", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityType", + "name": "entityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "entityId", + "name": "entityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "CreateAsyncByEntityTypeAndEntityIdAndInput": { + "uniqueName": "CreateAsyncByEntityTypeAndEntityIdAndInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/cms-kit-public/comments/{entityType}/{entityId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityType", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "entityId", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.CmsKit.Public.Comments.CreateCommentInput, Volo.CmsKit.Public.Application.Contracts", + "type": "Volo.CmsKit.Public.Comments.CreateCommentInput", + "typeSimple": "Volo.CmsKit.Public.Comments.CreateCommentInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityType", + "name": "entityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "entityId", + "name": "entityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Public.Comments.CreateCommentInput", + "typeSimple": "Volo.CmsKit.Public.Comments.CreateCommentInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Public.Comments.CommentDto", + "typeSimple": "Volo.CmsKit.Public.Comments.CommentDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-public/comments/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.CmsKit.Public.Comments.UpdateCommentInput, Volo.CmsKit.Public.Application.Contracts", + "type": "Volo.CmsKit.Public.Comments.UpdateCommentInput", + "typeSimple": "Volo.CmsKit.Public.Comments.UpdateCommentInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Public.Comments.UpdateCommentInput", + "typeSimple": "Volo.CmsKit.Public.Comments.UpdateCommentInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Public.Comments.CommentDto", + "typeSimple": "Volo.CmsKit.Public.Comments.CommentDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-public/comments/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.CmsKit.Public.Blogs.BlogPostPublicController": { + "controllerName": "BlogPostPublic", + "type": "Volo.CmsKit.Public.Blogs.BlogPostPublicController", + "interfaces": [ + { + "type": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" + } + ], + "actions": { + "GetAsyncByBlogSlugAndBlogPostSlug": { + "uniqueName": "GetAsyncByBlogSlugAndBlogPostSlug", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/blog-posts/{blogSlug}/{blogPostSlug}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "blogSlug", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "blogPostSlug", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "blogSlug", + "name": "blogSlug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "blogPostSlug", + "name": "blogPostSlug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Public.Blogs.BlogPostPublicDto", + "typeSimple": "Volo.CmsKit.Public.Blogs.BlogPostPublicDto" + } + }, + "GetListAsyncByBlogSlugAndInput": { + "uniqueName": "GetListAsyncByBlogSlugAndInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/blog-posts/{blogSlug}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "blogSlug", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto, Volo.Abp.Ddd.Application.Contracts", + "type": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "blogSlug", + "name": "blogSlug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + } + } + }, + "Volo.CmsKit.MediaDescriptors.MediaDescriptorController": { + "controllerName": "MediaDescriptor", + "type": "Volo.CmsKit.MediaDescriptors.MediaDescriptorController", + "interfaces": [ + { + "type": "Volo.CmsKit.MediaDescriptors.IMediaDescriptorAppService" + } + ], + "actions": { + "DownloadAsyncById": { + "uniqueName": "DownloadAsyncById", + "name": "DownloadAsync", + "httpMethod": "GET", + "url": "api/cms-kit/media/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Content.RemoteStreamContent", + "typeSimple": "Volo.Abp.Content.RemoteStreamContent" + } + } + } + }, + "Volo.CmsKit.Blogs.BlogFeatureController": { + "controllerName": "BlogFeature", + "type": "Volo.CmsKit.Blogs.BlogFeatureController", + "interfaces": [ + { + "type": "Volo.CmsKit.Blogs.IBlogFeatureAppService" + } + ], + "actions": { + "GetOrDefaultAsyncByBlogIdAndFeatureName": { + "uniqueName": "GetOrDefaultAsyncByBlogIdAndFeatureName", + "name": "GetOrDefaultAsync", + "httpMethod": "GET", + "url": "api/cms-kit/blogs/{blogId}/features/{featureName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "blogId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "featureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "blogId", + "name": "blogId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "featureName", + "name": "featureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Blogs.BlogFeatureDto", + "typeSimple": "Volo.CmsKit.Blogs.BlogFeatureDto" + } + } + } + } + } + }, + "accountAdmin": { + "rootPath": "accountAdmin", + "remoteServiceName": "AbpAccountAdmin", + "controllers": { + "Volo.Abp.Account.AccountSettingsController": { + "controllerName": "AccountSettings", + "type": "Volo.Abp.Account.AccountSettingsController", + "interfaces": [ + { + "type": "Volo.Abp.Account.IAccountSettingsAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/account-admin/settings", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Account.AccountSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountSettingsDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/account-admin/settings", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.AccountSettingsDto, Volo.Abp.Account.Pro.Admin.Application.Contracts", + "type": "Volo.Abp.Account.AccountSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.AccountSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetLdapAsync": { + "uniqueName": "GetLdapAsync", + "name": "GetLdapAsync", + "httpMethod": "GET", + "url": "api/account-admin/settings/ldap", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Account.AccountLdapSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountLdapSettingsDto" + } + }, + "UpdateLdapAsyncByInput": { + "uniqueName": "UpdateLdapAsyncByInput", + "name": "UpdateLdapAsync", + "httpMethod": "PUT", + "url": "api/account-admin/settings/ldap", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.AccountLdapSettingsDto, Volo.Abp.Account.Pro.Admin.Application.Contracts", + "type": "Volo.Abp.Account.AccountLdapSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountLdapSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.AccountLdapSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountLdapSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetTwoFactorAsync": { + "uniqueName": "GetTwoFactorAsync", + "name": "GetTwoFactorAsync", + "httpMethod": "GET", + "url": "api/account-admin/settings/two-factor", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountTwoFactorSettingsDto" + } + }, + "UpdateTwoFactorAsyncByInput": { + "uniqueName": "UpdateTwoFactorAsyncByInput", + "name": "UpdateTwoFactorAsync", + "httpMethod": "PUT", + "url": "api/account-admin/settings/two-factor", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.AccountTwoFactorSettingsDto, Volo.Abp.Account.Pro.Admin.Application.Contracts", + "type": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetRecaptchaAsync": { + "uniqueName": "GetRecaptchaAsync", + "name": "GetRecaptchaAsync", + "httpMethod": "GET", + "url": "api/account-admin/settings/recaptcha", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Account.AccountRecaptchaSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountRecaptchaSettingsDto" + } + }, + "UpdateRecaptchaAsyncByInput": { + "uniqueName": "UpdateRecaptchaAsyncByInput", + "name": "UpdateRecaptchaAsync", + "httpMethod": "PUT", + "url": "api/account-admin/settings/recaptcha", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.AccountRecaptchaSettingsDto, Volo.Abp.Account.Pro.Admin.Application.Contracts", + "type": "Volo.Abp.Account.AccountRecaptchaSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountRecaptchaSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.AccountRecaptchaSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountRecaptchaSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetExternalProviderAsync": { + "uniqueName": "GetExternalProviderAsync", + "name": "GetExternalProviderAsync", + "httpMethod": "GET", + "url": "api/account-admin/settings/external-provider", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Account.AccountExternalProviderSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountExternalProviderSettingsDto" + } + }, + "UpdateExternalProviderAsyncByInput": { + "uniqueName": "UpdateExternalProviderAsyncByInput", + "name": "UpdateExternalProviderAsync", + "httpMethod": "PUT", + "url": "api/account-admin/settings/external-provider", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.Account.UpdateExternalProviderDto, Volo.Abp.Account.Pro.Admin.Application.Contracts, Version=4.4.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Account.UpdateExternalProviderDto]", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Account.UpdateExternalProviderDto]", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "textTemplateManagement": { + "rootPath": "textTemplateManagement", + "remoteServiceName": "TextTemplateManagement", + "controllers": { + "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateContentController": { + "controllerName": "TemplateContent", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateContentController", + "interfaces": [ + { + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.ITemplateContentAppService" + } + ], + "actions": { + "GetAsyncByInput": { + "uniqueName": "GetAsyncByInput", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/text-template-management/template-contents", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput, Volo.Abp.TextTemplateManagement.Application.Contracts", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "TemplateName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto" + } + }, + "RestoreToDefaultAsyncByInput": { + "uniqueName": "RestoreToDefaultAsyncByInput", + "name": "RestoreToDefaultAsync", + "httpMethod": "PUT", + "url": "api/text-template-management/template-contents/restore-to-default", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput, Volo.Abp.TextTemplateManagement.Application.Contracts", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/text-template-management/template-contents", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput, Volo.Abp.TextTemplateManagement.Application.Contracts", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto" + } + } + } + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionController": { + "controllerName": "TemplateDefinition", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionController", + "interfaces": [ + { + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.ITemplateDefinitionAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/text-template-management/template-definitions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput, Volo.Abp.TextTemplateManagement.Application.Contracts", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "FilterText", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncByName": { + "uniqueName": "GetAsyncByName", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/text-template-management/template-definitions/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "name", + "name": "name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionDto", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionDto" + } + } + } + } + } + }, + "auditLogging": { + "rootPath": "auditLogging", + "remoteServiceName": "AbpAuditLogging", + "controllers": { + "Volo.Abp.AuditLogging.AuditLogsController": { + "controllerName": "AuditLogs", + "type": "Volo.Abp.AuditLogging.AuditLogsController", + "interfaces": [ + { + "type": "Volo.Abp.AuditLogging.IAuditLogsAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.AuditLogging.GetAuditLogListDto, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.GetAuditLogListDto", + "typeSimple": "Volo.Abp.AuditLogging.GetAuditLogListDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "StartTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EndTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ApplicationName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CorrelationId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "HttpMethod", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "HttpStatusCode", + "jsonName": null, + "type": "System.Net.HttpStatusCode?", + "typeSimple": "System.Net.HttpStatusCode?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxExecutionDuration", + "jsonName": null, + "type": "System.Int32?", + "typeSimple": "number?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MinExecutionDuration", + "jsonName": null, + "type": "System.Int32?", + "typeSimple": "number?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "HasException", + "jsonName": null, + "type": "System.Boolean?", + "typeSimple": "boolean?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AuditLogging.AuditLogDto", + "typeSimple": "Volo.Abp.AuditLogging.AuditLogDto" + } + }, + "GetErrorRateAsyncByFilter": { + "uniqueName": "GetErrorRateAsyncByFilter", + "name": "GetErrorRateAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/statistics/error-rate", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "filter", + "typeAsString": "Volo.Abp.AuditLogging.GetErrorRateFilter, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.GetErrorRateFilter", + "typeSimple": "Volo.Abp.AuditLogging.GetErrorRateFilter", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "filter", + "name": "StartDate", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "filter" + }, + { + "nameOnMethod": "filter", + "name": "EndDate", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "filter" + } + ], + "returnValue": { + "type": "Volo.Abp.AuditLogging.GetErrorRateOutput", + "typeSimple": "Volo.Abp.AuditLogging.GetErrorRateOutput" + } + }, + "GetAverageExecutionDurationPerDayAsyncByFilter": { + "uniqueName": "GetAverageExecutionDurationPerDayAsyncByFilter", + "name": "GetAverageExecutionDurationPerDayAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/statistics/average-execution-duration-per-day", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "filter", + "typeAsString": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput", + "typeSimple": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "filter", + "name": "StartDate", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "filter" + }, + { + "nameOnMethod": "filter", + "name": "EndDate", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "filter" + } + ], + "returnValue": { + "type": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayOutput", + "typeSimple": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayOutput" + } + }, + "GetEntityChangesAsyncByInput": { + "uniqueName": "GetEntityChangesAsyncByInput", + "name": "GetEntityChangesAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/entity-changes", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.AuditLogging.GetEntityChangesDto, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.GetEntityChangesDto", + "typeSimple": "Volo.Abp.AuditLogging.GetEntityChangesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "AuditLogId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EntityChangeType", + "jsonName": null, + "type": "Volo.Abp.Auditing.EntityChangeType?", + "typeSimple": "Volo.Abp.Auditing.EntityChangeType?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EntityTypeFullName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "StartDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EndDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetEntityChangesWithUsernameAsyncByInput": { + "uniqueName": "GetEntityChangesWithUsernameAsyncByInput", + "name": "GetEntityChangesWithUsernameAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/entity-changes-with-username", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.AuditLogging.EntityChangeFilter, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.EntityChangeFilter", + "typeSimple": "Volo.Abp.AuditLogging.EntityChangeFilter", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EntityTypeFullName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.AuditLogging.EntityChangeWithUsernameDto]" + } + }, + "GetEntityChangeWithUsernameAsyncByEntityChangeId": { + "uniqueName": "GetEntityChangeWithUsernameAsyncByEntityChangeId", + "name": "GetEntityChangeWithUsernameAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/entity-change-with-username/{entityChangeId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityChangeId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityChangeId", + "name": "entityChangeId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AuditLogging.EntityChangeWithUsernameDto", + "typeSimple": "Volo.Abp.AuditLogging.EntityChangeWithUsernameDto" + } + }, + "GetEntityChangeAsyncByEntityChangeId": { + "uniqueName": "GetEntityChangeAsyncByEntityChangeId", + "name": "GetEntityChangeAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/entity-changes/{entityChangeId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityChangeId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityChangeId", + "name": "entityChangeId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AuditLogging.EntityChangeDto", + "typeSimple": "Volo.Abp.AuditLogging.EntityChangeDto" + } + } + } + } + } + }, + "featureManagement": { + "rootPath": "featureManagement", + "remoteServiceName": "AbpFeatureManagement", + "controllers": { + "Volo.Abp.FeatureManagement.FeaturesController": { + "controllerName": "Features", + "type": "Volo.Abp.FeatureManagement.FeaturesController", + "interfaces": [ + { + "type": "Volo.Abp.FeatureManagement.IFeatureAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", + "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "identity": { + "rootPath": "identity", + "remoteServiceName": "AbpIdentity", + "controllers": { + "Volo.Abp.Identity.IdentityClaimTypeController": { + "controllerName": "IdentityClaimType", + "type": "Volo.Abp.Identity.IdentityClaimTypeController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityClaimTypeAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/claim-types", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityClaimTypesInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityClaimTypesInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityClaimTypesInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/claim-types/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.ClaimTypeDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/claim-types", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.CreateClaimTypeDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.CreateClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.CreateClaimTypeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.CreateClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.CreateClaimTypeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.ClaimTypeDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/claim-types/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UpdateClaimTypeDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UpdateClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.UpdateClaimTypeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.UpdateClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.UpdateClaimTypeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.ClaimTypeDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/claim-types/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.IdentityLinkUserController": { + "controllerName": "IdentityLinkUser", + "type": "Volo.Abp.Identity.IdentityLinkUserController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityLinkUserAppService" + } + ], + "actions": { + "LinkAsyncByInput": { + "uniqueName": "LinkAsyncByInput", + "name": "LinkAsync", + "httpMethod": "POST", + "url": "api/identity/link-user/link", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.LinkUserInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.LinkUserInput", + "typeSimple": "Volo.Abp.Identity.LinkUserInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.LinkUserInput", + "typeSimple": "Volo.Abp.Identity.LinkUserInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "UnlinkAsyncByInput": { + "uniqueName": "UnlinkAsyncByInput", + "name": "UnlinkAsync", + "httpMethod": "POST", + "url": "api/identity/link-user/unlink", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UnLinkUserInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UnLinkUserInput", + "typeSimple": "Volo.Abp.Identity.UnLinkUserInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.UnLinkUserInput", + "typeSimple": "Volo.Abp.Identity.UnLinkUserInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "IsLinkedAsyncByInput": { + "uniqueName": "IsLinkedAsyncByInput", + "name": "IsLinkedAsync", + "httpMethod": "POST", + "url": "api/identity/link-user/is-linked", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IsLinkedInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IsLinkedInput", + "typeSimple": "Volo.Abp.Identity.IsLinkedInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IsLinkedInput", + "typeSimple": "Volo.Abp.Identity.IsLinkedInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Boolean", + "typeSimple": "boolean" + } + }, + "GenerateLinkTokenAsync": { + "uniqueName": "GenerateLinkTokenAsync", + "name": "GenerateLinkTokenAsync", + "httpMethod": "POST", + "url": "api/identity/link-user/generate-link-token", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.String", + "typeSimple": "string" + } + }, + "VerifyLinkTokenAsyncByToken": { + "uniqueName": "VerifyLinkTokenAsyncByToken", + "name": "VerifyLinkTokenAsync", + "httpMethod": "POST", + "url": "api/identity/link-user/verify-link-token", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "token", + "typeAsString": "Volo.Abp.Identity.VerifyLinkTokenInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.VerifyLinkTokenInput", + "typeSimple": "Volo.Abp.Identity.VerifyLinkTokenInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "token", + "name": "token", + "jsonName": null, + "type": "Volo.Abp.Identity.VerifyLinkTokenInput", + "typeSimple": "Volo.Abp.Identity.VerifyLinkTokenInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Boolean", + "typeSimple": "boolean" + } + }, + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity/link-user", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + } + } + }, + "Volo.Abp.Identity.IdentityRoleController": { + "controllerName": "IdentityRole", + "type": "Volo.Abp.Identity.IdentityRoleController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityRoleAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleCreateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleUpdateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity/roles/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityRoleListInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityRoleListInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityRoleListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "UpdateClaimsAsyncByIdAndInput": { + "uniqueName": "UpdateClaimsAsyncByIdAndInput", + "name": "UpdateClaimsAsync", + "httpMethod": "PUT", + "url": "api/identity/roles/{id}/claims", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.Identity.IdentityRoleClaimDto, Volo.Abp.Identity.Pro.Application.Contracts, Version=4.4.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityRoleClaimDto]", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityRoleClaimDto]", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetClaimsAsyncById": { + "uniqueName": "GetClaimsAsyncById", + "name": "GetClaimsAsync", + "httpMethod": "GET", + "url": "api/identity/roles/{id}/claims", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityRoleClaimDto]" + } + }, + "GetAllClaimTypesAsync": { + "uniqueName": "GetAllClaimTypesAsync", + "name": "GetAllClaimTypesAsync", + "httpMethod": "GET", + "url": "api/identity/roles/all-claim-types", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.ClaimTypeDto]" + } + } + } + }, + "Volo.Abp.Identity.IdentitySecurityLogController": { + "controllerName": "IdentitySecurityLog", + "type": "Volo.Abp.Identity.IdentitySecurityLogController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentitySecurityLogAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/security-logs", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentitySecurityLogListInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", + "typeSimple": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "StartTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EndTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ApplicationName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Identity", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Action", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ClientId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CorrelationId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/security-logs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentitySecurityLogDto", + "typeSimple": "Volo.Abp.Identity.IdentitySecurityLogDto" + } + }, + "GetMyListAsyncByInput": { + "uniqueName": "GetMyListAsyncByInput", + "name": "GetMyListAsync", + "httpMethod": "GET", + "url": "api/identity/security-logs/my", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentitySecurityLogListInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", + "typeSimple": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "StartTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EndTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ApplicationName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Identity", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Action", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ClientId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CorrelationId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetMyAsyncById": { + "uniqueName": "GetMyAsyncById", + "name": "GetMyAsync", + "httpMethod": "GET", + "url": "api/identity/security-logs/my/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentitySecurityLogDto", + "typeSimple": "Volo.Abp.Identity.IdentitySecurityLogDto" + } + } + } + }, + "Volo.Abp.Identity.IdentitySettingsController": { + "controllerName": "IdentitySettings", + "type": "Volo.Abp.Identity.IdentitySettingsController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentitySettingsAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/settings", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Identity.IdentitySettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentitySettingsDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/settings", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentitySettingsDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentitySettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentitySettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentitySettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentitySettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserController": { + "controllerName": "IdentityUser", + "type": "Volo.Abp.Identity.IdentityUserController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityUsersInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserCreateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetRolesAsyncById": { + "uniqueName": "GetRolesAsyncById", + "name": "GetRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAssignableRolesAsync": { + "uniqueName": "GetAssignableRolesAsync", + "name": "GetAssignableRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/assignable-roles", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAvailableOrganizationUnitsAsync": { + "uniqueName": "GetAvailableOrganizationUnitsAsync", + "name": "GetAvailableOrganizationUnitsAsync", + "httpMethod": "GET", + "url": "api/identity/users/available-organization-units", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAllClaimTypesAsync": { + "uniqueName": "GetAllClaimTypesAsync", + "name": "GetAllClaimTypesAsync", + "httpMethod": "GET", + "url": "api/identity/users/all-claim-types", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.ClaimTypeDto]" + } + }, + "GetClaimsAsyncById": { + "uniqueName": "GetClaimsAsyncById", + "name": "GetClaimsAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/claims", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityUserClaimDto]" + } + }, + "GetOrganizationUnitsAsyncById": { + "uniqueName": "GetOrganizationUnitsAsyncById", + "name": "GetOrganizationUnitsAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/organization-units", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.OrganizationUnitDto]" + } + }, + "UpdateRolesAsyncByIdAndInput": { + "uniqueName": "UpdateRolesAsyncByIdAndInput", + "name": "UpdateRolesAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateRolesDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "UpdateClaimsAsyncByIdAndInput": { + "uniqueName": "UpdateClaimsAsyncByIdAndInput", + "name": "UpdateClaimsAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/claims", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.Identity.IdentityUserClaimDto, Volo.Abp.Identity.Pro.Application.Contracts, Version=4.4.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityUserClaimDto]", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityUserClaimDto]", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "LockAsyncByIdAndLockoutDuration": { + "uniqueName": "LockAsyncByIdAndLockoutDuration", + "name": "LockAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/lock/{lockoutDuration}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "lockoutDuration", + "typeAsString": "System.Int32, System.Private.CoreLib", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "lockoutDuration", + "name": "lockoutDuration", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "UnlockAsyncById": { + "uniqueName": "UnlockAsyncById", + "name": "UnlockAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/unlock", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "FindByUsernameAsyncByUsername": { + "uniqueName": "FindByUsernameAsyncByUsername", + "name": "FindByUsernameAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-username/{username}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "username", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "username", + "name": "username", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "FindByEmailAsyncByEmail": { + "uniqueName": "FindByEmailAsyncByEmail", + "name": "FindByEmailAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-email/{email}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "email", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "email", + "name": "email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "GetTwoFactorEnabledAsyncById": { + "uniqueName": "GetTwoFactorEnabledAsyncById", + "name": "GetTwoFactorEnabledAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/two-factor-enabled", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Boolean", + "typeSimple": "boolean" + } + }, + "SetTwoFactorEnabledAsyncByIdAndEnabled": { + "uniqueName": "SetTwoFactorEnabledAsyncByIdAndEnabled", + "name": "SetTwoFactorEnabledAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/two-factor/{enabled}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "enabled", + "typeAsString": "System.Boolean, System.Private.CoreLib", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "enabled", + "name": "enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "UpdatePasswordAsyncByIdAndInput": { + "uniqueName": "UpdatePasswordAsyncByIdAndInput", + "name": "UpdatePasswordAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/change-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserLookupController": { + "controllerName": "IdentityUserLookup", + "type": "Volo.Abp.Identity.IdentityUserLookupController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserLookupAppService" + } + ], + "actions": { + "FindByIdAsyncById": { + "uniqueName": "FindByIdAsyncById", + "name": "FindByIdAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "FindByUserNameAsyncByUserName": { + "uniqueName": "FindByUserNameAsyncByUserName", + "name": "FindByUserNameAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "userName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "userName", + "name": "userName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "SearchAsyncByInput": { + "uniqueName": "SearchAsyncByInput", + "name": "SearchAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/search", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupSearchInputDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupSearchInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupSearchInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetCountAsyncByInput": { + "uniqueName": "GetCountAsyncByInput", + "name": "GetCountAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/count", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupCountInputDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupCountInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupCountInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Int64", + "typeSimple": "number" + } + } + } + }, + "Volo.Abp.Identity.OrganizationUnitController": { + "controllerName": "OrganizationUnit", + "type": "Volo.Abp.Identity.OrganizationUnitController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IOrganizationUnitAppService" + } + ], + "actions": { + "AddRolesAsyncByIdAndInput": { + "uniqueName": "AddRolesAsyncByIdAndInput", + "name": "AddRolesAsync", + "httpMethod": "PUT", + "url": "api/identity/organization-units/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitRoleInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitRoleInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitRoleInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.OrganizationUnitRoleInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitRoleInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "AddMembersAsyncByIdAndInput": { + "uniqueName": "AddMembersAsyncByIdAndInput", + "name": "AddMembersAsync", + "httpMethod": "PUT", + "url": "api/identity/organization-units/{id}/members", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitUserInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitUserInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitUserInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.OrganizationUnitUserInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitUserInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/organization-units", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitCreateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitCreateDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.OrganizationUnitCreateDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/organization-units", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetOrganizationUnitInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetOrganizationUnitInput", + "typeSimple": "Volo.Abp.Identity.GetOrganizationUnitInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetListAllAsync": { + "uniqueName": "GetListAllAsync", + "name": "GetListAllAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetRolesAsyncByIdAndInput": { + "uniqueName": "GetRolesAsyncByIdAndInput", + "name": "GetRolesAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto, Volo.Abp.Ddd.Application.Contracts", + "type": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetMembersAsyncByIdAndInput": { + "uniqueName": "GetMembersAsyncByIdAndInput", + "name": "GetMembersAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/{id}/members", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityUsersInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "MoveAsyncByIdAndInput": { + "uniqueName": "MoveAsyncByIdAndInput", + "name": "MoveAsync", + "httpMethod": "PUT", + "url": "api/identity/organization-units/{id}/move", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitMoveInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitMoveInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitMoveInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.OrganizationUnitMoveInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitMoveInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetAvailableUsersAsyncByInput": { + "uniqueName": "GetAvailableUsersAsyncByInput", + "name": "GetAvailableUsersAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/available-users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetAvailableUsersInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetAvailableUsersInput", + "typeSimple": "Volo.Abp.Identity.GetAvailableUsersInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAvailableRolesAsyncByInput": { + "uniqueName": "GetAvailableRolesAsyncByInput", + "name": "GetAvailableRolesAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/available-roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetAvailableRolesInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetAvailableRolesInput", + "typeSimple": "Volo.Abp.Identity.GetAvailableRolesInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/organization-units/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitUpdateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitUpdateDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.OrganizationUnitUpdateDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto" + } + }, + "RemoveMemberAsyncByIdAndMemberId": { + "uniqueName": "RemoveMemberAsyncByIdAndMemberId", + "name": "RemoveMemberAsync", + "httpMethod": "DELETE", + "url": "api/identity/organization-units/{id}/members/{memberId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "memberId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "memberId", + "name": "memberId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "RemoveRoleAsyncByIdAndRoleId": { + "uniqueName": "RemoveRoleAsyncByIdAndRoleId", + "name": "RemoveRoleAsync", + "httpMethod": "DELETE", + "url": "api/identity/organization-units/{id}/roles/{roleId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "roleId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "roleId", + "name": "roleId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.ProfileController": { + "controllerName": "Profile", + "type": "Volo.Abp.Identity.ProfileController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IProfileAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UpdateProfileDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "ChangePasswordAsyncByInput": { + "uniqueName": "ChangePasswordAsyncByInput", + "name": "ChangePasswordAsync", + "httpMethod": "POST", + "url": "api/identity/my-profile/change-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.ChangePasswordInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetTwoFactorEnabledAsync": { + "uniqueName": "GetTwoFactorEnabledAsync", + "name": "GetTwoFactorEnabledAsync", + "httpMethod": "GET", + "url": "api/identity/my-profile/two-factor-enabled", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Boolean", + "typeSimple": "boolean" + } + }, + "SetTwoFactorEnabledAsyncByEnabled": { + "uniqueName": "SetTwoFactorEnabledAsyncByEnabled", + "name": "SetTwoFactorEnabledAsync", + "httpMethod": "POST", + "url": "api/identity/my-profile/set-two-factor-enabled", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "enabled", + "typeAsString": "System.Boolean, System.Private.CoreLib", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "enabled", + "name": "enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "settingManagement": { + "rootPath": "settingManagement", + "remoteServiceName": "SettingManagement", + "controllers": { + "Volo.Abp.SettingManagement.EmailSettingsController": { + "controllerName": "EmailSettings", + "type": "Volo.Abp.SettingManagement.EmailSettingsController", + "interfaces": [ + { + "type": "Volo.Abp.SettingManagement.IEmailSettingsAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/setting-management/emailing", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.SettingManagement.EmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.EmailSettingsDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "POST", + "url": "api/setting-management/emailing", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto, Volo.Abp.SettingManagement.Application.Contracts", + "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "permissionManagement": { + "rootPath": "permissionManagement", + "remoteServiceName": "AbpPermissionManagement", + "controllers": { + "Volo.Abp.PermissionManagement.PermissionsController": { + "controllerName": "Permissions", + "type": "Volo.Abp.PermissionManagement.PermissionsController", + "interfaces": [ + { + "type": "Volo.Abp.PermissionManagement.IPermissionAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", + "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "abp": { + "rootPath": "abp", + "remoteServiceName": "abp", + "controllers": { + "Pages.Abp.MultiTenancy.AbpTenantController": { + "controllerName": "AbpTenant", + "type": "Pages.Abp.MultiTenancy.AbpTenantController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" + } + ], + "actions": { + "FindTenantByNameAsyncByName": { + "uniqueName": "FindTenantByNameAsyncByName", + "name": "FindTenantByNameAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-name/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "name", + "name": "name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + }, + "FindTenantByIdAsyncById": { + "uniqueName": "FindTenantByIdAsyncById", + "name": "FindTenantByIdAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-id/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { + "controllerName": "AbpApplicationConfiguration", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/abp/application-configuration", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { + "controllerName": "AbpApiDefinition", + "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", + "interfaces": [], + "actions": { + "GetByModel": { + "uniqueName": "GetByModel", + "name": "Get", + "httpMethod": "GET", + "url": "api/abp/api-definition", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "model", + "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "model", + "name": "IncludeTypes", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "model" + } + ], + "returnValue": { + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" + } + } + } + } + } + }, + "leptonThemeManagement": { + "rootPath": "leptonThemeManagement", + "remoteServiceName": "LeptonThemeManagement", + "controllers": { + "Volo.Abp.LeptonTheme.LeptonThemeSettingsController": { + "controllerName": "LeptonThemeSettings", + "type": "Volo.Abp.LeptonTheme.LeptonThemeSettingsController", + "interfaces": [ + { + "type": "Volo.Abp.LeptonTheme.Management.ILeptonThemeSettingsAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/lepton-theme-management/settings", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.LeptonTheme.Management.LeptonThemeSettingsDto", + "typeSimple": "Volo.Abp.LeptonTheme.Management.LeptonThemeSettingsDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/lepton-theme-management/settings", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto, Volo.Abp.LeptonTheme.Management.Application.Contracts", + "type": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", + "typeSimple": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", + "typeSimple": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + } + }, + "types": { + "Volo.Abp.Account.AccountSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsSelfRegistrationEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "EnableLocalLogin", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.AccountLdapSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EnableLdapLogin", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "LdapServerHost", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LdapServerPort", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LdapBaseDc", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LdapUserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LdapPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.AccountTwoFactorSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TwoFactorBehaviour", + "jsonName": null, + "type": "Volo.Abp.Identity.Features.IdentityProTwoFactorBehaviour", + "typeSimple": "Volo.Abp.Identity.Features.IdentityProTwoFactorBehaviour", + "isRequired": false + }, + { + "name": "IsRememberBrowserEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "UsersCanChange", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.Features.IdentityProTwoFactorBehaviour": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Optional", + "Disabled", + "Forced" + ], + "enumValues": [ + 0, + 1, + 2 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Account.AccountRecaptchaSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UseCaptchaOnLogin", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "UseCaptchaOnRegistration", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "VerifyBaseUrl", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SiteKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SiteSecret", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Version", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "Score", + "jsonName": null, + "type": "System.Double", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.AccountExternalProviderSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Settings", + "jsonName": null, + "type": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettings]", + "typeSimple": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettings]", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.ExternalProviders.ExternalProviderSettings": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "typeSimple": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "isRequired": false + }, + { + "name": "SecretProperties", + "jsonName": null, + "type": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "typeSimple": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty": { + "baseType": "Volo.Abp.NameValue", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.NameValue": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "T", + "typeSimple": "T", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.UpdateExternalProviderDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "typeSimple": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "isRequired": false + }, + { + "name": "SecretProperties", + "jsonName": null, + "type": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "typeSimple": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserNameOrEmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "RememberMe", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "TenanId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Result", + "jsonName": null, + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.LoginResultType", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.LoginResultType", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.LoginResultType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Success", + "InvalidUserNameOrPassword", + "NotAllowed", + "LockedOut", + "RequiresTwoFactor", + "NotLinked" + ], + "enumValues": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.LinkUserLoginInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "LinkUserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "LinkTenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.RegisterDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "EmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "AppName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "ReturnUrl", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ReturnUrlHash", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CaptchaResponse", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.ObjectExtending.ExtensibleObject": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ExtraProperties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "SupportTwoFactor", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "LockoutEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsLockedOut", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleEntityDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TKey" + ], + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "TKey", + "typeSimple": "TKey", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.SendPasswordResetCodeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "AppName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "ReturnUrl", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ReturnUrlHash", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.ResetPasswordDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ResetToken", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.Account.IdentityUserConfirmationStateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EmailConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumberConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.SendPhoneNumberConfirmationTokenDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.SendEmailConfirmationTokenDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AppName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "ReturnUrl", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ReturnUrlHash", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.ConfirmPhoneNumberInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Token", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.Account.ConfirmEmailInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Token", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.Account.ProfilePictureInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "Volo.Abp.Account.ProfilePictureType", + "typeSimple": "Volo.Abp.Account.ProfilePictureType", + "isRequired": false + }, + { + "name": "ImageContent", + "jsonName": null, + "type": "[System.Byte]", + "typeSimple": "[number]", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.ProfilePictureType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "None", + "Gravatar", + "Image" + ], + "enumValues": [ + 0, + 1, + 2 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Account.ProfilePictureSourceDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "Volo.Abp.Account.ProfilePictureType", + "typeSimple": "Volo.Abp.Account.ProfilePictureType", + "isRequired": false + }, + { + "name": "Source", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FileContent", + "jsonName": null, + "type": "[System.Byte]", + "typeSimple": "[number]", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.SendEmailSecurityCodeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.Account.SendPhoneSecurityCodeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Microsoft.AspNetCore.Http.IFormFile": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ContentType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ContentDisposition", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Headers", + "jsonName": null, + "type": "{System.String:Microsoft.Extensions.Primitives.StringValues}", + "typeSimple": "{string:Microsoft.Extensions.Primitives.StringValues}", + "isRequired": false + }, + { + "name": "Length", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FileName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Microsoft.AspNetCore.Mvc.IActionResult": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.Account.ExternalProviders.ExternalProviderDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Providers", + "jsonName": null, + "type": "[Volo.Abp.Account.ExternalProviders.ExternalProviderItemDto]", + "typeSimple": "[Volo.Abp.Account.ExternalProviders.ExternalProviderItemDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.ExternalProviders.ExternalProviderItemDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "typeSimple": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.ExternalProviders.GetByNameInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.ExternalProviders.ExternalProviderItemWithSecretDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Success", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "typeSimple": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "isRequired": false + }, + { + "name": "SecretProperties", + "jsonName": null, + "type": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "typeSimple": "[Volo.Abp.Account.ExternalProviders.ExternalProviderSettingsProperty]", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Success", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsActive", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AuditLogging.GetAuditLogListDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "StartTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "EndTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ApplicationName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CorrelationId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "HttpMethod", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "HttpStatusCode", + "jsonName": null, + "type": "System.Net.HttpStatusCode?", + "typeSimple": "System.Net.HttpStatusCode?", + "isRequired": false + }, + { + "name": "MaxExecutionDuration", + "jsonName": null, + "type": "System.Int32?", + "typeSimple": "number?", + "isRequired": false + }, + { + "name": "MinExecutionDuration", + "jsonName": null, + "type": "System.Int32?", + "typeSimple": "number?", + "isRequired": false + }, + { + "name": "HasException", + "jsonName": null, + "type": "System.Boolean?", + "typeSimple": "boolean?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.LimitedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.LimitedResultRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DefaultMaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "MaxMaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "System.Nullable": { + "baseType": "System.ValueType", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "HasValue", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "T", + "typeSimple": "T", + "isRequired": false + } + ] + }, + "System.Net.HttpStatusCode": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Continue", + "SwitchingProtocols", + "Processing", + "EarlyHints", + "OK", + "Created", + "Accepted", + "NonAuthoritativeInformation", + "NoContent", + "ResetContent", + "PartialContent", + "MultiStatus", + "AlreadyReported", + "IMUsed", + "MultipleChoices", + "Ambiguous", + "MovedPermanently", + "Moved", + "Found", + "Redirect", + "SeeOther", + "RedirectMethod", + "NotModified", + "UseProxy", + "Unused", + "TemporaryRedirect", + "RedirectKeepVerb", + "PermanentRedirect", + "BadRequest", + "Unauthorized", + "PaymentRequired", + "Forbidden", + "NotFound", + "MethodNotAllowed", + "NotAcceptable", + "ProxyAuthenticationRequired", + "RequestTimeout", + "Conflict", + "Gone", + "LengthRequired", + "PreconditionFailed", + "RequestEntityTooLarge", + "RequestUriTooLong", + "UnsupportedMediaType", + "RequestedRangeNotSatisfiable", + "ExpectationFailed", + "MisdirectedRequest", + "UnprocessableEntity", + "Locked", + "FailedDependency", + "UpgradeRequired", + "PreconditionRequired", + "TooManyRequests", + "RequestHeaderFieldsTooLarge", + "UnavailableForLegalReasons", + "InternalServerError", + "NotImplemented", + "BadGateway", + "ServiceUnavailable", + "GatewayTimeout", + "HttpVersionNotSupported", + "VariantAlsoNegotiates", + "InsufficientStorage", + "LoopDetected", + "NotExtended", + "NetworkAuthenticationRequired" + ], + "enumValues": [ + 100, + 101, + 102, + 103, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 226, + 300, + 300, + 301, + 301, + 302, + 302, + 303, + 303, + 304, + 305, + 306, + 307, + 307, + 308, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 421, + 422, + 423, + 424, + 426, + 428, + 429, + 431, + 451, + 500, + 501, + 502, + 503, + 504, + 505, + 506, + 507, + 508, + 510, + 511 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Application.Dtos.PagedResultDto": { + "baseType": "Volo.Abp.Application.Dtos.ListResultDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "TotalCount", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Items", + "jsonName": null, + "type": "[T]", + "typeSimple": "[T]", + "isRequired": false + } + ] + }, + "Volo.Abp.AuditLogging.AuditLogDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ImpersonatorUserId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ImpersonatorTenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ExecutionTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ExecutionDuration", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "ClientIpAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ClientName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "BrowserInfo", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "HttpMethod", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Exceptions", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Comments", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "HttpStatusCode", + "jsonName": null, + "type": "System.Int32?", + "typeSimple": "number?", + "isRequired": false + }, + { + "name": "ApplicationName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CorrelationId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityChanges", + "jsonName": null, + "type": "[Volo.Abp.AuditLogging.EntityChangeDto]", + "typeSimple": "[Volo.Abp.AuditLogging.EntityChangeDto]", + "isRequired": false + }, + { + "name": "Actions", + "jsonName": null, + "type": "[Volo.Abp.AuditLogging.AuditLogActionDto]", + "typeSimple": "[Volo.Abp.AuditLogging.AuditLogActionDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.AuditLogging.EntityChangeDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AuditLogId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ChangeTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ChangeType", + "jsonName": null, + "type": "Volo.Abp.Auditing.EntityChangeType", + "typeSimple": "Volo.Abp.Auditing.EntityChangeType", + "isRequired": false + }, + { + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityTypeFullName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PropertyChanges", + "jsonName": null, + "type": "[Volo.Abp.AuditLogging.EntityPropertyChangeDto]", + "typeSimple": "[Volo.Abp.AuditLogging.EntityPropertyChangeDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.Auditing.EntityChangeType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Created", + "Updated", + "Deleted" + ], + "enumValues": [ + 0, + 1, + 2 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.AuditLogging.EntityPropertyChangeDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "EntityChangeId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "NewValue", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "OriginalValue", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PropertyTypeFullName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.EntityDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TKey" + ], + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "TKey", + "typeSimple": "TKey", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.EntityDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.AuditLogging.AuditLogActionDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "AuditLogId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ServiceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "MethodName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Parameters", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ExecutionTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ExecutionDuration", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.AuditLogging.GetErrorRateFilter": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "StartDate", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EndDate", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AuditLogging.GetErrorRateOutput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Data", + "jsonName": null, + "type": "{System.String:System.Int64}", + "typeSimple": "{string:number}", + "isRequired": false + } + ] + }, + "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "StartDate", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EndDate", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayOutput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Data", + "jsonName": null, + "type": "{System.String:System.Double}", + "typeSimple": "{string:number}", + "isRequired": false + } + ] + }, + "Volo.Abp.AuditLogging.GetEntityChangesDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AuditLogId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "EntityChangeType", + "jsonName": null, + "type": "Volo.Abp.Auditing.EntityChangeType?", + "typeSimple": "Volo.Abp.Auditing.EntityChangeType?", + "isRequired": false + }, + { + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityTypeFullName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "StartDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "EndDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.AuditLogging.EntityChangeFilter": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityTypeFullName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AuditLogging.EntityChangeWithUsernameDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityChange", + "jsonName": null, + "type": "Volo.Abp.AuditLogging.EntityChangeDto", + "typeSimple": "Volo.Abp.AuditLogging.EntityChangeDto", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.GetIdentityClaimTypesInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.ClaimTypeDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Required", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsStatic", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Regex", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RegexDescription", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ValueType", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityClaimValueType", + "typeSimple": "Volo.Abp.Identity.IdentityClaimValueType", + "isRequired": false + }, + { + "name": "ValueTypeAsString", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityClaimValueType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "String", + "Int", + "Boolean", + "DateTime" + ], + "enumValues": [ + 0, + 1, + 2, + 3 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Identity.CreateClaimTypeDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Required", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Regex", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RegexDescription", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ValueType", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityClaimValueType", + "typeSimple": "Volo.Abp.Identity.IdentityClaimValueType", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UpdateClaimTypeDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Required", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Regex", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RegexDescription", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ValueType", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityClaimValueType", + "typeSimple": "Volo.Abp.Identity.IdentityClaimValueType", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.LinkUserInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Token", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.Identity.UnLinkUserInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IsLinkedInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.VerifyLinkTokenInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Token", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.Identity.LinkUserDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TargetUserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TargetUserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TargetTenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "TargetTenantName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DirectlyLinked", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsDefault", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsStatic", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsPublic", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "IsDefault", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsPublic", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.GetIdentityRoleListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleClaimDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ClaimType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ClaimValue", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.GetIdentitySecurityLogListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "StartTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "EndTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ApplicationName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Identity", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Action", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ClientId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CorrelationId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentitySecurityLogDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ApplicationName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Identity", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Action", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TenantName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ClientId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CorrelationId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ClientIpAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "BrowserInfo", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ExtraProperties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentitySettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityPasswordSettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentityPasswordSettingsDto", + "isRequired": false + }, + { + "name": "Lockout", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityLockoutSettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentityLockoutSettingsDto", + "isRequired": false + }, + { + "name": "SignIn", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentitySignInSettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentitySignInSettingsDto", + "isRequired": false + }, + { + "name": "User", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityUserSettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserSettingsDto", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityPasswordSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RequiredLength", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "RequiredUniqueChars", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "RequireNonAlphanumeric", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RequireLowercase", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RequireUppercase", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RequireDigit", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityLockoutSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AllowedForNewUsers", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "LockoutDuration", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "MaxFailedAccessAttempts", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentitySignInSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RequireConfirmedEmail", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "EnablePhoneNumberConfirmation", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RequireConfirmedPhoneNumber", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsUserNameUpdateEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsEmailUpdateEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.GetIdentityUsersInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "SendConfirmationEmail", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LockoutEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RoleNames", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "OrganizationUnitIds", + "jsonName": null, + "type": "[System.Guid]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitWithDetailsDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Code", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Roles", + "jsonName": null, + "type": "[Volo.Abp.Identity.IdentityRoleDto]", + "typeSimple": "[Volo.Abp.Identity.IdentityRoleDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "IsDeleted", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DeleterId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "DeletionTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "LastModificationTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "LastModifierId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreatorId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserClaimDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ClaimType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ClaimValue", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Code", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Roles", + "jsonName": null, + "type": "[Volo.Abp.Identity.OrganizationUnitRoleDto]", + "typeSimple": "[Volo.Abp.Identity.OrganizationUnitRoleDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitRoleDto": { + "baseType": "Volo.Abp.Application.Dtos.CreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OrganizationUnitId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RoleId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.CreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreatorId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateRolesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleNames", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": true + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdatePasswordInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NewPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.Users.UserData": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UserLookupSearchInputDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UserLookupCountInputDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitRoleInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleIds", + "jsonName": null, + "type": "[System.Guid]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitUserInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserIds", + "jsonName": null, + "type": "[System.Guid]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitCreateDto": { + "baseType": "Volo.Abp.Identity.OrganizationUnitCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.Identity.GetOrganizationUnitInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitMoveInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NewParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.GetAvailableUsersInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.GetAvailableRolesInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitUpdateDto": { + "baseType": "Volo.Abp.Identity.OrganizationUnitCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.Identity.ProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsExternal", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "HasPassword", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UpdateProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.ChangePasswordInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CurrentPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "NewPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AllowedAccessTokenSigningAlgorithms", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShowInDiscoveryDocument", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Secrets", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceSecretDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceSecretDto]", + "isRequired": false + }, + { + "name": "Scopes", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceScopeDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceScopeDto]", + "isRequired": false + }, + { + "name": "UserClaims", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceClaimDto]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourcePropertyDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourcePropertyDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceSecretDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ApiResourceId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Expiration", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceScopeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ApiResourceId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Scope", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceClaimDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ApiResourceId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourcePropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ApiResourceId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Key", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "AllowedAccessTokenSigningAlgorithms", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShowInDiscoveryDocument", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "UserClaims", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceClaimDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "AllowedAccessTokenSigningAlgorithms", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Secrets", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceSecretDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceSecretDto]", + "isRequired": false + }, + { + "name": "Scopes", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceScopeDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceScopeDto]", + "isRequired": false + }, + { + "name": "UserClaims", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceClaimDto]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourcePropertyDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourcePropertyDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiScope.Dtos.GetApiScopeListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeWithDetailsDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Required", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Emphasize", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ShowInDiscoveryDocument", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "UserClaims", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeClaimDto]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopePropertyDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopePropertyDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeClaimDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ApiScopeId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopePropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ApiScopeId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Key", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiScope.Dtos.CreateApiScopeDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Required", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Emphasize", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ShowInDiscoveryDocument", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "UserClaims", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeClaimDto]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopePropertyDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopePropertyDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ApiScope.Dtos.UpdateApiScopeDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Required", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Emphasize", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ShowInDiscoveryDocument", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "UserClaims", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopeClaimDto]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopePropertyDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiScope.Dtos.ApiScopePropertyDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ClientName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ClientUri", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LogoUri", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ProtocolType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RequireClientSecret", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RequireConsent", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AllowRememberConsent", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AlwaysIncludeUserClaimsInIdToken", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RequirePkce", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AllowPlainTextPkce", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RequireRequestObject", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AllowAccessTokensViaBrowser", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "FrontChannelLogoutUri", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FrontChannelLogoutSessionRequired", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "BackChannelLogoutUri", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "BackChannelLogoutSessionRequired", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AllowOfflineAccess", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IdentityTokenLifetime", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "AllowedIdentityTokenSigningAlgorithms", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "AccessTokenLifetime", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "AuthorizationCodeLifetime", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "ConsentLifetime", + "jsonName": null, + "type": "System.Int32?", + "typeSimple": "number?", + "isRequired": false + }, + { + "name": "AbsoluteRefreshTokenLifetime", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "SlidingRefreshTokenLifetime", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "RefreshTokenUsage", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "UpdateAccessTokenClaimsOnRefresh", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RefreshTokenExpiration", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "AccessTokenType", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "EnableLocalLogin", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IncludeJwtId", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AlwaysSendClientClaims", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ClientClaimsPrefix", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PairWiseSubjectSalt", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UserSsoLifetime", + "jsonName": null, + "type": "System.Int32?", + "typeSimple": "number?", + "isRequired": false + }, + { + "name": "UserCodeType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DeviceCodeLifetime", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "ClientSecrets", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto]", + "isRequired": false + }, + { + "name": "AllowedScopes", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientScopeDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientScopeDto]", + "isRequired": false + }, + { + "name": "Claims", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientClaimDto]", + "isRequired": false + }, + { + "name": "AllowedGrantTypes", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientGrantTypeDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientGrantTypeDto]", + "isRequired": false + }, + { + "name": "IdentityProviderRestrictions", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientIdentityProviderRestrictionDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientIdentityProviderRestrictionDto]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientPropertyDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientPropertyDto]", + "isRequired": false + }, + { + "name": "AllowedCorsOrigins", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientCorsOriginDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientCorsOriginDto]", + "isRequired": false + }, + { + "name": "RedirectUris", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientRedirectUriDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientRedirectUriDto]", + "isRequired": false + }, + { + "name": "PostLogoutRedirectUris", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientPostLogoutRedirectUriDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientPostLogoutRedirectUriDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Expiration", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientScopeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Scope", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientClaimDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientGrantTypeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "GrantType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientIdentityProviderRestrictionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Provider", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientPropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Key", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientCorsOriginDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Origin", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientRedirectUriDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RedirectUri", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientPostLogoutRedirectUriDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PostLogoutRedirectUri", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "ClientName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ClientUri", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LogoUri", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RequireConsent", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "CallbackUrl", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LogoutUrl", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Secrets", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto]", + "isRequired": false + }, + { + "name": "Scopes", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ClientUri", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LogoUri", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RequireConsent", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AllowOfflineAccess", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AllowRememberConsent", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RequirePkce", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RequireClientSecret", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RequireRequestObject", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AccessTokenLifetime", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "ConsentLifetime", + "jsonName": null, + "type": "System.Int32?", + "typeSimple": "number?", + "isRequired": false + }, + { + "name": "AccessTokenType", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "EnableLocalLogin", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "FrontChannelLogoutUri", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FrontChannelLogoutSessionRequired", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "BackChannelLogoutUri", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "AllowedIdentityTokenSigningAlgorithms", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "BackChannelLogoutSessionRequired", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IncludeJwtId", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AlwaysSendClientClaims", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PairWiseSubjectSalt", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UserSsoLifetime", + "jsonName": null, + "type": "System.Int32?", + "typeSimple": "number?", + "isRequired": false + }, + { + "name": "UserCodeType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DeviceCodeLifetime", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "ClientSecrets", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto]", + "isRequired": false + }, + { + "name": "Claims", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientClaimDto]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientPropertyDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientPropertyDto]", + "isRequired": false + }, + { + "name": "AllowedGrantTypes", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "IdentityProviderRestrictions", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "Scopes", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "AllowedCorsOrigins", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "RedirectUris", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "PostLogoutRedirectUris", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Required", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Emphasize", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ShowInDiscoveryDocument", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "UserClaims", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceClaimDto]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourcePropertyDto]", + "typeSimple": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourcePropertyDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceClaimDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IdentityResourceId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourcePropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IdentityResourceId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Key", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Required", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Emphasize", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ShowInDiscoveryDocument", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "UserClaims", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceClaimDto]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourcePropertyDto]", + "typeSimple": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourcePropertyDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Enabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Required", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Emphasize", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ShowInDiscoveryDocument", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "UserClaims", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceClaimDto]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourcePropertyDto]", + "typeSimple": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourcePropertyDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.IdentityServer.ClaimType.Dtos.IdentityClaimTypeDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.LanguageDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UiCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FlagIcon", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsDefaultLanguage", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ResourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "BaseCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TargetCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "GetOnlyEmptyValues", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UiCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FlagIcon", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FlagIcon", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.LanguageResourceDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.CultureInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.LanguageTextDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ResourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "BaseCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "BaseValue", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.LeptonTheme.Management.LeptonThemeSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BoxedLayout", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "MenuPlacement", + "jsonName": null, + "type": "Volo.Abp.LeptonTheme.Management.MenuPlacement", + "typeSimple": "Volo.Abp.LeptonTheme.Management.MenuPlacement", + "isRequired": false + }, + { + "name": "MenuStatus", + "jsonName": null, + "type": "Volo.Abp.LeptonTheme.Management.MenuStatus", + "typeSimple": "Volo.Abp.LeptonTheme.Management.MenuStatus", + "isRequired": false + }, + { + "name": "Style", + "jsonName": null, + "type": "Volo.Abp.LeptonTheme.Management.LeptonStyle", + "typeSimple": "Volo.Abp.LeptonTheme.Management.LeptonStyle", + "isRequired": false + }, + { + "name": "PublicLayoutStyle", + "jsonName": null, + "type": "Volo.Abp.LeptonTheme.Management.LeptonStyle", + "typeSimple": "Volo.Abp.LeptonTheme.Management.LeptonStyle", + "isRequired": false + } + ] + }, + "Volo.Abp.LeptonTheme.Management.MenuPlacement": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Left", + "Top" + ], + "enumValues": [ + 0, + 1 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.LeptonTheme.Management.MenuStatus": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "AlwaysOpened", + "OpenOnHover" + ], + "enumValues": [ + 0, + 1 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.LeptonTheme.Management.LeptonStyle": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Style1", + "Style2", + "Style3", + "Style4", + "Style5", + "Style6" + ], + "enumValues": [ + 0, + 1, + 2, + 3, + 4, + 5 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BoxedLayout", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "MenuPlacement", + "jsonName": null, + "type": "Volo.Abp.LeptonTheme.Management.MenuPlacement", + "typeSimple": "Volo.Abp.LeptonTheme.Management.MenuPlacement", + "isRequired": false + }, + { + "name": "MenuStatus", + "jsonName": null, + "type": "Volo.Abp.LeptonTheme.Management.MenuStatus", + "typeSimple": "Volo.Abp.LeptonTheme.Management.MenuStatus", + "isRequired": false + }, + { + "name": "Style", + "jsonName": null, + "type": "Volo.Abp.LeptonTheme.Management.LeptonStyle", + "typeSimple": "Volo.Abp.LeptonTheme.Management.LeptonStyle", + "isRequired": false + }, + { + "name": "PublicLayoutStyle", + "jsonName": null, + "type": "Volo.Abp.LeptonTheme.Management.LeptonStyle", + "typeSimple": "Volo.Abp.LeptonTheme.Management.LeptonStyle", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.GetPermissionListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityDisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Groups", + "jsonName": null, + "type": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Permissions", + "jsonName": null, + "type": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGrantInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ParentName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsGranted", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AllowedProviders", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "GrantedProviders", + "jsonName": null, + "type": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.ProviderInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ProviderName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ProviderKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Permissions", + "jsonName": null, + "type": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsGranted", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.SettingManagement.EmailSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SmtpHost", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPort", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "SmtpUserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpDomain", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpEnableSsl", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "SmtpUseDefaultCredentials", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultFromAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DefaultFromDisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.SettingManagement.UpdateEmailSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SmtpHost", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPort", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "SmtpUserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpDomain", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpEnableSsl", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "SmtpUseDefaultCredentials", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultFromAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "DefaultFromDisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TemplateName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TemplateName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TemplateName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "FilterText", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsLayout", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Layout", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsInlineLocalized", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Newsletters.GetNewsletterRecordsRequestInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Preference", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Source", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Newsletters.NewsletterRecordDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Newsletters.NewsletterRecordWithDetailsDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Preferences", + "jsonName": null, + "type": "[Volo.CmsKit.Admin.Newsletters.NewsletterPreferenceDto]", + "typeSimple": "[Volo.CmsKit.Admin.Newsletters.NewsletterPreferenceDto]", + "isRequired": false + }, + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Newsletters.NewsletterPreferenceDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Preference", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Source", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SourceUrl", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Newsletters.GetNewsletterRecordsCsvRequestInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Preference", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Source", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Contact.CmsKitContactSettingDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ReceiverEmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Contact.UpdateCmsKitContactSettingDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ReceiverEmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.CmsKit.Admin.Tags.EntityTagCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TagName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TagId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.CmsKit.Admin.Tags.EntityTagSetDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Tags", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Tags.TagCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.CmsKit.Tags.TagDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Tags.TagGetListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Tags.TagUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.CmsKit.Admin.Tags.TagDefinitionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Pages.PageDto": { + "baseType": "Volo.Abp.Application.Dtos.AuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Title", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Script", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Style", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.AuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.CreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "LastModificationTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "LastModifierId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.CreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreatorId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Pages.GetPagesInputDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Pages.CreatePageInputDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Title", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Script", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Style", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Pages.UpdatePageInputDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Title", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Script", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Style", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.MediaDescriptors.CreateMediaInputWithStream": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "File", + "jsonName": null, + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", + "isRequired": false + } + ] + }, + "Volo.Abp.Content.IRemoteStreamContent": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ContentType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ContentLength", + "jsonName": null, + "type": "System.Int64?", + "typeSimple": "number?", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.MediaDescriptors.MediaDescriptorDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "MimeType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Size", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Comments.CommentGetListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Text", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RepliedCommentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Author", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreationStartDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "CreationEndDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Comments.CommentWithAuthorDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Text", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RepliedCommentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "CreatorId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Author", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Comments.CmsUserDto", + "typeSimple": "Volo.CmsKit.Admin.Comments.CmsUserDto", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Comments.CmsUserDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Blogs.BlogDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Blogs.BlogGetListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Blogs.CreateBlogDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.CmsKit.Admin.Blogs.UpdateBlogDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.CmsKit.Blogs.BlogFeatureDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "FeatureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "FeatureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "IsEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BlogId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Title", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "ShortDescription", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CoverImageMediaId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Blogs.BlogPostDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BlogId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Title", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShortDescription", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CoverImageMediaId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LastModificationTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "BlogId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Blogs.BlogPostListDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BlogId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "BlogName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Title", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShortDescription", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CoverImageMediaId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LastModificationTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Title", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "ShortDescription", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CoverImageMediaId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Newsletters.CreateNewsletterRecordInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Preference", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Source", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "SourceUrl", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "PrivacyPolicyUrl", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "AdditionalPreferences", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Newsletters.NewsletterPreferenceDetailsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Preference", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayPreference", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Definition", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsSelectedByEmailAddress", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Newsletters.UpdatePreferenceRequestInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "PreferenceDetails", + "jsonName": null, + "type": "[Volo.CmsKit.Public.Newsletters.PreferenceDetailsDto]", + "typeSimple": "[Volo.CmsKit.Public.Newsletters.PreferenceDetailsDto]", + "isRequired": true + }, + { + "name": "Source", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "SourceUrl", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "SecurityCode", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.CmsKit.Public.Newsletters.PreferenceDetailsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Preference", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Newsletters.NewsletterEmailOptionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "PrivacyPolicyConfirmation", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "WidgetViewPath", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "AdditionalPreferences", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "DisplayAdditionalPreferences", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Contact.ContactCreateInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Subject", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Message", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "RecaptchaToken", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.CmsKit.Public.Reactions.ReactionWithSelectionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Reaction", + "jsonName": null, + "type": "Volo.CmsKit.Public.Reactions.ReactionDto", + "typeSimple": "Volo.CmsKit.Public.Reactions.ReactionDto", + "isRequired": false + }, + { + "name": "Count", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "IsSelectedByCurrentUser", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Reactions.ReactionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Ratings.CreateUpdateRatingInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "StarCount", + "jsonName": null, + "type": "System.Int16", + "typeSimple": "number", + "isRequired": true + } + ] + }, + "Volo.CmsKit.Public.Ratings.RatingDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "StarCount", + "jsonName": null, + "type": "System.Int16", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "CreatorId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Ratings.RatingWithStarCountDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "StarCount", + "jsonName": null, + "type": "System.Int16", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "Count", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "IsSelectedByCurrentUser", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Pages.PageDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Title", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Script", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Style", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Comments.CommentWithDetailsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Text", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreatorId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Replies", + "jsonName": null, + "type": "[Volo.CmsKit.Public.Comments.CommentDto]", + "typeSimple": "[Volo.CmsKit.Public.Comments.CommentDto]", + "isRequired": false + }, + { + "name": "Author", + "jsonName": null, + "type": "Volo.CmsKit.Public.Comments.CmsUserDto", + "typeSimple": "Volo.CmsKit.Public.Comments.CmsUserDto", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Comments.CommentDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EntityId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Text", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RepliedCommentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "CreatorId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Author", + "jsonName": null, + "type": "Volo.CmsKit.Public.Comments.CmsUserDto", + "typeSimple": "Volo.CmsKit.Public.Comments.CmsUserDto", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Comments.CmsUserDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Comments.CreateCommentInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Text", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "RepliedCommentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Public.Comments.UpdateCommentInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Text", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.CmsKit.Public.Blogs.BlogPostPublicDto": { + "baseType": "Volo.Abp.Application.Dtos.AuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BlogId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Title", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Slug", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShortDescription", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CoverImageMediaId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Author", + "jsonName": null, + "type": "Volo.CmsKit.Users.CmsUserDto", + "typeSimple": "Volo.CmsKit.Users.CmsUserDto", + "isRequired": false + } + ] + }, + "Volo.CmsKit.Users.CmsUserDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Content.RemoteStreamContent": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ContentType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ContentLength", + "jsonName": null, + "type": "System.Int64?", + "typeSimple": "number?", + "isRequired": false + } + ] + }, + "Volo.Saas.Host.Dtos.EditionDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Saas.Host.Dtos.GetEditionsInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Saas.Host.Dtos.EditionCreateDto": { + "baseType": "Volo.Saas.Host.Dtos.EditionCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Saas.Host.Dtos.EditionCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Saas.Host.Dtos.EditionUpdateDto": { + "baseType": "Volo.Saas.Host.Dtos.EditionCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Saas.Host.GetEditionUsageStatisticsResult": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Data", + "jsonName": null, + "type": "{System.String:System.Int32}", + "typeSimple": "{string:number}", + "isRequired": false + } + ] + }, + "Volo.Saas.Host.Dtos.SaasTenantDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EditionId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "EditionName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "HasDefaultConnectionString", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ActivationState", + "jsonName": null, + "type": "Volo.Saas.TenantActivationState", + "typeSimple": "Volo.Saas.TenantActivationState", + "isRequired": false + }, + { + "name": "ActivationEndDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Saas.TenantActivationState": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Active", + "ActiveWithLimitedTime", + "Passive" + ], + "enumValues": [ + 0, + 1, + 2 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Saas.Host.Dtos.GetTenantsInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "GetEditionNames", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Saas.Host.Dtos.SaasTenantCreateDto": { + "baseType": "Volo.Saas.Host.Dtos.SaasTenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AdminEmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "AdminPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "DefaultConnectionString", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Saas.Host.Dtos.SaasTenantCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "EditionId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ActivationState", + "jsonName": null, + "type": "Volo.Saas.TenantActivationState", + "typeSimple": "Volo.Saas.TenantActivationState", + "isRequired": false + }, + { + "name": "ActivationEndDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Saas.Host.Dtos.SaasTenantUpdateDto": { + "baseType": "Volo.Saas.Host.Dtos.SaasTenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Saas.Host.Dtos.SaasTenantConnectionStringsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Default", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Databases", + "jsonName": null, + "type": "[Volo.Saas.Host.Dtos.SaasTenantDatabaseConnectionStringsDto]", + "typeSimple": "[Volo.Saas.Host.Dtos.SaasTenantDatabaseConnectionStringsDto]", + "isRequired": false + } + ] + }, + "Volo.Saas.Host.Dtos.SaasTenantDatabaseConnectionStringsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DatabaseName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ConnectionString", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.GetFeatureListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Groups", + "jsonName": null, + "type": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Features", + "jsonName": null, + "type": "[Volo.Abp.FeatureManagement.FeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Provider", + "jsonName": null, + "type": "Volo.Abp.FeatureManagement.FeatureProviderDto", + "typeSimple": "Volo.Abp.FeatureManagement.FeatureProviderDto", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ValueType", + "jsonName": null, + "type": "Volo.Abp.Validation.StringValues.IStringValueType", + "typeSimple": "Volo.Abp.Validation.StringValues.IStringValueType", + "isRequired": false + }, + { + "name": "Depth", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "ParentName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureProviderDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Key", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Validation.StringValues.IStringValueType": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Item", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + }, + { + "name": "Validator", + "jsonName": null, + "type": "Volo.Abp.Validation.StringValues.IValueValidator", + "typeSimple": "Volo.Abp.Validation.StringValues.IValueValidator", + "isRequired": false + } + ] + }, + "Volo.Abp.Validation.StringValues.IValueValidator": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Item", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeaturesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Features", + "jsonName": null, + "type": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Localization", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "isRequired": false + }, + { + "name": "Auth", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "isRequired": false + }, + { + "name": "Setting", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "isRequired": false + }, + { + "name": "CurrentUser", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "isRequired": false + }, + { + "name": "Features", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "isRequired": false + }, + { + "name": "MultiTenancy", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "isRequired": false + }, + { + "name": "CurrentTenant", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "isRequired": false + }, + { + "name": "Timing", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "isRequired": false + }, + { + "name": "Clock", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "isRequired": false + }, + { + "name": "ObjectExtensions", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "jsonName": null, + "type": "{System.String:System.Collections.Generic.Dictionary}", + "typeSimple": "{string:System.Collections.Generic.Dictionary}", + "isRequired": false + }, + { + "name": "Languages", + "jsonName": null, + "type": "[Volo.Abp.Localization.LanguageInfo]", + "typeSimple": "[Volo.Abp.Localization.LanguageInfo]", + "isRequired": false + }, + { + "name": "CurrentCulture", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "isRequired": false + }, + { + "name": "DefaultResourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LanguagesMap", + "jsonName": null, + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}", + "isRequired": false + }, + { + "name": "LanguageFilesMap", + "jsonName": null, + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}", + "isRequired": false + } + ] + }, + "Volo.Abp.Localization.LanguageInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UiCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FlagIcon", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EnglishName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ThreeLetterIsoLanguageName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TwoLetterIsoLanguageName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsRightToLeft", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "NativeName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DateTimeFormat", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CalendarAlgorithmType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DateTimeFormatLong", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShortDatePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FullDateTimePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DateSeparator", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShortTimePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LongTimePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.NameValue": { + "baseType": "Volo.Abp.NameValue", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Policies", + "jsonName": null, + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}", + "isRequired": false + }, + { + "name": "GrantedPolicies", + "jsonName": null, + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "jsonName": null, + "type": "{System.String:System.String}", + "typeSimple": "{string:string}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAuthenticated", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Id", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SurName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailVerified", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberVerified", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Roles", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "jsonName": null, + "type": "{System.String:System.String}", + "typeSimple": "{string:string}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZone", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Iana", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "isRequired": false + }, + { + "name": "Windows", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Kind", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "isRequired": false + }, + { + "name": "Enums", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Entities", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "isRequired": false + }, + { + "name": "Configuration", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Properties", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "isRequired": false + }, + { + "name": "Configuration", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "isRequired": false + }, + { + "name": "Api", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "isRequired": false + }, + { + "name": "Ui", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "isRequired": false + }, + { + "name": "Attributes", + "jsonName": null, + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "isRequired": false + }, + { + "name": "Configuration", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Resource", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnGet", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "isRequired": false + }, + { + "name": "OnCreate", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "isRequired": false + }, + { + "name": "OnUpdate", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnTable", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "isRequired": false + }, + { + "name": "OnCreateForm", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "isRequired": false + }, + { + "name": "OnEditForm", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "isRequired": false + }, + { + "name": "Lookup", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ResultListPropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayPropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ValuePropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FilterParamName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Config", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Fields", + "jsonName": null, + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "isRequired": false + }, + { + "name": "LocalizationResource", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IncludeTypes", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "isRequired": false + }, + { + "name": "Types", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ModuleApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RootPath", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RemoteServiceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Controllers", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ControllerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Interfaces", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "isRequired": false + }, + { + "name": "Actions", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ActionApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UniqueName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "HttpMethod", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SupportedVersions", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "ParametersOnMethod", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "isRequired": false + }, + { + "name": "Parameters", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "isRequired": false + }, + { + "name": "ReturnValue", + "jsonName": null, + "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeAsString", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsOptional", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NameOnMethod", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "JsonName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsOptional", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + }, + { + "name": "ConstraintTypes", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "BindingSourceId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DescriptorName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.TypeApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BaseType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsEnum", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "EnumNames", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "EnumValues", + "jsonName": null, + "type": "[System.Object]", + "typeSimple": "[object]", + "isRequired": false + }, + { + "name": "GenericArguments", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.PropertyApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "JsonName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsRequired", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + } + } +} \ No newline at end of file diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/index.ts new file mode 100644 index 0000000000..b4cc544123 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/index.ts @@ -0,0 +1,3 @@ +import * as Pages from './pages'; +import * as Volo from './volo'; +export { Pages, Volo }; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/index.ts new file mode 100644 index 0000000000..3177321704 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/index.ts @@ -0,0 +1,2 @@ +import * as MultiTenancy from './multi-tenancy'; +export { MultiTenancy }; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts new file mode 100644 index 0000000000..99aa704ed1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts @@ -0,0 +1,32 @@ +import { Injectable } from '@angular/core'; +import { RestService } from '../../../../services/rest.service'; +import type { FindTenantResultDto } from '../../../volo/abp/asp-net-core/mvc/multi-tenancy/models'; + +@Injectable({ + providedIn: 'root', +}) +export class AbpTenantService { + apiName = 'abp'; + + findTenantById = (id: string, headers: Record) => + this.restService.request( + { + method: 'GET', + url: `/api/abp/multi-tenancy/tenants/by-id/${id}`, + headers, + }, + { apiName: this.apiName }, + ); + + findTenantByName = (name: string, headers: Record) => + this.restService.request( + { + method: 'GET', + url: `/api/abp/multi-tenancy/tenants/by-name/${name}`, + headers, + }, + { apiName: this.apiName }, + ); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/multi-tenancy/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/multi-tenancy/index.ts new file mode 100644 index 0000000000..528cfd9865 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/multi-tenancy/index.ts @@ -0,0 +1 @@ +export * from './abp-tenant.service'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/index.ts new file mode 100644 index 0000000000..900f26426e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/index.ts @@ -0,0 +1,2 @@ +import * as Abp from './abp'; +export { Abp }; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/index.ts new file mode 100644 index 0000000000..0b94cd592d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/index.ts @@ -0,0 +1,2 @@ +import * as Mvc from './mvc'; +export { Mvc }; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.ts new file mode 100644 index 0000000000..f11414cba3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@angular/core'; +import { RestService } from '../../../../../../services/rest.service'; +import type { + ApplicationApiDescriptionModel, + ApplicationApiDescriptionModelRequestDto, +} from '../../../http/modeling/models'; + +@Injectable({ + providedIn: 'root', +}) +export class AbpApiDefinitionService { + apiName = 'abp'; + + getByModel = (model: ApplicationApiDescriptionModelRequestDto) => + this.restService.request( + { + method: 'GET', + url: '/api/abp/api-definition', + params: { includeTypes: model.includeTypes }, + }, + { apiName: this.apiName }, + ); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.ts new file mode 100644 index 0000000000..39ea9ee823 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.ts @@ -0,0 +1 @@ +export * from './abp-api-definition.service'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.ts new file mode 100644 index 0000000000..f9ac9fbb79 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.ts @@ -0,0 +1,22 @@ +import { Injectable } from '@angular/core'; +import { RestService } from '../../../../../../services/rest.service'; +import type { ApplicationConfigurationDto } from './models'; + +@Injectable({ + providedIn: 'root', +}) +export class AbpApplicationConfigurationService { + apiName = 'abp'; + + get() { + return this.restService.request( + { + method: 'GET', + url: '/api/abp/application-configuration', + }, + { apiName: this.apiName }, + ); + } + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.ts new file mode 100644 index 0000000000..3f897056ce --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.ts @@ -0,0 +1,4 @@ +import * as ObjectExtending from './object-extending'; +export * from './abp-application-configuration.service'; +export * from './models'; +export { ObjectExtending }; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.ts new file mode 100644 index 0000000000..f760cd1946 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.ts @@ -0,0 +1,98 @@ +import type { LanguageInfo } from '../../../localization/models'; +import type { NameValue } from '../../../models'; +import type { CurrentTenantDto, MultiTenancyInfoDto } from '../multi-tenancy/models'; +import type { ObjectExtensionsDto } from './object-extending/models'; + +export interface ApplicationAuthConfigurationDto { + policies: Record; + grantedPolicies: Record; +} + +export interface ApplicationConfigurationDto { + localization: ApplicationLocalizationConfigurationDto; + auth: ApplicationAuthConfigurationDto; + setting: ApplicationSettingConfigurationDto; + currentUser: CurrentUserDto; + features: ApplicationFeatureConfigurationDto; + multiTenancy: MultiTenancyInfoDto; + currentTenant: CurrentTenantDto; + timing: TimingDto; + clock: ClockDto; + objectExtensions: ObjectExtensionsDto; +} + +export interface ApplicationFeatureConfigurationDto { + values: Record; +} + +export interface ApplicationLocalizationConfigurationDto { + values: Record>; + languages: LanguageInfo[]; + currentCulture: CurrentCultureDto; + defaultResourceName?: string; + languagesMap: Record; + languageFilesMap: Record; +} + +export interface ApplicationSettingConfigurationDto { + values: Record; +} + +export interface ClockDto { + kind?: string; +} + +export interface CurrentCultureDto { + displayName?: string; + englishName?: string; + threeLetterIsoLanguageName?: string; + twoLetterIsoLanguageName?: string; + isRightToLeft: boolean; + cultureName?: string; + name?: string; + nativeName?: string; + dateTimeFormat: DateTimeFormatDto; +} + +export interface CurrentUserDto { + isAuthenticated: boolean; + id?: string; + tenantId?: string; + userName?: string; + name?: string; + surName?: string; + email?: string; + emailVerified: boolean; + phoneNumber?: string; + phoneNumberVerified: boolean; + roles: string[]; + impersonatorUserId?: string; + impersonatorTenantId?: string; +} + +export interface DateTimeFormatDto { + calendarAlgorithmType?: string; + dateTimeFormatLong?: string; + shortDatePattern?: string; + fullDateTimePattern?: string; + dateSeparator?: string; + shortTimePattern?: string; + longTimePattern?: string; +} + +export interface IanaTimeZone { + timeZoneName?: string; +} + +export interface TimeZone { + iana: IanaTimeZone; + windows: WindowsTimeZone; +} + +export interface TimingDto { + timeZone: TimeZone; +} + +export interface WindowsTimeZone { + timeZoneId?: string; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.ts new file mode 100644 index 0000000000..e9644dae47 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.ts @@ -0,0 +1 @@ +export * from './models'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts new file mode 100644 index 0000000000..c72a9abc9b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts @@ -0,0 +1,87 @@ + +export interface EntityExtensionDto { + properties: Record; + configuration: Record; +} + +export interface ExtensionEnumDto { + fields: ExtensionEnumFieldDto[]; + localizationResource?: string; +} + +export interface ExtensionEnumFieldDto { + name?: string; + value: object; +} + +export interface ExtensionPropertyApiCreateDto { + isAvailable: boolean; +} + +export interface ExtensionPropertyApiDto { + onGet: ExtensionPropertyApiGetDto; + onCreate: ExtensionPropertyApiCreateDto; + onUpdate: ExtensionPropertyApiUpdateDto; +} + +export interface ExtensionPropertyApiGetDto { + isAvailable: boolean; +} + +export interface ExtensionPropertyApiUpdateDto { + isAvailable: boolean; +} + +export interface ExtensionPropertyAttributeDto { + typeSimple?: string; + config: Record; +} + +export interface ExtensionPropertyDto { + type?: string; + typeSimple?: string; + displayName: LocalizableStringDto; + api: ExtensionPropertyApiDto; + ui: ExtensionPropertyUiDto; + attributes: ExtensionPropertyAttributeDto[]; + configuration: Record; + defaultValue: object; +} + +export interface ExtensionPropertyUiDto { + onTable: ExtensionPropertyUiTableDto; + onCreateForm: ExtensionPropertyUiFormDto; + onEditForm: ExtensionPropertyUiFormDto; + lookup: ExtensionPropertyUiLookupDto; +} + +export interface ExtensionPropertyUiFormDto { + isVisible: boolean; +} + +export interface ExtensionPropertyUiLookupDto { + url?: string; + resultListPropertyName?: string; + displayPropertyName?: string; + valuePropertyName?: string; + filterParamName?: string; +} + +export interface ExtensionPropertyUiTableDto { + isVisible: boolean; +} + +export interface LocalizableStringDto { + name?: string; + resource?: string; +} + +export interface ModuleExtensionDto { + entities: Record; + configuration: Record; +} + +export interface ObjectExtensionsDto { + modules: Record; + enums: Record; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/index.ts new file mode 100644 index 0000000000..cecaea0fc3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/index.ts @@ -0,0 +1,4 @@ +import * as ApiExploring from './api-exploring'; +import * as ApplicationConfigurations from './application-configurations'; +import * as MultiTenancy from './multi-tenancy'; +export { ApiExploring, ApplicationConfigurations, MultiTenancy }; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.ts new file mode 100644 index 0000000000..e9644dae47 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.ts @@ -0,0 +1 @@ +export * from './models'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts new file mode 100644 index 0000000000..2c948099b4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts @@ -0,0 +1,17 @@ + +export interface FindTenantResultDto { + success: boolean; + tenantId?: string; + name?: string; + isActive: boolean; +} + +export interface CurrentTenantDto { + id?: string; + name?: string; + isAvailable: boolean; +} + +export interface MultiTenancyInfoDto { + isEnabled: boolean; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/index.ts new file mode 100644 index 0000000000..a930088a4c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/index.ts @@ -0,0 +1,2 @@ +import * as Modeling from './modeling'; +export { Modeling }; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/modeling/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/modeling/index.ts new file mode 100644 index 0000000000..e9644dae47 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/modeling/index.ts @@ -0,0 +1 @@ +export * from './models'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/modeling/models.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/modeling/models.ts new file mode 100644 index 0000000000..b23c8e5a2d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/modeling/models.ts @@ -0,0 +1,81 @@ + +export interface ActionApiDescriptionModel { + uniqueName?: string; + name?: string; + httpMethod?: string; + url?: string; + supportedVersions: string[]; + parametersOnMethod: MethodParameterApiDescriptionModel[]; + parameters: ParameterApiDescriptionModel[]; + returnValue: ReturnValueApiDescriptionModel; +} + +export interface ApplicationApiDescriptionModel { + modules: Record; + types: Record; +} + +export interface ApplicationApiDescriptionModelRequestDto { + includeTypes: boolean; +} + +export interface ControllerApiDescriptionModel { + controllerName?: string; + type?: string; + interfaces: ControllerInterfaceApiDescriptionModel[]; + actions: Record; +} + +export interface ControllerInterfaceApiDescriptionModel { + type?: string; +} + +export interface MethodParameterApiDescriptionModel { + name?: string; + typeAsString?: string; + type?: string; + typeSimple?: string; + isOptional: boolean; + defaultValue: object; +} + +export interface ModuleApiDescriptionModel { + rootPath?: string; + remoteServiceName?: string; + controllers: Record; +} + +export interface ParameterApiDescriptionModel { + nameOnMethod?: string; + name?: string; + jsonName?: string; + type?: string; + typeSimple?: string; + isOptional: boolean; + defaultValue: object; + constraintTypes: string[]; + bindingSourceId?: string; + descriptorName?: string; +} + +export interface PropertyApiDescriptionModel { + name?: string; + jsonName?: string; + type?: string; + typeSimple?: string; + isRequired: boolean; +} + +export interface ReturnValueApiDescriptionModel { + type?: string; + typeSimple?: string; +} + +export interface TypeApiDescriptionModel { + baseType?: string; + isEnum: boolean; + enumNames: string[]; + enumValues: object[]; + genericArguments: string[]; + properties: PropertyApiDescriptionModel[]; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/index.ts new file mode 100644 index 0000000000..e9aa7e5cc5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/index.ts @@ -0,0 +1,5 @@ +import * as AspNetCore from './asp-net-core'; +import * as Http from './http'; +import * as Localization from './localization'; +export * from './models'; +export { AspNetCore, Http, Localization }; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/localization/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/localization/index.ts new file mode 100644 index 0000000000..e9644dae47 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/localization/index.ts @@ -0,0 +1 @@ +export * from './models'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/localization/models.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/localization/models.ts new file mode 100644 index 0000000000..c881e7da2b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/localization/models.ts @@ -0,0 +1,7 @@ + +export interface LanguageInfo { + cultureName?: string; + uiCultureName?: string; + displayName?: string; + flagIcon?: string; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/models.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/models.ts new file mode 100644 index 0000000000..5f16437958 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/models.ts @@ -0,0 +1,5 @@ + +export interface NameValue { + name?: string; + value: T; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/index.ts new file mode 100644 index 0000000000..900f26426e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/index.ts @@ -0,0 +1,2 @@ +import * as Abp from './abp'; +export { Abp }; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/application-configuration.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/application-configuration.service.ts new file mode 100644 index 0000000000..cda78e79f3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/application-configuration.service.ts @@ -0,0 +1,24 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { Rest } from '../models/rest'; +import { ApplicationConfigurationDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; +import { RestService } from './rest.service'; + +/** + * @deprecated Use AbpApplicationConfigurationService instead. To be deleted in v5.0. + */ +@Injectable({ + providedIn: 'root', +}) +export class ApplicationConfigurationService { + constructor(private rest: RestService) {} + + getConfiguration(): Observable { + const request: Rest.Request = { + method: 'GET', + url: '/api/abp/application-configuration', + }; + + return this.rest.request(request, {}); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/auth.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/auth.service.ts new file mode 100644 index 0000000000..816e5a5905 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/auth.service.ts @@ -0,0 +1,59 @@ +import { Injectable, Injector } from '@angular/core'; +import { Params } from '@angular/router'; +import { from, Observable } from 'rxjs'; +import { filter, map, switchMap, take, tap } from 'rxjs/operators'; +import { LoginParams } from '../models/auth'; +import { AuthFlowStrategy, AUTH_FLOW_STRATEGY } from '../strategies/auth-flow.strategy'; +import { EnvironmentService } from './environment.service'; + +@Injectable({ + providedIn: 'root', +}) +export class AuthService { + private strategy: AuthFlowStrategy; + + get isInternalAuth() { + return this.strategy.isInternalAuth; + } + + constructor(protected injector: Injector) {} + + async init() { + const environmentService = this.injector.get(EnvironmentService); + + return environmentService + .getEnvironment$() + .pipe( + map(env => env?.oAuthConfig), + filter(oAuthConfig => !!oAuthConfig), + tap(oAuthConfig => { + this.strategy = + oAuthConfig.responseType === 'code' + ? AUTH_FLOW_STRATEGY.Code(this.injector) + : AUTH_FLOW_STRATEGY.Password(this.injector); + }), + switchMap(() => from(this.strategy.init())), + take(1), + ) + .toPromise(); + } + + logout(queryParams?: Params): Observable { + return this.strategy.logout(queryParams); + } + + /** + * @deprecated Use navigateToLogin method instead. To be deleted in v5.0 + */ + initLogin() { + this.strategy.navigateToLogin(); + } + + navigateToLogin(queryParams?: Params) { + this.strategy.navigateToLogin(queryParams); + } + + login(params: LoginParams) { + return this.strategy.login(params); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/config-state.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/config-state.service.ts new file mode 100644 index 0000000000..eb2a0d30b6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/config-state.service.ts @@ -0,0 +1,146 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map, tap } from 'rxjs/operators'; +import { ApplicationConfigurationDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; +import { InternalStore } from '../utils/internal-store-utils'; +import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; + +@Injectable({ + providedIn: 'root', +}) +export class ConfigStateService { + private readonly store = new InternalStore({} as ApplicationConfigurationDto); + + get createOnUpdateStream() { + return this.store.sliceUpdate; + } + + constructor(private abpConfigService: AbpApplicationConfigurationService) {} + + setState(state: ApplicationConfigurationDto) { + this.store.set(state); + } + + refreshAppState() { + return this.abpConfigService.get().pipe(tap(res => this.setState(res))); + } + + getOne$(key: string) { + return this.store.sliceState(state => state[key]); + } + + getOne(key: string) { + return this.store.state[key]; + } + + getAll$(): Observable { + return this.store.sliceState(state => state); + } + + getAll(): ApplicationConfigurationDto { + return this.store.state; + } + + getDeep$(keys: string[] | string) { + keys = splitKeys(keys); + + return this.store + .sliceState(state => state) + .pipe( + map(state => { + return (keys as string[]).reduce((acc, val) => { + if (acc) { + return acc[val]; + } + + return undefined; + }, state); + }), + ); + } + + getDeep(keys: string[] | string) { + keys = splitKeys(keys); + + return (keys as string[]).reduce((acc, val) => { + if (acc) { + return acc[val]; + } + + return undefined; + }, this.store.state); + } + + getFeature(key: string) { + return this.store.state.features?.values?.[key]; + } + + getFeature$(key: string) { + return this.store.sliceState(state => state.features?.values?.[key]); + } + + getFeatures(keys: string[]) { + const { features } = this.store.state; + if (!features) return; + + return keys.reduce((acc, key) => ({ ...acc, [key]: features.values[key] }), {}); + } + + getFeatures$(keys: string[]) { + return this.store.sliceState(({ features }) => { + if (!features?.values) return; + + return keys.reduce((acc, key) => ({ ...acc, [key]: features.values[key] }), {}); + }); + } + + getSetting(key: string) { + return this.store.state.setting?.values?.[key]; + } + + getSetting$(key: string) { + return this.store.sliceState(state => state.setting?.values?.[key]); + } + + getSettings(keyword?: string) { + const settings = this.store.state.setting?.values || {}; + + if (!keyword) return settings; + + const keysFound = Object.keys(settings).filter(key => key.indexOf(keyword) > -1); + + return keysFound.reduce((acc, key) => { + acc[key] = settings[key]; + return acc; + }, {}); + } + + getSettings$(keyword?: string) { + return this.store + .sliceState(state => state.setting?.values) + .pipe( + map((settings = {}) => { + if (!keyword) return settings; + + const keysFound = Object.keys(settings).filter(key => key.indexOf(keyword) > -1); + + return keysFound.reduce((acc, key) => { + acc[key] = settings[key]; + return acc; + }, {}); + }), + ); + } +} + +function splitKeys(keys: string[] | string): string[] { + if (typeof keys === 'string') { + keys = keys.split('.'); + } + + if (!Array.isArray(keys)) { + throw new Error('The argument must be a dot string or an string array.'); + } + + return keys; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/content-projection.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/content-projection.service.ts new file mode 100644 index 0000000000..dfcdea330a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/content-projection.service.ts @@ -0,0 +1,14 @@ +import { Injectable, Injector, TemplateRef, Type } from '@angular/core'; +import { ProjectionStrategy } from '../strategies/projection.strategy'; + +@Injectable({ providedIn: 'root' }) +export class ContentProjectionService { + constructor(private injector: Injector) {} + + projectContent | TemplateRef>( + projectionStrategy: ProjectionStrategy, + injector = this.injector, + ) { + return projectionStrategy.injectContent(injector); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/dom-insertion.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/dom-insertion.service.ts new file mode 100644 index 0000000000..0754205f33 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/dom-insertion.service.ts @@ -0,0 +1,34 @@ +import { Injectable } from '@angular/core'; +import { ContentStrategy } from '../strategies/content.strategy'; +import { generateHash } from '../utils'; + +@Injectable({ providedIn: 'root' }) +export class DomInsertionService { + private readonly inserted = new Set(); + + insertContent( + contentStrategy: ContentStrategy, + ): T { + const hash = generateHash(contentStrategy.content); + + if (this.inserted.has(hash)) return; + + const element = contentStrategy.insertElement(); + this.inserted.add(hash); + + return element; + } + + removeContent(element: HTMLScriptElement | HTMLStyleElement) { + const hash = generateHash(element.textContent); + this.inserted.delete(hash); + + element.parentNode.removeChild(element); + } + + has(content: string): boolean { + const hash = generateHash(content); + + return this.inserted.has(hash); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/environment.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/environment.service.ts new file mode 100644 index 0000000000..10d7664acb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/environment.service.ts @@ -0,0 +1,37 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { Apis, Environment } from '../models/environment'; +import { InternalStore } from '../utils/internal-store-utils'; + +const mapToApiUrl = (key: string) => (apis: Apis) => + (apis[key] || apis.default).url || apis.default.url; + +@Injectable({ providedIn: 'root' }) +export class EnvironmentService { + private readonly store = new InternalStore({} as Environment); + + get createOnUpdateStream() { + return this.store.sliceUpdate; + } + + getEnvironment$(): Observable { + return this.store.sliceState(state => state); + } + + getEnvironment(): Environment { + return this.store.state; + } + + getApiUrl(key?: string) { + return mapToApiUrl(key)(this.store.state.apis); + } + + getApiUrl$(key?: string) { + return this.store.sliceState(state => state.apis).pipe(map(mapToApiUrl(key))); + } + + setState(environment: Environment) { + this.store.set(environment); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/http-wait.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/http-wait.service.ts new file mode 100644 index 0000000000..7292490a4b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/http-wait.service.ts @@ -0,0 +1,103 @@ +import { Injectable, Injector } from '@angular/core'; +import { HttpRequest } from '@angular/common/http'; +import { InternalStore } from '../utils/internal-store-utils'; +import { getPathName } from '../utils/http-utils'; +import { map, mapTo, switchMap, takeUntil, tap } from 'rxjs/operators'; +import { of, Subject, timer } from 'rxjs'; +import { LOADER_DELAY } from '../tokens/lodaer-delay.token'; + +export interface HttpWaitState { + requests: HttpRequest[]; + filteredRequests: Array; +} +export interface HttpRequestInfo { + method: string; + endpoint: string; +} +@Injectable({ + providedIn: 'root', +}) +export class HttpWaitService { + protected store = new InternalStore({ + requests: [], + filteredRequests: [], + }); + + private delay: number; + private destroy$ = new Subject(); + + constructor(injector: Injector) { + this.delay = injector.get(LOADER_DELAY, 500); + } + + getLoading() { + return !!this.applyFilter(this.store.state.requests).length; + } + + getLoading$() { + return this.store + .sliceState(({ requests }) => requests) + .pipe( + map(requests => !!this.applyFilter(requests).length), + switchMap(condition => + condition + ? this.delay === 0 + ? of(true) + : timer(this.delay).pipe(mapTo(true), takeUntil(this.destroy$)) + : of(false), + ), + tap(() => this.destroy$.next()), + ); + } + + updateLoading$() { + return this.store.sliceUpdate(({ requests }) => !!this.applyFilter(requests).length); + } + + clearLoading() { + this.store.patch({ requests: [] }); + } + + addRequest(request: HttpRequest) { + this.store.patch({ requests: [...this.store.state.requests, request] }); + } + + deleteRequest(request: HttpRequest) { + const requests = this.store.state.requests.filter(r => r !== request); + this.store.patch({ requests }); + } + + addFilter(request: HttpRequestInfo | HttpRequestInfo[]) { + const requests = Array.isArray(request) ? request : [request]; + const filteredRequests = [ + ...this.store.state.filteredRequests.filter( + f => !requests.some(r => this.isSameRequest(f, r)), + ), + ...requests, + ]; + this.store.patch({ filteredRequests }); + } + + removeFilter(request: HttpRequestInfo | HttpRequestInfo[]) { + const requests = Array.isArray(request) ? request : [request]; + const filteredRequests = this.store.state.filteredRequests.filter( + f => !requests.some(r => this.isSameRequest(f, r)), + ); + this.store.patch({ filteredRequests }); + } + + private applyFilter(requests: HttpRequest[]) { + const { filteredRequests } = this.store.state; + return requests.filter( + ({ method, url }) => + !filteredRequests.find(filteredRequest => + this.isSameRequest(filteredRequest, { method, endpoint: getPathName(url) }), + ), + ); + } + + private isSameRequest(filteredRequest: HttpRequestInfo, request: HttpRequestInfo) { + const { method, endpoint } = filteredRequest; + return endpoint === request.endpoint && method === request.method; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/index.ts new file mode 100644 index 0000000000..55000edde1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/index.ts @@ -0,0 +1,23 @@ +export * from './application-configuration.service'; +export * from './auth.service'; +export * from './config-state.service'; +export * from './content-projection.service'; +export * from './dom-insertion.service'; +export * from './environment.service'; +export * from './http-wait.service'; +export * from './lazy-load.service'; +export * from './list.service'; +export * from './localization.service'; +export * from './multi-tenancy.service'; +export * from './permission.service'; +export * from './profile-state.service'; +export * from './profile.service'; +export * from './replaceable-components.service'; +export * from './resource-wait.service'; +export * from './rest.service'; +export * from './router-events.service'; +export * from './router-wait.service'; +export * from './routes.service'; +export * from './session-state.service'; +export * from './subscription.service'; +export * from './track-by.service'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/lazy-load.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/lazy-load.service.ts new file mode 100644 index 0000000000..0aca94c94a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/lazy-load.service.ts @@ -0,0 +1,43 @@ +import { Injectable } from '@angular/core'; +import { concat, Observable, of, throwError } from 'rxjs'; +import { delay, retryWhen, shareReplay, take, tap } from 'rxjs/operators'; +import { LoadingStrategy } from '../strategies'; +import { ResourceWaitService } from './resource-wait.service'; + +@Injectable({ + providedIn: 'root', +}) +export class LazyLoadService { + readonly loaded = new Map(); + + constructor(private resourceWaitService: ResourceWaitService) {} + + load(strategy: LoadingStrategy, retryTimes?: number, retryDelay?: number): Observable { + if (this.loaded.has(strategy.path)) return of(new CustomEvent('load')); + this.resourceWaitService.addResource(strategy.path); + return strategy.createStream().pipe( + retryWhen(error$ => + concat( + error$.pipe(delay(retryDelay), take(retryTimes)), + throwError(new CustomEvent('error')), + ), + ), + tap(() => { + this.loaded.set(strategy.path, strategy.element); + this.resourceWaitService.deleteResource(strategy.path); + }), + delay(100), + shareReplay({ bufferSize: 1, refCount: true }), + ); + } + + remove(path: string): boolean { + const element = this.loaded.get(path); + + if (!element) return false; + + element.parentNode.removeChild(element); + this.loaded.delete(path); + return true; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/list.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/list.service.ts new file mode 100644 index 0000000000..c77ba9cdb4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/list.service.ts @@ -0,0 +1,145 @@ +import { Injectable, Injector, OnDestroy } from '@angular/core'; +import { + BehaviorSubject, + MonoTypeOperatorFunction, + Observable, + of, + ReplaySubject, + Subject, +} from 'rxjs'; +import { + catchError, + debounceTime, + filter, + shareReplay, + switchMap, + takeUntil, + tap, +} from 'rxjs/operators'; +import { ABP } from '../models/common'; +import { PagedResultDto } from '../models/dtos'; +import { LIST_QUERY_DEBOUNCE_TIME } from '../tokens/list.token'; + +@Injectable() +export class ListService implements OnDestroy { + private _filter = ''; + set filter(value: string) { + this._filter = value; + this.get(); + } + get filter(): string { + return this._filter; + } + + private _maxResultCount = 10; + set maxResultCount(value: number) { + this._maxResultCount = value; + this.get(); + } + get maxResultCount(): number { + return this._maxResultCount; + } + + private _skipCount = 0; + private _page = 0; + set page(value: number) { + if (value === this._page) return; + + this._page = value; + this.get(); + } + get page(): number { + return this._page; + } + + private _sortKey = ''; + set sortKey(value: string) { + this._sortKey = value; + this.get(); + } + get sortKey(): string { + return this._sortKey; + } + + private _sortOrder = ''; + set sortOrder(value: string) { + this._sortOrder = value; + this.get(); + } + get sortOrder(): string { + return this._sortOrder; + } + + private _query$ = new ReplaySubject(1); + + get query$(): Observable { + return this._query$ + .asObservable() + .pipe(this.delay, shareReplay({ bufferSize: 1, refCount: true })); + } + + private _isLoading$ = new BehaviorSubject(false); + + private destroy$ = new Subject(); + + get isLoading$(): Observable { + return this._isLoading$.asObservable(); + } + + get = () => { + this.resetPageWhenUnchanged(); + this.next(); + }; + + getWithoutPageReset = () => { + this.next(); + }; + + private delay: MonoTypeOperatorFunction; + + constructor(injector: Injector) { + const delay = injector.get(LIST_QUERY_DEBOUNCE_TIME, 300); + this.delay = delay ? debounceTime(delay) : tap(); + this.get(); + } + + hookToQuery( + streamCreatorCallback: QueryStreamCreatorCallback, + ): Observable> { + this._isLoading$.next(true); + + return this.query$.pipe( + switchMap(query => streamCreatorCallback(query).pipe(catchError(() => of(null)))), + filter(Boolean), + tap(() => this._isLoading$.next(false)), + shareReplay({ bufferSize: 1, refCount: true }), + takeUntil(this.destroy$), + ); + } + + ngOnDestroy() { + this.destroy$.next(); + } + + private resetPageWhenUnchanged() { + const skipCount = this._page * this._maxResultCount; + + if (skipCount === this._skipCount) { + this._page = 0; + this._skipCount = 0; + } else this._skipCount = skipCount; + } + + private next() { + this._query$.next(({ + filter: this._filter || undefined, + maxResultCount: this._maxResultCount, + skipCount: this._page * this._maxResultCount, + sorting: this._sortOrder ? `${this._sortKey} ${this._sortOrder}` : undefined, + } as any) as QueryParamsType); + } +} + +export type QueryStreamCreatorCallback = ( + query: QueryParamsType, +) => Observable>; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/localization.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/localization.service.ts new file mode 100644 index 0000000000..dc229a4c22 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/localization.service.ts @@ -0,0 +1,186 @@ +import { registerLocaleData } from '@angular/common'; +import { Injectable, Injector, isDevMode, Optional, SkipSelf } from '@angular/core'; +import { from, Observable, Subject } from 'rxjs'; +import { filter, map, mapTo, switchMap, tap } from 'rxjs/operators'; +import { ABP } from '../models/common'; +import { Config } from '../models/config'; +import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; +import { ApplicationConfigurationDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; +import { CORE_OPTIONS } from '../tokens/options.token'; +import { createLocalizer, createLocalizerWithFallback } from '../utils/localization-utils'; +import { interpolate } from '../utils/string-utils'; +import { ConfigStateService } from './config-state.service'; +import { SessionStateService } from './session-state.service'; + +@Injectable({ providedIn: 'root' }) +export class LocalizationService { + private latestLang = this.sessionState.getLanguage(); + private _languageChange$ = new Subject(); + + /** + * Returns currently selected language + */ + get currentLang(): string { + return this.latestLang || this.sessionState.getLanguage(); + } + + get languageChange$(): Observable { + return this._languageChange$.asObservable(); + } + + constructor( + private sessionState: SessionStateService, + private injector: Injector, + @Optional() + @SkipSelf() + otherInstance: LocalizationService, + private configState: ConfigStateService, + private appConfigService: AbpApplicationConfigurationService, + ) { + if (otherInstance) throw new Error('LocalizationService should have only one instance.'); + + this.listenToSetLanguage(); + } + + private listenToSetLanguage() { + this.sessionState + .onLanguageChange$() + .pipe( + filter( + lang => this.configState.getDeep('localization.currentCulture.cultureName') !== lang, + ), + switchMap(lang => + this.appConfigService + .get() + .pipe(tap(res => this.configState.setState(res))) + .pipe(mapTo(lang)), + ), + switchMap(lang => from(this.registerLocale(lang).then(() => lang))), + ) + .subscribe(lang => this._languageChange$.next(lang)); + } + + registerLocale(locale: string) { + const { registerLocaleFn }: ABP.Root = this.injector.get(CORE_OPTIONS); + + return registerLocaleFn(locale).then(module => { + if (module?.default) registerLocaleData(module.default); + this.latestLang = locale; + }); + } + + /** + * Returns an observable localized text with the given interpolation parameters in current language. + * @param key Localizaton key to replace with localized text + * @param interpolateParams Values to interpolate + */ + get( + key: string | Config.LocalizationWithDefault, + ...interpolateParams: string[] + ): Observable { + return this.configState + .getAll$() + .pipe(map(state => getLocalization(state, key, ...interpolateParams))); + } + + getResource(resourceName: string) { + return this.configState.getDeep(`localization.values.${resourceName}`); + } + + getResource$(resourceName: string) { + return this.configState.getDeep$(`localization.values.${resourceName}`); + } + + /** + * Returns localized text with the given interpolation parameters in current language. + * @param key Localization key to replace with localized text + * @param interpolateParams Values to intepolate. + */ + instant(key: string | Config.LocalizationWithDefault, ...interpolateParams: string[]): string { + return getLocalization(this.configState.getAll(), key, ...interpolateParams); + } + + localize(resourceName: string, key: string, defaultValue: string): Observable { + return this.configState.getOne$('localization').pipe( + map(createLocalizer), + map(localize => localize(resourceName, key, defaultValue)), + ); + } + + localizeSync(resourceName: string, key: string, defaultValue: string): string { + const localization = this.configState.getOne('localization'); + return createLocalizer(localization)(resourceName, key, defaultValue); + } + + localizeWithFallback( + resourceNames: string[], + keys: string[], + defaultValue: string, + ): Observable { + return this.configState.getOne$('localization').pipe( + map(createLocalizerWithFallback), + map(localizeWithFallback => localizeWithFallback(resourceNames, keys, defaultValue)), + ); + } + + localizeWithFallbackSync(resourceNames: string[], keys: string[], defaultValue: string): string { + const localization = this.configState.getOne('localization'); + return createLocalizerWithFallback(localization)(resourceNames, keys, defaultValue); + } +} + +function getLocalization( + state: ApplicationConfigurationDto, + key: string | Config.LocalizationWithDefault, + ...interpolateParams: string[] +) { + if (!key) key = ''; + let defaultValue: string; + + if (typeof key !== 'string') { + defaultValue = key.defaultValue; + key = key.key; + } + + const keys = key.split('::') as string[]; + const warn = (message: string) => { + if (isDevMode) console.warn(message); + }; + + if (keys.length < 2) { + warn('The localization source separator (::) not found.'); + return defaultValue || (key as string); + } + if (!state.localization) return defaultValue || keys[1]; + + const sourceName = keys[0] || state.localization.defaultResourceName; + const sourceKey = keys[1]; + + if (sourceName === '_') { + return defaultValue || sourceKey; + } + + if (!sourceName) { + warn('Localization source name is not specified and the defaultResourceName was not defined!'); + + return defaultValue || sourceKey; + } + + const source = state.localization.values[sourceName]; + if (!source) { + warn('Could not find localization source: ' + sourceName); + return defaultValue || sourceKey; + } + + let localization = source[sourceKey]; + if (typeof localization === 'undefined') { + return defaultValue || sourceKey; + } + + interpolateParams = interpolateParams.filter(params => params != null); + if (localization) localization = interpolate(localization, interpolateParams); + + if (typeof localization !== 'string') localization = ''; + + return localization || defaultValue || (key as string); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/multi-tenancy.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/multi-tenancy.service.ts new file mode 100644 index 0000000000..99371f91e7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/multi-tenancy.service.ts @@ -0,0 +1,71 @@ +import { Injectable, Inject } from '@angular/core'; +import { switchMap, map } from 'rxjs/operators'; +import { Observable } from 'rxjs'; +import { ABP } from '../models/common'; +import { + FindTenantResultDto, + CurrentTenantDto, +} from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; +import { RestService } from './rest.service'; +import { AbpTenantService } from '../proxy/pages/abp/multi-tenancy'; +import { ConfigStateService } from './config-state.service'; +import { SessionStateService } from './session-state.service'; +import { TENANT_KEY } from '../tokens/tenant-key.token'; + +@Injectable({ providedIn: 'root' }) +export class MultiTenancyService { + domainTenant: CurrentTenantDto = null; + + isTenantBoxVisible = true; + + apiName = 'abp'; + + private setTenantToState = (tenant: FindTenantResultDto) => { + this.sessionState.setTenant({ id: tenant.tenantId, name: tenant.name, isAvailable: true }); + return this.configStateService.refreshAppState().pipe(map(_ => tenant)); + }; + + constructor( + private restService: RestService, + private sessionState: SessionStateService, + private tenantService: AbpTenantService, + private configStateService: ConfigStateService, + @Inject(TENANT_KEY) public tenantKey: string, + ) {} + + /** + * @deprecated Use AbpTenantService.findTenantByName method instead. To be deleted in v5.0. + */ + findTenantByName(name: string, headers: ABP.Dictionary): Observable { + return this.restService.request( + { + url: `/api/abp/multi-tenancy/tenants/by-name/${name}`, + method: 'GET', + headers, + }, + { apiName: this.apiName }, + ); + } + + /** + * @deprecated Use AbpTenantService.findTenantById method instead. To be deleted in v5.0. + */ + findTenantById(id: string, headers: ABP.Dictionary): Observable { + return this.restService.request( + { url: `/api/abp/multi-tenancy/tenants/by-id/${id}`, method: 'GET', headers }, + { apiName: this.apiName }, + ); + } + + setTenantByName(tenantName: string) { + return this.tenantService + .findTenantByName(tenantName, { [this.tenantKey]: '' }) + .pipe(switchMap(this.setTenantToState)); + } + + setTenantById(tenantId: string) { + return this.tenantService + .findTenantById(tenantId, { [this.tenantKey]: '' }) + .pipe(switchMap(this.setTenantToState)); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/permission.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/permission.service.ts new file mode 100644 index 0000000000..eb6b3fc75e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/permission.service.ts @@ -0,0 +1,79 @@ +import { Injectable } from '@angular/core'; +import { map } from 'rxjs/operators'; +import snq from 'snq'; +import { ApplicationConfigurationDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; +import { ConfigStateService } from './config-state.service'; +import { ABP } from '../models/common'; + +@Injectable({ providedIn: 'root' }) +export class PermissionService { + constructor(protected configState: ConfigStateService) {} + + getGrantedPolicy$(key: string) { + return this.getStream().pipe( + map(grantedPolicies => this.isPolicyGranted(key, grantedPolicies)), + ); + } + + getGrantedPolicy(key: string) { + const policies = this.getSnapshot(); + return this.isPolicyGranted(key, policies); + } + + filterItemsByPolicy(items: Array) { + const policies = this.getSnapshot(); + return items.filter( + item => !item.requiredPolicy || this.isPolicyGranted(item.requiredPolicy, policies), + ); + } + + filterItemsByPolicy$(items: Array) { + return this.getStream().pipe( + map(policies => + items.filter( + item => !item.requiredPolicy || this.isPolicyGranted(item.requiredPolicy, policies), + ), + ), + ); + } + + protected isPolicyGranted(key: string, grantedPolicies: Record) { + if (!key) return true; + + const orRegexp = /\|\|/g; + const andRegexp = /&&/g; + + // TODO: Allow combination of ANDs & ORs + if (orRegexp.test(key)) { + const keys = key.split('||').filter(Boolean); + + if (keys.length < 2) return false; + + return keys.some(k => this.getPolicy(k.trim(), grantedPolicies)); + } else if (andRegexp.test(key)) { + const keys = key.split('&&').filter(Boolean); + + if (keys.length < 2) return false; + + return keys.every(k => this.getPolicy(k.trim(), grantedPolicies)); + } + + return this.getPolicy(key, grantedPolicies); + } + + protected getStream() { + return this.configState.getAll$().pipe(map(this.mapToPolicies)); + } + + protected getSnapshot() { + return this.mapToPolicies(this.configState.getAll()); + } + + protected mapToPolicies(applicationConfiguration: ApplicationConfigurationDto) { + return snq(() => applicationConfiguration.auth.grantedPolicies, {}); + } + + protected getPolicy(key: string, grantedPolicies: Record) { + return snq(() => grantedPolicies[key], false); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/profile-state.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/profile-state.service.ts new file mode 100644 index 0000000000..cd76c4bf03 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/profile-state.service.ts @@ -0,0 +1,28 @@ +import { Injectable } from '@angular/core'; +import { Store } from '@ngxs/store'; +import { ProfileState } from '../states'; +import { Profile } from '../models'; +import { GetProfile, UpdateProfile, ChangePassword } from '../actions'; + +@Injectable({ + providedIn: 'root', +}) +export class ProfileStateService { + constructor(private store: Store) {} + + getProfile() { + return this.store.selectSnapshot(ProfileState.getProfile); + } + + dispatchGetProfile() { + return this.store.dispatch(new GetProfile()); + } + + dispatchUpdateProfile(...args: ConstructorParameters) { + return this.store.dispatch(new UpdateProfile(...args)); + } + + dispatchChangePassword(...args: ConstructorParameters) { + return this.store.dispatch(new ChangePassword(...args)); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/profile.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/profile.service.ts new file mode 100644 index 0000000000..d80caf7e80 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/profile.service.ts @@ -0,0 +1,50 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { RestService } from './rest.service'; +import { Profile, Rest } from '../models'; + +@Injectable({ + providedIn: 'root', +}) +export class ProfileService { + apiName = 'AbpIdentity'; + + constructor(private rest: RestService) {} + + get(): Observable { + const request: Rest.Request = { + method: 'GET', + url: '/api/identity/my-profile', + }; + + return this.rest.request(request, { apiName: this.apiName }); + } + + update(body: Profile.Response): Observable { + const request: Rest.Request = { + method: 'PUT', + url: '/api/identity/my-profile', + body, + }; + + return this.rest.request(request, { + apiName: this.apiName, + }); + } + + changePassword( + body: Profile.ChangePasswordRequest, + skipHandleError: boolean = false, + ): Observable { + const request: Rest.Request = { + method: 'POST', + url: '/api/identity/my-profile/change-password', + body, + }; + + return this.rest.request(request, { + skipHandleError, + apiName: this.apiName, + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/replaceable-components.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/replaceable-components.service.ts new file mode 100644 index 0000000000..e929d489f7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/replaceable-components.service.ts @@ -0,0 +1,56 @@ +import { Injectable, NgZone } from '@angular/core'; +import { Router } from '@angular/router'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { ReplaceableComponents } from '../models/replaceable-components'; +import { InternalStore } from '../utils/internal-store-utils'; +import { reloadRoute } from '../utils/route-utils'; + +@Injectable({ providedIn: 'root' }) +export class ReplaceableComponentsService { + private readonly store: InternalStore; + + get replaceableComponents$(): Observable { + return this.store.sliceState(state => state); + } + + get replaceableComponents(): ReplaceableComponents.ReplaceableComponent[] { + return this.store.state; + } + + get onUpdate$(): Observable { + return this.store.sliceUpdate(state => state); + } + + constructor(private ngZone: NgZone, private router: Router) { + this.store = new InternalStore([]); + } + + add(replaceableComponent: ReplaceableComponents.ReplaceableComponent, reload?: boolean): void { + const replaceableComponents = [...this.store.state]; + + const index = replaceableComponents.findIndex( + component => component.key === replaceableComponent.key, + ); + + if (index > -1) { + replaceableComponents[index] = replaceableComponent; + } else { + replaceableComponents.push(replaceableComponent); + } + + this.store.set(replaceableComponents); + + if (reload) reloadRoute(this.router, this.ngZone); + } + + get(replaceableComponentKey: string): ReplaceableComponents.ReplaceableComponent { + return this.replaceableComponents.find(component => component.key === replaceableComponentKey); + } + + get$(replaceableComponentKey: string): Observable { + return this.replaceableComponents$.pipe( + map(components => components.find(component => component.key === replaceableComponentKey)), + ); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/resource-wait.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/resource-wait.service.ts new file mode 100644 index 0000000000..16351837a2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/resource-wait.service.ts @@ -0,0 +1,41 @@ +import { Injectable } from '@angular/core'; +import { InternalStore } from '../utils/internal-store-utils'; + +export interface ResourceWaitState { + resources: Set; +} + +@Injectable({ + providedIn: 'root', +}) +export class ResourceWaitService { + private store = new InternalStore({ resources: new Set() }); + + getLoading() { + return !!this.store.state.resources.size; + } + + getLoading$() { + return this.store.sliceState(({ resources }) => !!resources.size); + } + + updateLoading$() { + return this.store.sliceUpdate(({ resources }) => !!resources.size); + } + + clearLoading() { + this.store.patch({ resources: new Set() }); + } + + addResource(resource: string) { + const resources = this.store.state.resources; + resources.add(resource); + this.store.patch({ resources }); + } + + deleteResource(resource: string) { + const resources = this.store.state.resources; + resources.delete(resource); + this.store.patch({ resources }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/rest.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/rest.service.ts new file mode 100644 index 0000000000..d880c94e5a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/rest.service.ts @@ -0,0 +1,62 @@ +import { HttpClient, HttpRequest } from '@angular/common/http'; +import { Inject, Injectable } from '@angular/core'; +import { Store } from '@ngxs/store'; +import { Observable, throwError } from 'rxjs'; +import { catchError } from 'rxjs/operators'; +import { RestOccurError } from '../actions/rest.actions'; +import { ABP } from '../models/common'; +import { Rest } from '../models/rest'; +import { CORE_OPTIONS } from '../tokens/options.token'; +import { isUndefinedOrEmptyString } from '../utils/common-utils'; +import { EnvironmentService } from './environment.service'; + +@Injectable({ + providedIn: 'root', +}) +export class RestService { + constructor( + @Inject(CORE_OPTIONS) protected options: ABP.Root, + protected http: HttpClient, + protected environment: EnvironmentService, + protected store: Store, + ) {} + + protected getApiFromStore(apiName: string): string { + return this.environment.getApiUrl(apiName); + } + + handleError(err: any): Observable { + this.store.dispatch(new RestOccurError(err)); + return throwError(err); + } + + // TODO: Deprecate service or improve interface in v5.0 + request( + request: HttpRequest | Rest.Request, + config?: Rest.Config, + api?: string, + ): Observable { + config = config || ({} as Rest.Config); + api = api || this.getApiFromStore(config.apiName); + const { method, params, ...options } = request; + const { observe = Rest.Observe.Body, skipHandleError } = config; + + return this.http + .request(method, api + request.url, { + observe, + ...(params && { + params: Object.keys(params).reduce((acc, key) => { + const value = params[key]; + + if (isUndefinedOrEmptyString(value)) return acc; + if (value === null && !this.options.sendNullsAsQueryParam) return acc; + + acc[key] = value; + return acc; + }, {}), + }), + ...options, + } as any) + .pipe(catchError(err => (skipHandleError ? throwError(err) : this.handleError(err)))); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/router-events.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/router-events.service.ts new file mode 100644 index 0000000000..9acee09aa7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/router-events.service.ts @@ -0,0 +1,61 @@ +import { Injectable, Type } from '@angular/core'; +import { + NavigationCancel, + NavigationEnd, + NavigationError, + NavigationStart, + Router, + RouterEvent, +} from '@angular/router'; +import { filter } from 'rxjs/operators'; + +export const NavigationEvent = { + Cancel: NavigationCancel, + End: NavigationEnd, + Error: NavigationError, + Start: NavigationStart, +}; + +@Injectable({ providedIn: 'root' }) +export class RouterEvents { + constructor(private router: Router) {} + + getEvents(...eventTypes: T) { + type FilteredRouterEvent = T extends Type[] ? Ctor : never; + + const filterRouterEvents = (event: RouterEvent): event is FilteredRouterEvent => + eventTypes.some(type => event instanceof type); + + return this.router.events.pipe(filter(filterRouterEvents)); + } + + getNavigationEvents(...navigationEventKeys: T) { + type FilteredNavigationEvent = T extends (infer Key)[] + ? Key extends NavigationEventKey + ? InstanceType + : never + : never; + + const filterNavigationEvents = (event: RouterEvent): event is FilteredNavigationEvent => + navigationEventKeys.some(key => event instanceof NavigationEvent[key]); + + return this.router.events.pipe(filter(filterNavigationEvents)); + } + + getAllEvents() { + return this.router.events; + } + + getAllNavigationEvents() { + const keys = Object.keys(NavigationEvent) as NavigationEventKeys; + return this.getNavigationEvents(...keys); + } +} + +type RouterEventConstructors = [Type, ...Type[]]; + +type NavigationEventKeys = [NavigationEventKey, ...NavigationEventKey[]]; + +type NavigationEventType = typeof NavigationEvent; + +export type NavigationEventKey = keyof NavigationEventType; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/router-wait.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/router-wait.service.ts new file mode 100644 index 0000000000..e53ca3a1b1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/router-wait.service.ts @@ -0,0 +1,59 @@ +import { Injectable, Injector } from '@angular/core'; +import { NavigationStart } from '@angular/router'; +import { of, Subject, timer } from 'rxjs'; +import { map, mapTo, switchMap, takeUntil, tap } from 'rxjs/operators'; +import { LOADER_DELAY } from '../tokens/lodaer-delay.token'; +import { InternalStore } from '../utils/internal-store-utils'; +import { RouterEvents } from './router-events.service'; + +export interface RouterWaitState { + loading: boolean; +} + +@Injectable({ + providedIn: 'root', +}) +export class RouterWaitService { + private store = new InternalStore({ loading: false }); + private destroy$ = new Subject(); + private delay: number; + constructor(private routerEvents: RouterEvents, injector: Injector) { + this.delay = injector.get(LOADER_DELAY, 500); + this.updateLoadingStatusOnNavigationEvents(); + } + + private updateLoadingStatusOnNavigationEvents() { + this.routerEvents + .getAllNavigationEvents() + .pipe( + map(event => event instanceof NavigationStart), + switchMap(condition => + condition + ? this.delay === 0 + ? of(true) + : timer(this.delay || 0).pipe(mapTo(true), takeUntil(this.destroy$)) + : of(false), + ), + tap(() => this.destroy$.next()), + ) + .subscribe(status => { + this.setLoading(status); + }); + } + + getLoading() { + return this.store.state.loading; + } + + getLoading$() { + return this.store.sliceState(({ loading }) => loading); + } + + updateLoading$() { + return this.store.sliceUpdate(({ loading }) => loading); + } + + setLoading(loading: boolean) { + this.store.patch({ loading }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/routes.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/routes.service.ts new file mode 100644 index 0000000000..02c88b4901 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/routes.service.ts @@ -0,0 +1,185 @@ +import { Injectable, Injector, OnDestroy } from '@angular/core'; +import { BehaviorSubject, Observable, Subscription } from 'rxjs'; +import { ABP } from '../models/common'; +import { pushValueTo } from '../utils/array-utils'; +import { BaseTreeNode, createTreeFromList, TreeNode } from '../utils/tree-utils'; +import { ConfigStateService } from './config-state.service'; +import { PermissionService } from './permission.service'; + +export abstract class AbstractTreeService { + abstract id: string; + abstract parentId: string; + abstract hide: (item: T) => boolean; + abstract sort: (a: T, b: T) => number; + + private _flat$ = new BehaviorSubject([]); + private _tree$ = new BehaviorSubject[]>([]); + private _visible$ = new BehaviorSubject[]>([]); + + get flat(): T[] { + return this._flat$.value; + } + + get flat$(): Observable { + return this._flat$.asObservable(); + } + + get tree(): TreeNode[] { + return this._tree$.value; + } + + get tree$(): Observable[]> { + return this._tree$.asObservable(); + } + + get visible(): TreeNode[] { + return this._visible$.value; + } + + get visible$(): Observable[]> { + return this._visible$.asObservable(); + } + + protected createTree(items: T[]): TreeNode[] { + return createTreeFromList>( + items, + item => item[this.id], + item => item[this.parentId], + item => BaseTreeNode.create(item), + ); + } + + private filterWith(setOrMap: Set | Map): T[] { + return this._flat$.value.filter(item => !setOrMap.has(item[this.id])); + } + + private findItemsToRemove(set: Set): Set { + return this._flat$.value.reduce((acc, item) => { + if (!acc.has(item[this.parentId])) return acc; + const childSet = new Set([item[this.id]]); + const children = this.findItemsToRemove(childSet); + return new Set([...acc, ...children]); + }, set); + } + + private publish(flatItems: T[], visibleItems: T[]): T[] { + this._flat$.next(flatItems); + this._tree$.next(this.createTree(flatItems)); + this._visible$.next(this.createTree(visibleItems)); + return flatItems; + } + + add(items: T[]): T[] { + const map = new Map(); + items.forEach(item => map.set(item[this.id], item)); + + const flatItems = this.filterWith(map); + map.forEach(pushValueTo(flatItems)); + + flatItems.sort(this.sort); + const visibleItems = flatItems.filter(item => !this.hide(item)); + + return this.publish(flatItems, visibleItems); + } + + find(predicate: (item: TreeNode) => boolean, tree = this.tree): TreeNode | null { + return tree.reduce( + (acc, node) => (acc ? acc : predicate(node) ? node : this.find(predicate, node.children)), + null, + ); + } + + patch(identifier: string, props: Partial): T[] | false { + const flatItems = this._flat$.value; + const index = flatItems.findIndex(item => item[this.id] === identifier); + if (index < 0) return false; + + flatItems[index] = { ...flatItems[index], ...props }; + + flatItems.sort(this.sort); + const visibleItems = flatItems.filter(item => !this.hide(item)); + + return this.publish(flatItems, visibleItems); + } + + refresh(): T[] { + return this.add([]); + } + + remove(identifiers: string[]): T[] { + const set = new Set(); + identifiers.forEach(id => set.add(id)); + + const setToRemove = this.findItemsToRemove(set); + const flatItems = this.filterWith(setToRemove); + const visibleItems = flatItems.filter(item => !this.hide(item)); + + return this.publish(flatItems, visibleItems); + } + + search(params: Partial, tree = this.tree): TreeNode | null { + const searchKeys = Object.keys(params); + + return tree.reduce( + (acc, node) => + acc + ? acc + : searchKeys.every(key => node[key] === params[key]) + ? node + : this.search(params, node.children), + null, + ); + } +} + +@Injectable() +export abstract class AbstractNavTreeService + extends AbstractTreeService + implements OnDestroy +{ + private subscription: Subscription; + private permissionService: PermissionService; + readonly id = 'name'; + readonly parentId = 'parentName'; + readonly hide = (item: T) => item.invisible || !this.isGranted(item); + readonly sort = (a: T, b: T) => { + if (!Number.isInteger(a.order)) return 1; + if (!Number.isInteger(b.order)) return -1; + + return a.order - b.order; + }; + + constructor(protected injector: Injector) { + super(); + const configState = this.injector.get(ConfigStateService); + this.subscription = configState + .createOnUpdateStream(state => state) + .subscribe(() => this.refresh()); + this.permissionService = injector.get(PermissionService); + } + + protected isGranted({ requiredPolicy }: T): boolean { + return this.permissionService.getGrantedPolicy(requiredPolicy); + } + + hasChildren(identifier: string): boolean { + const node = this.find(item => item[this.id] === identifier); + return Boolean(node?.children?.length); + } + + hasInvisibleChild(identifier: string): boolean { + const node = this.find(item => item[this.id] === identifier); + return node?.children?.some(child => child.invisible); + } + + /* istanbul ignore next */ + ngOnDestroy() { + this.subscription.unsubscribe(); + } +} + +@Injectable({ providedIn: 'root' }) +export class RoutesService extends AbstractNavTreeService {} + +@Injectable({ providedIn: 'root' }) +export class SettingTabsService extends AbstractNavTreeService {} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/session-state.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/session-state.service.ts new file mode 100644 index 0000000000..be521f33c1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/session-state.service.ts @@ -0,0 +1,87 @@ +import { Injectable } from '@angular/core'; +import compare from 'just-compare'; +import { filter, take } from 'rxjs/operators'; +import { Session } from '../models/session'; +import { CurrentTenantDto } from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; +import { InternalStore } from '../utils/internal-store-utils'; +import { ConfigStateService } from './config-state.service'; + +@Injectable({ + providedIn: 'root', +}) +export class SessionStateService { + private readonly store = new InternalStore({} as Session.State); + + private updateLocalStorage = () => { + localStorage.setItem('abpSession', JSON.stringify(this.store.state)); + }; + + constructor(private configState: ConfigStateService) { + this.init(); + this.setInitialLanguage(); + } + + private init() { + const session = localStorage.getItem('abpSession'); + if (session) { + this.store.set(JSON.parse(session)); + } + + this.store.sliceUpdate(state => state).subscribe(this.updateLocalStorage); + } + + private setInitialLanguage() { + if (this.getLanguage()) return; + + this.configState + .getDeep$('localization.currentCulture.cultureName') + .pipe( + filter(cultureName => !!cultureName), + take(1), + ) + .subscribe(lang => { + if (lang.includes(';')) { + lang = lang.split(';')[0]; + } + + this.setLanguage(lang); + }); + } + + onLanguageChange$() { + return this.store.sliceUpdate(state => state.language); + } + + onTenantChange$() { + return this.store.sliceUpdate(state => state.tenant); + } + + getLanguage() { + return this.store.state.language; + } + + getLanguage$() { + return this.store.sliceState(state => state.language); + } + + getTenant() { + return this.store.state.tenant; + } + + getTenant$() { + return this.store.sliceState(state => state.tenant); + } + + setTenant(tenant: CurrentTenantDto) { + if (compare(tenant, this.store.state.tenant)) return; + + this.store.set({ ...this.store.state, tenant }); + } + + setLanguage(language: string) { + if (language === this.store.state.language) return; + + this.store.patch({ language }); + document.documentElement.setAttribute('lang', language); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/subscription.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/subscription.service.ts new file mode 100644 index 0000000000..9296585d2a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/subscription.service.ts @@ -0,0 +1,54 @@ +import { Injectable } from '@angular/core'; +import type { OnDestroy } from '@angular/core'; +import { Subscription } from 'rxjs'; +import type { Observable, PartialObserver } from 'rxjs'; + +@Injectable() +export class SubscriptionService implements OnDestroy { + private subscription = new Subscription(); + + get isClosed() { + return this.subscription.closed; + } + + addOne( + source$: Observable, + next?: (value: T) => void, + error?: (error: any) => void, + ): Subscription; + addOne(source$: Observable, observer?: PartialObserver): Subscription; + addOne( + source$: Observable, + nextOrObserver?: PartialObserver | Next, + error?: (error: any) => void, + ): Subscription { + const subscription = source$.subscribe(nextOrObserver as Next, error); + this.subscription.add(subscription); + return subscription; + } + + closeAll() { + this.subscription.unsubscribe(); + } + + closeOne(subscription: Subscription | undefined | null) { + this.removeOne(subscription); + subscription.unsubscribe(); + } + + ngOnDestroy(): void { + this.subscription.unsubscribe(); + } + + removeOne(subscription: Subscription | undefined | null) { + if (!subscription) return; + this.subscription.remove(subscription); + } + + reset() { + this.subscription.unsubscribe(); + this.subscription = new Subscription(); + } +} + +type Next = (value: T) => void; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/track-by.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/track-by.service.ts new file mode 100644 index 0000000000..aa72942ec0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/track-by.service.ts @@ -0,0 +1,17 @@ +import { Injectable, TrackByFunction } from '@angular/core'; +import { O } from 'ts-toolbelt'; + +export const trackBy = (key: keyof T): TrackByFunction => (_, item) => item[key]; + +export const trackByDeep = ( + ...keys: T extends object ? O.Paths : never +): TrackByFunction => (_, item) => keys.reduce((acc, key) => acc[key], item); + +@Injectable({ + providedIn: 'root', +}) +export class TrackByService { + by = trackBy; + + byDeep = trackByDeep; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/config.state.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/config.state.ts new file mode 100644 index 0000000000..4cc2dc741d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/config.state.ts @@ -0,0 +1,268 @@ +import { HttpClient, HttpErrorResponse } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Action, createSelector, Selector, State, StateContext, Store } from '@ngxs/store'; +import { of, throwError } from 'rxjs'; +import { catchError, distinctUntilChanged, switchMap, tap } from 'rxjs/operators'; +import snq from 'snq'; +import { GetAppConfiguration, PatchConfigState, SetEnvironment } from '../actions/config.actions'; +import { RestOccurError } from '../actions/rest.actions'; +import { ApplicationConfiguration } from '../models/application-configuration'; +import { Config } from '../models/config'; +import { ConfigStateService } from '../services/config-state.service'; +import { EnvironmentService } from '../services/environment.service'; +import { SessionStateService } from '../services/session-state.service'; +import { interpolate } from '../utils/string-utils'; +import compare from 'just-compare'; +import { ApplicationConfigurationDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; + +/** + * @deprecated Use ConfigStateService instead. To be deleted in v5.0. + */ +@State({ + name: 'ConfigState', + defaults: {} as Config.State, +}) +@Injectable() +export class ConfigState { + @Selector() + static getAll(state: Config.State) { + return state; + } + + @Selector() + static getApplicationInfo(state: Config.State): Config.Application { + return state.environment.application || ({} as Config.Application); + } + + @Selector() + static getEnvironment(state: Config.State): Config.Environment { + return state.environment; + } + + static getOne(key: string) { + const selector = createSelector([ConfigState], (state: Config.State) => { + return state[key]; + }); + + return selector; + } + + static getDeep(keys: string[] | string) { + if (typeof keys === 'string') { + keys = keys.split('.'); + } + + if (!Array.isArray(keys)) { + throw new Error('The argument must be a dot string or an string array.'); + } + + const selector = createSelector([ConfigState], (state: Config.State) => { + return (keys as string[]).reduce((acc, val) => { + if (acc) { + return acc[val]; + } + + return undefined; + }, state); + }); + + return selector; + } + + static getApiUrl(key?: string) { + const selector = createSelector([ConfigState], (state: Config.State): string => { + return (state.environment.apis[key || 'default'] || state.environment.apis.default).url; + }); + + return selector; + } + + static getFeature(key: string) { + const selector = createSelector([ConfigState], (state: Config.State) => { + return snq(() => state.features.values[key]); + }); + + return selector; + } + + static getSetting(key: string) { + const selector = createSelector([ConfigState], (state: Config.State) => { + return snq(() => state.setting.values[key]); + }); + + return selector; + } + + static getSettings(keyword?: string) { + const selector = createSelector([ConfigState], (state: Config.State) => { + const settings = snq(() => state.setting.values, {}); + + if (!keyword) return settings; + + const keysFound = Object.keys(settings).filter(key => key.indexOf(keyword) > -1); + + return keysFound.reduce((acc, key) => { + acc[key] = settings[key]; + return acc; + }, {}); + }); + + return selector; + } + + /** + * @deprecated use PermissionService's getGrantedPolicyStream or getGrantedPolicy methods. + */ + static getGrantedPolicy(key: string) { + const selector = createSelector([ConfigState], (state: Config.State): boolean => { + if (!key) return true; + const getPolicy = (k: string) => snq(() => state.auth.grantedPolicies[k], false); + + const orRegexp = /\|\|/g; + const andRegexp = /&&/g; + + // TODO: Allow combination of ANDs & ORs + if (orRegexp.test(key)) { + const keys = key.split('||').filter(Boolean); + + if (keys.length < 2) return false; + + return keys.some(k => getPolicy(k.trim())); + } else if (andRegexp.test(key)) { + const keys = key.split('&&').filter(Boolean); + + if (keys.length < 2) return false; + + return keys.every(k => getPolicy(k.trim())); + } + + return getPolicy(key); + }); + + return selector; + } + + static getLocalizationResource(resourceName: string) { + const selector = createSelector([ConfigState], (state: Config.State): { + [key: string]: string; + } => { + return state.localization.values[resourceName]; + }); + + return selector; + } + + static getLocalization( + key: string | Config.LocalizationWithDefault, + ...interpolateParams: string[] + ) { + if (!key) key = ''; + let defaultValue: string; + + if (typeof key !== 'string') { + defaultValue = key.defaultValue; + key = key.key; + } + + const keys = key.split('::') as string[]; + const selector = createSelector([ConfigState], (state: Config.State): string => { + const warn = (message: string) => { + if (!state.environment.production) console.warn(message); + }; + + if (keys.length < 2) { + warn('The localization source separator (::) not found.'); + return defaultValue || (key as string); + } + if (!state.localization) return defaultValue || keys[1]; + + const sourceName = + keys[0] || + snq(() => state.environment.localization.defaultResourceName) || + state.localization.defaultResourceName; + const sourceKey = keys[1]; + + if (sourceName === '_') { + return defaultValue || sourceKey; + } + + if (!sourceName) { + warn( + 'Localization source name is not specified and the defaultResourceName was not defined!', + ); + + return defaultValue || sourceKey; + } + + const source = state.localization.values[sourceName]; + if (!source) { + warn('Could not find localization source: ' + sourceName); + return defaultValue || sourceKey; + } + + let localization = source[sourceKey]; + if (typeof localization === 'undefined') { + return defaultValue || sourceKey; + } + + interpolateParams = interpolateParams.filter(params => params != null); + if (localization) localization = interpolate(localization, interpolateParams); + + if (typeof localization !== 'string') localization = ''; + + return localization || defaultValue || (key as string); + }); + + return selector; + } + + constructor( + private http: HttpClient, + private store: Store, + private sessionState: SessionStateService, + private environmentService: EnvironmentService, + private configState: ConfigStateService, + ) { + this.syncConfigState(); + this.syncEnvironment(); + } + + private syncConfigState() { + this.configState + .createOnUpdateStream(state => state) + .pipe(distinctUntilChanged(compare)) + .subscribe(config => this.store.dispatch(new PatchConfigState(config as any))); + } + + private syncEnvironment() { + this.environmentService + .createOnUpdateStream(state => state) + .pipe(distinctUntilChanged(compare)) + .subscribe(env => this.store.dispatch(new PatchConfigState({ environment: env } as any))); + } + + @Action(GetAppConfiguration) + addData({ patchState, dispatch }: StateContext) { + const apiName = 'default'; + const api = this.store.selectSnapshot(ConfigState.getApiUrl(apiName)); + return this.http + .get(`${api}/api/abp/application-configuration`) + .pipe( + tap(configuration => this.configState.setState(configuration)), + catchError((err: HttpErrorResponse) => { + dispatch(new RestOccurError(err)); + return throwError(err); + }), + ); + } + + @Action(SetEnvironment) + setEnvironment(_, { environment }: SetEnvironment) { + return this.environmentService.setState(environment); + } + + @Action(PatchConfigState) + setConfig({ patchState, getState }: StateContext, { state }: PatchConfigState) { + patchState({ ...getState(), ...state }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/index.ts new file mode 100644 index 0000000000..a96a6e7213 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/index.ts @@ -0,0 +1,2 @@ +export * from './config.state'; +export * from './profile.state'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/profile.state.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/profile.state.ts new file mode 100644 index 0000000000..7cd06c8c83 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/profile.state.ts @@ -0,0 +1,47 @@ +import { Injectable } from '@angular/core'; +import { Action, Selector, State, StateContext } from '@ngxs/store'; +import { tap } from 'rxjs/operators'; +import { ChangePassword, GetProfile, UpdateProfile } from '../actions/profile.actions'; +import { Profile } from '../models/profile'; +import { ProfileService } from '../services/profile.service'; + +@State({ + name: 'ProfileState', + defaults: {} as Profile.State, +}) +@Injectable() +export class ProfileState { + @Selector() + static getProfile({ profile }: Profile.State): Profile.Response { + return profile; + } + + constructor(private profileService: ProfileService) {} + + @Action(GetProfile) + getProfile({ patchState }: StateContext) { + return this.profileService.get().pipe( + tap(profile => + patchState({ + profile, + }), + ), + ); + } + + @Action(UpdateProfile) + updateProfile({ patchState }: StateContext, { payload }: UpdateProfile) { + return this.profileService.update(payload).pipe( + tap(profile => + patchState({ + profile, + }), + ), + ); + } + + @Action(ChangePassword) + changePassword(_, { payload }: ChangePassword) { + return this.profileService.changePassword(payload, true); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/auth-flow.strategy.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/auth-flow.strategy.ts new file mode 100644 index 0000000000..4cb959ac45 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/auth-flow.strategy.ts @@ -0,0 +1,264 @@ +import { HttpHeaders } from '@angular/common/http'; +import { Injector } from '@angular/core'; +import { Params, Router } from '@angular/router'; +import { Store } from '@ngxs/store'; +import { + AuthConfig, + OAuthErrorEvent, + OAuthInfoEvent, + OAuthService, + OAuthStorage, +} from 'angular-oauth2-oidc'; +import { from, Observable, of, pipe } from 'rxjs'; +import { filter, switchMap, tap } from 'rxjs/operators'; +import { RestOccurError } from '../actions/rest.actions'; +import { LoginParams } from '../models/auth'; +import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; +import { ConfigStateService } from '../services/config-state.service'; +import { EnvironmentService } from '../services/environment.service'; +import { SessionStateService } from '../services/session-state.service'; +import { removeRememberMe, setRememberMe } from '../utils/auth-utils'; +import { noop } from '../utils/common-utils'; +import { TENANT_KEY } from '../tokens/tenant-key.token'; + +export const oAuthStorage = localStorage; + +export abstract class AuthFlowStrategy { + abstract readonly isInternalAuth: boolean; + + protected store: Store; + protected environment: EnvironmentService; + protected configState: ConfigStateService; + protected oAuthService: OAuthService; + protected oAuthConfig: AuthConfig; + protected sessionState: SessionStateService; + protected appConfigService: AbpApplicationConfigurationService; + protected tenantKey: string; + + abstract checkIfInternalAuth(queryParams?: Params): boolean; + abstract navigateToLogin(queryParams?: Params): void; + abstract logout(queryParams?: Params): Observable; + abstract login(params?: LoginParams | Params): Observable; + + private catchError = err => this.store.dispatch(new RestOccurError(err)); + + constructor(protected injector: Injector) { + this.store = injector.get(Store); + this.environment = injector.get(EnvironmentService); + this.configState = injector.get(ConfigStateService); + this.oAuthService = injector.get(OAuthService); + this.appConfigService = injector.get(AbpApplicationConfigurationService); + this.sessionState = injector.get(SessionStateService); + this.oAuthConfig = this.environment.getEnvironment().oAuthConfig; + this.tenantKey = injector.get(TENANT_KEY); + + this.listenToOauthErrors(); + } + + async init(): Promise { + const shouldClear = shouldStorageClear( + this.environment.getEnvironment().oAuthConfig.clientId, + oAuthStorage, + ); + if (shouldClear) clearOAuthStorage(oAuthStorage); + + this.oAuthService.configure(this.oAuthConfig); + return this.oAuthService + .loadDiscoveryDocument() + .then(() => { + if (this.oAuthService.hasValidAccessToken() || !this.oAuthService.getRefreshToken()) { + return Promise.resolve(); + } + + return this.refreshToken(); + }) + .catch(this.catchError); + } + + protected refreshToken() { + return this.oAuthService.refreshToken().catch(() => clearOAuthStorage()); + } + + protected listenToOauthErrors() { + this.oAuthService.events + .pipe( + filter(event => event instanceof OAuthErrorEvent), + tap(() => clearOAuthStorage()), + switchMap(() => this.appConfigService.get()), + ) + .subscribe(res => { + this.configState.setState(res); + }); + } +} + +export class AuthCodeFlowStrategy extends AuthFlowStrategy { + readonly isInternalAuth = false; + + async init() { + return super + .init() + .then(() => this.oAuthService.tryLogin().catch(noop)) + .then(() => this.oAuthService.setupAutomaticSilentRefresh({}, 'access_token')); + } + + navigateToLogin(queryParams?: Params) { + this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams)); + } + + checkIfInternalAuth(queryParams?: Params) { + this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams)); + return false; + } + + logout(queryParams?: Params) { + return from(this.oAuthService.revokeTokenAndLogout(this.getCultureParams(queryParams))); + } + + login(queryParams?: Params) { + this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams)); + return of(null); + } + + private getCultureParams(queryParams?: Params) { + const lang = this.sessionState.getLanguage(); + const culture = { culture: lang, 'ui-culture': lang }; + return { ...(lang && culture), ...queryParams }; + } +} + +export class AuthPasswordFlowStrategy extends AuthFlowStrategy { + readonly isInternalAuth = true; + private cookieKey = 'rememberMe'; + private storageKey = 'passwordFlow'; + + private listenToTokenExpiration() { + this.oAuthService.events + .pipe( + filter( + event => + event instanceof OAuthInfoEvent && + event.type === 'token_expires' && + event.info === 'access_token', + ), + ) + .subscribe(() => { + if (this.oAuthService.getRefreshToken()) { + this.refreshToken(); + } else { + this.oAuthService.logOut(); + removeRememberMe(); + this.appConfigService.get().subscribe(res => { + this.configState.setState(res); + }); + } + }); + } + + async init() { + if (!getCookieValueByName(this.cookieKey) && localStorage.getItem(this.storageKey)) { + this.oAuthService.logOut(); + } + + return super.init().then(() => this.listenToTokenExpiration()); + } + + navigateToLogin(queryParams?: Params) { + const router = this.injector.get(Router); + router.navigate(['/account/login'], { queryParams }); + } + + checkIfInternalAuth() { + return true; + } + + login(params: LoginParams): Observable { + const tenant = this.sessionState.getTenant(); + + return from( + this.oAuthService.fetchTokenUsingPasswordFlow( + params.username, + params.password, + new HttpHeaders({ ...(tenant && tenant.id && { [this.tenantKey]: tenant.id }) }), + ), + ).pipe(this.pipeToLogin(params)); + } + + pipeToLogin(params: Pick) { + const router = this.injector.get(Router); + + return pipe( + switchMap(() => this.appConfigService.get()), + tap(res => { + this.configState.setState(res); + setRememberMe(params.rememberMe); + if (params.redirectUrl) router.navigate([params.redirectUrl]); + }), + ); + } + + logout(queryParams?: Params) { + const router = this.injector.get(Router); + + return from(this.oAuthService.revokeTokenAndLogout(queryParams)).pipe( + switchMap(() => this.appConfigService.get()), + tap(res => { + this.configState.setState(res); + router.navigateByUrl('/'); + removeRememberMe(); + }), + ); + } + + protected refreshToken() { + return this.oAuthService.refreshToken().catch(() => { + clearOAuthStorage(); + removeRememberMe(); + }); + } +} + +export const AUTH_FLOW_STRATEGY = { + Code(injector: Injector) { + return new AuthCodeFlowStrategy(injector); + }, + Password(injector: Injector) { + return new AuthPasswordFlowStrategy(injector); + }, +}; + +export function clearOAuthStorage(storage: OAuthStorage = oAuthStorage) { + const keys = [ + 'access_token', + 'id_token', + 'refresh_token', + 'nonce', + 'PKCE_verifier', + 'expires_at', + 'id_token_claims_obj', + 'id_token_expires_at', + 'id_token_stored_at', + 'access_token_stored_at', + 'granted_scopes', + 'session_state', + ]; + + keys.forEach(key => storage.removeItem(key)); +} + +function shouldStorageClear(clientId: string, storage: OAuthStorage): boolean { + const key = 'abpOAuthClientId'; + if (!storage.getItem(key)) { + storage.setItem(key, clientId); + return false; + } + + const shouldClear = storage.getItem(key) !== clientId; + if (shouldClear) storage.setItem(key, clientId); + return shouldClear; +} + +function getCookieValueByName(name: string) { + const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)')); + return match ? match[2] : ''; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/container.strategy.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/container.strategy.ts new file mode 100644 index 0000000000..dfe169e402 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/container.strategy.ts @@ -0,0 +1,44 @@ +import { ViewContainerRef } from '@angular/core'; + +export abstract class ContainerStrategy { + constructor(public containerRef: ViewContainerRef) {} + + abstract getIndex(): number; + + prepare(): void {} +} + +export class ClearContainerStrategy extends ContainerStrategy { + getIndex(): number { + return 0; + } + + prepare() { + this.containerRef.clear(); + } +} + +export class InsertIntoContainerStrategy extends ContainerStrategy { + constructor(containerRef: ViewContainerRef, private index: number) { + super(containerRef); + } + + getIndex() { + return Math.min(Math.max(0, this.index), this.containerRef.length); + } +} + +export const CONTAINER_STRATEGY = { + Clear(containerRef: ViewContainerRef) { + return new ClearContainerStrategy(containerRef); + }, + Append(containerRef: ViewContainerRef) { + return new InsertIntoContainerStrategy(containerRef, containerRef.length); + }, + Prepend(containerRef: ViewContainerRef) { + return new InsertIntoContainerStrategy(containerRef, 0); + }, + Insert(containerRef: ViewContainerRef, index: number) { + return new InsertIntoContainerStrategy(containerRef, index); + }, +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/content-security.strategy.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/content-security.strategy.ts new file mode 100644 index 0000000000..a848feabe3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/content-security.strategy.ts @@ -0,0 +1,32 @@ +export abstract class ContentSecurityStrategy { + constructor(public nonce?: string) {} + + abstract applyCSP(element: HTMLScriptElement | HTMLStyleElement): void; +} + +export class LooseContentSecurityStrategy extends ContentSecurityStrategy { + constructor(nonce: string) { + super(nonce); + } + + applyCSP(element: HTMLScriptElement | HTMLStyleElement) { + element.setAttribute('nonce', this.nonce); + } +} + +export class NoContentSecurityStrategy extends ContentSecurityStrategy { + constructor() { + super(); + } + + applyCSP(_: HTMLScriptElement | HTMLStyleElement) {} +} + +export const CONTENT_SECURITY_STRATEGY = { + Loose(nonce: string) { + return new LooseContentSecurityStrategy(nonce); + }, + None() { + return new NoContentSecurityStrategy(); + }, +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/content.strategy.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/content.strategy.ts new file mode 100644 index 0000000000..05261bc5e4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/content.strategy.ts @@ -0,0 +1,54 @@ +import { ContentSecurityStrategy, CONTENT_SECURITY_STRATEGY } from './content-security.strategy'; +import { DomStrategy, DOM_STRATEGY } from './dom.strategy'; + +export abstract class ContentStrategy { + constructor( + public content: string, + protected domStrategy: DomStrategy = DOM_STRATEGY.AppendToHead(), + protected contentSecurityStrategy: ContentSecurityStrategy = CONTENT_SECURITY_STRATEGY.None(), + ) {} + + abstract createElement(): T; + + insertElement(): T { + const element = this.createElement(); + + this.contentSecurityStrategy.applyCSP(element); + this.domStrategy.insertElement(element); + + return element; + } +} + +export class StyleContentStrategy extends ContentStrategy { + createElement(): HTMLStyleElement { + const element = document.createElement('style'); + element.textContent = this.content; + + return element; + } +} + +export class ScriptContentStrategy extends ContentStrategy { + createElement(): HTMLScriptElement { + const element = document.createElement('script'); + element.textContent = this.content; + + return element; + } +} + +export const CONTENT_STRATEGY = { + AppendScriptToBody(content: string) { + return new ScriptContentStrategy(content, DOM_STRATEGY.AppendToBody()); + }, + AppendScriptToHead(content: string) { + return new ScriptContentStrategy(content, DOM_STRATEGY.AppendToHead()); + }, + AppendStyleToHead(content: string) { + return new StyleContentStrategy(content, DOM_STRATEGY.AppendToHead()); + }, + PrependStyleToHead(content: string) { + return new StyleContentStrategy(content, DOM_STRATEGY.PrependToHead()); + }, +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/context.strategy.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/context.strategy.ts new file mode 100644 index 0000000000..21007eae1c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/context.strategy.ts @@ -0,0 +1,47 @@ +import { ComponentRef, TemplateRef, Type } from '@angular/core'; +import { InferredContextOf, InferredInstanceOf } from '../models'; + +export abstract class ContextStrategy { + constructor(public context: Partial>) {} + + /* tslint:disable-next-line:no-unused-variable */ + setContext(componentRef?: ComponentRef>): Partial> { + return this.context; + } +} + +export class NoContextStrategy< + T extends Type | TemplateRef = any +> extends ContextStrategy { + constructor() { + super(undefined); + } +} + +export class ComponentContextStrategy = any> extends ContextStrategy { + setContext(componentRef: ComponentRef>): Partial> { + Object.keys(this.context).forEach(key => (componentRef.instance[key] = this.context[key])); + componentRef.changeDetectorRef.detectChanges(); + return this.context; + } +} + +export class TemplateContextStrategy = any> extends ContextStrategy { + setContext(): Partial> { + return this.context; + } +} + +export const CONTEXT_STRATEGY = { + None | TemplateRef = any>() { + return new NoContextStrategy(); + }, + Component = any>(context: Partial>) { + return new ComponentContextStrategy(context); + }, + Template = any>(context: Partial>) { + return new TemplateContextStrategy(context); + }, +}; + +type ContextType = T extends Type | TemplateRef ? U : never; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/cross-origin.strategy.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/cross-origin.strategy.ts new file mode 100644 index 0000000000..d01188ac2e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/cross-origin.strategy.ts @@ -0,0 +1,24 @@ +export class CrossOriginStrategy { + constructor(public crossorigin: 'anonymous' | 'use-credentials', public integrity?: string) {} + + setCrossOrigin(element: T) { + if (this.integrity) element.setAttribute('integrity', this.integrity); + element.setAttribute('crossorigin', this.crossorigin); + } +} + +export class NoCrossOriginStrategy extends CrossOriginStrategy { + setCrossOrigin() {} +} + +export const CROSS_ORIGIN_STRATEGY = { + Anonymous(integrity?: string) { + return new CrossOriginStrategy('anonymous', integrity); + }, + UseCredentials(integrity?: string) { + return new CrossOriginStrategy('use-credentials', integrity); + }, + None() { + return new NoCrossOriginStrategy(null); + }, +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/dom.strategy.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/dom.strategy.ts new file mode 100644 index 0000000000..4fbe18d235 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/dom.strategy.ts @@ -0,0 +1,28 @@ +export class DomStrategy { + constructor( + public target: HTMLElement = document.head, + public position: InsertPosition = 'beforeend', + ) {} + + insertElement(element: T) { + this.target.insertAdjacentElement(this.position, element); + } +} + +export const DOM_STRATEGY = { + AfterElement(element: HTMLElement) { + return new DomStrategy(element, 'afterend'); + }, + AppendToBody() { + return new DomStrategy(document.body, 'beforeend'); + }, + AppendToHead() { + return new DomStrategy(document.head, 'beforeend'); + }, + BeforeElement(element: HTMLElement) { + return new DomStrategy(element, 'beforebegin'); + }, + PrependToHead() { + return new DomStrategy(document.head, 'afterbegin'); + }, +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/index.ts new file mode 100644 index 0000000000..2e621e7907 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/index.ts @@ -0,0 +1,8 @@ +export * from './container.strategy'; +export * from './content-security.strategy'; +export * from './content.strategy'; +export * from './context.strategy'; +export * from './cross-origin.strategy'; +export * from './dom.strategy'; +export * from './loading.strategy'; +export * from './projection.strategy'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/loading.strategy.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/loading.strategy.ts new file mode 100644 index 0000000000..46961e94ba --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/loading.strategy.ts @@ -0,0 +1,97 @@ +import { Observable, of } from 'rxjs'; +import { switchMap } from 'rxjs/operators'; +import { fromLazyLoad } from '../utils'; +import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from './cross-origin.strategy'; +import { DomStrategy, DOM_STRATEGY } from './dom.strategy'; + +export abstract class LoadingStrategy { + element: T; + + constructor( + public path: string, + protected domStrategy: DomStrategy = DOM_STRATEGY.AppendToHead(), + protected crossOriginStrategy: CrossOriginStrategy = CROSS_ORIGIN_STRATEGY.Anonymous(), + ) {} + + abstract createElement(): T; + + createStream(): Observable { + this.element = this.createElement(); + + return of(null).pipe( + switchMap(() => fromLazyLoad(this.element, this.domStrategy, this.crossOriginStrategy)), + ); + } +} + +export class ScriptLoadingStrategy extends LoadingStrategy { + constructor(src: string, domStrategy?: DomStrategy, crossOriginStrategy?: CrossOriginStrategy) { + super(src, domStrategy, crossOriginStrategy); + } + + createElement(): HTMLScriptElement { + const element = document.createElement('script'); + element.src = this.path; + + return element; + } +} + +export class StyleLoadingStrategy extends LoadingStrategy { + constructor(href: string, domStrategy?: DomStrategy, crossOriginStrategy?: CrossOriginStrategy) { + super(href, domStrategy, crossOriginStrategy); + } + + createElement(): HTMLLinkElement { + const element = document.createElement('link'); + element.rel = 'stylesheet'; + element.href = this.path; + + return element; + } +} + +export const LOADING_STRATEGY = { + AppendScriptToBody(src: string) { + return new ScriptLoadingStrategy( + src, + DOM_STRATEGY.AppendToBody(), + CROSS_ORIGIN_STRATEGY.None(), + ); + }, + AppendAnonymousScriptToBody(src: string, integrity?: string) { + return new ScriptLoadingStrategy( + src, + DOM_STRATEGY.AppendToBody(), + CROSS_ORIGIN_STRATEGY.Anonymous(integrity), + ); + }, + AppendAnonymousScriptToHead(src: string, integrity?: string) { + return new ScriptLoadingStrategy( + src, + DOM_STRATEGY.AppendToHead(), + CROSS_ORIGIN_STRATEGY.Anonymous(integrity), + ); + }, + AppendAnonymousStyleToHead(src: string, integrity?: string) { + return new StyleLoadingStrategy( + src, + DOM_STRATEGY.AppendToHead(), + CROSS_ORIGIN_STRATEGY.Anonymous(integrity), + ); + }, + PrependAnonymousScriptToHead(src: string, integrity?: string) { + return new ScriptLoadingStrategy( + src, + DOM_STRATEGY.PrependToHead(), + CROSS_ORIGIN_STRATEGY.Anonymous(integrity), + ); + }, + PrependAnonymousStyleToHead(src: string, integrity?: string) { + return new StyleLoadingStrategy( + src, + DOM_STRATEGY.PrependToHead(), + CROSS_ORIGIN_STRATEGY.Anonymous(integrity), + ); + }, +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/projection.strategy.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/projection.strategy.ts new file mode 100644 index 0000000000..bc7c9201fd --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/projection.strategy.ts @@ -0,0 +1,179 @@ +import { + ApplicationRef, + ComponentFactoryResolver, + ComponentRef, + EmbeddedViewRef, + Injector, + TemplateRef, + Type, + ViewContainerRef, +} from '@angular/core'; +import { InferredContextOf, InferredInstanceOf } from '../models/utility'; +import { ContainerStrategy, CONTAINER_STRATEGY } from './container.strategy'; +import { ContextStrategy, CONTEXT_STRATEGY } from './context.strategy'; +import { DomStrategy, DOM_STRATEGY } from './dom.strategy'; + +export abstract class ProjectionStrategy { + constructor(public content: T) {} + + abstract injectContent(injector: Injector): ComponentRefOrEmbeddedViewRef; +} + +export class ComponentProjectionStrategy> extends ProjectionStrategy { + constructor( + component: T, + private containerStrategy: ContainerStrategy, + private contextStrategy: ContextStrategy = CONTEXT_STRATEGY.None(), + ) { + super(component); + } + + injectContent(injector: Injector) { + this.containerStrategy.prepare(); + + const resolver = injector.get(ComponentFactoryResolver) as ComponentFactoryResolver; + const factory = resolver.resolveComponentFactory>(this.content); + + const componentRef = this.containerStrategy.containerRef.createComponent( + factory, + this.containerStrategy.getIndex(), + injector, + ); + this.contextStrategy.setContext(componentRef); + + return componentRef as ComponentRefOrEmbeddedViewRef; + } +} + +export class RootComponentProjectionStrategy> extends ProjectionStrategy { + constructor( + component: T, + private contextStrategy: ContextStrategy = CONTEXT_STRATEGY.None(), + private domStrategy: DomStrategy = DOM_STRATEGY.AppendToBody(), + ) { + super(component); + } + + injectContent(injector: Injector) { + const appRef = injector.get(ApplicationRef); + const resolver = injector.get(ComponentFactoryResolver) as ComponentFactoryResolver; + const componentRef = resolver + .resolveComponentFactory>(this.content) + .create(injector); + + this.contextStrategy.setContext(componentRef); + + appRef.attachView(componentRef.hostView); + const element: HTMLElement = (componentRef.hostView as EmbeddedViewRef).rootNodes[0]; + this.domStrategy.insertElement(element); + + return componentRef as ComponentRefOrEmbeddedViewRef; + } +} + +export class TemplateProjectionStrategy> extends ProjectionStrategy { + constructor( + templateRef: T, + private containerStrategy: ContainerStrategy, + private contextStrategy = CONTEXT_STRATEGY.None(), + ) { + super(templateRef); + } + + injectContent() { + this.containerStrategy.prepare(); + + const embeddedViewRef = this.containerStrategy.containerRef.createEmbeddedView( + this.content, + this.contextStrategy.context, + this.containerStrategy.getIndex(), + ); + embeddedViewRef.detectChanges(); + + return embeddedViewRef as ComponentRefOrEmbeddedViewRef; + } +} + +export const PROJECTION_STRATEGY = { + AppendComponentToBody>( + component: T, + context?: Partial>, + ) { + return new RootComponentProjectionStrategy( + component, + context && CONTEXT_STRATEGY.Component(context), + ); + }, + AppendComponentToContainer>( + component: T, + containerRef: ViewContainerRef, + context?: Partial>, + ) { + return new ComponentProjectionStrategy( + component, + CONTAINER_STRATEGY.Append(containerRef), + context && CONTEXT_STRATEGY.Component(context), + ); + }, + AppendTemplateToContainer>( + templateRef: T, + containerRef: ViewContainerRef, + context?: Partial>, + ) { + return new TemplateProjectionStrategy( + templateRef, + CONTAINER_STRATEGY.Append(containerRef), + context && CONTEXT_STRATEGY.Template(context), + ); + }, + PrependComponentToContainer>( + component: T, + containerRef: ViewContainerRef, + context?: Partial>, + ) { + return new ComponentProjectionStrategy( + component, + CONTAINER_STRATEGY.Prepend(containerRef), + context && CONTEXT_STRATEGY.Component(context), + ); + }, + PrependTemplateToContainer>( + templateRef: T, + containerRef: ViewContainerRef, + context?: Partial>, + ) { + return new TemplateProjectionStrategy( + templateRef, + CONTAINER_STRATEGY.Prepend(containerRef), + context && CONTEXT_STRATEGY.Template(context), + ); + }, + ProjectComponentToContainer>( + component: T, + containerRef: ViewContainerRef, + context?: Partial>, + ) { + return new ComponentProjectionStrategy( + component, + CONTAINER_STRATEGY.Clear(containerRef), + context && CONTEXT_STRATEGY.Component(context), + ); + }, + ProjectTemplateToContainer>( + templateRef: T, + containerRef: ViewContainerRef, + context?: Partial>, + ) { + return new TemplateProjectionStrategy( + templateRef, + CONTAINER_STRATEGY.Clear(containerRef), + context && CONTEXT_STRATEGY.Template(context), + ); + }, +}; + +type ComponentRefOrEmbeddedViewRef = T extends Type + ? ComponentRef + : T extends TemplateRef + ? EmbeddedViewRef + : never; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/api.interceptor.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/api.interceptor.spec.ts new file mode 100644 index 0000000000..f731e4e7e5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/api.interceptor.spec.ts @@ -0,0 +1,81 @@ +import { HttpRequest } from '@angular/common/http'; +import { SpyObject } from '@ngneat/spectator'; +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { OAuthService } from 'angular-oauth2-oidc'; +import { Subject, timer } from 'rxjs'; +import { ApiInterceptor } from '../interceptors'; +import { HttpWaitService, SessionStateService } from '../services'; +import { TENANT_KEY } from '../tokens/tenant-key.token'; + +describe('ApiInterceptor', () => { + let spectator: SpectatorService; + let interceptor: ApiInterceptor; + let oauthService: SpyObject; + let sessionState: SpyObject; + let httpWaitService: SpyObject; + + const testTenantKey = 'TEST_TENANT_KEY'; + + const createService = createServiceFactory({ + service: ApiInterceptor, + mocks: [OAuthService, SessionStateService], + providers: [{ provide: TENANT_KEY, useValue: testTenantKey }], + }); + + beforeEach(() => { + spectator = createService(); + interceptor = spectator.service; + sessionState = spectator.inject(SessionStateService); + oauthService = spectator.inject(OAuthService); + httpWaitService = spectator.inject(HttpWaitService); + }); + + it('should add headers to http request', done => { + oauthService.getAccessToken.andReturn('ey892mkwa8^2jk'); + sessionState.getLanguage.andReturn('tr'); + sessionState.getTenant.andReturn({ id: 'Volosoft', name: 'Volosoft' }); + + const request = new HttpRequest('GET', 'https://abp.io'); + const handleRes$ = new Subject(); + + const handler = { + handle: (req: HttpRequest) => { + expect(req.headers.get('Authorization')).toEqual('Bearer ey892mkwa8^2jk'); + expect(req.headers.get('Accept-Language')).toEqual('tr'); + expect(req.headers.get(testTenantKey)).toEqual('Volosoft'); + done(); + return handleRes$; + }, + }; + + interceptor.intercept(request, handler as any); + + handleRes$.next(); + handleRes$.complete(); + }); + + it('should call http wait services add request and delete request', done => { + const spyAddRequest = jest.spyOn(httpWaitService, 'addRequest'); + const spyDeleteRequest = jest.spyOn(httpWaitService, 'deleteRequest'); + + const request = new HttpRequest('GET', 'https://abp.io'); + const handleRes$ = new Subject(); + + const handler = { + handle: (req: HttpRequest) => { + return handleRes$; + }, + }; + + interceptor.intercept(request, handler as any).subscribe(); + + handleRes$.next(); + handleRes$.complete(); + + timer(0).subscribe(() => { + expect(spyAddRequest).toHaveBeenCalled(); + expect(spyDeleteRequest).toHaveBeenCalled(); + done(); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/application-configuration.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/application-configuration.service.spec.ts new file mode 100644 index 0000000000..43b6218697 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/application-configuration.service.spec.ts @@ -0,0 +1,27 @@ +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { of } from 'rxjs'; +import { ApplicationConfigurationService, RestService } from '../services'; + +describe('ApplicationConfigurationService', () => { + let spectator: SpectatorService; + const createService = createServiceFactory({ + service: ApplicationConfigurationService, + mocks: [RestService], + }); + + beforeEach(() => (spectator = createService())); + + it('should send a GET to application-configuration API', () => { + const rest = spectator.inject(RestService); + + const requestSpy = jest.spyOn(rest, 'request'); + requestSpy.mockReturnValue(of(null)); + + spectator.service.getConfiguration().subscribe(); + + expect(requestSpy).toHaveBeenCalledWith( + { method: 'GET', url: '/api/abp/application-configuration' }, + {}, + ); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/array-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/array-utils.spec.ts new file mode 100644 index 0000000000..3ccc91461c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/array-utils.spec.ts @@ -0,0 +1,17 @@ +import { pushValueTo } from '../utils/array-utils'; + +describe('Array Utils', () => { + describe('#pushValueTo', () => { + test.each` + source | target | expected + ${[]} | ${[0, 1, 2, 3]} | ${[0, 1, 2, 3]} + ${[3]} | ${[0, 1, 2]} | ${[0, 1, 2, 3]} + ${[2, 3]} | ${[0, 1]} | ${[0, 1, 2, 3]} + ${[1, 2, 3]} | ${[0]} | ${[0, 1, 2, 3]} + ${[0, 1, 2, 3]} | ${[]} | ${[0, 1, 2, 3]} + `('should push $source to $target when called in forEach', ({ source, target, expected }) => { + source.forEach(pushValueTo(target)); + expect(target).toEqual(expected); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/auth.guard.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/auth.guard.spec.ts new file mode 100644 index 0000000000..151e0ec639 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/auth.guard.spec.ts @@ -0,0 +1,32 @@ +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { OAuthService } from 'angular-oauth2-oidc'; +import { AuthGuard } from '../guards/auth.guard'; +import { AuthService } from '../services/auth.service'; + +describe('AuthGuard', () => { + let spectator: SpectatorService; + let guard: AuthGuard; + const createService = createServiceFactory({ + service: AuthGuard, + mocks: [OAuthService, AuthService], + }); + + beforeEach(() => { + spectator = createService(); + guard = spectator.service; + }); + + it('should return true when user logged in', () => { + spectator.inject(OAuthService).hasValidAccessToken.andReturn(true); + expect(guard.canActivate()).toBe(true); + }); + + it('should execute the navigateToLogin method of the authService', () => { + const authService = spectator.inject(AuthService); + spectator.inject(OAuthService).hasValidAccessToken.andReturn(false); + const navigateToLoginSpy = jest.spyOn(authService, 'navigateToLogin'); + + expect(guard.canActivate()).toBe(false); + expect(navigateToLoginSpy).toHaveBeenCalled(); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/autofocus.directive.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/autofocus.directive.spec.ts new file mode 100644 index 0000000000..6a44e0d83e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/autofocus.directive.spec.ts @@ -0,0 +1,36 @@ +import { createDirectiveFactory, SpectatorDirective } from '@ngneat/spectator/jest'; +import { AutofocusDirective } from '../directives/autofocus.directive'; +import { timer } from 'rxjs'; + +describe('AutofocusDirective', () => { + let spectator: SpectatorDirective; + let directive: AutofocusDirective; + let input: HTMLInputElement; + const createDirective = createDirectiveFactory({ + directive: AutofocusDirective, + }); + + beforeEach(() => { + spectator = createDirective('', { + hostProps: {}, + }); + directive = spectator.directive; + input = spectator.query('input'); + }); + + test('should be created', () => { + expect(directive).toBeTruthy(); + }); + + test('should have 10ms delay', () => { + expect(directive.delay).toBe(10); + }); + + test('should focus element after given delay', done => { + timer(0).subscribe(() => expect('input').not.toBeFocused()); + timer(11).subscribe(() => { + expect('input').toBeFocused(); + done(); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/common-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/common-utils.spec.ts new file mode 100644 index 0000000000..05be159b9e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/common-utils.spec.ts @@ -0,0 +1,118 @@ +import { + isUndefinedOrEmptyString, + noop, + isNullOrUndefined, + exists, + isObject, + isArray, + isObjectAndNotArray, +} from '../utils'; + +describe('CommonUtils', () => { + describe('#noop', () => { + test('should return empty fn', () => { + expect(typeof noop()).toBe('function'); + expect(noop()()).toBeUndefined(); + }); + }); + + describe('#isUndefinedOrEmptyString', () => { + test.each` + value | expected + ${null} | ${false} + ${0} | ${false} + ${true} | ${false} + ${'x'} | ${false} + ${{}} | ${false} + ${[]} | ${false} + ${undefined} | ${true} + ${''} | ${true} + `('should return $expected when given parameter is $value', ({ value, expected }) => { + expect(isUndefinedOrEmptyString(value)).toBe(expected); + }); + }); + + describe('#isNullOrUndefined & #exists', () => { + test.each` + value | expected + ${null} | ${true} + ${undefined} | ${true} + ${true} | ${false} + ${false} | ${false} + ${''} | ${false} + ${'test'} | ${false} + ${0} | ${false} + ${10} | ${false} + ${[]} | ${false} + ${[1, 2]} | ${false} + ${{}} | ${false} + ${{ a: 1 }} | ${false} + `( + 'should return $expected and !$expected (for #exists) when given parameter is $value', + ({ value, expected }) => { + expect(isNullOrUndefined(value)).toBe(expected); + expect(exists(value)).toBe(!expected); + }, + ); + }); + + describe('#isObject', () => { + test.each` + value | expected + ${null} | ${false} + ${undefined} | ${false} + ${true} | ${false} + ${false} | ${false} + ${''} | ${false} + ${'test'} | ${false} + ${0} | ${false} + ${10} | ${false} + ${[]} | ${true} + ${[1, 2]} | ${true} + ${{}} | ${true} + ${{ a: 1 }} | ${true} + `('should return $expected when given parameter is $value', ({ value, expected }) => { + expect(isObject(value)).toBe(expected); + }); + }); + + describe('#isArray', () => { + test.each` + value | expected + ${null} | ${false} + ${undefined} | ${false} + ${true} | ${false} + ${false} | ${false} + ${''} | ${false} + ${'test'} | ${false} + ${0} | ${false} + ${10} | ${false} + ${[]} | ${true} + ${[1, 2]} | ${true} + ${{}} | ${false} + ${{ a: 1 }} | ${false} + `('should return $expected when given parameter is $value', ({ value, expected }) => { + expect(isArray(value)).toBe(expected); + }); + }); + + describe('#isObjectAndNotArray', () => { + test.each` + value | expected + ${null} | ${false} + ${undefined} | ${false} + ${true} | ${false} + ${false} | ${false} + ${''} | ${false} + ${'test'} | ${false} + ${0} | ${false} + ${10} | ${false} + ${[]} | ${false} + ${[1, 2]} | ${false} + ${{}} | ${true} + ${{ a: 1 }} | ${true} + `('should return $expected when given parameter is $value', ({ value, expected }) => { + expect(isObjectAndNotArray(value)).toBe(expected); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/config-state.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/config-state.service.spec.ts new file mode 100644 index 0000000000..dad7a2c524 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/config-state.service.spec.ts @@ -0,0 +1,185 @@ +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { ApplicationConfiguration } from '../models/application-configuration'; +import { + ApplicationConfigurationDto, + CurrentUserDto, +} from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; +import { ConfigStateService } from '../services'; +import { CoreTestingModule } from '@abp/ng.core/testing'; + +export const CONFIG_STATE_DATA = { + environment: { + production: false, + application: { + name: 'MyProjectName', + }, + oAuthConfig: { + issuer: 'https://localhost:44305', + }, + apis: { + default: { + url: 'https://localhost:44305', + }, + other: { + url: 'https://localhost:44306', + }, + }, + localization: { + defaultResourceName: 'MyProjectName', + }, + }, + requirements: { + layouts: [null, null, null], + }, + localization: { + values: { + MyProjectName: { + "'{0}' and '{1}' do not match.": "'{0}' and '{1}' do not match.", + }, + AbpIdentity: { + Identity: 'identity', + }, + }, + languages: [ + { + cultureName: 'cs', + uiCultureName: 'cs', + displayName: 'Čeština', + flagIcon: null, + }, + ], + currentCulture: { + displayName: 'English', + englishName: 'English', + threeLetterIsoLanguageName: 'eng', + twoLetterIsoLanguageName: 'en', + isRightToLeft: false, + cultureName: 'en', + name: 'en', + nativeName: 'English', + dateTimeFormat: { + calendarAlgorithmType: 'SolarCalendar', + dateTimeFormatLong: 'dddd, MMMM d, yyyy', + shortDatePattern: 'M/d/yyyy', + fullDateTimePattern: 'dddd, MMMM d, yyyy h:mm:ss tt', + dateSeparator: '/', + shortTimePattern: 'h:mm tt', + longTimePattern: 'h:mm:ss tt', + }, + }, + defaultResourceName: null, + }, + auth: { + policies: { + 'AbpIdentity.Roles': true, + }, + grantedPolicies: { + 'Abp.Identity': false, + 'Abp.Account': true, + }, + }, + setting: { + values: { + 'Abp.Custom.SomeSetting': 'X', + 'Abp.Localization.DefaultLanguage': 'en', + }, + }, + currentUser: { + isAuthenticated: false, + id: null, + tenantId: null, + userName: null, + email: null, + roles: [], + } as CurrentUserDto, + features: { + values: { + 'Chat.Enable': 'True', + }, + }, + registerLocaleFn: () => Promise.resolve(), +} as any as ApplicationConfigurationDto; + +describe('ConfigState', () => { + let spectator: SpectatorService; + let configState: ConfigStateService; + + const createService = createServiceFactory({ + service: ConfigStateService, + imports: [CoreTestingModule.withConfig()], + }); + + beforeEach(() => { + spectator = createService(); + configState = spectator.service; + + configState.setState(CONFIG_STATE_DATA); + }); + + describe('#getAll', () => { + it('should return CONFIG_STATE_DATA', () => { + expect(configState.getAll()).toEqual(CONFIG_STATE_DATA); + configState.getAll$().subscribe(data => expect(data).toEqual(CONFIG_STATE_DATA)); + }); + }); + + describe('#getOne', () => { + it('should return one property', () => { + expect(configState.getOne('localization')).toEqual(CONFIG_STATE_DATA.localization); + configState + .getOne$('localization') + .subscribe(localization => expect(localization).toEqual(CONFIG_STATE_DATA.localization)); + }); + }); + + describe('#getDeep', () => { + it('should return deeper', () => { + expect(configState.getDeep('localization.languages')).toEqual( + CONFIG_STATE_DATA.localization.languages, + ); + + configState + .getDeep$('localization.languages') + .subscribe(languages => + expect(languages).toEqual(CONFIG_STATE_DATA.localization.languages), + ); + + expect(configState.getDeep('test')).toBeFalsy(); + }); + }); + + describe('#getFeature', () => { + it('should return a setting', () => { + expect(configState.getFeature('Chat.Enable')).toEqual( + CONFIG_STATE_DATA.features.values['Chat.Enable'], + ); + configState + .getFeature$('Chat.Enable') + .subscribe(data => expect(data).toEqual(CONFIG_STATE_DATA.features.values['Chat.Enable'])); + }); + }); + + describe('#getSetting', () => { + it('should return a setting', () => { + expect(configState.getSetting('Abp.Localization.DefaultLanguage')).toEqual( + CONFIG_STATE_DATA.setting.values['Abp.Localization.DefaultLanguage'], + ); + configState.getSetting$('Abp.Localization.DefaultLanguage').subscribe(data => { + expect(data).toEqual(CONFIG_STATE_DATA.setting.values['Abp.Localization.DefaultLanguage']); + }); + }); + }); + + describe('#getSettings', () => { + test.each` + keyword | expected + ${undefined} | ${CONFIG_STATE_DATA.setting.values} + ${'Localization'} | ${{ 'Abp.Localization.DefaultLanguage': 'en' }} + ${'X'} | ${{}} + ${'localization'} | ${{}} + `('should return $expected when keyword is given as $keyword', ({ keyword, expected }) => { + expect(configState.getSettings(keyword)).toEqual(expected); + configState.getSettings$(keyword).subscribe(data => expect(data).toEqual(expected)); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/container.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/container.strategy.spec.ts new file mode 100644 index 0000000000..e85e7b5a50 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/container.strategy.spec.ts @@ -0,0 +1,80 @@ +import { ViewContainerRef } from '@angular/core'; +import { + ClearContainerStrategy, + CONTAINER_STRATEGY, + InsertIntoContainerStrategy, +} from '../strategies'; + +describe('ClearContainerStrategy', () => { + const containerRef = ({ + clear: jest.fn(), + length: 7, + } as any) as ViewContainerRef; + + describe('#getIndex', () => { + it('should return 0', () => { + const strategy = new ClearContainerStrategy(containerRef); + expect(strategy.getIndex()).toBe(0); + }); + }); + + describe('#prepare', () => { + it('should call clear method of containerRef once', () => { + const strategy = new ClearContainerStrategy(containerRef); + strategy.prepare(); + expect(strategy.getIndex()).toBe(0); + expect(containerRef.clear).toHaveBeenCalledTimes(1); + }); + }); +}); + +describe('InsertIntoContainerStrategy', () => { + const containerRef = ({ + clear: jest.fn(), + length: 7, + } as any) as ViewContainerRef; + + describe('#getIndex', () => { + test.each` + index | expected + ${0} | ${0} + ${4} | ${4} + ${9} | ${7} + ${-1} | ${0} + ${Infinity} | ${7} + `( + 'should return $expected when index is given $index', + ({ index, expected }: { index: number; expected: number }) => { + const strategy = new InsertIntoContainerStrategy(containerRef, index); + expect(strategy.getIndex()).toBe(expected); + }, + ); + }); + + describe('#prepare', () => { + it('should not call clear method of containerRef', () => { + const strategy = new InsertIntoContainerStrategy(containerRef, 0); + strategy.prepare(); + expect(containerRef.clear).not.toHaveBeenCalled(); + }); + }); +}); + +describe('CONTAINER_STRATEGY', () => { + const containerRef = ({ + clear: jest.fn(), + length: 7, + } as any) as ViewContainerRef; + + test.each` + name | Strategy | index + ${'Clear'} | ${ClearContainerStrategy} | ${undefined} + ${'Append'} | ${InsertIntoContainerStrategy} | ${containerRef.length} + ${'Prepend'} | ${InsertIntoContainerStrategy} | ${0} + ${'Insert'} | ${InsertIntoContainerStrategy} | ${4} + `('should successfully map $name to $Strategy.name', ({ name, Strategy, index }) => { + expect(CONTAINER_STRATEGY[name](containerRef, index)).toEqual( + new Strategy(containerRef, index), + ); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content-projection.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content-projection.service.spec.ts new file mode 100644 index 0000000000..30f9f92e73 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content-projection.service.spec.ts @@ -0,0 +1,38 @@ +import { Component, ComponentRef, NgModule } from '@angular/core'; +import { createServiceFactory, SpectatorService } from '@ngneat/spectator'; +import { ContentProjectionService } from '../services'; +import { PROJECTION_STRATEGY } from '../strategies'; + +describe('ContentProjectionService', () => { + @Component({ template: '
bar
' }) + class TestComponent {} + + // createServiceFactory does not accept entryComponents directly + @NgModule({ + declarations: [TestComponent], + entryComponents: [TestComponent], + }) + class TestModule {} + + let componentRef: ComponentRef; + let spectator: SpectatorService; + const createService = createServiceFactory({ + service: ContentProjectionService, + imports: [TestModule], + }); + + beforeEach(() => (spectator = createService())); + + afterEach(() => componentRef.destroy()); + + describe('#projectContent', () => { + it('should call injectContent of given projectionStrategy and return what it returns', () => { + const strategy = PROJECTION_STRATEGY.AppendComponentToBody(TestComponent); + componentRef = spectator.service.projectContent(strategy); + const foo = document.querySelector('body > ng-component > div.foo'); + + expect(componentRef).toBeInstanceOf(ComponentRef); + expect(foo.textContent).toBe('bar'); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content-security.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content-security.strategy.spec.ts new file mode 100644 index 0000000000..701da5b756 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content-security.strategy.spec.ts @@ -0,0 +1,41 @@ +import { + CONTENT_SECURITY_STRATEGY, + LooseContentSecurityStrategy, + NoContentSecurityStrategy, +} from '../strategies'; +import { uuid } from '../utils'; + +describe('LooseContentSecurityStrategy', () => { + describe('#applyCSP', () => { + it('should set nonce attribute', () => { + const nonce = uuid(); + const strategy = new LooseContentSecurityStrategy(nonce); + const element = document.createElement('link'); + strategy.applyCSP(element); + + expect(element.getAttribute('nonce')).toBe(nonce); + }); + }); +}); + +describe('NoContentSecurityStrategy', () => { + describe('#applyCSP', () => { + it('should not set nonce attribute', () => { + const strategy = new NoContentSecurityStrategy(); + const element = document.createElement('link'); + strategy.applyCSP(element); + + expect(element.getAttribute('nonce')).toBeNull(); + }); + }); +}); + +describe('CONTENT_SECURITY_STRATEGY', () => { + test.each` + name | Strategy | nonce + ${'Loose'} | ${LooseContentSecurityStrategy} | ${uuid()} + ${'None'} | ${NoContentSecurityStrategy} | ${undefined} + `('should successfully map $name to $Strategy.name', ({ name, Strategy, nonce }) => { + expect(CONTENT_SECURITY_STRATEGY[name](nonce)).toEqual(new Strategy(nonce)); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content.strategy.spec.ts new file mode 100644 index 0000000000..e1a5ceb86e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content.strategy.spec.ts @@ -0,0 +1,82 @@ +import { + CONTENT_SECURITY_STRATEGY, + CONTENT_STRATEGY, + DOM_STRATEGY, + ScriptContentStrategy, + StyleContentStrategy, +} from '../strategies'; +import { uuid } from '../utils'; + +describe('StyleContentStrategy', () => { + describe('#createElement', () => { + it('should create a style element', () => { + const strategy = new StyleContentStrategy(''); + const element = strategy.createElement(); + + expect(element.tagName).toBe('STYLE'); + }); + }); + + describe('#insertElement', () => { + it('should use given dom and content security strategies', () => { + const domStrategy = DOM_STRATEGY.PrependToHead(); + const contentSecurityStrategy = CONTENT_SECURITY_STRATEGY.None(); + + contentSecurityStrategy.applyCSP = jest.fn((el: HTMLScriptElement) => {}); + domStrategy.insertElement = jest.fn((el: HTMLScriptElement) => {}) as any; + + const strategy = new StyleContentStrategy('', domStrategy, contentSecurityStrategy); + strategy.createElement(); + const element = strategy.insertElement(); + + expect(contentSecurityStrategy.applyCSP).toHaveBeenCalledWith(element); + expect(domStrategy.insertElement).toHaveBeenCalledWith(element); + }); + }); +}); + +describe('ScriptContentStrategy', () => { + describe('#createElement', () => { + it('should create a style element', () => { + const nonce = uuid(); + const strategy = new ScriptContentStrategy(''); + const element = strategy.createElement(); + + expect(element.tagName).toBe('SCRIPT'); + }); + }); + + describe('#insertElement', () => { + it('should use given dom and content security strategies', () => { + const nonce = uuid(); + + const domStrategy = DOM_STRATEGY.PrependToHead(); + const contentSecurityStrategy = CONTENT_SECURITY_STRATEGY.Loose(nonce); + + contentSecurityStrategy.applyCSP = jest.fn((el: HTMLScriptElement) => {}); + domStrategy.insertElement = jest.fn((el: HTMLScriptElement) => {}) as any; + + const strategy = new ScriptContentStrategy('', domStrategy, contentSecurityStrategy); + const element = strategy.createElement(); + strategy.insertElement(); + + expect(contentSecurityStrategy.applyCSP).toHaveBeenCalledWith(element); + expect(domStrategy.insertElement).toHaveBeenCalledWith(element); + }); + }); +}); + +describe('CONTENT_STRATEGY', () => { + test.each` + name | Strategy | domStrategy + ${'AppendScriptToBody'} | ${ScriptContentStrategy} | ${'AppendToBody'} + ${'AppendScriptToHead'} | ${ScriptContentStrategy} | ${'AppendToHead'} + ${'AppendStyleToHead'} | ${StyleContentStrategy} | ${'AppendToHead'} + ${'PrependStyleToHead'} | ${StyleContentStrategy} | ${'PrependToHead'} + `( + 'should successfully map $name to $Strategy.name with $domStrategy dom strategy', + ({ name, Strategy, domStrategy }) => { + expect(CONTENT_STRATEGY[name]('')).toEqual(new Strategy('', DOM_STRATEGY[domStrategy]())); + }, + ); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/context.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/context.strategy.spec.ts new file mode 100644 index 0000000000..461c397457 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/context.strategy.spec.ts @@ -0,0 +1,79 @@ +import { ComponentRef } from '@angular/core'; +import { + ComponentContextStrategy, + CONTEXT_STRATEGY, + NoContextStrategy, + TemplateContextStrategy, +} from '../strategies'; +import { uuid } from '../utils'; + +describe('ComponentContextStrategy', () => { + describe('#setContext', () => { + let componentRef: ComponentRef; + + beforeEach( + () => + (componentRef = { + instance: { + x: '', + y: '', + z: '', + }, + changeDetectorRef: { + detectChanges: jest.fn(), + }, + } as any), + ); + + test.each` + props | values + ${['x']} | ${[uuid()]} + ${['x', 'y']} | ${[uuid(), uuid()]} + ${['x', 'y', 'z']} | ${[uuid(), uuid(), uuid()]} + `( + 'should set $props as $values and call detectChanges once', + ({ props, values }: { props: string[]; values: string[] }) => { + const context = {}; + props.forEach((prop, i) => { + context[prop] = values[i]; + }); + + const strategy = new ComponentContextStrategy(context); + strategy.setContext(componentRef); + + expect(props.every(prop => componentRef.instance[prop] === context[prop])).toBe(true); + expect(componentRef.changeDetectorRef.detectChanges).toHaveBeenCalledTimes(1); + }, + ); + }); +}); + +describe('NoContextStrategy', () => { + describe('#setContext', () => { + it('should return undefined', () => { + const strategy = new NoContextStrategy(); + expect(strategy.setContext(null)).toBeUndefined(); + }); + }); +}); + +describe('TemplateContextStrategy', () => { + describe('#setContext', () => { + it('should return context', () => { + const context = { x: uuid() }; + const strategy = new TemplateContextStrategy(context); + expect(strategy.setContext()).toEqual(context); + }); + }); +}); + +describe('CONTEXT_STRATEGY', () => { + test.each` + name | Strategy + ${'Component'} | ${ComponentContextStrategy} + ${'None'} | ${NoContextStrategy} + ${'Template'} | ${TemplateContextStrategy} + `('should successfully map $name to $Strategy.name', ({ name, Strategy }) => { + expect(CONTEXT_STRATEGY[name](undefined)).toEqual(new Strategy(undefined)); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/cross-origin.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/cross-origin.strategy.spec.ts new file mode 100644 index 0000000000..25cc6f0c93 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/cross-origin.strategy.spec.ts @@ -0,0 +1,38 @@ +import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from '../strategies'; +import { uuid } from '../utils'; + +describe('CrossOriginStrategy', () => { + describe('#setCrossOrigin', () => { + it('should set crossorigin attribute', () => { + const strategy = new CrossOriginStrategy('use-credentials'); + const element = document.createElement('link'); + strategy.setCrossOrigin(element); + + expect(element.crossOrigin).toBe('use-credentials'); + }); + + it('should set integrity attribute when given', () => { + const integrity = uuid(); + const strategy = new CrossOriginStrategy('anonymous', integrity); + const element = document.createElement('link'); + strategy.setCrossOrigin(element); + + expect(element.crossOrigin).toBe('anonymous'); + expect(element.getAttribute('integrity')).toBe(integrity); + }); + }); +}); + +describe('CROSS_ORIGIN_STRATEGY', () => { + test.each` + name | integrity | crossOrigin + ${'Anonymous'} | ${undefined} | ${'anonymous'} + ${'Anonymous'} | ${uuid()} | ${'anonymous'} + ${'UseCredentials'} | ${undefined} | ${'use-credentials'} + ${'UseCredentials'} | ${uuid()} | ${'use-credentials'} + `('should successfully map $name to CrossOriginStrategy', ({ name, integrity, crossOrigin }) => { + expect(CROSS_ORIGIN_STRATEGY[name](integrity)).toEqual( + new CrossOriginStrategy(crossOrigin, integrity), + ); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/date-extensions.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/date-extensions.spec.ts new file mode 100644 index 0000000000..3d743ae003 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/date-extensions.spec.ts @@ -0,0 +1,17 @@ +import '../utils/date-extensions'; + +describe('DateExtensions', () => { + describe('#toLocalISOString', () => { + test('should able to use as date prototype', () => { + new Date().toLocalISOString(); + }); + + test('should return correct value', () => { + const now = new Date(); + const timezoneOffset = now.getTimezoneOffset(); + expect(now.toLocalISOString()).toEqual( + new Date(now.getTime() - timezoneOffset * 60000).toISOString(), + ); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/date-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/date-utils.spec.ts new file mode 100644 index 0000000000..0bfebd2bcb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/date-utils.spec.ts @@ -0,0 +1,50 @@ +import { ConfigStateService } from '../services'; +import { getShortDateFormat, getShortTimeFormat, getShortDateShortTimeFormat } from '../utils'; + +const dateTimeFormat = { + calendarAlgorithmType: 'SolarCalendar', + dateSeparator: '/', + dateTimeFormatLong: 'dddd, MMMM d, yyyy', + fullDateTimePattern: 'dddd, MMMM d, yyyy h:mm:ss tt', + longTimePattern: 'h:mm:ss tt', + shortDatePattern: 'M/d/yyyy', + shortTimePattern: 'h:mm tt', +}; + +describe('Date Utils', () => { + let config: ConfigStateService; + + beforeEach(() => { + config = new ConfigStateService(null); + }); + + describe('#getShortDateFormat', () => { + test('should get the short date format from ConfigState and return it', () => { + const getDeepSpy = jest.spyOn(config, 'getDeep'); + getDeepSpy.mockReturnValueOnce(dateTimeFormat); + + expect(getShortDateFormat(config)).toBe('M/d/yyyy'); + expect(getDeepSpy).toHaveBeenCalledWith('localization.currentCulture.dateTimeFormat'); + }); + }); + + describe('#getShortTimeFormat', () => { + test('should get the short time format from ConfigState and return it', () => { + const getDeepSpy = jest.spyOn(config, 'getDeep'); + getDeepSpy.mockReturnValueOnce(dateTimeFormat); + + expect(getShortTimeFormat(config)).toBe('h:mm a'); + expect(getDeepSpy).toHaveBeenCalledWith('localization.currentCulture.dateTimeFormat'); + }); + }); + + describe('#getShortDateShortTimeFormat', () => { + test('should get the short date time format from ConfigState and return it', () => { + const getDeepSpy = jest.spyOn(config, 'getDeep'); + getDeepSpy.mockReturnValueOnce(dateTimeFormat); + + expect(getShortDateShortTimeFormat(config)).toBe('M/d/yyyy h:mm a'); + expect(getDeepSpy).toHaveBeenCalledWith('localization.currentCulture.dateTimeFormat'); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/debounce.directive.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/debounce.directive.spec.ts new file mode 100644 index 0000000000..0cf931dd61 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/debounce.directive.spec.ts @@ -0,0 +1,40 @@ +import { createDirectiveFactory, SpectatorDirective } from '@ngneat/spectator/jest'; +import { InputEventDebounceDirective } from '../directives/debounce.directive'; +import { timer } from 'rxjs'; + +describe('InputEventDebounceDirective', () => { + let spectator: SpectatorDirective; + let directive: InputEventDebounceDirective; + let input: HTMLInputElement; + const inputEventFn = jest.fn(() => {}); + + const createDirective = createDirectiveFactory({ + directive: InputEventDebounceDirective, + }); + + beforeEach(() => { + spectator = createDirective('', { + hostProps: { inputEventFn }, + }); + directive = spectator.directive; + input = spectator.query('input'); + inputEventFn.mockClear(); + }); + + test('should be created', () => { + expect(directive).toBeTruthy(); + }); + + test('should have 20ms debounce time', () => { + expect(directive.debounce).toBe(20); + }); + + test('should call fromEvent with target element and target event', done => { + spectator.dispatchFakeEvent('input', 'input', true); + timer(0).subscribe(() => expect(inputEventFn).not.toHaveBeenCalled()); + timer(21).subscribe(() => { + expect(inputEventFn).toHaveBeenCalled(); + done(); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dom-insertion.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dom-insertion.service.spec.ts new file mode 100644 index 0000000000..aee2b3d9dc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dom-insertion.service.spec.ts @@ -0,0 +1,63 @@ +import { createServiceFactory, SpectatorService } from '@ngneat/spectator'; +import { DomInsertionService } from '../services'; +import { CONTENT_STRATEGY } from '../strategies'; + +describe('DomInsertionService', () => { + let styleElements: NodeListOf; + let spectator: SpectatorService; + const createService = createServiceFactory(DomInsertionService); + const content = '.test {}'; + + beforeEach(() => (spectator = createService())); + + afterEach(() => (document.head.innerHTML = '')); + + describe('#insertContent', () => { + it('should be able to insert given content', () => { + spectator.service.insertContent(CONTENT_STRATEGY.AppendStyleToHead(content)); + styleElements = document.head.querySelectorAll('style'); + expect(styleElements.length).toBe(1); + expect(styleElements[0].textContent).toBe(content); + }); + + it('should set a hash for the inserted content', () => { + spectator.service.insertContent(CONTENT_STRATEGY.AppendStyleToHead(content)); + expect(spectator.service.has(content)).toBe(true); + }); + + it('should insert only once', () => { + expect(spectator.service.has(content)).toBe(false); + + spectator.service.insertContent(CONTENT_STRATEGY.AppendStyleToHead(content)); + styleElements = document.head.querySelectorAll('style'); + + expect(styleElements.length).toBe(1); + expect(styleElements[0].textContent).toBe(content); + expect(spectator.service.has(content)).toBe(true); + + spectator.service.insertContent(CONTENT_STRATEGY.AppendStyleToHead(content)); + styleElements = document.head.querySelectorAll('style'); + + expect(styleElements.length).toBe(1); + expect(styleElements[0].textContent).toBe(content); + expect(spectator.service.has(content)).toBe(true); + }); + + it('should return inserted element', () => { + const element = spectator.service.insertContent(CONTENT_STRATEGY.AppendStyleToHead(content)); + expect(element.tagName).toBe('STYLE'); + }); + }); + + describe('#removeContent', () => { + it('should remove inserted element and the hash for the content', () => { + expect(document.head.querySelector('style')).toBeNull(); + const element = spectator.service.insertContent(CONTENT_STRATEGY.AppendStyleToHead(content)); + expect(spectator.service.has(content)).toBe(true); + + spectator.service.removeContent(element); + expect(spectator.service.has(content)).toBe(false); + expect(document.head.querySelector('style')).toBeNull(); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dom.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dom.strategy.spec.ts new file mode 100644 index 0000000000..e82eac52ad --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dom.strategy.spec.ts @@ -0,0 +1,49 @@ +import { DomStrategy, DOM_STRATEGY } from '../strategies'; + +describe('DomStrategy', () => { + describe('#insertElement', () => { + it('should append element to head by default', () => { + const strategy = new DomStrategy(); + const element = document.createElement('script'); + strategy.insertElement(element); + + expect(document.head.lastChild).toBe(element); + }); + + it('should append element to body when body is given as target', () => { + const strategy = new DomStrategy(document.body); + const element = document.createElement('script'); + strategy.insertElement(element); + + expect(document.body.lastChild).toBe(element); + }); + + it('should prepend to head when position is given as "afterbegin"', () => { + const strategy = new DomStrategy(undefined, 'afterbegin'); + const element = document.createElement('script'); + strategy.insertElement(element); + + expect(document.head.firstChild).toBe(element); + }); + }); +}); + +describe('DOM_STRATEGY', () => { + const div = document.createElement('DIV'); + + beforeEach(() => { + document.body.innerHTML = ''; + document.body.appendChild(div); + }); + + test.each` + name | target | position + ${'AfterElement'} | ${div} | ${'afterend'} + ${'AppendToBody'} | ${document.body} | ${'beforeend'} + ${'AppendToHead'} | ${document.head} | ${'beforeend'} + ${'BeforeElement'} | ${div} | ${'beforebegin'} + ${'PrependToHead'} | ${document.head} | ${'afterbegin'} + `('should successfully map $name to CrossOriginStrategy', ({ name, target, position }) => { + expect(DOM_STRATEGY[name](target)).toEqual(new DomStrategy(target, position)); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dynamic-layout.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dynamic-layout.component.spec.ts new file mode 100644 index 0000000000..ba4fd361c2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dynamic-layout.component.spec.ts @@ -0,0 +1,203 @@ +import { HttpClient } from '@angular/common/http'; +import { Component, NgModule } from '@angular/core'; +import { ActivatedRoute, RouterModule } from '@angular/router'; +import { createRoutingFactory, SpectatorRouting } from '@ngneat/spectator/jest'; +import { DynamicLayoutComponent, RouterOutletComponent } from '../components'; +import { eLayoutType } from '../enums/common'; +import { ABP } from '../models'; +import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; +import { ReplaceableComponentsService, RoutesService } from '../services'; +import { mockRoutesService } from './routes.service.spec'; + +@Component({ + selector: 'abp-layout-application', + template: '', +}) +class DummyApplicationLayoutComponent {} + +@Component({ + selector: 'abp-layout-account', + template: '', +}) +class DummyAccountLayoutComponent {} + +@Component({ + selector: 'abp-layout-empty', + template: '', +}) +class DummyEmptyLayoutComponent {} + +const LAYOUTS = [ + DummyApplicationLayoutComponent, + DummyAccountLayoutComponent, + DummyEmptyLayoutComponent, +]; + +@NgModule({ + imports: [RouterModule], + declarations: [...LAYOUTS], + entryComponents: [...LAYOUTS], +}) +class DummyLayoutModule {} + +@Component({ + selector: 'abp-dummy', + template: '{{route.snapshot.data?.name}} works!', +}) +class DummyComponent { + constructor(public route: ActivatedRoute) {} +} + +const routes: ABP.Route[] = [ + { + path: '', + name: 'Root', + }, + { + path: '/parentWithLayout', + name: 'ParentWithLayout', + parentName: 'Root', + layout: eLayoutType.application, + }, + { + path: '/parentWithLayout/childWithoutLayout', + name: 'ChildWithoutLayout', + parentName: 'ParentWithLayout', + }, + { + path: '/parentWithLayout/childWithLayout', + name: 'ChildWithLayout', + parentName: 'ParentWithLayout', + layout: eLayoutType.account, + }, + { + path: '/withData', + name: 'WithData', + layout: eLayoutType.application, + }, +]; + +describe('DynamicLayoutComponent', () => { + const createComponent = createRoutingFactory({ + component: RouterOutletComponent, + stubsEnabled: false, + declarations: [DummyComponent, DynamicLayoutComponent], + mocks: [AbpApplicationConfigurationService, HttpClient], + providers: [ + { + provide: RoutesService, + useFactory: () => mockRoutesService(), + }, + ReplaceableComponentsService, + ], + imports: [RouterModule, DummyLayoutModule], + routes: [ + { path: '', component: RouterOutletComponent }, + { + path: 'parentWithLayout', + component: DynamicLayoutComponent, + children: [ + { + path: 'childWithoutLayout', + component: DummyComponent, + data: { name: 'childWithoutLayout' }, + }, + { + path: 'childWithLayout', + component: DummyComponent, + data: { name: 'childWithLayout' }, + }, + ], + }, + { + path: 'withData', + component: DynamicLayoutComponent, + children: [ + { + path: '', + component: DummyComponent, + data: { name: 'withData' }, + }, + ], + data: { layout: eLayoutType.empty }, + }, + { + path: 'withoutLayout', + component: DynamicLayoutComponent, + children: [ + { + path: '', + component: DummyComponent, + data: { name: 'withoutLayout' }, + }, + ], + data: { layout: null }, + }, + ], + }); + + let spectator: SpectatorRouting; + let replaceableComponents: ReplaceableComponentsService; + + beforeEach(async () => { + spectator = createComponent(); + replaceableComponents = spectator.inject(ReplaceableComponentsService); + const routesService = spectator.inject(RoutesService); + routesService.add(routes); + + replaceableComponents.add({ + key: 'Theme.ApplicationLayoutComponent', + component: DummyApplicationLayoutComponent, + }); + replaceableComponents.add({ + key: 'Theme.AccountLayoutComponent', + component: DummyAccountLayoutComponent, + }); + replaceableComponents.add({ + key: 'Theme.EmptyLayoutComponent', + component: DummyEmptyLayoutComponent, + }); + }); + + it('should handle application layout from parent abp route and display it', async () => { + spectator.router.navigateByUrl('/parentWithLayout/childWithoutLayout'); + await spectator.fixture.whenStable(); + spectator.detectComponentChanges(); + expect(spectator.query('abp-dynamic-layout')).toBeTruthy(); + expect(spectator.query('abp-layout-application')).toBeTruthy(); + }); + + it('should handle account layout from own property and display it', async () => { + spectator.router.navigateByUrl('/parentWithLayout/childWithLayout'); + await spectator.fixture.whenStable(); + spectator.detectComponentChanges(); + expect(spectator.query('abp-layout-account')).toBeTruthy(); + }); + + it('should handle empty layout from route data and display it', async () => { + spectator.router.navigateByUrl('/withData'); + await spectator.fixture.whenStable(); + spectator.detectComponentChanges(); + expect(spectator.query('abp-layout-empty')).toBeTruthy(); + }); + + it('should display empty layout when layout is null', async () => { + spectator.router.navigateByUrl('/withoutLayout'); + await spectator.fixture.whenStable(); + spectator.detectComponentChanges(); + expect(spectator.query('abp-layout-empty')).toBeTruthy(); + }); + + it('should not display any layout when layouts are empty', async () => { + const spy = jest.spyOn(replaceableComponents, 'get'); + spy.mockReturnValue(null); + spectator.detectChanges(); + + spectator.router.navigateByUrl('/withoutLayout'); + await spectator.fixture.whenStable(); + spectator.detectComponentChanges(); + + expect(spectator.query('abp-layout-empty')).toBeFalsy(); + expect(spectator.query('abp-dynamic-layout').children[0].tagName).toEqual('ROUTER-OUTLET'); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/environment-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/environment-utils.spec.ts new file mode 100644 index 0000000000..885f02437b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/environment-utils.spec.ts @@ -0,0 +1,99 @@ +import { HttpClient } from '@angular/common/http'; +import { Component, Injector } from '@angular/core'; +import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; +import { BehaviorSubject } from 'rxjs'; +import { Environment, RemoteEnv } from '../models/environment'; +import { EnvironmentService } from '../services'; +import { getRemoteEnv } from '../utils/environment-utils'; +import { deepMerge } from '../utils/object-utils'; + +@Component({ + selector: 'abp-dummy', + template: '', +}) +export class DummyComponent {} + +describe('EnvironmentUtils', () => { + let spectator: Spectator; + const createComponent = createComponentFactory({ + component: DummyComponent, + mocks: [EnvironmentService, HttpClient], + }); + + beforeEach(() => (spectator = createComponent())); + + describe('#getRemoteEnv', () => { + const environment: Environment = { + production: false, + hmr: false, + application: { + baseUrl: 'https://volosoft.com', + name: 'MyProjectName', + logoUrl: '', + }, + remoteEnv: { url: '/assets/appsettings.json', mergeStrategy: 'deepmerge' }, + oAuthConfig: { + issuer: 'https://api.volosoft.com', + clientId: 'MyProjectName_App', + dummyClientSecret: '1q2w3e*', + scope: 'MyProjectName', + oidc: false, + requireHttps: true, + }, + apis: { + default: { + url: 'https://api.volosoft.com', + }, + }, + }; + + const customEnv = { + application: { + baseUrl: 'https://custom-volosoft.com', + name: 'Custom-MyProjectName', + logoUrl: 'https://logourl/', + }, + apis: { + default: { + url: 'https://test-api.volosoft.com', + }, + }, + }; + + const someEnv = { apiUrl: 'https://some-api-url' } as any; + const customFn = (_, __) => someEnv; + + test.each` + case | strategy | expected + ${'null'} | ${null} | ${customEnv} + ${'undefined'} | ${undefined} | ${customEnv} + ${'overwrite'} | ${'overwrite'} | ${customEnv} + ${'deepmerge'} | ${'deepmerge'} | ${deepMerge(environment, customEnv)} + ${'customFn'} | ${customFn} | ${someEnv} + `( + 'should call the remoteEnv URL and dispatch the SetEnvironment action for case $case ', + ({ strategy, expected }) => setupTestAndRun({ mergeStrategy: strategy }, expected), + ); + + function setupTestAndRun(strategy: Pick, expectedValue) { + const injector = spectator.inject(Injector); + const injectorSpy = jest.spyOn(injector, 'get'); + const http = spectator.inject(HttpClient); + const requestSpy = jest.spyOn(http, 'request'); + const environmentService = spectator.inject(EnvironmentService); + const setStateSpy = jest.spyOn(environmentService, 'setState'); + + injectorSpy.mockReturnValueOnce(environmentService); + injectorSpy.mockReturnValueOnce(http); + injectorSpy.mockReturnValueOnce({}); + + requestSpy.mockReturnValue(new BehaviorSubject(customEnv)); + + environment.remoteEnv.mergeStrategy = strategy.mergeStrategy; + getRemoteEnv(injector, environment); + + expect(requestSpy).toHaveBeenCalledWith('GET', '/assets/appsettings.json', { headers: {} }); + expect(setStateSpy).toHaveBeenCalledWith(expectedValue); + } + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/environment.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/environment.service.spec.ts new file mode 100644 index 0000000000..95c2b58a6c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/environment.service.spec.ts @@ -0,0 +1,83 @@ +import { waitForAsync } from '@angular/core/testing'; +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { Environment } from '../models'; +import { EnvironmentService } from '../services'; + +export const ENVIRONMENT_DATA = ({ + production: false, + application: { + name: 'MyProjectName', + }, + oAuthConfig: { + issuer: 'https://localhost:44305', + }, + apis: { + default: { + url: 'https://localhost:44305', + }, + other: { + url: 'https://localhost:44306', + }, + yetAnother: {}, + }, + localization: { + defaultResourceName: 'MyProjectName', + }, +} as any) as Environment; + +describe('ConfigState', () => { + let spectator: SpectatorService; + let environment: EnvironmentService; + + const createService = createServiceFactory({ + service: EnvironmentService, + }); + + beforeEach(() => { + spectator = createService(); + environment = spectator.service; + + environment.setState(ENVIRONMENT_DATA); + }); + + describe('#getEnvironment', () => { + it( + 'should return ENVIRONMENT_DATA', + waitForAsync(() => { + expect(environment.getEnvironment()).toEqual(ENVIRONMENT_DATA); + environment.getEnvironment$().subscribe(data => expect(data).toEqual(ENVIRONMENT_DATA)); + }), + ); + }); + + describe('#getApiUrl', () => { + it( + 'should return api url', + waitForAsync(() => { + expect(environment.getApiUrl()).toEqual(ENVIRONMENT_DATA.apis.default.url); + environment + .getApiUrl$('other') + .subscribe(data => expect(data).toEqual(ENVIRONMENT_DATA.apis.other.url)); + environment + .getApiUrl$('yetAnother') + .subscribe(data => expect(data).toEqual(ENVIRONMENT_DATA.apis.default.url)); + }), + ); + }); + + // TODO: create permission.service.spec.ts + // describe('#getGrantedPolicy', () => { + // it('should return a granted policy', () => { + // expect(ConfigState.getGrantedPolicy('Abp.Identity')(CONFIG_STATE_DATA)).toBe(false); + // expect(ConfigState.getGrantedPolicy('Abp.Identity || Abp.Account')(CONFIG_STATE_DATA)).toBe( + // true, + // ); + // expect(ConfigState.getGrantedPolicy('Abp.Account && Abp.Identity')(CONFIG_STATE_DATA)).toBe( + // false, + // ); + // expect(ConfigState.getGrantedPolicy('Abp.Account &&')(CONFIG_STATE_DATA)).toBe(false); + // expect(ConfigState.getGrantedPolicy('|| Abp.Account')(CONFIG_STATE_DATA)).toBe(false); + // expect(ConfigState.getGrantedPolicy('')(CONFIG_STATE_DATA)).toBe(true); + // }); + // }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/factory-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/factory-utils.spec.ts new file mode 100644 index 0000000000..06e8a8d044 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/factory-utils.spec.ts @@ -0,0 +1,38 @@ +import { Injector, ModuleWithProviders, NgModule } from '@angular/core'; +import { TestBed } from '@angular/core/testing'; +import { LazyModuleFactory } from '../utils/factory-utils'; + +@NgModule() +class Module { + static forChild(): ModuleWithProviders { + return { + ngModule: Module, + providers: [{ provide: 'foo', useValue: 'bar' }], + }; + } +} + +describe('LazyModuleFactory', () => { + const factory = new LazyModuleFactory(Module.forChild()); + + describe('#moduleType', () => { + it('should return the ngModule property of given ModuleWithProviders', () => { + expect(factory.moduleType).toBe(Module); + }); + }); + + describe('#create', () => { + it('should return an instance of NgModuleRef_', () => { + TestBed.configureTestingModule({}); + + const injector = TestBed.inject(Injector); + const moduleRef = factory.create(injector); + + expect('componentFactoryResolver' in moduleRef).toBe(true); + expect('destroy' in moduleRef).toBe(true); + expect('injector' in moduleRef).toBe(true); + expect('instance' in moduleRef).toBe(true); + expect('onDestroy' in moduleRef).toBe(true); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/for.directive.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/for.directive.spec.ts new file mode 100644 index 0000000000..1405935b62 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/for.directive.spec.ts @@ -0,0 +1,191 @@ +import { SpectatorDirective, createDirectiveFactory } from '@ngneat/spectator/jest'; +import { ForDirective } from '../directives/for.directive'; +import { uuid } from '../utils'; + +describe('ForDirective', () => { + let spectator: SpectatorDirective; + let directive: ForDirective; + const items = [0, 1, 2, 3, 4, 5]; + const createDirective = createDirectiveFactory({ + directive: ForDirective, + }); + + describe('basic', () => { + beforeEach(() => { + spectator = createDirective('
  • {{ item }}
', { + hostProps: { items }, + }); + directive = spectator.directive; + }); + + test('should be created', () => { + expect(directive).toBeTruthy(); + }); + + test('should be iterated', () => { + const elements = spectator.queryAll('li'); + + expect(elements[3]).toHaveText('3'); + expect(elements).toHaveLength(6); + }); + + test('should sync the DOM when change items', () => { + (spectator.hostComponent as any).items = [10, 11, 12]; + spectator.detectChanges(); + const elements = spectator.queryAll('li'); + + expect(elements[1]).toHaveText('11'); + expect(elements).toHaveLength(3); + }); + + test('should sync the DOM when add an item', () => { + (spectator.hostComponent as any).items = [...items, 6]; + spectator.detectChanges(); + const elements = spectator.queryAll('li'); + + expect(elements[6]).toHaveText('6'); + expect(elements).toHaveLength(7); + }); + }); + + describe('trackBy', () => { + const trackByFn = (_, item) => item; + beforeEach(() => { + spectator = createDirective('
  • {{ item }}
', { + hostProps: { items, trackByFn }, + }); + directive = spectator.directive; + }); + + test('should be setted the trackBy', () => { + expect(directive.trackBy).toEqual(trackByFn); + }); + }); + + describe('with basic order', () => { + beforeEach(() => { + spectator = createDirective( + `
    +
  • + {{ item }} +
  • +
`, + ); + directive = spectator.directive; + }); + + test('should order by asc', () => { + const elements = spectator.queryAll('li'); + expect(elements.map(el => el.textContent.trim())).toEqual(['2', '3', '6']); + }); + }); + + describe('with order', () => { + beforeEach(() => { + spectator = createDirective( + `
    +
  • + {{ item.value }} +
  • +
`, + { + hostProps: { orderDir: 'ASC' }, + }, + ); + directive = spectator.directive; + }); + + test('should order by asc', () => { + const elements = spectator.queryAll('li'); + expect(elements.map(el => el.textContent.trim())).toEqual(['2', '3', '6']); + }); + + test('should order by desc', () => { + (spectator.hostComponent as any).orderDir = 'DESC'; + spectator.detectChanges(); + + const elements = spectator.queryAll('li'); + expect(elements.map(el => el.textContent.trim())).toEqual(['6', '3', '2']); + }); + }); + + describe('with filter', () => { + beforeEach(() => { + spectator = createDirective( + `
    +
  • + {{ item.value }} +
  • +
`, + { + hostProps: { filterVal: '' }, + }, + ); + directive = spectator.directive; + }); + + test('should not filter when filterVal is empty,', () => { + const elements = spectator.queryAll('li'); + expect(elements.map(el => el.textContent.trim())).toEqual(['test', 'abp', 'volo']); + }); + + test('should be filtered', () => { + (spectator.hostComponent as any).filterVal = 'volo'; + spectator.detectChanges(); + + expect(spectator.query('li')).toHaveText('volo'); + }); + + test('should not show an element when filter value not match to any text', () => { + (spectator.hostComponent as any).filterVal = 'volos'; + spectator.detectChanges(); + + const elements = spectator.queryAll('li'); + expect(elements).toHaveLength(0); + }); + }); + + describe('with empty ref', () => { + beforeEach(() => { + spectator = createDirective( + `
    +
  • + {{ item.value }} +
  • + + No records found +
`, + { + hostProps: { items: [] }, + }, + ); + directive = spectator.directive; + }); + + test('should display the empty ref', () => { + expect(spectator.query('ul')).toHaveText('No records found'); + expect(spectator.queryAll('li')).toHaveLength(0); + }); + + test('should not display the empty ref', () => { + expect(spectator.query('ul')).toHaveText('No records found'); + expect(spectator.queryAll('li')).toHaveLength(0); + + (spectator.hostComponent as any).items = [0]; + spectator.detectChanges(); + + expect(spectator.query('ul')).not.toHaveText('No records found'); + expect(spectator.queryAll('li')).toHaveLength(1); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/form-submit.directive.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/form-submit.directive.spec.ts new file mode 100644 index 0000000000..094a41d4a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/form-submit.directive.spec.ts @@ -0,0 +1,46 @@ +import { createDirectiveFactory, SpectatorDirective } from '@ngneat/spectator/jest'; +import { FormSubmitDirective } from '../directives/form-submit.directive'; +import { FormsModule, ReactiveFormsModule, FormGroup } from '@angular/forms'; +import { timer } from 'rxjs'; + +describe('FormSubmitDirective', () => { + let spectator: SpectatorDirective; + let directive: FormSubmitDirective; + + const formGroup = new FormGroup({}); + const submitEventFn = jest.fn(() => {}); + + const createDirective = createDirectiveFactory({ + directive: FormSubmitDirective, + imports: [FormsModule, ReactiveFormsModule], + }); + + beforeEach(() => { + spectator = createDirective( + '
form content
', + { + hostProps: { + submitEventFn, + formGroup, + }, + }, + ); + directive = spectator.directive; + }); + + test('should be created', () => { + expect(directive).toBeTruthy(); + }); + + test('should have 20ms debounce time', () => { + expect(directive.debounce).toBe(20); + }); + + test('should dispatch submit event on keyup event triggered after given debounce time', done => { + spectator.dispatchKeyboardEvent('form', 'keyup', 'Enter'); + timer(directive.debounce + 10).subscribe(() => { + expect(submitEventFn).toHaveBeenCalled(); + done(); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/form-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/form-utils.spec.ts new file mode 100644 index 0000000000..02e20a5c04 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/form-utils.spec.ts @@ -0,0 +1,30 @@ +import { mapEnumToOptions } from '../utils/form-utils'; + +enum SomeEnum { + NotApplicable = 'N/A', + Foo = 0, + Bar, +} + +describe('Form Utils', () => { + describe('#mapEnumToOptions', () => { + it('should return options from enum', () => { + const options = mapEnumToOptions(SomeEnum); + + expect(options).toEqual([ + { + key: 'NotApplicable', + value: SomeEnum.NotApplicable, + }, + { + key: 'Foo', + value: SomeEnum.Foo, + }, + { + key: 'Bar', + value: SomeEnum.Bar, + }, + ]); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/generator-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/generator-utils.spec.ts new file mode 100644 index 0000000000..841d9e6d35 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/generator-utils.spec.ts @@ -0,0 +1,42 @@ +import { generateHash, generatePassword } from '../utils'; + +describe('GeneratorUtils', () => { + describe('#generateHash', () => { + test('should generate a hash', async () => { + const hash = generateHash('some content \n with second line'); + expect(hash).toBe(1112440527); + }); + }); + + describe('#generatePassword', () => { + const lowers = 'abcdefghijklmnopqrstuvwxyz'; + const uppers = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + const numbers = '0123456789'; + const specials = '!@#$%&*()_+{}<>?[]./'; + + test.each` + name | charSet | passedPasswordLength | actualPasswordLength + ${'lower'} | ${lowers} | ${Infinity} | ${128} + ${'lower'} | ${lowers} | ${129} | ${128} + ${'lower'} | ${lowers} | ${10} | ${10} + ${'lower'} | ${lowers} | ${7} | ${7} + ${'upper'} | ${uppers} | ${6} | ${6} + ${'number'} | ${numbers} | ${5} | ${5} + ${'special'} | ${specials} | ${4} | ${4} + ${'special'} | ${specials} | ${2} | ${4} + ${'special'} | ${specials} | ${0} | ${4} + ${'special'} | ${specials} | ${undefined} | ${8} + `( + 'should have a $name in the password that length is $passwordLength', + ({ _, charSet, passedPasswordLength, actualPasswordLength }) => { + const password = generatePassword(passedPasswordLength); + expect(password).toHaveLength(actualPasswordLength); + expect(hasChar(charSet, password)).toBe(true); + }, + ); + }); +}); + +function hasChar(charSet: string, password: string): boolean { + return charSet.split('').some(char => password.indexOf(char) > -1); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/initial-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/initial-utils.spec.ts new file mode 100644 index 0000000000..60569180d1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/initial-utils.spec.ts @@ -0,0 +1,116 @@ +import { Component, Injector } from '@angular/core'; +import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; +import { OAuthService } from 'angular-oauth2-oidc'; +import { of } from 'rxjs'; +import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; +import { ApplicationConfigurationDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; +import { + AuthService, + ConfigStateService, + EnvironmentService, + SessionStateService, +} from '../services'; +import * as AuthFlowStrategy from '../strategies/auth-flow.strategy'; +import { CORE_OPTIONS } from '../tokens/options.token'; +import { checkAccessToken, getInitialData, localeInitializer } from '../utils'; +import * as environmentUtils from '../utils/environment-utils'; +import * as multiTenancyUtils from '../utils/multi-tenancy-utils'; + +const environment = { oAuthConfig: { issuer: 'test' } }; + +@Component({ + selector: 'abp-dummy', + template: '', +}) +export class DummyComponent {} + +describe('InitialUtils', () => { + let spectator: Spectator; + const createComponent = createComponentFactory({ + component: DummyComponent, + mocks: [ + EnvironmentService, + ConfigStateService, + AbpApplicationConfigurationService, + AuthService, + OAuthService, + SessionStateService, + ], + providers: [ + { + provide: CORE_OPTIONS, + useValue: { + environment, + registerLocaleFn: () => Promise.resolve(), + }, + }, + ], + }); + + beforeEach(() => (spectator = createComponent())); + + describe('#getInitialData', () => { + test('should call the getConfiguration method of ApplicationConfigurationService and set states', async () => { + const environmentService = spectator.inject(EnvironmentService); + const configStateService = spectator.inject(ConfigStateService); + const sessionStateService = spectator.inject(SessionStateService); + const applicationConfigurationService = spectator.inject(AbpApplicationConfigurationService); + const parseTenantFromUrlSpy = jest.spyOn(multiTenancyUtils, 'parseTenantFromUrl'); + const getRemoteEnvSpy = jest.spyOn(environmentUtils, 'getRemoteEnv'); + parseTenantFromUrlSpy.mockReturnValue(Promise.resolve()); + getRemoteEnvSpy.mockReturnValue(Promise.resolve()); + + const appConfigRes = { + currentTenant: { id: 'test', name: 'testing' }, + } as ApplicationConfigurationDto; + + const getConfigurationSpy = jest.spyOn(applicationConfigurationService, 'get'); + getConfigurationSpy.mockReturnValue(of(appConfigRes)); + + const environmentSetStateSpy = jest.spyOn(environmentService, 'setState'); + const configSetStateSpy = jest.spyOn(configStateService, 'setState'); + const sessionSetTenantSpy = jest.spyOn(sessionStateService, 'setTenant'); + + const configStateGetOneSpy = jest.spyOn(configStateService, 'getOne'); + configStateGetOneSpy.mockReturnValue(appConfigRes.currentTenant); + + const mockInjector = { + get: spectator.inject, + }; + + await getInitialData(mockInjector)(); + + expect(typeof getInitialData(mockInjector)).toBe('function'); + expect(environmentSetStateSpy).toHaveBeenCalledWith(environment); + expect(getConfigurationSpy).toHaveBeenCalled(); + expect(configSetStateSpy).toHaveBeenCalledWith(appConfigRes); + expect(sessionSetTenantSpy).toHaveBeenCalledWith(appConfigRes.currentTenant); + }); + }); + + describe('#checkAccessToken', () => { + test('should call logOut fn of OAuthService when token is valid and current user not found', async () => { + const injector = spectator.inject(Injector); + const injectorSpy = jest.spyOn(injector, 'get'); + const clearOAuthStorageSpy = jest.spyOn(AuthFlowStrategy, 'clearOAuthStorage'); + + injectorSpy.mockReturnValueOnce({ getDeep: () => false }); + injectorSpy.mockReturnValueOnce({ hasValidAccessToken: () => true }); + + checkAccessToken(injector); + expect(clearOAuthStorageSpy).toHaveBeenCalled(); + }); + }); + + describe('#localeInitializer', () => { + test('should resolve registerLocale', async () => { + const injector = spectator.inject(Injector); + const injectorSpy = jest.spyOn(injector, 'get'); + const sessionState = spectator.inject(SessionStateService); + injectorSpy.mockReturnValueOnce(sessionState); + injectorSpy.mockReturnValueOnce({ registerLocaleFn: () => Promise.resolve() }); + expect(typeof localeInitializer(injector)).toBe('function'); + expect(await localeInitializer(injector)()).toBe('resolved'); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/internal-store.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/internal-store.spec.ts new file mode 100644 index 0000000000..c0728db069 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/internal-store.spec.ts @@ -0,0 +1,146 @@ +import clone from 'just-clone'; +import { take } from 'rxjs/operators'; +import { DeepPartial } from '../models'; +import { InternalStore } from '../utils'; + +const mockInitialState = { + foo: { + bar: { + baz: [() => {}], + qux: null as Promise, + }, + n: 0, + }, + x: '', + a: false, +}; + +type MockState = typeof mockInitialState; + +const deepPatch1: DeepPartial = { foo: { bar: { baz: [() => {}] } } }; +const deepPatchExpected1: MockState = clone(mockInitialState); +deepPatchExpected1.foo.bar.baz = deepPatch1.foo.bar.baz; + +const deepPatch2: DeepPartial = { foo: { bar: { qux: Promise.resolve() } } }; +const deepPatchExpected2: MockState = clone(mockInitialState); +deepPatchExpected2.foo.bar.qux = deepPatch2.foo.bar.qux; + +const deepPatch3: DeepPartial = { foo: { n: 1 } }; +const deepPatchExpected3: MockState = clone(mockInitialState); +deepPatchExpected3.foo.n = deepPatch3.foo.n; + +const deepPatch4: DeepPartial = { x: 'X' }; +const deepPatchExpected4: MockState = clone(mockInitialState); +deepPatchExpected4.x = deepPatch4.x; + +const deepPatch5: DeepPartial = { a: true }; +const deepPatchExpected5: MockState = clone(mockInitialState); +deepPatchExpected5.a = deepPatch5.a; + +const patch1: Partial = { + foo: { bar: { baz: [() => {}] } } as typeof mockInitialState.foo, +}; +const patchExpected1: MockState = clone(mockInitialState); +patchExpected1.foo = patch1.foo; + +const patch2: Partial = { + foo: { bar: { qux: Promise.resolve() } } as typeof mockInitialState.foo, +}; +const patchExpected2: MockState = clone(mockInitialState); +patchExpected2.foo = patch2.foo; + +const patch3: Partial = { foo: { n: 1 } as typeof mockInitialState.foo }; +const patchExpected3: MockState = clone(mockInitialState); +patchExpected3.foo = patch3.foo; + +const patch4: Partial = { x: 'X' }; +const patchExpected4: MockState = clone(mockInitialState); +patchExpected4.x = patch4.x; + +const patch5: Partial = { a: true }; +const patchExpected5: MockState = clone(mockInitialState); +patchExpected5.a = patch5.a; + +describe('Internal Store', () => { + describe('sliceState', () => { + test.each` + selector | expected + ${(state: MockState) => state.a} | ${mockInitialState.a} + ${(state: MockState) => state.x} | ${mockInitialState.x} + ${(state: MockState) => state.foo.n} | ${mockInitialState.foo.n} + ${(state: MockState) => state.foo.bar} | ${mockInitialState.foo.bar} + ${(state: MockState) => state.foo.bar.baz} | ${mockInitialState.foo.bar.baz} + ${(state: MockState) => state.foo.bar.qux} | ${mockInitialState.foo.bar.qux} + `( + 'should return observable $expected when selector is $selector', + async ({ selector, expected }) => { + const store = new InternalStore(mockInitialState); + + const value = await store.sliceState(selector).pipe(take(1)).toPromise(); + + expect(value).toEqual(expected); + }, + ); + }); + + describe('deepPatchState', () => { + test.each` + patch | expected + ${deepPatch1} | ${deepPatchExpected1} + ${deepPatch2} | ${deepPatchExpected2} + ${deepPatch3} | ${deepPatchExpected3} + ${deepPatch4} | ${deepPatchExpected4} + ${deepPatch5} | ${deepPatchExpected5} + `('should set state as $expected when patch is $patch', ({ patch, expected }) => { + const store = new InternalStore(mockInitialState); + + store.deepPatch(patch); + + expect(store.state).toEqual(expected); + }); + }); + + describe('patchState', () => { + test.each` + patch | expected + ${patch1} | ${patchExpected1} + ${patch2} | ${patchExpected2} + ${patch3} | ${patchExpected3} + ${patch4} | ${patchExpected4} + ${patch5} | ${patchExpected5} + `('should set state as $expected when patch is $patch', ({ patch, expected }) => { + const store = new InternalStore(mockInitialState); + + store.patch(patch); + + expect(store.state).toEqual(expected); + }); + }); + + describe('sliceUpdate', () => { + it('should return slice of update$ based on selector', done => { + const store = new InternalStore(mockInitialState); + + const onQux$ = store.sliceUpdate(state => state.foo.bar.qux); + + onQux$.pipe(take(1)).subscribe(value => { + expect(value).toEqual(deepPatch2.foo.bar.qux); + done(); + }); + + store.deepPatch(deepPatch1); + store.deepPatch(deepPatch2); + }); + }); + + describe('reset', () => { + it('should reset state to initialState', () => { + const store = new InternalStore(mockInitialState); + + store.deepPatch(deepPatch1); + store.reset(); + + expect(store.state).toEqual(mockInitialState); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/lazy-load-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/lazy-load-utils.spec.ts new file mode 100644 index 0000000000..7afb343e80 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/lazy-load-utils.spec.ts @@ -0,0 +1,113 @@ +import { DomStrategy, DOM_STRATEGY } from '../strategies'; +import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from '../strategies/cross-origin.strategy'; +import { uuid } from '../utils'; +import { fromLazyLoad } from '../utils/lazy-load-utils'; + +describe('Lazy Load Utils', () => { + describe('#fromLazyLoad', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should append to head by default', () => { + const element = document.createElement('link'); + const spy = jest.spyOn(document.head, 'insertAdjacentElement'); + + fromLazyLoad(element); + expect(spy).toHaveBeenCalledWith('beforeend', element); + }); + + it('should allow setting a dom strategy', () => { + const element = document.createElement('link'); + const spy = jest.spyOn(document.head, 'insertAdjacentElement'); + + fromLazyLoad(element, DOM_STRATEGY.PrependToHead()); + expect(spy).toHaveBeenCalledWith('afterbegin', element); + }); + + it('should set crossorigin to "anonymous" by default', () => { + const element = document.createElement('link'); + + fromLazyLoad(element); + + expect(element.crossOrigin).toBe('anonymous'); + }); + + it('should not set integrity by default', () => { + const element = document.createElement('link'); + + fromLazyLoad(element); + + expect(element.getAttribute('integrity')).toBeNull(); + }); + + it('should allow setting a cross-origin strategy', () => { + const element = document.createElement('link'); + + const integrity = uuid(); + + fromLazyLoad(element, undefined, CROSS_ORIGIN_STRATEGY.UseCredentials(integrity)); + + expect(element.crossOrigin).toBe('use-credentials'); + expect(element.getAttribute('integrity')).toBe(integrity); + }); + + it('should emit error event on fail and clear callbacks', done => { + const error = new CustomEvent('error'); + const parentNode = { removeChild: jest.fn() }; + const element = ({ parentNode } as any) as HTMLLinkElement; + + fromLazyLoad( + element, + { + insertElement(el: HTMLLinkElement) { + expect(el).toBe(element); + + setTimeout(() => { + el.onerror(error); + }, 0); + }, + } as DomStrategy, + { + setCrossOrigin(_: HTMLLinkElement) {}, + } as CrossOriginStrategy, + ).subscribe({ + error: value => { + expect(value).toBe(error); + expect(parentNode.removeChild).toHaveBeenCalledWith(element); + expect(element.onerror).toBeNull(); + done(); + }, + }); + }); + + it('should emit load event on success and clear callbacks', done => { + const success = new CustomEvent('load'); + const parentNode = { removeChild: jest.fn() }; + const element = ({ parentNode } as any) as HTMLLinkElement; + + fromLazyLoad( + element, + { + insertElement(el: HTMLLinkElement) { + expect(el).toBe(element); + + setTimeout(() => { + el.onload(success); + }, 0); + }, + } as DomStrategy, + { + setCrossOrigin(_: HTMLLinkElement) {}, + } as CrossOriginStrategy, + ).subscribe({ + next: value => { + expect(value).toBe(success); + expect(parentNode.removeChild).not.toHaveBeenCalled(); + expect(element.onload).toBeNull(); + done(); + }, + }); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/lazy-load.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/lazy-load.service.spec.ts new file mode 100644 index 0000000000..eb347be80a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/lazy-load.service.spec.ts @@ -0,0 +1,88 @@ +import { of, throwError } from 'rxjs'; +import { switchMap } from 'rxjs/operators'; +import { LazyLoadService } from '../services/lazy-load.service'; +import { ScriptLoadingStrategy } from '../strategies'; +import { ResourceWaitService } from '../services'; + +describe('LazyLoadService', () => { + describe('#load', () => { + const resourceWaitService = new ResourceWaitService(); + const service = new LazyLoadService(resourceWaitService); + const strategy = new ScriptLoadingStrategy('http://example.com/'); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should emit an error event if not loaded', done => { + const counter = jest.fn(); + jest.spyOn(strategy, 'createStream').mockReturnValueOnce( + of(null).pipe( + switchMap(() => { + counter(); + return throwError('THIS WILL NOT BE THE FINAL ERROR'); + }), + ), + ); + + service.load(strategy, 5, 0).subscribe({ + error: errorEvent => { + expect(errorEvent).toEqual(new CustomEvent('error')); + expect(counter).toHaveBeenCalledTimes(6); + expect(service.loaded.has(strategy.path)).toBe(false); + done(); + }, + }); + }); + + it('should emit a load event if loaded', done => { + const loadEvent = new CustomEvent('load'); + jest.spyOn(strategy, 'createStream').mockReturnValue(of(loadEvent)); + + service.load(strategy).subscribe({ + next: event => { + expect(event).toBe(loadEvent); + expect(service.loaded.has(strategy.path)).toBe(true); + done(); + }, + }); + }); + + it('should emit a custom load event if loaded if resource is loaded before', done => { + const loadEvent = new CustomEvent('load'); + service.loaded.set(strategy.path, null); + + service.load(strategy).subscribe(event => { + expect(event).toEqual(loadEvent); + done(); + }); + }); + }); + + describe('#remove', () => { + const resourceWaitService = new ResourceWaitService(); + const service = new LazyLoadService(resourceWaitService); + + it('should remove an already lazy loaded element and return true', () => { + const script = document.createElement('script'); + document.body.appendChild(script); + service.loaded.set('x', script); + + expect(document.body.lastElementChild).toBe(script); + + const result = service.remove('x'); + + expect(document.body.lastElementChild).toBeNull(); + expect(service.loaded.has('x')).toBe(false); + expect(result).toBe(true); + }); + + it('should return false when path not found', () => { + service.loaded.set('foo', null); + + const result = service.remove('bar'); + + expect(result).toBe(false); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/list.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/list.service.spec.ts new file mode 100644 index 0000000000..f26c39d4ad --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/list.service.spec.ts @@ -0,0 +1,153 @@ +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { of } from 'rxjs'; +import { bufferCount, take } from 'rxjs/operators'; +import { ABP } from '../models'; +import { ListService, QueryStreamCreatorCallback } from '../services/list.service'; +import { LIST_QUERY_DEBOUNCE_TIME } from '../tokens'; + +describe('ListService', () => { + let spectator: SpectatorService; + let service: ListService; + + const createService = createServiceFactory({ + service: ListService, + providers: [ + { + provide: LIST_QUERY_DEBOUNCE_TIME, + useValue: 0, + }, + ], + }); + + beforeEach(() => { + spectator = createService(); + service = spectator.service; + }); + + describe('#filter', () => { + it('should initially be empty string', () => { + expect(service.filter).toBe(''); + }); + + it('should be changed', () => { + service.filter = 'foo'; + + expect(service.filter).toBe('foo'); + }); + }); + + describe('#maxResultCount', () => { + it('should initially be 10', () => { + expect(service.maxResultCount).toBe(10); + }); + + it('should be changed', () => { + service.maxResultCount = 20; + + expect(service.maxResultCount).toBe(20); + }); + }); + + describe('#page', () => { + it('should initially be 0', () => { + expect(service.page).toBe(0); + }); + + it('should be changed', () => { + service.page = 9; + + expect(service.page).toBe(9); + }); + }); + + describe('#sortKey', () => { + it('should initially be empty string', () => { + expect(service.sortKey).toBe(''); + }); + + it('should be changed', () => { + service.sortKey = 'foo'; + + expect(service.sortKey).toBe('foo'); + }); + }); + + describe('#sortOrder', () => { + it('should initially be empty string', () => { + expect(service.sortOrder).toBe(''); + }); + + it('should be changed', () => { + service.sortOrder = 'foo'; + + expect(service.sortOrder).toBe('foo'); + }); + }); + + describe('#query$', () => { + it('should initially emit default query', done => { + service.query$.pipe(take(1)).subscribe(query => { + expect(query).toEqual({ + filter: undefined, + maxResultCount: 10, + skipCount: 0, + sorting: undefined, + }); + + done(); + }); + }); + + it('should emit a query based on params set', done => { + service.filter = 'foo'; + service.sortKey = 'bar'; + service.sortOrder = 'baz'; + service.maxResultCount = 20; + service.page = 9; + + service.query$.pipe(take(1)).subscribe(query => { + expect(query).toEqual({ + filter: 'foo', + sorting: 'bar baz', + maxResultCount: 20, + skipCount: 180, + }); + + done(); + }); + }); + }); + + describe('#hookToQuery', () => { + it('should call given callback with the query', done => { + const callback: QueryStreamCreatorCallback = query => + of({ items: [query], totalCount: 1 }); + + service.hookToQuery(callback).subscribe(({ items: [query] }) => { + expect(query).toEqual({ + filter: undefined, + maxResultCount: 10, + skipCount: 0, + sorting: undefined, + }); + + done(); + }); + }); + + it('should emit isLoading as side effect', done => { + const callback: QueryStreamCreatorCallback = query => + of({ items: [query], totalCount: 1 }); + + service.isLoading$.pipe(bufferCount(3)).subscribe(([idle, init, end]) => { + expect(idle).toBe(false); + expect(init).toBe(true); + expect(end).toBe(false); + + done(); + }); + + service.hookToQuery(callback).subscribe(); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/loading.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/loading.strategy.spec.ts new file mode 100644 index 0000000000..4215e6eee5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/loading.strategy.spec.ts @@ -0,0 +1,104 @@ +import { + CROSS_ORIGIN_STRATEGY, + DOM_STRATEGY, + LOADING_STRATEGY, + ScriptLoadingStrategy, + StyleLoadingStrategy, +} from '../strategies'; + +const path = 'http://example.com/'; + +describe('ScriptLoadingStrategy', () => { + describe('#createElement', () => { + it('should return a script element with src attribute', () => { + const strategy = new ScriptLoadingStrategy(path); + const element = strategy.createElement(); + + expect(element.tagName).toBe('SCRIPT'); + expect(element.src).toBe(path); + }); + }); + + describe('#createStream', () => { + it('should use given dom and cross-origin strategies', done => { + const domStrategy = DOM_STRATEGY.PrependToHead(); + const crossOriginStrategy = CROSS_ORIGIN_STRATEGY.UseCredentials(); + + domStrategy.insertElement = jest.fn((el: HTMLScriptElement) => { + setTimeout(() => { + el.onload( + new CustomEvent('success', { + detail: { + crossOrigin: el.crossOrigin, + }, + }), + ); + }, 0); + }) as any; + + const strategy = new ScriptLoadingStrategy(path, domStrategy, crossOriginStrategy); + + strategy.createStream().subscribe(event => { + expect(strategy.element.tagName).toBe('SCRIPT'); + expect(event.detail.crossOrigin).toBe('use-credentials'); + done(); + }); + }); + }); +}); + +describe('StyleLoadingStrategy', () => { + describe('#createElement', () => { + it('should return a style element with href and rel attributes', () => { + const strategy = new StyleLoadingStrategy(path); + const element = strategy.createElement(); + + expect(element.tagName).toBe('LINK'); + expect(element.href).toBe(path); + expect(element.rel).toBe('stylesheet'); + }); + }); + + describe('#createStream', () => { + it('should use given dom and cross-origin strategies', done => { + const domStrategy = DOM_STRATEGY.PrependToHead(); + const crossOriginStrategy = CROSS_ORIGIN_STRATEGY.UseCredentials(); + + domStrategy.insertElement = jest.fn((el: HTMLLinkElement) => { + setTimeout(() => { + el.onload( + new CustomEvent('success', { + detail: { + crossOrigin: el.crossOrigin, + }, + }), + ); + }, 0); + }) as any; + + const strategy = new StyleLoadingStrategy(path, domStrategy, crossOriginStrategy); + + strategy.createStream().subscribe(event => { + expect(strategy.element.tagName).toBe('LINK'); + expect(event.detail.crossOrigin).toBe('use-credentials'); + done(); + }); + }); + }); +}); + +describe('LOADING_STRATEGY', () => { + test.each` + name | Strategy | domStrategy + ${'AppendAnonymousScriptToBody'} | ${ScriptLoadingStrategy} | ${'AppendToBody'} + ${'AppendAnonymousScriptToHead'} | ${ScriptLoadingStrategy} | ${'AppendToHead'} + ${'AppendAnonymousStyleToHead'} | ${StyleLoadingStrategy} | ${'AppendToHead'} + ${'PrependAnonymousScriptToHead'} | ${ScriptLoadingStrategy} | ${'PrependToHead'} + ${'PrependAnonymousStyleToHead'} | ${StyleLoadingStrategy} | ${'PrependToHead'} + `( + 'should successfully map $name to $Strategy.name with $domStrategy dom strategy', + ({ name, Strategy, domStrategy }) => { + expect(LOADING_STRATEGY[name](path)).toEqual(new Strategy(path, DOM_STRATEGY[domStrategy]())); + }, + ); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/locale.provider.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/locale.provider.spec.ts new file mode 100644 index 0000000000..1456b795b3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/locale.provider.spec.ts @@ -0,0 +1,37 @@ +import { Component, LOCALE_ID } from '@angular/core'; +import { createRoutingFactory, SpectatorRouting } from '@ngneat/spectator/jest'; +import { differentLocales } from '../constants/different-locales'; +import { LocaleId } from '../providers'; +import { LocalizationService } from '../services'; + +@Component({ selector: 'abp-dummy', template: '' }) +export class DummyComponent {} + +describe('LocaleProvider', () => { + let spectator: SpectatorRouting; + + const createComponent = createRoutingFactory({ + component: DummyComponent, + stubsEnabled: false, + providers: [ + { provide: LocalizationService, useValue: { currentLang: 'en-US' } }, + { + provide: LOCALE_ID, + useClass: LocaleId, + deps: [LocalizationService], + }, + ], + }); + + describe('#LOCALE_ID', () => { + test('should equal to currentLang', async () => { + spectator = createComponent(); + const localizationService = spectator.inject(LocalizationService); + + expect(spectator.inject(LOCALE_ID).valueOf()).toBe(differentLocales['en-US'] || 'en-US'); + + (localizationService as any).currentLang = 'tr'; + expect(spectator.inject(LOCALE_ID).valueOf()).toBe(differentLocales['tr'] || 'tr'); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization-utils.spec.ts new file mode 100644 index 0000000000..c12b7b61ce --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization-utils.spec.ts @@ -0,0 +1,190 @@ +import { + createLocalizationPipeKeyGenerator, + createLocalizer, + createLocalizerWithFallback, + getLocaleDirection, +} from '../utils/localization-utils'; + +describe('Localization Utils', () => { + describe('#getLocaleDirection', () => { + test.each` + locale | expected + ${undefined} | ${'ltr'} + ${null} | ${'ltr'} + ${''} | ${'ltr'} + ${'en'} | ${'ltr'} + ${'en-US'} | ${'ltr'} + ${'pt'} | ${'ltr'} + ${'pt-PT'} | ${'ltr'} + ${'ar'} | ${'rtl'} + ${'ar-AE'} | ${'rtl'} + ${'ar-QA'} | ${'rtl'} + ${'ckb'} | ${'rtl'} + ${'ckb-IR'} | ${'rtl'} + ${'fa'} | ${'rtl'} + ${'fa-AF'} | ${'rtl'} + ${'he'} | ${'rtl'} + ${'ks'} | ${'rtl'} + ${'ksb'} | ${'ltr'} + ${'ksf'} | ${'ltr'} + ${'ksh'} | ${'ltr'} + ${'lrc'} | ${'rtl'} + ${'lrc-IQ'} | ${'rtl'} + ${'mzn'} | ${'rtl'} + ${'pa'} | ${'ltr'} + ${'pa-Arab'} | ${'rtl'} + ${'ps'} | ${'rtl'} + ${'ps-PK'} | ${'rtl'} + ${'sd'} | ${'rtl'} + ${'ug'} | ${'rtl'} + ${'ur'} | ${'rtl'} + ${'ur-IN'} | ${'rtl'} + ${'uz'} | ${'ltr'} + ${'uz-Arab'} | ${'rtl'} + ${'yi'} | ${'rtl'} + ${'zh'} | ${'ltr'} + ${'zh-Hans'} | ${'ltr'} + `('should return $expected when $locale is given as parameter', ({ locale, expected }) => { + expect(getLocaleDirection(locale)).toBe(expected); + }); + }); + + describe('#createLocalizer', () => { + const localize = createLocalizer({ + values: { foo: { bar: 'baz' }, x: { y: 'z' } }, + defaultResourceName: 'x', + currentCulture: null, + languages: [], + languageFilesMap: null, + languagesMap: null, + }); + + test.each` + resource | key | defaultValue | expected + ${'_'} | ${'TEST'} | ${'DEFAULT'} | ${'TEST'} + ${'foo'} | ${'bar'} | ${'DEFAULT'} | ${'baz'} + ${'x'} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'} + ${'a'} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'} + ${''} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'} + ${undefined} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'} + ${'foo'} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'} + ${'x'} | ${'y'} | ${'DEFAULT'} | ${'z'} + ${'a'} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'} + ${''} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'} + ${undefined} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'} + ${'foo'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${'x'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${'a'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${''} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${undefined} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${'foo'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + ${'x'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + ${'a'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + ${''} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + ${undefined} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + `( + 'should return $expected when resource name is $resource and key is $key', + ({ resource, key, defaultValue, expected }) => { + const result = localize(resource, key, defaultValue); + + expect(result).toBe(expected); + }, + ); + }); + + describe('#createLocalizerWithFallback', () => { + const localizeWithFallback = createLocalizerWithFallback({ + values: { foo: { bar: 'baz' }, x: { y: 'z' } }, + defaultResourceName: 'x', + currentCulture: null, + languages: [], + languageFilesMap: null, + languagesMap: null, + }); + + test.each` + resources | keys | defaultValue | expected + ${['', '_']} | ${['TEST', 'OTHER']} | ${'DEFAULT'} | ${'TEST'} + ${['foo']} | ${['bar']} | ${'DEFAULT'} | ${'baz'} + ${['x']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['a', 'b', 'c']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${[]} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['foo']} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${['x']} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${['a', 'b', 'c']} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${['']} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${[]} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${['foo']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'baz'} + ${['x']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'} + ${['a', 'b', 'c']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'} + ${['']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'} + ${[]} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'} + ${['foo']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['x']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['a', 'b', 'c']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${[]} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['foo']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${['x']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${['a', 'b', 'c']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${['']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${[]} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + `( + 'should return $expected when resource names are $resources and keys are $keys', + ({ resources, keys, defaultValue, expected }) => { + const result = localizeWithFallback(resources, keys, defaultValue); + + expect(result).toBe(expected); + }, + ); + }); + + describe('#createLocalizationPipeKeyGenerator', () => { + const generateLocalizationPipeKey = createLocalizationPipeKeyGenerator({ + values: { foo: { bar: 'baz' }, x: { y: 'z' } }, + defaultResourceName: 'x', + currentCulture: null, + languages: [], + languageFilesMap: null, + languagesMap: null, + }); + + test.each` + resources | keys | defaultKey | expected + ${['', '_']} | ${['TEST', 'OTHER']} | ${'DEFAULT'} | ${'TEST'} + ${['foo']} | ${['bar']} | ${'DEFAULT'} | ${'foo::bar'} + ${['x']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['a', 'b', 'c']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${[]} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['foo']} | ${['y']} | ${'DEFAULT'} | ${'x::y'} + ${['x']} | ${['y']} | ${'DEFAULT'} | ${'x::y'} + ${['a', 'b', 'c']} | ${['y']} | ${'DEFAULT'} | ${'x::y'} + ${['']} | ${['y']} | ${'DEFAULT'} | ${'x::y'} + ${[]} | ${['y']} | ${'DEFAULT'} | ${'x::y'} + ${['foo']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'foo::bar'} + ${['x']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'x::y'} + ${['a', 'b', 'c']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'x::y'} + ${['']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'x::y'} + ${[]} | ${['bar', 'y']} | ${'DEFAULT'} | ${'x::y'} + ${['foo']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['x']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['a', 'b', 'c']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${[]} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['foo']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${['x']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${['a', 'b', 'c']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${['']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${[]} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + `( + 'should return $expected when resource names are $resources and keys are $keys', + ({ resources, keys, defaultKey, expected }) => { + const result = generateLocalizationPipeKey(resources, keys, defaultKey); + + expect(result).toBe(expected); + }, + ); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization.pipe.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization.pipe.spec.ts new file mode 100644 index 0000000000..435c659c1f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization.pipe.spec.ts @@ -0,0 +1,29 @@ +import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; +import { LocalizationPipe } from '../pipes'; +import { LocalizationService } from '../services'; + +describe('LocalizationPipe', () => { + let spectator: SpectatorService; + let pipe: LocalizationPipe; + let localizationService: SpyObject; + + const createService = createServiceFactory({ + service: LocalizationPipe, + mocks: [LocalizationService], + }); + + beforeEach(() => { + spectator = createService(); + pipe = spectator.inject(LocalizationPipe); + localizationService = spectator.inject(LocalizationService); + }); + + it('should call getLocalization selector', () => { + const translateSpy = jest.spyOn(localizationService, 'instant'); + + pipe.transform('test', '1', '2'); + pipe.transform('test2', ['3', '4'] as any); + expect(translateSpy).toHaveBeenCalledWith('test', '1', '2'); + expect(translateSpy).toHaveBeenCalledWith('test2', '3', '4'); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization.service.spec.ts new file mode 100644 index 0000000000..b130afcc23 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization.service.spec.ts @@ -0,0 +1,266 @@ +import { Injector } from '@angular/core'; +import { Router } from '@angular/router'; +import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; +import { of } from 'rxjs'; +import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; +import { ConfigStateService, SessionStateService } from '../services'; +import { LocalizationService } from '../services/localization.service'; +import { CORE_OPTIONS } from '../tokens/options.token'; +import { CONFIG_STATE_DATA } from './config-state.service.spec'; + +describe('LocalizationService', () => { + let spectator: SpectatorService; + let sessionState: SpyObject; + let configState: SpyObject; + let service: LocalizationService; + + const createService = createServiceFactory({ + service: LocalizationService, + entryComponents: [], + mocks: [Router], + providers: [ + { + provide: CORE_OPTIONS, + useValue: { registerLocaleFn: () => Promise.resolve(), cultureNameLocaleFileMap: {} }, + }, + { + provide: AbpApplicationConfigurationService, + useValue: { get: () => of(CONFIG_STATE_DATA) }, + }, + ], + }); + + beforeEach(() => { + spectator = createService(); + sessionState = spectator.inject(SessionStateService); + configState = spectator.inject(ConfigStateService); + service = spectator.service; + + configState.setState(CONFIG_STATE_DATA); + sessionState.setLanguage('tr'); + }); + + describe('#currentLang', () => { + it('should be tr', done => { + setTimeout(() => { + expect(service.currentLang).toBe('tr'); + done(); + }, 0); + }); + }); + + describe('#get', () => { + it('should be return an observable localization', done => { + service.get('AbpIdentity::Identity').subscribe(localization => { + expect(localization).toBe(CONFIG_STATE_DATA.localization.values.AbpIdentity.Identity); + done(); + }); + }); + }); + + describe('#instant', () => { + it('should be return a localization', () => { + const localization = service.instant('AbpIdentity::Identity'); + + expect(localization).toBe(CONFIG_STATE_DATA.localization.values.AbpIdentity.Identity); + }); + }); + + describe('#registerLocale', () => { + it('should throw an error message when service have an otherInstance', async () => { + try { + const instance = new LocalizationService( + sessionState, + spectator.inject(Injector), + null, + null, + {} as any, + ); + } catch (error) { + expect((error as Error).message).toBe('LocalizationService should have only one instance.'); + } + }); + }); + + describe('#localize', () => { + test.each` + resource | key | defaultValue | expected + ${'_'} | ${'TEST'} | ${'DEFAULT'} | ${'TEST'} + ${'foo'} | ${'bar'} | ${'DEFAULT'} | ${'baz'} + ${'x'} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'} + ${'a'} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'} + ${''} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'} + ${undefined} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'} + ${'foo'} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'} + ${'x'} | ${'y'} | ${'DEFAULT'} | ${'z'} + ${'a'} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'} + ${''} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'} + ${undefined} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'} + ${'foo'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${'x'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${'a'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${''} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${undefined} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${'foo'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + ${'x'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + ${'a'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + ${''} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + ${undefined} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + `( + 'should return observable $expected when resource name is $resource and key is $key', + async ({ resource, key, defaultValue, expected }) => { + configState.setState({ + localization: { + values: { foo: { bar: 'baz' }, x: { y: 'z' } }, + defaultResourceName: 'x', + }, + }); + + service.localize(resource, key, defaultValue).subscribe(result => { + expect(result).toBe(expected); + }); + }, + ); + }); + + describe('#localizeSync', () => { + test.each` + resource | key | defaultValue | expected + ${'_'} | ${'TEST'} | ${'DEFAULT'} | ${'TEST'} + ${'foo'} | ${'bar'} | ${'DEFAULT'} | ${'baz'} + ${'x'} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'} + ${'a'} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'} + ${''} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'} + ${undefined} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'} + ${'foo'} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'} + ${'x'} | ${'y'} | ${'DEFAULT'} | ${'z'} + ${'a'} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'} + ${''} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'} + ${undefined} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'} + ${'foo'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${'x'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${'a'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${''} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${undefined} | ${''} | ${'DEFAULT'} | ${'DEFAULT'} + ${'foo'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + ${'x'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + ${'a'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + ${''} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + ${undefined} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'} + `( + 'should return $expected when resource name is $resource and key is $key', + ({ resource, key, defaultValue, expected }) => { + configState.setState({ + localization: { + values: { foo: { bar: 'baz' }, x: { y: 'z' } }, + defaultResourceName: 'x', + }, + }); + + const result = service.localizeSync(resource, key, defaultValue); + + expect(result).toBe(expected); + }, + ); + }); + + describe('#localizeWithFallback', () => { + test.each` + resources | keys | defaultValue | expected + ${['', '_']} | ${['TEST', 'OTHER']} | ${'DEFAULT'} | ${'TEST'} + ${['foo']} | ${['bar']} | ${'DEFAULT'} | ${'baz'} + ${['x']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['a', 'b', 'c']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${[]} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['foo']} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${['x']} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${['a', 'b', 'c']} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${['']} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${[]} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${['foo']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'baz'} + ${['x']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'} + ${['a', 'b', 'c']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'} + ${['']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'} + ${[]} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'} + ${['foo']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['x']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['a', 'b', 'c']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${[]} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['foo']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${['x']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${['a', 'b', 'c']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${['']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${[]} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + `( + 'should return observable $expected when resource names are $resources and keys are $keys', + async ({ resources, keys, defaultValue, expected }) => { + configState.setState({ + localization: { + values: { foo: { bar: 'baz' }, x: { y: 'z' } }, + defaultResourceName: 'x', + }, + }); + + service.localizeWithFallback(resources, keys, defaultValue).subscribe(result => { + expect(result).toBe(expected); + }); + }, + ); + }); + + describe('#localizeWithFallbackSync', () => { + test.each` + resources | keys | defaultValue | expected + ${['', '_']} | ${['TEST', 'OTHER']} | ${'DEFAULT'} | ${'TEST'} + ${['foo']} | ${['bar']} | ${'DEFAULT'} | ${'baz'} + ${['x']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['a', 'b', 'c']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${[]} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['foo']} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${['x']} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${['a', 'b', 'c']} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${['']} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${[]} | ${['y']} | ${'DEFAULT'} | ${'z'} + ${['foo']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'baz'} + ${['x']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'} + ${['a', 'b', 'c']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'} + ${['']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'} + ${[]} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'} + ${['foo']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['x']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['a', 'b', 'c']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${[]} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'} + ${['foo']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${['x']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${['a', 'b', 'c']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${['']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + ${[]} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'} + `( + 'should return $expected when resource names are $resources and keys are $keys', + ({ resources, keys, defaultValue, expected }) => { + configState.setState({ + localization: { + values: { foo: { bar: 'baz' }, x: { y: 'z' } }, + defaultResourceName: 'x', + }, + }); + + const result = service.localizeWithFallbackSync(resources, keys, defaultValue); + + expect(result).toBe(expected); + }, + ); + }); + + describe('#getLocalization', () => { + it('should return a localization', () => { + expect( + service.instant("MyProjectName::'{0}' and '{1}' do not match.", 'first', 'second'), + ).toBe('first and second do not match.'); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/multi-tenancy-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/multi-tenancy-utils.spec.ts new file mode 100644 index 0000000000..5e49b64d22 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/multi-tenancy-utils.spec.ts @@ -0,0 +1,122 @@ +import { Component } from '@angular/core'; +import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; +import clone from 'just-clone'; +import { of } from 'rxjs'; + +import { + CurrentTenantDto, + FindTenantResultDto, +} from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; +import { EnvironmentService, MultiTenancyService } from '../services'; +import { parseTenantFromUrl } from '../utils'; +import { TENANT_KEY } from '../tokens'; + +const environment = { + production: false, + hmr: false, + application: { + baseUrl: 'https://{0}.volosoft.com', + name: 'MyProjectName', + logoUrl: '', + }, + oAuthConfig: { + issuer: 'https://{0}.api.volosoft.com', + redirectUri: 'https://{0}.volosoft.com', + clientId: 'MyProjectName_App', + responseType: 'code', + scope: 'offline_access MyProjectName', + }, + apis: { + default: { + url: 'https://{0}.api.volosoft.com', + }, + abp: { + url: 'https://api.volosoft.com/{0}', + }, + }, +}; + +const setHref = url => { + global.window = Object.create(window); + delete window.location; + Object.defineProperty(window, 'location', { + value: { + href: url, + }, + }); +}; + +const testTenantKey = 'TEST_TENANT_KEY'; + +@Component({ + selector: 'abp-dummy', + template: '', +}) +export class DummyComponent {} + +describe('MultiTenancyUtils', () => { + let spectator: Spectator; + const createComponent = createComponentFactory({ + component: DummyComponent, + mocks: [EnvironmentService, MultiTenancyService], + providers: [{ provide: TENANT_KEY, useValue: testTenantKey }], + }); + + beforeEach(() => (spectator = createComponent())); + + describe('#parseTenantFromUrl', () => { + test('should get the tenancyName, set replaced environment and call the findTenantByName method of AbpTenantService', async () => { + const environmentService = spectator.inject(EnvironmentService); + const multiTenancyService = spectator.inject(MultiTenancyService); + const setTenantByName = jest.spyOn(multiTenancyService, 'setTenantByName'); + const getEnvironmentSpy = jest.spyOn(environmentService, 'getEnvironment'); + const setStateSpy = jest.spyOn(environmentService, 'setState'); + + getEnvironmentSpy.mockReturnValue(clone(environment)); + + const testTenant: FindTenantResultDto = { + name: 'abp', + tenantId: '1', + isActive: true, + success: true, + }; + + setHref('https://abp.volosoft.com/'); + + setTenantByName.mockReturnValue(of(testTenant)); + + const mockInjector = { + get: arg => { + if (arg === EnvironmentService) return environmentService; + if (arg === MultiTenancyService) return multiTenancyService; + }, + }; + await parseTenantFromUrl(mockInjector); + + const replacedEnv = { + ...environment, + application: { ...environment.application, baseUrl: 'https://abp.volosoft.com' }, + oAuthConfig: { + ...environment.oAuthConfig, + issuer: 'https://abp.api.volosoft.com', + redirectUri: 'https://abp.volosoft.com', + }, + apis: { + default: { + url: 'https://abp.api.volosoft.com', + }, + abp: { + url: 'https://api.volosoft.com/abp', + }, + }, + }; + + expect(setStateSpy).toHaveBeenCalledWith(replacedEnv); + expect(multiTenancyService.domainTenant).toEqual({ + id: testTenant.tenantId, + name: testTenant.name, + isAvailable: true, + } as CurrentTenantDto); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/ng-model.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/ng-model.component.spec.ts new file mode 100644 index 0000000000..fbb19ac3fc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/ng-model.component.spec.ts @@ -0,0 +1,63 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; +import { timer } from 'rxjs'; +import { AbstractNgModelComponent } from '../abstracts'; + +@Component({ + selector: 'abp-test', + template: '', + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: TestComponent, + multi: true, + }, + ], +}) +export class TestComponent extends AbstractNgModelComponent implements OnInit { + @Input() override: boolean; + + ngOnInit() { + setTimeout(() => { + if (this.override) { + this.value = 'test'; + } + }, 0); + } +} + +describe('AbstractNgModelComponent', () => { + let spectator: SpectatorHost; + + const createHost = createHostFactory({ + component: TestComponent, + declarations: [AbstractNgModelComponent], + imports: [FormsModule], + }); + + beforeEach(() => { + spectator = createHost('', { + hostProps: { + val: '1', + override: false, + }, + }); + }); + + test('should pass the value with ngModel', done => { + timer(0).subscribe(() => { + expect(spectator.component.value).toBe('1'); + done(); + }); + }); + + test('should set the value with ngModel', done => { + spectator.setHostInput({ val: '2', override: true }); + + timer(0).subscribe(() => { + expect(spectator.hostComponent.val).toBe('test'); + done(); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/number-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/number-utils.spec.ts new file mode 100644 index 0000000000..659225fb62 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/number-utils.spec.ts @@ -0,0 +1,17 @@ +import { isNumber } from '../utils/number-utils'; + +describe('Number Utils', () => { + describe('#isNumber', () => { + it('should return true if input is a numeric expression', () => { + expect(isNumber(0)).toBe(true); + expect(isNumber(0.15)).toBe(true); + expect(isNumber(2e8)).toBe(true); + expect(isNumber(Infinity)).toBe(true); + + expect(isNumber('0')).toBe(true); + expect(isNumber('0.15')).toBe(true); + expect(isNumber('2e8')).toBe(true); + expect(isNumber('Infinity')).toBe(true); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/object-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/object-utils.spec.ts new file mode 100644 index 0000000000..235d2e90ed --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/object-utils.spec.ts @@ -0,0 +1,141 @@ +import { deepMerge } from '../utils/object-utils'; + +describe('DeepMerge', () => { + test.each` + target | source + ${null} | ${null} + ${null} | ${undefined} + ${undefined} | ${null} + ${undefined} | ${undefined} + `('should return empty object when both inputs are $target and $source', ({ target, source }) => { + expect(deepMerge(target, source)).toEqual({}); + }); + + test.each` + value + ${10} + ${false} + ${''} + ${'test-string'} + ${{ a: 1 }} + ${[1, 2, 3]} + ${{}} + `('should correctly return when any of the inputs is null or undefined', val => { + expect(deepMerge(undefined, val)).toEqual(val); + expect(deepMerge(null, val)).toEqual(val); + expect(deepMerge(val, undefined)).toEqual(val); + expect(deepMerge(val, null)).toEqual(val); + }); + + test.each` + target | source + ${10} | ${false} + ${false} | ${20} + ${'some-string'} | ${{ a: 5 }} + ${{ b: 10 }} | ${50} + ${[1, 2, 3]} | ${40} + ${{ k: 60 }} | ${[4, 5, 6]} + `( + 'should correctly return source if one of them is primitive or an array', + ({ target, source }) => { + expect(deepMerge(target, source)).toEqual(source); + }, + ); + + it('should correctly return when both inputs are objects with different fields', () => { + const target = { a: 1 }; + const source = { b: 2 }; + const expected = { a: 1, b: 2 }; + expect(deepMerge(target, source)).toEqual(expected); + expect(deepMerge(source, target)).toEqual(expected); + }); + + it('should correctly return when both inputs are object with same fields but different values', () => { + const target = { a: 1 }; + const source = { a: 5 }; + expect(deepMerge(target, source)).toEqual(source); + expect(deepMerge(source, target)).toEqual(target); + }); + + it('should correctly merge shallow objects with different fields as well as some shared ones', () => { + const target = { a: 1, b: 2, c: 3 }; + const source = { a: 4, d: 5, e: 6 }; + expect(deepMerge(target, source)).toEqual({ a: 4, b: 2, c: 3, d: 5, e: 6 }); + }); + + it('should not merge arrays and return the latter', () => { + const firstArray = [1, 2, 3]; + const secondArray = [3, 4, 5, 6]; + expect(deepMerge(firstArray, secondArray)).toEqual(secondArray); + const target = { a: firstArray }; + const source = { a: secondArray }; + expect(deepMerge(target, source)).toEqual({ a: secondArray }); + }); + + it('should correctly merge nested objects', () => { + const target = { + a: { + b: { + c: { + d: 1, + g: 10, + q: undefined, + t: false, + }, + e: { + f: [1, 2, 3], + p: 'other-string', + }, + }, + }, + x: { + q: 'some-string', + }, + }; + const source = { + a: { + b: { + c: { + h: 30, + q: 45, + t: null, + }, + m: 20, + e: { + f: [20, 30, 40], + }, + }, + e: { k: [5, 6] }, + }, + z: { + y: true, + }, + }; + const expected = { + a: { + b: { + c: { + d: 1, + g: 10, + h: 30, + q: 45, + t: false, + }, + e: { + f: [20, 30, 40], + p: 'other-string', + }, + m: 20, + }, + e: { k: [5, 6] }, + }, + x: { + q: 'some-string', + }, + z: { + y: true, + }, + }; + expect(deepMerge(target, source)).toEqual(expected); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/permission.directive.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/permission.directive.spec.ts new file mode 100644 index 0000000000..7b65a4a9db --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/permission.directive.spec.ts @@ -0,0 +1,73 @@ +import { createDirectiveFactory, SpectatorDirective } from '@ngneat/spectator/jest'; +import { Subject } from 'rxjs'; +import { PermissionDirective } from '../directives/permission.directive'; +import { PermissionService } from '../services'; + +describe('PermissionDirective', () => { + let spectator: SpectatorDirective; + let directive: PermissionDirective; + const grantedPolicy$ = new Subject(); + const createDirective = createDirectiveFactory({ + directive: PermissionDirective, + providers: [ + { provide: PermissionService, useValue: { getGrantedPolicy$: () => grantedPolicy$ } }, + ], + }); + + describe('with condition', () => { + beforeEach(() => { + spectator = createDirective( + `
Testing Permission Directive
`, + ); + directive = spectator.directive; + }); + + it('should be created', () => { + expect(directive).toBeTruthy(); + }); + + it('should remove the element from DOM', () => { + grantedPolicy$.next(true); + expect(spectator.query('#test-element')).toBeTruthy(); + grantedPolicy$.next(false); + // expect(spectator.query('#test-element')).toBeFalsy(); // TODO: change detection problem should be fixed + }); + }); + + describe('structural', () => { + beforeEach(() => { + spectator = createDirective( + '
Testing Permission Directive
', + { hostProps: { condition: '' } }, + ); + directive = spectator.directive; + }); + + it('should be created', () => { + expect(directive).toBeTruthy(); + }); + + it('should remove the element from DOM', () => { + expect(spectator.query('#test-element')).toBeFalsy(); + spectator.setHostInput({ condition: 'test' }); + grantedPolicy$.next(true); + expect(spectator.query('#test-element')).toBeTruthy(); + grantedPolicy$.next(false); + expect(spectator.query('#test-element')).toBeFalsy(); + grantedPolicy$.next(true); + grantedPolicy$.next(true); + expect(spectator.queryAll('#test-element')).toHaveLength(1); + }); + + describe('#subscription', () => { + it('should call the unsubscribe', () => { + const spy = jest.fn(() => {}); + spectator.setHostInput({ condition: 'test' }); + spectator.directive.subscription.unsubscribe = spy; + spectator.setHostInput({ condition: 'test2' }); + + expect(spy).toHaveBeenCalled(); + }); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/permission.guard.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/permission.guard.spec.ts new file mode 100644 index 0000000000..ef5b3cd1ab --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/permission.guard.spec.ts @@ -0,0 +1,109 @@ +import { APP_BASE_HREF } from '@angular/common'; +import { Component } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; +import { Actions, Store } from '@ngxs/store'; +import { of } from 'rxjs'; +import { RestOccurError } from '../actions'; +import { PermissionGuard } from '../guards/permission.guard'; +import { RoutesService } from '../services/routes.service'; +import { PermissionService } from '../services'; + +describe('PermissionGuard', () => { + let spectator: SpectatorService; + let guard: PermissionGuard; + let routes: SpyObject; + let store: SpyObject; + let permissionService: SpyObject; + + @Component({ template: '' }) + class DummyComponent {} + + const createService = createServiceFactory({ + service: PermissionGuard, + mocks: [PermissionService, Store], + declarations: [DummyComponent], + imports: [ + RouterModule.forRoot([ + { + path: 'test', + component: DummyComponent, + data: { + requiredPolicy: 'TestPolicy', + }, + }, +], { relativeLinkResolution: 'legacy' }), + ], + providers: [ + { + provide: APP_BASE_HREF, + useValue: '/', + }, + { + provide: Actions, + useValue: { + pipe() { + return of(null); + }, + }, + }, + ], + }); + + beforeEach(() => { + spectator = createService(); + guard = spectator.service; + routes = spectator.inject(RoutesService); + store = spectator.inject(Store); + permissionService = spectator.inject(PermissionService); + }); + + it('should return true when the grantedPolicy is true', done => { + permissionService.getGrantedPolicy$.andReturn(of(true)); + const spy = jest.spyOn(store, 'dispatch'); + guard.canActivate({ data: { requiredPolicy: 'test' } } as any, null).subscribe(res => { + expect(res).toBe(true); + expect(spy.mock.calls).toHaveLength(0); + done(); + }); + }); + + it('should return false and dispatch RestOccurError when the grantedPolicy is false', done => { + permissionService.getGrantedPolicy$.andReturn(of(false)); + const spy = jest.spyOn(store, 'dispatch'); + guard.canActivate({ data: { requiredPolicy: 'test' } } as any, null).subscribe(res => { + expect(res).toBe(false); + expect(spy.mock.calls[0][0] instanceof RestOccurError).toBeTruthy(); + expect((spy.mock.calls[0][0] as RestOccurError).payload).toEqual({ status: 403 }); + done(); + }); + }); + + it('should check the requiredPolicy from RoutesService', done => { + routes.add([ + { + path: '/test', + name: 'Test', + requiredPolicy: 'TestPolicy', + }, + ]); + permissionService.getGrantedPolicy$.mockImplementation(policy => of(policy === 'TestPolicy')); + guard.canActivate({ data: {} } as any, { url: 'test' } as any).subscribe(result => { + expect(result).toBe(true); + done(); + }); + }); + + it('should return Observable if RoutesService does not have requiredPolicy for given URL', done => { + routes.add([ + { + path: '/test', + name: 'Test', + }, + ]); + guard.canActivate({ data: {} } as any, { url: 'test' } as any).subscribe(result => { + expect(result).toBe(true); + done(); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile-state.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile-state.service.spec.ts new file mode 100644 index 0000000000..967957b537 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile-state.service.spec.ts @@ -0,0 +1,57 @@ +import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; +import { ProfileStateService } from '../services/profile-state.service'; +import { ProfileState } from '../states/profile.state'; +import { Store } from '@ngxs/store'; +import * as ProfileActions from '../actions'; + +describe('ProfileStateService', () => { + let service: ProfileStateService; + let spectator: SpectatorService; + let store: SpyObject; + + const createService = createServiceFactory({ service: ProfileStateService, mocks: [Store] }); + beforeEach(() => { + spectator = createService(); + service = spectator.service; + store = spectator.inject(Store); + }); + test('should have the all ProfileState static methods', () => { + const reg = /(?<=static )(.*)(?=\()/gm; + ProfileState.toString() + .match(reg) + .forEach(fnName => { + expect(service[fnName]).toBeTruthy(); + + const spy = jest.spyOn(store, 'selectSnapshot'); + spy.mockClear(); + + const isDynamicSelector = ProfileState[fnName].name !== 'memoized'; + + if (isDynamicSelector) { + ProfileState[fnName] = jest.fn((...args) => args); + service[fnName]('test', 0, {}); + expect(ProfileState[fnName]).toHaveBeenCalledWith('test', 0, {}); + } else { + service[fnName](); + expect(spy).toHaveBeenCalledWith(ProfileState[fnName]); + } + }); + }); + + test('should have a dispatch method for every ProfileState action', () => { + const reg = /(?<=dispatch)(\w+)(?=\()/gm; + ProfileStateService.toString() + .match(reg) + .forEach(fnName => { + expect(ProfileActions[fnName]).toBeTruthy(); + + const spy = jest.spyOn(store, 'dispatch'); + spy.mockClear(); + + const params = Array.from(new Array(ProfileActions[fnName].length)); + + service[`dispatch${fnName}`](...params); + expect(spy).toHaveBeenCalledWith(new ProfileActions[fnName](...params)); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile.service.spec.ts new file mode 100644 index 0000000000..33106e0e29 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile.service.spec.ts @@ -0,0 +1,56 @@ +import { createHttpFactory, HttpMethod, SpectatorHttp, SpyObject } from '@ngneat/spectator/jest'; +import { Store } from '@ngxs/store'; +import { EnvironmentService, ProfileService, RestService } from '../services'; +import { CORE_OPTIONS } from '../tokens'; + +describe('ProfileService', () => { + let spectator: SpectatorHttp; + let environmentService: SpyObject; + + const createHttp = createHttpFactory({ + dataService: ProfileService, + providers: [ + RestService, + { provide: CORE_OPTIONS, useValue: {} }, + { provide: Store, useValue: {} }, + ], + mocks: [EnvironmentService], + }); + + beforeEach(() => { + spectator = createHttp(); + environmentService = spectator.inject(EnvironmentService); + const getApiUrlSpy = jest.spyOn(environmentService, 'getApiUrl'); + getApiUrlSpy.mockReturnValue('https://abp.io'); + }); + + it('should send a GET to my-profile API', () => { + spectator.service.get().subscribe(); + spectator.expectOne('https://abp.io/api/identity/my-profile', HttpMethod.GET); + }); + + it('should send a POST to change-password API', () => { + const mock = { currentPassword: 'test', newPassword: 'test' }; + spectator.service.changePassword(mock).subscribe(); + const req = spectator.expectOne( + 'https://abp.io/api/identity/my-profile/change-password', + HttpMethod.POST, + ); + expect(req.request.body).toEqual(mock); + }); + + it('should send a PUT to my-profile API', () => { + const mock = { + email: 'info@volosoft.com', + userName: 'admin', + name: 'John', + surname: 'Doe', + phoneNumber: '+123456', + isExternal: false, + hasPassword: false, + }; + spectator.service.update(mock).subscribe(); + const req = spectator.expectOne('https://abp.io/api/identity/my-profile', HttpMethod.PUT); + expect(req.request.body).toEqual(mock); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile.state.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile.state.spec.ts new file mode 100644 index 0000000000..2ab5f1dff2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile.state.spec.ts @@ -0,0 +1,74 @@ +import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; +import { Session } from '../models/session'; +import { ProfileService } from '../services'; +import { ProfileState } from '../states'; +import { GetAppConfiguration } from '../actions/config.actions'; +import { of } from 'rxjs'; +import { Profile } from '../models/profile'; + +export class DummyClass {} + +export const PROFILE_STATE_DATA = { + profile: { userName: 'admin', email: 'info@abp.io', name: 'Admin' }, +} as Profile.State; + +describe('ProfileState', () => { + let spectator: SpectatorService; + let state: ProfileState; + let profileService: SpyObject; + let patchedData; + const patchState = jest.fn(data => (patchedData = data)); + + const createService = createServiceFactory({ + service: DummyClass, + mocks: [ProfileService], + }); + + beforeEach(() => { + spectator = createService(); + profileService = spectator.inject(ProfileService); + state = new ProfileState(profileService); + }); + + describe('#getProfile', () => { + it('should return the current language', () => { + expect(ProfileState.getProfile(PROFILE_STATE_DATA)).toEqual(PROFILE_STATE_DATA.profile); + }); + }); + + describe('#GetProfile', () => { + it('should call the profile service get method and update the state', () => { + const mockData = { userName: 'test', email: 'test@abp.io' }; + const spy = jest.spyOn(profileService, 'get'); + spy.mockReturnValue(of(mockData as any)); + + state.getProfile({ patchState } as any).subscribe(); + + expect(patchedData).toEqual({ profile: mockData }); + }); + }); + + describe('#UpdateProfile', () => { + it('should call the profile service update method and update the state', () => { + const mockData = { userName: 'test2', email: 'test@abp.io' }; + const spy = jest.spyOn(profileService, 'update'); + spy.mockReturnValue(of(mockData as any)); + + state.updateProfile({ patchState } as any, { payload: mockData as any }).subscribe(); + + expect(patchedData).toEqual({ profile: mockData }); + }); + }); + + describe('#ChangePassword', () => { + it('should call the profile service changePassword method', () => { + const mockData = { currentPassword: 'test123', newPassword: 'test123' }; + const spy = jest.spyOn(profileService, 'changePassword'); + spy.mockReturnValue(of(null)); + + state.changePassword(null, { payload: mockData }).subscribe(); + + expect(spy).toHaveBeenCalledWith(mockData, true); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/projection.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/projection.strategy.spec.ts new file mode 100644 index 0000000000..a0b3bb61bb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/projection.strategy.spec.ts @@ -0,0 +1,276 @@ +import { + Component, + ComponentRef, + EmbeddedViewRef, + TemplateRef, + ViewChild, + ViewContainerRef, +} from '@angular/core'; +import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; +import { + ComponentProjectionStrategy, + ContainerStrategy, + CONTAINER_STRATEGY, + CONTEXT_STRATEGY, + DOM_STRATEGY, + PROJECTION_STRATEGY, + RootComponentProjectionStrategy, + TemplateProjectionStrategy, +} from '../strategies'; + +describe('ComponentProjectionStrategy', () => { + @Component({ + template: '
{{ bar || baz }}
', + }) + class TestComponent { + bar: string; + baz = 'baz'; + } + + @Component({ + template: '', + }) + class HostComponent { + @ViewChild('container', { static: true, read: ViewContainerRef }) + containerRef: ViewContainerRef; + } + + let containerStrategy: ContainerStrategy; + let spectator: Spectator; + let componentRef: ComponentRef; + + const createComponent = createComponentFactory({ + component: HostComponent, + entryComponents: [TestComponent], + }); + + beforeEach(() => { + spectator = createComponent({}); + containerStrategy = CONTAINER_STRATEGY.Clear(spectator.component.containerRef); + }); + + afterEach(() => { + componentRef.destroy(); + spectator.detectChanges(); + }); + + describe('#injectContent', () => { + it('should should insert content into container and return a ComponentRef', () => { + const strategy = new ComponentProjectionStrategy(TestComponent, containerStrategy); + componentRef = strategy.injectContent(spectator); + spectator.detectChanges(); + + const div = spectator.query('div.foo'); + expect(div.textContent).toBe('baz'); + expect(componentRef).toBeInstanceOf(ComponentRef); + }); + + it('should be able to map context to projected component', () => { + const contextStrategy = CONTEXT_STRATEGY.Component({ bar: 'bar' }); + const strategy = new ComponentProjectionStrategy( + TestComponent, + containerStrategy, + contextStrategy, + ); + componentRef = strategy.injectContent(spectator); + spectator.detectChanges(); + + const div = spectator.query('div.foo'); + expect(div.textContent).toBe('bar'); + expect(componentRef.instance.bar).toBe('bar'); + }); + }); +}); + +describe('RootComponentProjectionStrategy', () => { + @Component({ + template: '
{{ bar || baz }}
', + }) + class TestComponent { + bar: string; + baz = 'baz'; + } + + @Component({ template: '' }) + class HostComponent {} + + let spectator: Spectator; + let componentRef: ComponentRef; + + const createComponent = createComponentFactory({ + component: HostComponent, + entryComponents: [TestComponent], + }); + + beforeEach(() => { + spectator = createComponent({}); + }); + + afterEach(() => { + componentRef.destroy(); + spectator.detectChanges(); + }); + + describe('#injectContent', () => { + it('should should insert content into body and return a ComponentRef', () => { + const strategy = new RootComponentProjectionStrategy(TestComponent); + componentRef = strategy.injectContent(spectator); + spectator.detectChanges(); + + const div = document.querySelector('body > ng-component > div.foo'); + expect(div.textContent).toBe('baz'); + expect(componentRef).toBeInstanceOf(ComponentRef); + componentRef.destroy(); + spectator.detectChanges(); + }); + + it('should be able to map context to projected component', () => { + const contextStrategy = CONTEXT_STRATEGY.Component({ bar: 'bar' }); + const strategy = new RootComponentProjectionStrategy(TestComponent, contextStrategy); + componentRef = strategy.injectContent(spectator); + spectator.detectChanges(); + + const div = document.querySelector('body > ng-component > div.foo'); + expect(div.textContent).toBe('bar'); + expect(componentRef.instance.bar).toBe('bar'); + }); + }); +}); + +describe('TemplateProjectionStrategy', () => { + @Component({ + template: ` + +
{{ bar || baz }}
+
+ + `, + }) + class HostComponent { + @ViewChild('container', { static: true, read: ViewContainerRef }) + containerRef: ViewContainerRef; + + @ViewChild('template', { static: true }) + templateRef: TemplateRef<{ $implicit?: string }>; + + baz = 'baz'; + } + + let containerStrategy: ContainerStrategy; + let spectator: Spectator; + let embeddedViewRef: EmbeddedViewRef<{ $implicit?: string }>; + + const createComponent = createComponentFactory({ + component: HostComponent, + }); + + beforeEach(() => { + spectator = createComponent({}); + containerStrategy = CONTAINER_STRATEGY.Clear(spectator.component.containerRef); + }); + + afterEach(() => { + embeddedViewRef.destroy(); + spectator.detectChanges(); + }); + + describe('#injectContent', () => { + it('should should insert content into container and return an EmbeddedViewRef', () => { + const templateRef = spectator.component.templateRef; + const strategy = new TemplateProjectionStrategy(templateRef, containerStrategy); + embeddedViewRef = strategy.injectContent(); + spectator.detectChanges(); + + const div = spectator.query('div.foo'); + expect(div.textContent).toBe('baz'); + expect(embeddedViewRef).toHaveProperty('detectChanges'); + expect(embeddedViewRef).toHaveProperty('markForCheck'); + expect(embeddedViewRef).toHaveProperty('detach'); + expect(embeddedViewRef).toHaveProperty('reattach'); + expect(embeddedViewRef).toHaveProperty('destroy'); + expect(embeddedViewRef).toHaveProperty('rootNodes'); + expect(embeddedViewRef).toHaveProperty('context'); + }); + + it('should be able to map context to projected template', () => { + const templateRef = spectator.component.templateRef; + const contextStrategy = CONTEXT_STRATEGY.Template({ $implicit: 'bar' }); + const strategy = new TemplateProjectionStrategy( + templateRef, + containerStrategy, + contextStrategy, + ); + embeddedViewRef = strategy.injectContent(); + spectator.detectChanges(); + + const div = spectator.query('div.foo'); + expect(div.textContent).toBe('bar'); + expect(embeddedViewRef.context).toEqual(contextStrategy.context); + }); + }); +}); + +describe('PROJECTION_STRATEGY', () => { + const content = undefined; + const containerRef = ({ length: 0 } as any) as ViewContainerRef; + let context: any; + + test.each` + name | Strategy | containerStrategy + ${'AppendComponentToContainer'} | ${ComponentProjectionStrategy} | ${CONTAINER_STRATEGY.Append} + ${'AppendTemplateToContainer'} | ${TemplateProjectionStrategy} | ${CONTAINER_STRATEGY.Append} + ${'PrependComponentToContainer'} | ${ComponentProjectionStrategy} | ${CONTAINER_STRATEGY.Prepend} + ${'PrependTemplateToContainer'} | ${TemplateProjectionStrategy} | ${CONTAINER_STRATEGY.Prepend} + ${'ProjectComponentToContainer'} | ${ComponentProjectionStrategy} | ${CONTAINER_STRATEGY.Clear} + ${'ProjectTemplateToContainer'} | ${TemplateProjectionStrategy} | ${CONTAINER_STRATEGY.Clear} + `( + 'should successfully map $name to $Strategy.name with $containerStrategy.name container strategy and $contextStrategy.name context strategy', + ({ name, Strategy, containerStrategy }) => { + expect(PROJECTION_STRATEGY[name](content, containerRef, context)).toEqual( + new Strategy(content, containerStrategy(containerRef), CONTEXT_STRATEGY.None()), + ); + }, + ); + test.each` + name | Strategy | domStrategy + ${'AppendComponentToBody'} | ${RootComponentProjectionStrategy} | ${DOM_STRATEGY.AppendToBody} + `( + 'should successfully map $name to $Strategy.name with $domStrategy.name dom strategy', + ({ name, Strategy, domStrategy }) => { + expect(PROJECTION_STRATEGY[name](content, context)).toEqual( + new Strategy(content, CONTEXT_STRATEGY.None(), domStrategy()), + ); + }, + ); + + test.each` + name | Strategy | containerStrategy | contextStrategy + ${'AppendComponentToContainer'} | ${ComponentProjectionStrategy} | ${CONTAINER_STRATEGY.Append} | ${CONTEXT_STRATEGY.Component} + ${'AppendTemplateToContainer'} | ${TemplateProjectionStrategy} | ${CONTAINER_STRATEGY.Append} | ${CONTEXT_STRATEGY.Template} + ${'PrependComponentToContainer'} | ${ComponentProjectionStrategy} | ${CONTAINER_STRATEGY.Prepend} | ${CONTEXT_STRATEGY.Component} + ${'PrependTemplateToContainer'} | ${TemplateProjectionStrategy} | ${CONTAINER_STRATEGY.Prepend} | ${CONTEXT_STRATEGY.Template} + ${'ProjectComponentToContainer'} | ${ComponentProjectionStrategy} | ${CONTAINER_STRATEGY.Clear} | ${CONTEXT_STRATEGY.Component} + ${'ProjectTemplateToContainer'} | ${TemplateProjectionStrategy} | ${CONTAINER_STRATEGY.Clear} | ${CONTEXT_STRATEGY.Template} + `( + 'should successfully map $name to $Strategy.name with $containerStrategy.name container strategy and $contextStrategy.name context strategy', + ({ name, Strategy, containerStrategy, contextStrategy }) => { + context = { x: true }; + expect(PROJECTION_STRATEGY[name](content, containerRef, context)).toEqual( + new Strategy(content, containerStrategy(containerRef), contextStrategy(context)), + ); + }, + ); + + test.each` + name | Strategy | contextStrategy | domStrategy + ${'AppendComponentToBody'} | ${RootComponentProjectionStrategy} | ${CONTEXT_STRATEGY.Component} | ${DOM_STRATEGY.AppendToBody} + `( + 'should successfully map $name to $Strategy.name with $contextStrategy.name context strategy and $domStrategy.name dom strategy', + ({ name, Strategy, domStrategy, contextStrategy }) => { + context = { x: true }; + expect(PROJECTION_STRATEGY[name](content, context)).toEqual( + new Strategy(content, contextStrategy(context), domStrategy()), + ); + }, + ); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/replaceable-route-container.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/replaceable-route-container.component.spec.ts new file mode 100644 index 0000000000..9b8b62ef46 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/replaceable-route-container.component.spec.ts @@ -0,0 +1,65 @@ +import { Component } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; +import { BehaviorSubject } from 'rxjs'; +import { ReplaceableRouteContainerComponent } from '../components/replaceable-route-container.component'; +import { ReplaceableComponentsService } from '../services/replaceable-components.service'; + +@Component({ + selector: 'abp-external-component', + template: '

external

', +}) +export class ExternalComponent {} + +@Component({ + selector: 'abp-default-component', + template: '

default

', +}) +export class DefaultComponent {} + +const activatedRouteMock = { + snapshot: { + data: { + replaceableComponent: { + defaultComponent: DefaultComponent, + key: 'TestModule.TestComponent', + }, + }, + }, +}; + +describe('ReplaceableRouteContainerComponent', () => { + let spectator: SpectatorHost; + const get$Res = new BehaviorSubject(undefined); + + const createHost = createHostFactory({ + component: ReplaceableRouteContainerComponent, + providers: [ + { provide: ActivatedRoute, useValue: activatedRouteMock }, + { provide: ReplaceableComponentsService, useValue: { get$: () => get$Res } }, + ], + declarations: [ExternalComponent, DefaultComponent], + entryComponents: [DefaultComponent, ExternalComponent], + mocks: [Router], + }); + + beforeEach(() => { + spectator = createHost('', { + detectChanges: true, + }); + }); + + it('should display the default component', () => { + expect(spectator.query('p')).toHaveText('default'); + }); + + it("should display the external component if it's available in store.", () => { + get$Res.next({ component: ExternalComponent }); + spectator.detectChanges(); + expect(spectator.query('p')).toHaveText('external'); + + get$Res.next({ component: null }); + spectator.detectChanges(); + expect(spectator.query('p')).toHaveText('default'); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/replaceable-template.directive.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/replaceable-template.directive.spec.ts new file mode 100644 index 0000000000..300f9e64d7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/replaceable-template.directive.spec.ts @@ -0,0 +1,173 @@ +import { Component, EventEmitter, Inject, Input, OnInit, Optional, Output } from '@angular/core'; +import { Router } from '@angular/router'; +import { createDirectiveFactory, SpectatorDirective } from '@ngneat/spectator/jest'; +import { BehaviorSubject } from 'rxjs'; +import { ReplaceableTemplateDirective } from '../directives'; +import { ReplaceableComponents } from '../models'; +import { ReplaceableComponentsService } from '../services/replaceable-components.service'; + +@Component({ + selector: 'abp-default-component', + template: '

default

', + exportAs: 'abpDefaultComponent', +}) +class DefaultComponent implements OnInit { + @Input() + oneWay; + + @Input() + twoWay: boolean; + + @Output() + readonly twoWayChange = new EventEmitter(); + + @Output() + readonly someOutput = new EventEmitter(); + + ngOnInit() {} + + setTwoWay(value) { + this.twoWay = value; + this.twoWayChange.emit(value); + } +} + +@Component({ + selector: 'abp-external-component', + template: '

external

', +}) +class ExternalComponent { + constructor( + @Optional() + @Inject('REPLACEABLE_DATA') + public data: ReplaceableComponents.ReplaceableTemplateData, + ) {} +} + +describe('ReplaceableTemplateDirective', () => { + let spectator: SpectatorDirective; + const get$Res = new BehaviorSubject(undefined); + + const createDirective = createDirectiveFactory({ + directive: ReplaceableTemplateDirective, + declarations: [DefaultComponent, ExternalComponent], + entryComponents: [ExternalComponent], + mocks: [Router], + providers: [{ provide: ReplaceableComponentsService, useValue: { get$: () => get$Res } }], + }); + + describe('without external component', () => { + const twoWayChange = jest.fn(a => a); + const someOutput = jest.fn(a => a); + + beforeEach(() => { + spectator = createDirective( + ` +
+ +
+ `, + { hostProps: { oneWay: { label: 'Test' }, twoWay: false, twoWayChange, someOutput } }, + ); + + const component = spectator.query(DefaultComponent); + spectator.directive.context.initTemplate(component); + spectator.detectChanges(); + }); + + afterEach(() => twoWayChange.mockClear()); + + it('should display the default template when store response is undefined', () => { + expect(spectator.query('abp-default-component')).toBeTruthy(); + }); + + it('should be setted inputs and outputs', () => { + const component = spectator.query(DefaultComponent); + expect(component.oneWay).toEqual({ label: 'Test' }); + expect(component.twoWay).toEqual(false); + }); + + it('should change the component inputs', () => { + const component = spectator.query(DefaultComponent); + spectator.setHostInput({ oneWay: 'test' }); + component.setTwoWay(true); + component.someOutput.emit('someOutput emitted'); + expect(component.oneWay).toBe('test'); + expect(twoWayChange).toHaveBeenCalledWith(true); + expect(someOutput).toHaveBeenCalledWith('someOutput emitted'); + }); + }); + + describe('with external component', () => { + const twoWayChange = jest.fn(a => a); + const someOutput = jest.fn(a => a); + + beforeEach(() => { + spectator = createDirective( + ` +
+ +
+ `, + { hostProps: { oneWay: { label: 'Test' }, twoWay: false, twoWayChange, someOutput } }, + ); + + get$Res.next({ component: ExternalComponent, key: 'TestModule.TestComponent' }); + }); + + afterEach(() => twoWayChange.mockClear()); + + it('should display the external component', () => { + expect(spectator.query('p')).toHaveText('external'); + }); + + it('should be injected the data object', () => { + const externalComponent = spectator.query(ExternalComponent); + expect(externalComponent.data).toEqual({ + componentKey: 'TestModule.TestComponent', + inputs: { oneWay: { label: 'Test' }, twoWay: false }, + outputs: { someOutput, twoWayChange }, + }); + }); + + it('should be worked all data properties', () => { + const externalComponent = spectator.query(ExternalComponent); + spectator.setHostInput({ oneWay: 'test' }); + externalComponent.data.inputs.twoWay = true; + externalComponent.data.outputs.someOutput('someOutput emitted'); + expect(externalComponent.data.inputs.oneWay).toBe('test'); + expect(twoWayChange).toHaveBeenCalledWith(true); + expect(someOutput).toHaveBeenCalledWith('someOutput emitted'); + + spectator.setHostInput({ twoWay: 'twoWay test' }); + expect(externalComponent.data.inputs.twoWay).toBe('twoWay test'); + }); + + it('should be worked correctly the default component when the external component has been removed from store', () => { + expect(spectator.query('p')).toHaveText('external'); + const externalComponent = spectator.query(ExternalComponent); + spectator.setHostInput({ oneWay: 'test' }); + externalComponent.data.inputs.twoWay = true; + get$Res.next({ component: null, key: 'TestModule.TestComponent' }); + spectator.detectChanges(); + const component = spectator.query(DefaultComponent); + spectator.directive.context.initTemplate(component); + expect(spectator.query('abp-default-component')).toBeTruthy(); + + expect(component.oneWay).toEqual('test'); + expect(component.twoWay).toEqual(true); + }); + + it('should reset default component subscriptions', () => { + get$Res.next({ component: null, key: 'TestModule.TestComponent' }); + const component = spectator.query(DefaultComponent); + spectator.directive.context.initTemplate(component); + spectator.detectChanges(); + const unsubscribe = jest.fn(() => {}); + spectator.directive.defaultComponentSubscriptions.twoWayChange.unsubscribe = unsubscribe; + + get$Res.next({ component: ExternalComponent, key: 'TestModule.TestComponent' }); + expect(unsubscribe).toHaveBeenCalled(); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/rest.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/rest.service.spec.ts new file mode 100644 index 0000000000..e9d0ab5ebc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/rest.service.spec.ts @@ -0,0 +1,120 @@ +import { createHttpFactory, HttpMethod, SpectatorHttp, SpyObject } from '@ngneat/spectator/jest'; +import { Store } from '@ngxs/store'; +import { OAuthService } from 'angular-oauth2-oidc'; +import { of, throwError } from 'rxjs'; +import { catchError } from 'rxjs/operators'; +import { Rest } from '../models'; +import { EnvironmentService } from '../services'; +import { RestService } from '../services/rest.service'; +import { CORE_OPTIONS } from '../tokens'; + +describe('HttpClient testing', () => { + let spectator: SpectatorHttp; + let environmentService: SpyObject; + let store: SpyObject; + const api = 'https://abp.io'; + + const createHttp = createHttpFactory({ + dataService: RestService, + providers: [EnvironmentService, { provide: CORE_OPTIONS, useValue: { environment: {} } }], + mocks: [OAuthService, Store], + }); + + beforeEach(() => { + spectator = createHttp(); + environmentService = spectator.inject(EnvironmentService); + store = spectator.inject(Store); + environmentService.setState({ + apis: { + default: { + url: api, + }, + foo: { + url: 'bar', + }, + }, + }); + }); + + afterEach(() => { + spectator.controller.verify(); + }); + + test('should send a GET request with params', () => { + spectator.service + .request({ method: HttpMethod.GET, url: '/test', params: { id: 1 } }) + .subscribe(); + spectator.expectOne(api + '/test?id=1', HttpMethod.GET); + }); + + test('should send a POST request with body', () => { + spectator.service + .request({ method: HttpMethod.POST, url: '/test', body: { id: 1 } }) + .subscribe(); + const req = spectator.expectOne(api + '/test', HttpMethod.POST); + expect(req.request.body['id']).toEqual(1); + }); + + test('should use the specific api', () => { + spectator.service + .request({ method: HttpMethod.GET, url: '/test' }, null, 'http://test.api') + .subscribe(); + spectator.expectOne('http://test.api' + '/test', HttpMethod.GET); + }); + + test('should use the url of a specific API when apiName is given', () => { + spectator.service + .request({ method: HttpMethod.GET, url: '/test' }, { apiName: 'foo' }) + .subscribe(); + + spectator.expectOne('bar' + '/test', HttpMethod.GET); + }); + + test('should complete upon successful request', done => { + const complete = jest.fn(done); + + spectator.service.request({ method: HttpMethod.GET, url: '/test' }).subscribe({ complete }); + + const req = spectator.expectOne(api + '/test', HttpMethod.GET); + spectator.flushAll([req], [{}]); + }); + + test('should handle the error', () => { + const spy = jest.spyOn(store, 'dispatch'); + + spectator.service + .request({ method: HttpMethod.GET, url: '/test' }, { observe: Rest.Observe.Events }) + .pipe( + catchError(err => { + expect(err).toBeTruthy(); + expect(spy).toHaveBeenCalled(); + return of(null); + }), + ) + .subscribe(); + + const req = spectator.expectOne(api + '/test', HttpMethod.GET); + spectator.flushAll([req], [throwError('Testing error')]); + }); + + test('should not handle the error when skipHandleError is true', () => { + const spy = jest.spyOn(store, 'dispatch'); + + spectator.service + .request( + { method: HttpMethod.GET, url: '/test' }, + { observe: Rest.Observe.Events, skipHandleError: true }, + ) + .pipe( + catchError(err => { + expect(err).toBeTruthy(); + expect(spy).toHaveBeenCalledTimes(0); + return of(null); + }), + ) + .subscribe(); + + const req = spectator.expectOne(api + '/test', HttpMethod.GET); + spectator.flushAll([req], [throwError('Testing error')]); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/route-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/route-utils.spec.ts new file mode 100644 index 0000000000..3945a6527d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/route-utils.spec.ts @@ -0,0 +1,82 @@ +import { Component } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { createRoutingFactory, SpectatorRouting } from '@ngneat/spectator/jest'; +import { RouterOutletComponent } from '../components'; +import { RoutesService } from '../services/routes.service'; +import { findRoute, getRoutePath } from '../utils/route-utils'; + +// tslint:disable-next-line +@Component({ template: '' }) +class DummyComponent {} + +describe('Route Utils', () => { + describe('#findRoute', () => { + const node = { path: '/foo' }; + + test.each` + path | expected | count + ${'/foo/bar/baz'} | ${node} | ${3} + ${'/foo/bar'} | ${node} | ${2} + ${'/foo'} | ${node} | ${1} + ${'/'} | ${null} | ${1} + `( + 'should find $expected in $count turns when path is $path', + async ({ path, expected, count }) => { + const find = jest.fn(cb => (cb(node) ? node : null)); + const routes = ({ find } as any) as RoutesService; + const route = findRoute(routes, path); + expect(route).toBe(expected); + expect(find).toHaveBeenCalledTimes(count); + }, + ); + }); + + describe('#getRoutePath', () => { + let spectator: SpectatorRouting; + const createRouting = createRoutingFactory({ + component: RouterOutletComponent, + stubsEnabled: false, + declarations: [DummyComponent], + imports: [RouterModule], + routes: [ + { + path: '', + children: [ + { + path: 'foo', + children: [ + { + path: 'bar', + children: [ + { + path: 'baz', + component: DummyComponent, + }, + ], + }, + ], + }, + ], + }, + ], + }); + + beforeEach(async () => { + spectator = createRouting(); + }); + + test.each` + url | expected + ${''} | ${'/'} + ${'/'} | ${'/'} + ${'/foo'} | ${'/foo'} + ${'/foo/bar'} | ${'/foo/bar'} + ${'/foo/bar/baz'} | ${'/foo/bar/baz'} + ${'/foo?bar=baz'} | ${'/foo'} + ${'/foo#bar'} | ${'/foo'} + `('should return $expected when url is $url', async ({ url, expected }) => { + await spectator.router.navigateByUrl(url); + expect(getRoutePath(spectator.router)).toBe(expected); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/router-events.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/router-events.service.spec.ts new file mode 100644 index 0000000000..0226c09d1e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/router-events.service.spec.ts @@ -0,0 +1,111 @@ +import { + NavigationCancel, + NavigationEnd, + NavigationError, + NavigationStart, + ResolveEnd, + ResolveStart, + Router, + RouterEvent, +} from '@angular/router'; +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { Subject } from 'rxjs'; +import { take } from 'rxjs/operators'; +import { NavigationEventKey, RouterEvents } from '../services/router-events.service'; + +describe('RouterEvents', () => { + let spectator: SpectatorService; + let service: RouterEvents; + const events = new Subject(); + const emitRouterEvents = () => { + events.next(new RouterEvent(0, null)); + events.next(new NavigationStart(1, null, null)); + events.next(new ResolveStart(2, null, null, null)); + events.next(new RouterEvent(3, null)); + events.next(new NavigationError(4, null, null)); + events.next(new NavigationEnd(5, null, null)); + events.next(new ResolveEnd(6, null, null, null)); + events.next(new NavigationCancel(7, null, null)); + }; + + const createService = createServiceFactory({ + service: RouterEvents, + providers: [ + { + provide: Router, + useValue: { events }, + }, + ], + }); + + beforeEach(() => { + spectator = createService(); + service = spectator.service; + }); + + describe('getNavigationEvents', () => { + test.each` + filtered | expected + ${['Start', 'Cancel']} | ${[1, 7]} + ${['Error', 'Cancel']} | ${[4, 7]} + ${['Start', 'End']} | ${[1, 5]} + ${['Error', 'End']} | ${[4, 5]} + `( + 'should return a stream of given navigation events', + ({ filtered, expected }: NavigationEventTest) => { + const stream = service.getNavigationEvents(...filtered); + const collected: number[] = []; + + stream.pipe(take(2)).subscribe(event => collected.push(event.id)); + + emitRouterEvents(); + + expect(collected).toEqual(expected); + }, + ); + }); + + describe('getAnyNavigationEvent', () => { + it('should return a stream of any navigation event', () => { + const stream = service.getAllNavigationEvents(); + const collected: number[] = []; + + stream.pipe(take(4)).subscribe(event => collected.push(event.id)); + + emitRouterEvents(); + + expect(collected).toEqual([1, 4, 5, 7]); + }); + }); + + describe('getEvents', () => { + it('should return a stream of given router events', () => { + const stream = service.getEvents(ResolveEnd, ResolveStart); + const collected: number[] = []; + + stream.pipe(take(2)).subscribe(event => collected.push(event.id)); + + emitRouterEvents(); + + expect(collected).toEqual([2, 6]); + }); + }); + + describe('getAnyEvent', () => { + it('should return a stream of any router event', () => { + const stream = service.getAllEvents(); + const collected: number[] = []; + + stream.pipe(take(8)).subscribe((event: RouterEvent) => collected.push(event.id)); + + emitRouterEvents(); + + expect(collected).toEqual([0, 1, 2, 3, 4, 5, 6, 7]); + }); + }); +}); + +interface NavigationEventTest { + filtered: [NavigationEventKey, ...NavigationEventKey[]]; + expected: number[]; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/router-outlet.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/router-outlet.component.spec.ts new file mode 100644 index 0000000000..b7e79b9c08 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/router-outlet.component.spec.ts @@ -0,0 +1,14 @@ +import { Spectator, createComponentFactory, createHostFactory } from '@ngneat/spectator/jest'; +import { RouterTestingModule } from '@angular/router/testing'; +import { RouterOutletComponent } from '../components/router-outlet.component'; + +describe('RouterOutletComponent', () => { + let spectator: Spectator; + const createHost = createHostFactory({ component: RouterOutletComponent, imports: [RouterTestingModule] }); + + it('should have a router-outlet element', () => { + spectator = createHost(''); + expect((spectator.debugElement.nativeElement as HTMLElement).children.length).toBe(1); + expect((spectator.debugElement.nativeElement as HTMLElement).children[0].tagName).toBe('ROUTER-OUTLET'); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/routes.handler.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/routes.handler.spec.ts new file mode 100644 index 0000000000..777df39c60 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/routes.handler.spec.ts @@ -0,0 +1,40 @@ +import { Router } from '@angular/router'; +import { RoutesHandler } from '../handlers'; +import { RoutesService } from '../services'; + +describe('Routes Handler', () => { + describe('#add', () => { + it('should add routes from router config', () => { + const config = [ + { path: 'x' }, + { path: 'y', data: {} }, + { path: '', data: { routes: { name: 'Foo' } } }, + { path: 'bar', data: { routes: { name: 'Bar' } } }, + { data: { routes: [{ path: '/baz', name: 'Baz' }] } }, + ]; + const foo = [{ path: '/', name: 'Foo' }]; + const bar = [{ path: '/bar', name: 'Bar' }]; + const baz = [{ path: '/baz', name: 'Baz' }]; + + const routes = []; + const add = jest.fn(routes.push.bind(routes)); + const mockRoutesService = ({ add } as unknown) as RoutesService; + const mockRouter = ({ config } as unknown) as Router; + + const handler = new RoutesHandler(mockRoutesService, mockRouter); + + expect(add).toHaveBeenCalledTimes(3); + expect(routes).toEqual([foo, bar, baz]); + }); + + it('should not add routes when there is no router', () => { + const routes = []; + const add = jest.fn(routes.push.bind(routes)); + const mockRoutesService = ({ add } as unknown) as RoutesService; + + const handler = new RoutesHandler(mockRoutesService, null); + + expect(add).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/routes.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/routes.service.spec.ts new file mode 100644 index 0000000000..8f68be56de --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/routes.service.spec.ts @@ -0,0 +1,191 @@ +import { Subject } from 'rxjs'; +import { take } from 'rxjs/operators'; +import { RoutesService } from '../services'; +import { DummyInjector, mockActions } from './utils/common.utils'; +import { mockPermissionService } from './utils/permission-service.spec.utils'; + +const updateStream$ = new Subject(); + +export const mockRoutesService = (injectorPayload = {} as { [key: string]: any }) => { + const injector = new DummyInjector({ + PermissionService: mockPermissionService(), + ConfigStateService: { createOnUpdateStream: () => updateStream$ }, + ...injectorPayload, + }); + return new RoutesService(injector); +}; + +describe('Routes Service', () => { + let service: RoutesService; + const routes = [ + { path: '/foo', name: 'foo' }, + { path: '/foo/bar', name: 'bar', parentName: 'foo', invisible: true, order: 2 }, + { path: '/foo/bar/baz', name: 'baz', parentName: 'bar', order: 1 }, + { path: '/foo/bar/baz/qux', name: 'qux', parentName: 'baz', order: 1 }, + { path: '/foo/x', name: 'x', parentName: 'foo', order: 1 }, + ]; + + beforeEach(() => { + service = mockRoutesService(); + }); + + describe('#add', () => { + it('should add given routes as flat$, tree$, and visible$', async () => { + service.add(routes); + + const flat = await service.flat$.pipe(take(1)).toPromise(); + const tree = await service.tree$.pipe(take(1)).toPromise(); + const visible = await service.visible$.pipe(take(1)).toPromise(); + + expect(flat.length).toBe(5); + expect(flat[0].name).toBe('baz'); + expect(flat[1].name).toBe('qux'); + expect(flat[2].name).toBe('x'); + expect(flat[3].name).toBe('bar'); + expect(flat[4].name).toBe('foo'); + + expect(tree.length).toBe(1); + expect(tree[0].name).toBe('foo'); + expect(tree[0].children.length).toBe(2); + expect(tree[0].children[0].name).toBe('x'); + expect(tree[0].children[1].name).toBe('bar'); + expect(tree[0].children[1].children[0].name).toBe('baz'); + expect(tree[0].children[1].children[0].children[0].name).toBe('qux'); + + expect(visible.length).toBe(1); + expect(visible[0].name).toBe('foo'); + expect(visible[0].children.length).toBe(1); + expect(visible[0].children[0].name).toBe('x'); + }); + }); + + describe('#find', () => { + it('should return node found based on query', () => { + service.add(routes); + const result = service.find(route => route.invisible); + expect(result.name).toBe('bar'); + expect(result.children.length).toBe(1); + expect(result.children[0].name).toBe('baz'); + }); + + it('should return null when query is not found', () => { + service.add(routes); + const result = service.find(route => route.requiredPolicy === 'X'); + expect(result).toBe(null); + }); + }); + + describe('#hasChildren', () => { + it('should return if node has invisible child', () => { + service.add(routes); + + expect(service.hasChildren('foo')).toBe(true); + expect(service.hasChildren('bar')).toBe(true); + expect(service.hasChildren('baz')).toBe(true); + expect(service.hasChildren('qux')).toBe(false); + }); + }); + + describe('#hasInvisibleChild', () => { + it('should return if node has invisible child', () => { + service.add(routes); + + expect(service.hasInvisibleChild('foo')).toBe(true); + expect(service.hasInvisibleChild('bar')).toBe(false); + expect(service.hasInvisibleChild('baz')).toBe(false); + }); + }); + + describe('#remove', () => { + it('should remove routes based on given routeNames', () => { + service.add(routes); + service.remove(['bar']); + + const flat = service.flat; + const tree = service.tree; + const visible = service.visible; + + expect(flat.length).toBe(2); + expect(flat[1].name).toBe('foo'); + expect(flat[0].name).toBe('x'); + + expect(tree.length).toBe(1); + expect(tree[0].name).toBe('foo'); + expect(tree[0].children.length).toBe(1); + expect(tree[0].children[0].name).toBe('x'); + + expect(visible.length).toBe(1); + expect(visible[0].name).toBe('foo'); + expect(visible[0].children.length).toBe(1); + expect(visible[0].children[0].name).toBe('x'); + }); + }); + + describe('#patch', () => { + it('should patch propeties of routes based on given routeNames', () => { + service['isGranted'] = jest.fn(route => route.requiredPolicy !== 'X'); + service.add(routes); + service.patch('x', { requiredPolicy: 'X' }); + + const flat = service.flat; + const tree = service.tree; + const visible = service.visible; + + expect(flat.length).toBe(5); + expect(flat[0].name).toBe('baz'); + expect(flat[1].name).toBe('qux'); + expect(flat[2].name).toBe('x'); + expect(flat[3].name).toBe('bar'); + expect(flat[4].name).toBe('foo'); + + expect(tree.length).toBe(1); + expect(tree[0].name).toBe('foo'); + expect(tree[0].children.length).toBe(2); + expect(tree[0].children[0].name).toBe('x'); + expect(tree[0].children[1].name).toBe('bar'); + expect(tree[0].children[1].children[0].name).toBe('baz'); + expect(tree[0].children[1].children[0].children[0].name).toBe('qux'); + + expect(visible.length).toBe(1); + expect(visible[0].name).toBe('foo'); + expect(visible[0].children.length).toBe(0); + }); + + it('should return false when route name is not found', () => { + service.add(routes); + const result = service.patch('A man has no name.', { invisible: true }); + expect(result).toBe(false); + }); + }); + + describe('#refresh', () => { + it('should call add once with empty array', () => { + const add = jest.spyOn(service, 'add'); + service.refresh(); + expect(add).toHaveBeenCalledTimes(1); + expect(add).toHaveBeenCalledWith([]); + }); + + it('should be called upon successful GetAppConfiguration action', () => { + const refresh = jest.spyOn(service, 'refresh'); + updateStream$.next(); + expect(refresh).toHaveBeenCalledTimes(1); + }); + }); + + describe('#search', () => { + it('should return node found based on query', () => { + service.add(routes); + const result = service.search({ invisible: true }); + expect(result.name).toBe('bar'); + expect(result.children.length).toBe(1); + expect(result.children[0].name).toBe('baz'); + }); + + it('should return null when query is not found', () => { + service.add(routes); + const result = service.search({ requiredPolicy: 'X' }); + expect(result).toBe(null); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/sort.pipe.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/sort.pipe.spec.ts new file mode 100644 index 0000000000..b69d139091 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/sort.pipe.spec.ts @@ -0,0 +1,48 @@ +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { SortPipe } from '../pipes/sort.pipe'; + +describe('SortPipe', () => { + let pipe: SortPipe; + let spectator: SpectatorService; + const createService = createServiceFactory(SortPipe); + + beforeEach(() => { + spectator = createService(); + pipe = spectator.service; + }); + + test('should sort array in ascending and descending orders', () => { + expect(pipe.transform([5, 'b', 1, 'a'], 'asc')).toEqual([1, 5, 'a', 'b']); + expect(pipe.transform([5, 'b', 1, 'a'], 'desc')).toEqual(['b', 'a', 5, 1]); + }); + + test('should sort object array in given order with given key', () => { + const array = [ + { key: 5 }, + { key: 'b' }, + { key: 1 }, + { key: 'a' }, + { key: null }, + ]; + + expect(pipe.transform(array, 'asc', 'key')).toEqual([ + { key: 1 }, + { key: 5 }, + { key: 'a' }, + { key: 'b' }, + { key: null }, + ]); + expect(pipe.transform(array, 'desc', 'key')).toEqual([ + { key: null }, + { key: 'b' }, + { key: 'a' }, + { key: 5 }, + { key: 1 }, + ]); + }); + + test('should require an array as value', () => { + expect(pipe.transform(null)).toBeFalsy(); + expect(pipe.transform(undefined, 'desc')).toBeFalsy(); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/stop-propagation.directive.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/stop-propagation.directive.spec.ts new file mode 100644 index 0000000000..f054601efa --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/stop-propagation.directive.spec.ts @@ -0,0 +1,39 @@ +import { createDirectiveFactory, SpectatorDirective } from '@ngneat/spectator/jest'; +import { StopPropagationDirective } from '../directives/stop-propagation.directive'; + +describe('StopPropagationDirective', () => { + let spectator: SpectatorDirective; + let directive: StopPropagationDirective; + let link: HTMLAnchorElement; + const childClickEventFn = jest.fn(() => null); + const parentClickEventFn = jest.fn(() => null); + const createDirective = createDirectiveFactory({ + directive: StopPropagationDirective, + }); + + beforeEach(() => { + spectator = createDirective( + '', + { + hostProps: { parentClickEventFn, childClickEventFn }, + }, + ); + directive = spectator.directive; + link = spectator.query('a'); + childClickEventFn.mockClear(); + parentClickEventFn.mockClear(); + }); + + test('should be created', () => { + expect(directive).toBeTruthy(); + }); + + test('should not call click event of parent when child element is clicked', done => { + spectator.setHostInput({ parentClickEventFn, childClickEventFn }); + spectator.click('a'); + spectator.detectChanges(); + expect(childClickEventFn).toHaveBeenCalled(); + expect(parentClickEventFn).not.toHaveBeenCalled(); + done(); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/string-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/string-utils.spec.ts new file mode 100644 index 0000000000..c2f7a3c601 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/string-utils.spec.ts @@ -0,0 +1,46 @@ +import { createTokenParser, interpolate } from '../utils/string-utils'; + +describe('String Utils', () => { + describe('#createTokenParser', () => { + const parseTokens = createTokenParser('{subDomain}.{domain}.{gtld}|{domain}.{gtld}'); + + test.each` + url | subDomain | domain | gtld + ${'www.example.com'} | ${'www'} | ${'example'} | ${'com'} + ${'test.sub.example.com'} | ${'test.sub'} | ${'example'} | ${'com'} + ${'example.com'} | ${undefined} | ${'example'} | ${'com'} + `( + 'should return subDomain as $subDomain, domain as $domain, and gtld as $gtld when url is $url', + ({ url, subDomain, domain, gtld }) => { + const parsed = parseTokens(url); + expect(parsed.subDomain[0]).toBe(subDomain); + expect(parsed.domain[0]).toBe(domain); + expect(parsed.gtld[0]).toBe(gtld); + }, + ); + }); + + describe('#interpolate', () => { + test.each` + text | params | expected + ${'This is {0} and {1} example.'} | ${['foo', 'bar']} | ${'This is foo and bar example.'} + ${'This is {1} and {0} example.'} | ${['foo', 'bar']} | ${'This is bar and foo example.'} + ${'This is {0} and {0} example.'} | ${['foo', 'bar']} | ${'This is foo and foo example.'} + ${'This is {1} and {1} example.'} | ${['foo', 'bar']} | ${'This is bar and bar example.'} + ${'This is "{0}" and "{1}" example.'} | ${['foo', 'bar']} | ${'This is foo and bar example.'} + ${"This is '{1}' and '{0}' example."} | ${['foo', 'bar']} | ${'This is bar and foo example.'} + ${'This is { 0 } and {0} example.'} | ${['foo', 'bar']} | ${'This is foo and foo example.'} + ${'This is {1} and { 1 } example.'} | ${['foo', 'bar']} | ${'This is bar and bar example.'} + ${'This is {0}, {3}, {1}, and {2} example.'} | ${['foo', 'bar', 'baz', 'qux']} | ${'This is foo, qux, bar, and baz example.'} + ${'This is {0} with 0 example.'} | ${['foo']} | ${'This is foo with 0 example.'} + ${'This is {0} and {1} example.'} | ${['foo']} | ${'This is foo and {1} example.'} + ${'This is {0} and {1} example.'} | ${[]} | ${'This is {0} and {1} example.'} + ${'This is {0} example.'} | ${[null]} | ${'This is {0} example.'} + `( + 'should return $expected when text is $text and params are $params', + ({ text, params, expected }) => { + expect(interpolate(text, params)).toBe(expected); + }, + ); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/subscription.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/subscription.service.spec.ts new file mode 100644 index 0000000000..d0c8c4754f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/subscription.service.spec.ts @@ -0,0 +1,109 @@ +import { of, Subscription, timer } from 'rxjs'; +import { SubscriptionService } from '../services/subscription.service'; + +describe('SubscriptionService', () => { + let service: SubscriptionService; + + beforeEach(() => { + service = new SubscriptionService(); + }); + + afterEach(() => { + service['subscription'].unsubscribe(); + }); + + describe('#addOne', () => { + it('should subscribe to given observable with next and error functions and return the Subscription instance', () => { + const next = jest.fn(); + const error = jest.fn(); + const subscription = service.addOne(of(null), next, error); + expect(subscription).toBeInstanceOf(Subscription); + expect(next).toHaveBeenCalledWith(null); + expect(next).toHaveBeenCalledTimes(1); + expect(error).not.toHaveBeenCalled(); + }); + + it('should subscribe to given observable with observer and return the Subscription instance', () => { + const observer = { next: jest.fn(), complete: jest.fn() }; + const subscription = service.addOne(of(null), observer); + expect(subscription).toBeInstanceOf(Subscription); + expect(observer.next).toHaveBeenCalledWith(null); + expect(observer.next).toHaveBeenCalledTimes(1); + expect(observer.complete).toHaveBeenCalledTimes(1); + }); + }); + + describe('#isClosed', () => { + it('should return true if subscriptions are alive and false if not', () => { + service.addOne(timer(1000), () => {}); + expect(service.isClosed).toBe(false); + + service['subscription'].unsubscribe(); + expect(service.isClosed).toBe(true); + }); + }); + + describe('#closeAll', () => { + it('should close all subscriptions and the parent subscription', () => { + const sub1 = service.addOne(timer(1000), () => {}); + const sub2 = service.addOne(timer(1000), () => {}); + + expect(sub1.closed).toBe(false); + expect(sub2.closed).toBe(false); + expect(service.isClosed).toBe(false); + + service.closeAll(); + + expect(sub1.closed).toBe(true); + expect(sub2.closed).toBe(true); + expect(service.isClosed).toBe(true); + }); + }); + + describe('#reset', () => { + it('should close all subscriptions but not the parent subscription', () => { + const sub1 = service.addOne(timer(1000), () => {}); + const sub2 = service.addOne(timer(1000), () => {}); + + expect(sub1.closed).toBe(false); + expect(sub2.closed).toBe(false); + expect(service.isClosed).toBe(false); + + service.reset(); + + expect(sub1.closed).toBe(true); + expect(sub2.closed).toBe(true); + expect(service.isClosed).toBe(false); + }); + }); + + describe('#closeOne', () => { + it('should unsubscribe from given subscription only', () => { + const sub1 = service.addOne(timer(1000), () => {}); + const sub2 = service.addOne(timer(1000), () => {}); + expect(service.isClosed).toBe(false); + + service.closeOne(sub1); + expect(sub1.closed).toBe(true); + expect(service.isClosed).toBe(false); + + service.closeOne(sub2); + expect(sub2.closed).toBe(true); + expect(service.isClosed).toBe(false); + }); + }); + + describe('#removeOne', () => { + it('should remove given subscription from list of subscriptions', () => { + const sub1 = service.addOne(timer(1000), () => {}); + const sub2 = service.addOne(timer(1000), () => {}); + expect(service.isClosed).toBe(false); + + service.removeOne(sub1); + expect(sub1.closed).toBe(false); + expect(service.isClosed).toBe(false); + + sub1.unsubscribe(); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/track-by.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/track-by.service.spec.ts new file mode 100644 index 0000000000..377f129ff5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/track-by.service.spec.ts @@ -0,0 +1,21 @@ +import { TrackByService } from '../services/track-by.service'; + +describe('TrackByService', () => { + const service = new TrackByService(); + + describe('#by', () => { + it('should return a function which tracks a property', () => { + expect(service.by('x')(284, { x: 1036 })).toBe(1036); + }); + }); + + describe('#byDeep', () => { + it('should return a function which tracks a deeply-nested property', () => { + const obj = { + a: { b: { c: { x: 1036 } } }, + }; + + expect(service.byDeep('a', 'b', 'c', 'x')(284, obj)).toBe(1036); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/tree-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/tree-utils.spec.ts new file mode 100644 index 0000000000..b4f8721f47 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/tree-utils.spec.ts @@ -0,0 +1,146 @@ +import { + BaseTreeNode, + createTreeFromList, + createTreeNodeFilterCreator, + TreeNode, +} from '../utils/tree-utils'; + +const LIST_1 = [ + { id: 1, pid: null }, + { id: 2, pid: 1 }, +]; +const LIST_2 = [ + { id: 1, pid: null }, + { id: 2, pid: 1 }, + { id: 3, pid: 1 }, +]; +const LIST_3 = [ + { id: 1, pid: null }, + { id: 2, pid: 1 }, + { id: 3, pid: 2 }, +]; +const TREE_1 = [ + { id: 1, pid: null, isLeaf: false, children: [{ id: 2, pid: 1, isLeaf: true, children: [] }] }, +]; +const TREE_2 = [ + { + id: 1, + pid: null, + isLeaf: false, + children: [ + { id: 2, pid: 1, isLeaf: true, children: [] }, + { id: 3, pid: 1, isLeaf: true, children: [] }, + ], + }, +]; +const TREE_3 = [ + { + id: 1, + pid: null, + isLeaf: false, + children: [ + { id: 2, pid: 1, isLeaf: false, children: [{ id: 3, pid: 2, isLeaf: true, children: [] }] }, + ], + }, +]; +const SOURCE_TREE: TreeNode[] = [ + { + id: 1, + pid: null, + isLeaf: false, + name: 'foo', + children: [ + { + id: 2, + pid: 1, + name: 'bar', + isLeaf: false, + children: [{ id: 3, pid: 2, name: 'qux', isLeaf: true, children: [] }], + }, + { id: 4, pid: 1, name: 'baz', isLeaf: true, children: [] }, + { id: 5, pid: 1, name: 'quux', isLeaf: true, children: [] }, + ], + }, +]; +const RESULT_TREE_1 = [ + { id: 3, pid: 2, name: 'qux', isLeaf: true, children: [] }, + { id: 5, pid: 1, name: 'quux', isLeaf: true, children: [] }, +]; +const RESULT_TREE_2 = [{ id: 5, pid: 1, name: 'quux', isLeaf: true, children: [] }]; +const RESULT_TREE_3 = [ + { + id: 2, + pid: 1, + name: 'bar', + isLeaf: false, + children: [{ id: 3, pid: 2, name: 'qux', isLeaf: true, children: [] }], + }, + { id: 4, pid: 1, name: 'baz', isLeaf: true, children: [] }, +]; +const RESULT_TREE_4 = [{ id: 4, pid: 1, name: 'baz', isLeaf: true, children: [] }]; + +describe('Tree Utils', () => { + describe('createTreeFromList', () => { + test.each` + list | expected + ${LIST_1} | ${TREE_1} + ${LIST_2} | ${TREE_2} + ${LIST_3} | ${TREE_3} + `('should return $expected when given $list', ({ list, expected }: TestCreateTreeFromList) => { + const tree = createTreeFromList( + list, + x => x.id, + x => x.pid, + x => BaseTreeNode.create(x), + ); + + expect(removeParents(tree)).toEqual(expected); + }); + }); + + describe('createTreeNodeFilterCreator', () => { + test.each` + search | expected + ${'qu'} | ${RESULT_TREE_1} + ${'quu'} | ${RESULT_TREE_2} + ${'ba'} | ${RESULT_TREE_3} + ${'baz'} | ${RESULT_TREE_4} + `( + 'should return $expected when $search is searched', + ({ search, expected }: TestCreateTreeNodeFilter) => { + const filter = createTreeNodeFilterCreator('name', String)(search); + + expect(filter(SOURCE_TREE)).toEqual(expected); + }, + ); + }); +}); + +function removeParents(tree: TreeNode[]) { + return tree.map(v => { + const { parent, ...node } = v; + node.children = removeParents(node.children); + return node; + }); +} + +interface TestCreateTreeFromList { + list: Model[]; + expected: TreeNode[]; +} + +interface Model { + id: number; + pid?: number; +} + +interface TestCreateTreeNodeFilter { + search: string; + expected: TreeNode[]; +} + +interface SearchModel { + id: number; + pid?: number; + name: string; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/utils/common.utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/utils/common.utils.ts new file mode 100644 index 0000000000..ba05659736 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/utils/common.utils.ts @@ -0,0 +1,28 @@ +import { Observable, of, Subject } from 'rxjs'; +import { Store } from '@ngxs/store'; +import { AbstractType, InjectFlags, InjectionToken, Injector, Type } from '@angular/core'; + +export const mockActions = new Subject(); +export const mockStore = ({ + selectSnapshot() { + return true; + }, + select(): Observable { + return of(null); + }, +} as unknown) as Store; + +export class DummyInjector extends Injector { + constructor(public payload: { [key: string]: any }) { + super(); + } + get( + token: Type | InjectionToken | AbstractType, + notFoundValue?: T, + flags?: InjectFlags, + ): T; + get(token: any, notFoundValue?: any): any; + get(token, notFoundValue?, flags?: InjectFlags): any { + return this.payload[token.name || token]; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/utils/permission-service.spec.utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/utils/permission-service.spec.utils.ts new file mode 100644 index 0000000000..ef1a264c2b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/utils/permission-service.spec.utils.ts @@ -0,0 +1,7 @@ +import { PermissionService } from '../../services'; +import { Subject } from 'rxjs'; + +export const mockPermissionService = (args = {} as Partial) => { + const permissionService = { getGrantedPolicy$: new Subject(), getGrantedPolicy: arg => true }; + return Object.assign({}, permissionService, args); +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/validators.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/validators.spec.ts new file mode 100644 index 0000000000..5d666a24c3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/validators.spec.ts @@ -0,0 +1,181 @@ +import { FormControl, Validators } from '@angular/forms'; +import { AbpValidators, validateMinAge, validateRange } from '../validators'; +import { validateCreditCard } from '../validators/credit-card.validator'; +import { validateRequired } from '../validators/required.validator'; +import { validateStringLength } from '../validators/string-length.validator'; +import { validateUrl } from '../validators/url.validator'; + +describe('Validators', () => { + describe('Credit Card Validator', () => { + const error = { creditCard: true }; + + test.each` + input | expected + ${undefined} | ${null} + ${null} | ${null} + ${''} | ${null} + ${'0'} | ${error} + ${'5105105105105100' /* Mastercard */} | ${null} + ${'5105105105105101' /* Mastercard */} | ${error} + ${'5105 1051 0510 5100'} | ${null} + ${'5105-1051-0510-5100'} | ${null} + ${'5105 - 1051 - 0510 - 5100'} | ${null} + ${'4111111111111111' /*Visa*/} | ${null} + ${'4111111111111112' /*Visa*/} | ${error} + ${'4012888888881881' /* Visa */} | ${null} + ${'4012888888881882' /* Visa */} | ${error} + ${'4222222222222' /* Visa */} | ${null} + ${'4222222222223' /* Visa */} | ${error} + ${'378282246310005' /* American Express */} | ${null} + ${'378282246310006' /* American Express */} | ${error} + ${'6011111111111117' /* Discover */} | ${null} + ${'6011111111111118' /* Discover */} | ${error} + `('should return $expected when input is $input', ({ input, expected }) => { + const control = new FormControl(input, [validateCreditCard()]); + control.markAsDirty({ onlySelf: true }); + control.updateValueAndValidity({ onlySelf: true, emitEvent: false }); + + expect(control.errors).toEqual(expected); + }); + }); + + describe('Email Validator', () => { + it('should return email validator of Angular', () => { + expect(AbpValidators.emailAddress()).toBe(Validators.email); + }); + }); + + describe('Min Age Validator', () => { + const date = new Date(); + const year = date.getFullYear(); + const month = date.getMonth() + 1; + const day = date.getDate(); + const sameDay21yAgo = `${year - 21}-${month}-${day}`; + const nextDay21yAgo = `${year - 21}-${month}-${day + 1}`; + + test.each` + input | options | expected + ${null} | ${undefined} | ${null} + ${undefined} | ${undefined} | ${null} + ${''} | ${undefined} | ${null} + ${0} | ${undefined} | ${null} + ${Infinity} | ${undefined} | ${{ minAge: { age: 18 } }} + ${sameDay21yAgo} | ${undefined} | ${null} + ${sameDay21yAgo} | ${{ age: 21 }} | ${null} + ${nextDay21yAgo} | ${{ age: 21 }} | ${{ minAge: { age: 21 } }} + `( + 'should return $expected when input is $input and options are $options', + ({ input, options, expected }) => { + const control = new FormControl(input, [validateMinAge(options)]); + control.markAsDirty({ onlySelf: true }); + control.updateValueAndValidity({ onlySelf: true, emitEvent: false }); + + expect(control.errors).toEqual(expected); + }, + ); + }); + + describe('Range Validator', () => { + test.each` + input | options | expected + ${null} | ${undefined} | ${null} + ${undefined} | ${undefined} | ${null} + ${''} | ${undefined} | ${null} + ${0} | ${undefined} | ${null} + ${Infinity} | ${undefined} | ${null} + ${'-1'} | ${{ minimum: 0 }} | ${{ range: { min: 0, max: Infinity } }} + ${-1} | ${{ minimum: 0 }} | ${{ range: { min: 0, max: Infinity } }} + ${2} | ${{ minimum: 3, maximum: 5 }} | ${{ range: { min: 3, max: 5 } }} + ${3} | ${{ minimum: 3, maximum: 5 }} | ${null} + ${5} | ${{ minimum: 3, maximum: 5 }} | ${null} + ${6} | ${{ minimum: 3, maximum: 5 }} | ${{ range: { min: 3, max: 5 } }} + `( + 'should return $expected when input is $input and options are $options', + ({ input, options, expected }) => { + const control = new FormControl(input, [validateRange(options)]); + control.markAsDirty({ onlySelf: true }); + control.updateValueAndValidity({ onlySelf: true, emitEvent: false }); + + expect(control.errors).toEqual(expected); + }, + ); + }); + + describe('Required Validator', () => { + const error = { required: true }; + + test.each` + input | options | expected + ${0} | ${undefined} | ${null} + ${false} | ${undefined} | ${null} + ${null} | ${undefined} | ${error} + ${undefined} | ${undefined} | ${error} + ${''} | ${undefined} | ${error} + ${''} | ${{}} | ${error} + ${''} | ${{ allowEmptyStrings: false }} | ${error} + ${''} | ${{ allowEmptyStrings: true }} | ${null} + `( + 'should return $expected when input is $input and options are $options', + ({ input, options, expected }) => { + const control = new FormControl(input, [validateRequired(options)]); + control.markAsDirty({ onlySelf: true }); + control.updateValueAndValidity({ onlySelf: true, emitEvent: false }); + + expect(control.errors).toEqual(expected); + }, + ); + }); + + describe('String Length Validator', () => { + test.each` + input | options | expected + ${null} | ${undefined} | ${null} + ${undefined} | ${undefined} | ${null} + ${''} | ${undefined} | ${null} + ${'ab'} | ${{ minimumLength: 3 }} | ${{ minlength: { requiredLength: 3 } }} + ${'abp'} | ${{ minimumLength: 3 }} | ${null} + ${'abp'} | ${{ maximumLength: 2 }} | ${{ maxlength: { requiredLength: 2 } }} + ${'abp'} | ${{ maximumLength: 3 }} | ${null} + `( + 'should return $expected when input is $input and options are $options', + ({ input, options, expected }) => { + const control = new FormControl(input, [validateStringLength(options)]); + control.markAsDirty({ onlySelf: true }); + control.updateValueAndValidity({ onlySelf: true, emitEvent: false }); + + expect(control.errors).toEqual(expected); + }, + ); + }); + + describe('Url Validator', () => { + const error = { url: true }; + + test.each` + input | expected + ${undefined} | ${null} + ${null} | ${null} + ${''} | ${null} + ${'http://x'} | ${null} + ${'http:///x'} | ${error} + ${'https://x'} | ${null} + ${'https:///x'} | ${error} + ${'ftp://x'} | ${null} + ${'ftp:///x'} | ${error} + ${'http://x.com'} | ${null} + ${'http://x.photography'} | ${null} + ${'http://www.x.org'} | ${null} + ${'http://sub.x.gov.tr'} | ${null} + ${'x'} | ${error} + ${'x.com'} | ${error} + ${'www.x.org'} | ${error} + ${'sub.x.gov.tr'} | ${error} + `('should return $expected when input is $input', ({ input, expected }) => { + const control = new FormControl(input, [validateUrl()]); + control.markAsDirty({ onlySelf: true }); + control.updateValueAndValidity({ onlySelf: true, emitEvent: false }); + + expect(control.errors).toEqual(expected); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/visibility.directive.spec.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/visibility.directive.spec.ts new file mode 100644 index 0000000000..04c217eed5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/visibility.directive.spec.ts @@ -0,0 +1,126 @@ +import { SpectatorDirective, createDirectiveFactory } from '@ngneat/spectator/jest'; +import { VisibilityDirective } from '../directives/visibility.directive'; + +describe('VisibilityDirective', () => { + let spectator: SpectatorDirective; + let directive: VisibilityDirective; + const createDirective = createDirectiveFactory({ + directive: VisibilityDirective, + }); + + describe('without content', () => { + beforeEach(() => { + spectator = createDirective('
'); + directive = spectator.directive; + }); + + it('should be created', () => { + expect(directive).toBeTruthy(); + }); + + xit('should be removed', done => { + setTimeout(() => { + expect(spectator.query('div')).toBeFalsy(); + done(); + }, 0); + }); + }); + + describe('without mutation observer and with content', () => { + beforeEach(() => { + spectator = createDirective('

Content

'); + directive = spectator.directive; + }); + + it('should not removed', done => { + setTimeout(() => { + expect(spectator.query('div')).toBeTruthy(); + done(); + }, 0); + }); + }); + + describe('without mutation observer and with focused element', () => { + beforeEach(() => { + spectator = createDirective( + '

Content

', + ); + directive = spectator.directive; + }); + + it('should not removed', done => { + setTimeout(() => { + expect(spectator.query('#main')).toBeTruthy(); + done(); + }, 0); + }); + }); + + describe('without content and with focused element', () => { + beforeEach(() => { + spectator = createDirective( + '
', + ); + directive = spectator.directive; + }); + + xit('should be removed', done => { + setTimeout(() => { + expect(spectator.query('#main')).toBeFalsy(); + done(); + }, 0); + }); + }); + + describe('with mutation observer and with content', () => { + beforeEach(() => { + spectator = createDirective('
Content
'); + directive = spectator.directive; + }); + + xit('should remove the main div element when content removed', done => { + spectator.query('#content').remove(); + + setTimeout(() => { + expect(spectator.query('div')).toBeFalsy(); + done(); + }, 0); + }); + + it('should not remove the main div element', done => { + spectator.query('div').appendChild(document.createElement('div')); + + setTimeout(() => { + expect(spectator.query('div')).toBeTruthy(); + done(); + }, 100); + }); + }); + + describe('with mutation observer and with focused element', () => { + beforeEach(() => { + spectator = createDirective( + '

Content

', + ); + directive = spectator.directive; + }); + + xit('should remove the main div element when content removed', done => { + spectator.query('#content').remove(); + + setTimeout(() => { + expect(spectator.query('#main')).toBeFalsy(); + done(); + }, 0); + }); + + it('should not remove the main div element', done => { + spectator.query('#content').appendChild(document.createElement('div')); + + setTimeout(() => { + expect(spectator.query('#main')).toBeTruthy(); + done(); + }, 100); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/app-config.token.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/app-config.token.ts new file mode 100644 index 0000000000..a6343af170 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/app-config.token.ts @@ -0,0 +1,7 @@ +import { InjectionToken } from '@angular/core'; + +export type AppInitErrorFn = (error: any) => void; + +export const APP_INIT_ERROR_HANDLERS = new InjectionToken( + 'APP_INIT_ERROR_HANDLERS', +); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/index.ts new file mode 100644 index 0000000000..4d102ee8b4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/index.ts @@ -0,0 +1,6 @@ +export * from './list.token'; +export * from './lodaer-delay.token'; +export * from './manage-profile.token'; +export * from './options.token'; +export * from './app-config.token'; +export * from './tenant-key.token'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/list.token.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/list.token.ts new file mode 100644 index 0000000000..b51ffb9fb3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/list.token.ts @@ -0,0 +1,3 @@ +import { InjectionToken } from '@angular/core'; + +export const LIST_QUERY_DEBOUNCE_TIME = new InjectionToken('LIST_QUERY_DEBOUNCE_TIME'); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/lodaer-delay.token.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/lodaer-delay.token.ts new file mode 100644 index 0000000000..270059e437 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/lodaer-delay.token.ts @@ -0,0 +1,3 @@ +import { InjectionToken } from '@angular/core'; + +export const LOADER_DELAY = new InjectionToken('LOADER_DELAY'); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/manage-profile.token.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/manage-profile.token.ts new file mode 100644 index 0000000000..3bc1c41c14 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/manage-profile.token.ts @@ -0,0 +1,21 @@ +import { InjectionToken, inject } from '@angular/core'; +import { EnvironmentService } from '../services/environment.service'; + +export const NAVIGATE_TO_MANAGE_PROFILE = new InjectionToken<() => void>( + 'NAVIGATE_TO_MANAGE_PROFILE', + { + providedIn: 'root', + factory: () => { + const environment = inject(EnvironmentService); + + return () => { + window.open( + `${environment.getEnvironment().oAuthConfig.issuer}/Account/Manage?returnUrl=${ + window.location.href + }`, + '_self', + ); + }; + }, + }, +); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/options.token.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/options.token.ts new file mode 100644 index 0000000000..5bb1e71bf7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/options.token.ts @@ -0,0 +1,10 @@ +import { InjectionToken } from '@angular/core'; +import { ABP } from '../models/common'; + +export const CORE_OPTIONS = new InjectionToken('CORE_OPTIONS'); + +export function coreOptionsFactory({ ...options }: ABP.Root) { + return { + ...options, + } as ABP.Root; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/tenant-key.token.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/tenant-key.token.ts new file mode 100644 index 0000000000..1999b3b9f7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/tenant-key.token.ts @@ -0,0 +1,3 @@ +import { InjectionToken } from '@angular/core'; + +export const TENANT_KEY = new InjectionToken('TENANT_KEY'); diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/array-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/array-utils.ts new file mode 100644 index 0000000000..d2d74105b3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/array-utils.ts @@ -0,0 +1,6 @@ +export function pushValueTo(array: T[]) { + return (element: T) => { + array.push(element); + return array; + }; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/auth-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/auth-utils.ts new file mode 100644 index 0000000000..44da3f7c4a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/auth-utils.ts @@ -0,0 +1,62 @@ +import { Injector } from '@angular/core'; +import { Router } from '@angular/router'; +import { OAuthStorage, TokenResponse } from 'angular-oauth2-oidc'; +import { pipe } from 'rxjs'; +import { switchMap, tap } from 'rxjs/operators'; +import { LoginParams } from '../models/auth'; +import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; +import { ConfigStateService } from '../services/config-state.service'; + +const cookieKey = 'rememberMe'; +const storageKey = 'passwordFlow'; + +export function pipeToLogin( + params: Pick, + injector: Injector, +) { + const configState = injector.get(ConfigStateService); + const appConfigService = injector.get(AbpApplicationConfigurationService); + const router = injector.get(Router); + + return pipe( + switchMap(() => appConfigService.get()), + tap(res => { + configState.setState(res); + setRememberMe(params.rememberMe); + if (params.redirectUrl) router.navigate([params.redirectUrl]); + }), + ); +} + +export function setTokenResponseToStorage(injector: Injector, tokenRes: TokenResponse) { + const { access_token, refresh_token, scope: grantedScopes, expires_in } = tokenRes; + const storage = injector.get(OAuthStorage); + + storage.setItem('access_token', access_token); + storage.setItem('refresh_token', refresh_token); + storage.setItem('access_token_stored_at', '' + Date.now()); + + if (grantedScopes) { + storage.setItem('granted_scopes', JSON.stringify(grantedScopes.split(' '))); + } + + if (expires_in) { + const expiresInMilliSeconds = expires_in * 1000; + const now = new Date(); + const expiresAt = now.getTime() + expiresInMilliSeconds; + storage.setItem('expires_at', '' + expiresAt); + } +} + +export function setRememberMe(remember: boolean) { + removeRememberMe(); + localStorage.setItem(storageKey, 'true'); + document.cookie = `${cookieKey}=true; path=/${ + remember ? ' ;expires=Fri, 31 Dec 9999 23:59:59 GMT' : '' + }`; +} + +export function removeRememberMe() { + localStorage.removeItem(storageKey); + document.cookie = cookieKey + '= ; path=/; expires = Thu, 01 Jan 1970 00:00:00 GMT'; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/common-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/common-utils.ts new file mode 100644 index 0000000000..3b0446240b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/common-utils.ts @@ -0,0 +1,37 @@ +export function noop() { + // tslint:disable-next-line: only-arrow-functions + const fn = function() {}; + return fn; +} + +export function isUndefinedOrEmptyString(value: unknown): boolean { + return value === undefined || value === ''; +} + +export function isNullOrUndefined(obj) { + return obj === null || obj === undefined; +} + +export function exists(obj) { + return !isNullOrUndefined(obj); +} + +export function isObject(obj) { + return obj instanceof Object; +} + +export function isArray(obj) { + return Array.isArray(obj); +} + +export function isObjectAndNotArray(obj) { + return isObject(obj) && !isArray(obj); +} + +export function isNode(obj) { + return obj instanceof Node; +} + +export function isObjectAndNotArrayNotNode(obj) { + return isObjectAndNotArray(obj) && !isNode(obj); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/date-extensions.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/date-extensions.ts new file mode 100644 index 0000000000..8f0d17504d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/date-extensions.ts @@ -0,0 +1,13 @@ +export {}; + +declare global { + interface Date { + toLocalISOString?: () => string; + } +} + +Date.prototype.toLocalISOString = function(this: Date): string { + const timezoneOffset = this.getTimezoneOffset(); + + return new Date(this.getTime() - timezoneOffset * 60000).toISOString(); +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/date-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/date-utils.ts new file mode 100644 index 0000000000..6c4793f895 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/date-utils.ts @@ -0,0 +1,27 @@ +import { ApplicationConfiguration } from '../models/application-configuration'; +import { DateTimeFormatDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; +import { ConfigStateService } from '../services'; + +export function getShortDateFormat(configStateService: ConfigStateService) { + const dateTimeFormat = configStateService.getDeep( + 'localization.currentCulture.dateTimeFormat', + ) as DateTimeFormatDto; + + return dateTimeFormat.shortDatePattern; +} + +export function getShortTimeFormat(configStateService: ConfigStateService) { + const dateTimeFormat = configStateService.getDeep( + 'localization.currentCulture.dateTimeFormat', + ) as DateTimeFormatDto; + + return dateTimeFormat.shortTimePattern.replace('tt', 'a'); +} + +export function getShortDateShortTimeFormat(configStateService: ConfigStateService) { + const dateTimeFormat = configStateService.getDeep( + 'localization.currentCulture.dateTimeFormat', + ) as DateTimeFormatDto; + + return `${dateTimeFormat.shortDatePattern} ${dateTimeFormat.shortTimePattern.replace('tt', 'a')}`; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/environment-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/environment-utils.ts new file mode 100644 index 0000000000..6dc9a7de16 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/environment-utils.ts @@ -0,0 +1,44 @@ +import { HttpClient } from '@angular/common/http'; +import { Injector } from '@angular/core'; +import { Store } from '@ngxs/store'; +import { catchError, tap } from 'rxjs/operators'; +import { RestOccurError } from '../actions/rest.actions'; +import { Environment, RemoteEnv } from '../models/environment'; +import { EnvironmentService } from '../services/environment.service'; +import { deepMerge } from './object-utils'; + +export function getRemoteEnv(injector: Injector, environment: Partial) { + const environmentService = injector.get(EnvironmentService); + + const { remoteEnv } = environment; + const { headers = {}, method = 'GET', url } = remoteEnv || ({} as RemoteEnv); + if (!url) return Promise.resolve(); + + const http = injector.get(HttpClient); + const store = injector.get(Store); + + return http + .request(method, url, { headers }) + .pipe( + catchError(err => store.dispatch(new RestOccurError(err))), // TODO: Condiser get handle function from a provider + tap(env => environmentService.setState(mergeEnvironments(environment, env, remoteEnv))), + ) + .toPromise(); +} + +function mergeEnvironments( + local: Partial, + remote: any, + config: RemoteEnv, +): Environment { + switch (config.mergeStrategy) { + case 'deepmerge': + return deepMerge(local, remote); + case 'overwrite': + case null: + case undefined: + return remote; + default: + return config.mergeStrategy(local, remote); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/factory-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/factory-utils.ts new file mode 100644 index 0000000000..c9542f3dba --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/factory-utils.ts @@ -0,0 +1,41 @@ +import { + Compiler, + Injector, + ModuleWithProviders, + NgModuleFactory, + NgModuleRef, + StaticProvider, + Type, +} from '@angular/core'; +import { filter, map } from 'rxjs/operators'; +import { ConfigStateService } from '../services/config-state.service'; + +export class LazyModuleFactory extends NgModuleFactory { + get moduleType(): Type { + return this.moduleWithProviders.ngModule; + } + + constructor(private moduleWithProviders: ModuleWithProviders) { + super(); + } + + create(parentInjector: Injector | null): NgModuleRef { + const injector = Injector.create({ + parent: parentInjector, + providers: this.moduleWithProviders.providers as StaticProvider[], + }); + + const compiler = injector.get(Compiler); + const factory = compiler.compileModuleSync(this.moduleType); + + return factory.create(injector); + } +} + +export function featuresFactory( + configState: ConfigStateService, + featureKeys: string[], + mapFn: (features) => any = features => features, +) { + return configState.getFeatures$(featureKeys).pipe(filter(Boolean), map(mapFn)); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/file-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/file-utils.ts new file mode 100644 index 0000000000..b5241ec096 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/file-utils.ts @@ -0,0 +1,20 @@ +export function downloadBlob(blob: Blob, filename: string) { + const blobUrl = URL.createObjectURL(blob); + + const link = document.createElement('a'); + + link.href = blobUrl; + link.download = filename; + + document.body.appendChild(link); + + link.dispatchEvent( + new MouseEvent('click', { + bubbles: true, + cancelable: true, + view: window, + }), + ); + + document.body.removeChild(link); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/form-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/form-utils.ts new file mode 100644 index 0000000000..414b259ab9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/form-utils.ts @@ -0,0 +1,15 @@ +import { ABP } from '../models/common'; +import { isNumber } from './number-utils'; + +export function mapEnumToOptions(_enum: T): ABP.Option[] { + const options: ABP.Option[] = []; + + for (const member in _enum) + if (!isNumber(member)) + options.push({ + key: member, + value: _enum[member], + }); + + return options; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/generator-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/generator-utils.ts new file mode 100644 index 0000000000..a5fd4c9c65 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/generator-utils.ts @@ -0,0 +1,43 @@ +// tslint:disable: no-bitwise + +export function uuid(a?: any): string { + return a + ? (a ^ ((Math.random() * 16) >> (a / 4))).toString(16) + : ('' + 1e7 + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, uuid); +} + +export function generateHash(value: string): number { + let hashed = 0; + let charCode: number; + + for (let i = 0; i < value.length; i++) { + charCode = value.charCodeAt(i); + hashed = (hashed << 5) - hashed + charCode; + hashed |= 0; + } + return hashed; +} + +export function generatePassword(length = 8) { + length = Math.min(Math.max(4, length), 128); + + const lowers = 'abcdefghijklmnopqrstuvwxyz'; + const uppers = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + const numbers = '0123456789'; + const specials = '!@#$%&*()_+{}<>?[]./'; + const all = lowers + uppers + numbers + specials; + + const getRandom = (chrSet: string) => chrSet[Math.floor(Math.random() * chrSet.length)]; + + const password = Array({ length }); + password[0] = getRandom(lowers); + password[1] = getRandom(uppers); + password[2] = getRandom(numbers); + password[3] = getRandom(specials); + + for (let i = 4; i < length; i++) { + password[i] = getRandom(all); + } + + return password.sort(() => 0.5 - Math.random()).join(''); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/http-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/http-utils.ts new file mode 100644 index 0000000000..032674acec --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/http-utils.ts @@ -0,0 +1,24 @@ +import { HttpParameterCodec } from '@angular/common/http'; + +export function getPathName(url: string): string { + const { pathname } = new URL(url, window.location.origin); + return pathname; +} + +export class WebHttpUrlEncodingCodec implements HttpParameterCodec { + encodeKey(k: string): string { + return encodeURIComponent(k); + } + + encodeValue(v: string): string { + return encodeURIComponent(v); + } + + decodeKey(k: string): string { + return decodeURIComponent(k); + } + + decodeValue(v: string) { + return decodeURIComponent(v); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/index.ts new file mode 100644 index 0000000000..e7fe63deb0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/index.ts @@ -0,0 +1,21 @@ +export * from './array-utils'; +export * from './auth-utils'; +export * from './common-utils'; +export * from './date-utils'; +export * from './environment-utils'; +export * from './factory-utils'; +export * from './file-utils'; +export * from './form-utils'; +export * from './generator-utils'; +export * from './http-utils'; +export * from './initial-utils'; +export * from './internal-store-utils'; +export * from './lazy-load-utils'; +export * from './localization-utils'; +export * from './multi-tenancy-utils'; +export * from './number-utils'; +export * from './object-utils'; +export * from './route-utils'; +export * from './rxjs-utils'; +export * from './string-utils'; +export * from './tree-utils'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/initial-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/initial-utils.ts new file mode 100644 index 0000000000..87982d8bd0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/initial-utils.ts @@ -0,0 +1,83 @@ +import { registerLocaleData } from '@angular/common'; +import { Injector } from '@angular/core'; +import { OAuthService } from 'angular-oauth2-oidc'; +import { tap, catchError } from 'rxjs/operators'; +import { throwError } from 'rxjs'; +import { ABP } from '../models/common'; +import { Environment } from '../models/environment'; +import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; +import { CurrentTenantDto } from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; +import { AuthService } from '../services/auth.service'; +import { ConfigStateService } from '../services/config-state.service'; +import { EnvironmentService } from '../services/environment.service'; +import { SessionStateService } from '../services/session-state.service'; +import { clearOAuthStorage } from '../strategies/auth-flow.strategy'; +import { CORE_OPTIONS } from '../tokens/options.token'; +import { APP_INIT_ERROR_HANDLERS } from '../tokens/app-config.token'; +import { getRemoteEnv } from './environment-utils'; +import { parseTenantFromUrl } from './multi-tenancy-utils'; + +export function getInitialData(injector: Injector) { + const fn = async () => { + const environmentService = injector.get(EnvironmentService); + const configState = injector.get(ConfigStateService); + const appConfigService = injector.get(AbpApplicationConfigurationService); + const options = injector.get(CORE_OPTIONS) as ABP.Root; + + environmentService.setState(options.environment as Environment); + await getRemoteEnv(injector, options.environment); + await parseTenantFromUrl(injector); + await injector.get(AuthService).init(); + + if (options.skipGetAppConfiguration) return; + + return appConfigService + .get() + .pipe( + tap(res => configState.setState(res)), + tap(() => checkAccessToken(injector)), + tap(() => { + const currentTenant = configState.getOne('currentTenant') as CurrentTenantDto; + injector.get(SessionStateService).setTenant(currentTenant); + }), + catchError(error => { + const appInitErrorHandlers = injector.get(APP_INIT_ERROR_HANDLERS, null); + if (appInitErrorHandlers && appInitErrorHandlers.length) { + appInitErrorHandlers.forEach(func => func(error)); + } + + return throwError(error); + }), + ) + .toPromise(); + }; + + return fn; +} + +export function checkAccessToken(injector: Injector) { + const configState = injector.get(ConfigStateService); + const oAuth = injector.get(OAuthService); + if (oAuth.hasValidAccessToken() && !configState.getDeep('currentUser.id')) { + clearOAuthStorage(); + } +} + +export function localeInitializer(injector: Injector) { + const fn = () => { + const sessionState = injector.get(SessionStateService); + const { registerLocaleFn }: ABP.Root = injector.get(CORE_OPTIONS); + + const lang = sessionState.getLanguage() || 'en'; + + return new Promise((resolve, reject) => { + registerLocaleFn(lang).then(module => { + if (module?.default) registerLocaleData(module.default); + + return resolve('resolved'); + }, reject); + }); + }; + + return fn; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/internal-store-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/internal-store-utils.ts new file mode 100644 index 0000000000..27a8e9cbcf --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/internal-store-utils.ts @@ -0,0 +1,52 @@ +import compare from 'just-compare'; +import { BehaviorSubject, Subject } from 'rxjs'; +import { distinctUntilChanged, filter, map } from 'rxjs/operators'; +import { DeepPartial } from '../models'; +import { deepMerge } from './object-utils'; + +export class InternalStore { + private state$ = new BehaviorSubject(this.initialState); + + private update$ = new Subject>(); + + get state() { + return this.state$.value; + } + + sliceState = ( + selector: (state: State) => Slice, + compareFn: (s1: Slice, s2: Slice) => boolean = compare, + ) => this.state$.pipe(map(selector), distinctUntilChanged(compareFn)); + + sliceUpdate = ( + selector: (state: DeepPartial) => Slice, + filterFn = (x: Slice) => x !== undefined, + ) => this.update$.pipe(map(selector), filter(filterFn)); + + constructor(private initialState: State) {} + + patch(state: Partial) { + let patchedState = state as State; + + if (typeof state === 'object' && !Array.isArray(state)) { + patchedState = { ...this.state, ...state }; + } + + this.state$.next(patchedState); + this.update$.next(patchedState as DeepPartial); + } + + deepPatch(state: DeepPartial) { + this.state$.next(deepMerge(this.state, state)); + this.update$.next(state); + } + + set(state: State) { + this.state$.next(state); + this.update$.next(state as DeepPartial); + } + + reset() { + this.set(this.initialState); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/lazy-load-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/lazy-load-utils.ts new file mode 100644 index 0000000000..f602bf06ef --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/lazy-load-utils.ts @@ -0,0 +1,51 @@ +import { Observable, Observer } from 'rxjs'; +import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from '../strategies/cross-origin.strategy'; +import { DomStrategy, DOM_STRATEGY } from '../strategies/dom.strategy'; + +export function fromLazyLoad( + element: HTMLScriptElement | HTMLLinkElement, + domStrategy: DomStrategy = DOM_STRATEGY.AppendToHead(), + crossOriginStrategy: CrossOriginStrategy = CROSS_ORIGIN_STRATEGY.Anonymous(), +): Observable { + crossOriginStrategy.setCrossOrigin(element); + domStrategy.insertElement(element); + + return new Observable((observer: Observer) => { + element.onload = (event: T) => { + clearCallbacks(element); + observer.next(event); + observer.complete(); + }; + + const handleError = createErrorHandler(observer, element); + + element.onerror = handleError; + element.onabort = handleError; + element.onemptied = handleError; + element.onstalled = handleError; + element.onsuspend = handleError; + + return () => { + clearCallbacks(element); + observer.complete(); + }; + }); +} + +function createErrorHandler(observer: Observer, element: HTMLElement) { + /* tslint:disable-next-line:only-arrow-functions */ + return function(event: Event | string) { + clearCallbacks(element); + element.parentNode.removeChild(element); + observer.error(event); + }; +} + +function clearCallbacks(element: HTMLElement) { + element.onload = null; + element.onerror = null; + element.onabort = null; + element.onemptied = null; + element.onstalled = null; + element.onsuspend = null; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/localization-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/localization-utils.ts new file mode 100644 index 0000000000..0e22713449 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/localization-utils.ts @@ -0,0 +1,66 @@ +import snq from 'snq'; +import { ApplicationLocalizationConfigurationDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; + +// This will not be necessary when only Angukar 9.1+ is supported +export function getLocaleDirection(locale: string): 'ltr' | 'rtl' { + return /^(ar(-[A-Z]{2})?|ckb(-IR)?|fa(-AF)?|he|ks|lrc(-IQ)?|mzn|pa-Arab|ps(-PK)?|sd|ug|ur(-IN)?|uz-Arab|yi)$/.test( + locale, + ) + ? 'rtl' + : 'ltr'; +} + +export function createLocalizer(localization: ApplicationLocalizationConfigurationDto) { + return (resourceName: string, key: string, defaultValue: string) => { + if (resourceName === '_') return key; + + const resource = snq(() => localization.values[resourceName]); + + if (!resource) return defaultValue; + + return resource[key] || defaultValue; + }; +} + +export function createLocalizerWithFallback(localization: ApplicationLocalizationConfigurationDto) { + const findLocalization = createLocalizationFinder(localization); + + return (resourceNames: string[], keys: string[], defaultValue: string) => { + const { localized } = findLocalization(resourceNames, keys); + return localized || defaultValue; + }; +} + +export function createLocalizationPipeKeyGenerator( + localization: ApplicationLocalizationConfigurationDto, +) { + const findLocalization = createLocalizationFinder(localization); + + return (resourceNames: string[], keys: string[], defaultKey: string) => { + const { resourceName, key } = findLocalization(resourceNames, keys); + return !resourceName ? defaultKey : resourceName === '_' ? key : `${resourceName}::${key}`; + }; +} + +function createLocalizationFinder(localization: ApplicationLocalizationConfigurationDto) { + const localize = createLocalizer(localization); + + return (resourceNames: string[], keys: string[]) => { + resourceNames = resourceNames.concat(localization.defaultResourceName).filter(Boolean); + + const resourceCount = resourceNames.length; + const keyCount = keys.length; + + for (let i = 0; i < resourceCount; i++) { + const resourceName = resourceNames[i]; + + for (let j = 0; j < keyCount; j++) { + const key = keys[j]; + const localized = localize(resourceName, key, null); + if (localized) return { resourceName, key, localized }; + } + } + + return { resourceName: undefined, key: undefined, localized: undefined }; + }; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/multi-tenancy-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/multi-tenancy-utils.ts new file mode 100644 index 0000000000..0b755cf9b4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/multi-tenancy-utils.ts @@ -0,0 +1,109 @@ +import { Injector } from '@angular/core'; +import clone from 'just-clone'; + +import { tap } from 'rxjs/operators'; +import { Environment } from '../models/environment'; + +import { FindTenantResultDto } from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; +import { EnvironmentService } from '../services/environment.service'; +import { MultiTenancyService } from '../services/multi-tenancy.service'; +import { createTokenParser } from './string-utils'; + +const tenancyPlaceholder = '{0}'; + +function getCurrentTenancyName(appBaseUrl: string): string { + if (appBaseUrl.charAt(appBaseUrl.length - 1) !== '/') appBaseUrl += '/'; + + const parseTokens = createTokenParser(appBaseUrl); + const token = tenancyPlaceholder.replace(/[}{]/g, ''); + return parseTokens(window.location.href)[token]?.[0]; +} + +function getCurrentTenancyNameFromUrl(tenantKey: string) { + const urlParams = new URLSearchParams(window.location.search); + return urlParams.get(tenantKey); +} + +export async function parseTenantFromUrl(injector: Injector) { + const environmentService = injector.get(EnvironmentService); + const multiTenancyService = injector.get(MultiTenancyService); + + const baseUrl = environmentService.getEnvironment()?.application?.baseUrl || ''; + const tenancyName = getCurrentTenancyName(baseUrl); + + const hideTenantBox = () => { + multiTenancyService.isTenantBoxVisible = false; + }; + + const setDomainTenant = (tenant: FindTenantResultDto) => { + multiTenancyService.domainTenant = { + id: tenant.tenantId, + name: tenant.name, + isAvailable: true, + }; + }; + + const setEnvironmentWithDomainTenant = (tenant: FindTenantResultDto) => { + hideTenantBox(); + setDomainTenant(tenant); + }; + + if (tenancyName) { + /** + * We have to replace tenant name within the urls from environment, + * because the code below will make a http request to find information about the domain tenant. + * Before this request takes place, we need to replace placeholders aka "{0}". + */ + replaceTenantNameWithinEnvironment(injector, tenancyName); + return multiTenancyService + .setTenantByName(tenancyName) + .pipe(tap(setEnvironmentWithDomainTenant)) + .toPromise(); + } else { + /** + * If there is no tenant, we still have to clean up {0}. from baseUrl to avoid incorrect http requests. + */ + replaceTenantNameWithinEnvironment(injector, '', tenancyPlaceholder + '.'); + + const tenantIdFromQueryParams = getCurrentTenancyNameFromUrl(multiTenancyService.tenantKey); + if (tenantIdFromQueryParams) { + return multiTenancyService.setTenantById(tenantIdFromQueryParams).toPromise(); + } + } + + return Promise.resolve(); +} + +function replaceTenantNameWithinEnvironment( + injector: Injector, + tenancyName: string, + placeholder = tenancyPlaceholder, +) { + const environmentService = injector.get(EnvironmentService); + + const environment = clone(environmentService.getEnvironment()) as Environment; + + if (environment.application.baseUrl) { + environment.application.baseUrl = environment.application.baseUrl.replace( + placeholder, + tenancyName, + ); + } + + if (environment.oAuthConfig.redirectUri) { + environment.oAuthConfig.redirectUri = environment.oAuthConfig.redirectUri.replace( + placeholder, + tenancyName, + ); + } + + environment.oAuthConfig.issuer = environment.oAuthConfig.issuer.replace(placeholder, tenancyName); + + Object.keys(environment.apis).forEach(api => { + Object.keys(environment.apis[api]).forEach(key => { + environment.apis[api][key] = environment.apis[api][key].replace(placeholder, tenancyName); + }); + }); + + return environmentService.setState(environment); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/number-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/number-utils.ts new file mode 100644 index 0000000000..ebd44b67c6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/number-utils.ts @@ -0,0 +1,4 @@ +export function isNumber(value: string | number): boolean { + /* tslint:disable-next-line:triple-equals */ + return value == Number(value); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/object-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/object-utils.ts new file mode 100644 index 0000000000..29382ee738 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/object-utils.ts @@ -0,0 +1,46 @@ +import { + exists, + isArray, + isNode, + isNullOrUndefined, + isObject, + isObjectAndNotArrayNotNode, +} from './common-utils'; + +export function deepMerge(target, source) { + if (isObjectAndNotArrayNotNode(target) && isObjectAndNotArrayNotNode(source)) { + return deepMergeRecursively(target, source); + } else if (isNullOrUndefined(target) && isNullOrUndefined(source)) { + return {}; + } else { + return exists(source) ? source : target; + } +} + +function deepMergeRecursively(target, source) { + const shouldNotRecurse = + isNullOrUndefined(target) || + isNullOrUndefined(source) || // at least one not defined + isArray(target) || + isArray(source) || // at least one array + !isObject(target) || + !isObject(source) || // at least one not an object + isNode(target) || + isNode(source); // at least one node + + /** + * if we will not recurse any further, + * we will prioritize source if it is a defined value. + */ + if (shouldNotRecurse) { + return exists(source) ? source : target; + } + + const keysOfTarget = Object.keys(target); + const keysOfSource = Object.keys(source); + const uniqueKeys = new Set(keysOfTarget.concat(keysOfSource)); + return [...uniqueKeys].reduce((retVal, key) => { + retVal[key] = deepMergeRecursively(target[key], source[key]); + return retVal; + }, {}); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/route-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/route-utils.ts new file mode 100644 index 0000000000..07fad6a1fe --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/route-utils.ts @@ -0,0 +1,36 @@ +import { NgZone } from '@angular/core'; +import { PRIMARY_OUTLET, Router, UrlSegmentGroup } from '@angular/router'; +import { ABP } from '../models/common'; +import { RoutesService } from '../services/routes.service'; +import { noop } from './common-utils'; +import { TreeNode } from './tree-utils'; + +export function findRoute(routesService: RoutesService, path: string): TreeNode { + const node = routesService.find(route => route.path === path); + + return node || path === '/' + ? node + : findRoute(routesService, path.split('/').slice(0, -1).join('/') || '/'); +} + +export function getRoutePath(router: Router, url = router.url) { + const emptyGroup = { segments: [] } as UrlSegmentGroup; + const primaryGroup = router.parseUrl(url).root.children[PRIMARY_OUTLET]; + + return '/' + (primaryGroup || emptyGroup).segments.map(({ path }) => path).join('/'); +} + +export function reloadRoute(router: Router, ngZone: NgZone) { + const { shouldReuseRoute } = router.routeReuseStrategy; + const setRouteReuse = (reuse: typeof shouldReuseRoute) => { + router.routeReuseStrategy.shouldReuseRoute = reuse; + }; + + setRouteReuse(() => false); + router.navigated = false; + + ngZone.run(async () => { + await router.navigateByUrl(router.url).catch(noop); + setRouteReuse(shouldReuseRoute); + }); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/rxjs-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/rxjs-utils.ts new file mode 100644 index 0000000000..7e77bddba5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/rxjs-utils.ts @@ -0,0 +1,32 @@ +// tslint:disable: max-line-length +import { Observable, Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; + +function isFunction(value) { + return typeof value === 'function'; +} + +/** + * @deprecated no longer working, please use SubscriptionService (https://docs.abp.io/en/abp/latest/UI/Angular/Subscription-Service) instead. + */ +export const takeUntilDestroy = (componentInstance, destroyMethodName = 'ngOnDestroy') => ( + source: Observable, +) => { + const originalDestroy = componentInstance[destroyMethodName]; + if (isFunction(originalDestroy) === false) { + throw new Error( + `${componentInstance.constructor.name} is using untilDestroyed but doesn't implement ${destroyMethodName}`, + ); + } + if (!componentInstance['__takeUntilDestroy']) { + componentInstance['__takeUntilDestroy'] = new Subject(); + + componentInstance[destroyMethodName] = function() { + // tslint:disable-next-line: no-unused-expression + isFunction(originalDestroy) && originalDestroy.apply(this, arguments); + componentInstance['__takeUntilDestroy'].next(true); + componentInstance['__takeUntilDestroy'].complete(); + }; + } + return source.pipe(takeUntil(componentInstance['__takeUntilDestroy'])); +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/string-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/string-utils.ts new file mode 100644 index 0000000000..b6c4cce653 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/string-utils.ts @@ -0,0 +1,23 @@ +export function createTokenParser(format: string) { + return (str: string) => { + const tokens: string[] = []; + const regex = format.replace(/\./g, '\\.').replace(/\{\s?([0-9a-zA-Z]+)\s?\}/g, (_, token) => { + tokens.push(token); + return '(.+)'; + }); + + const matches = (str.match(regex) || []).slice(1); + + return matches.reduce((acc, v, i) => { + const key = tokens[i]; + acc[key] = [...(acc[key] || []), v].filter(Boolean); + return acc; + }, {} as Record); + }; +} + +export function interpolate(text: string, params: string[]) { + return text + .replace(/(['"]?\{\s*(\d+)\s*\}['"]?)/g, (_, match, digit) => params[digit] ?? match) + .replace(/\s+/g, ' '); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/tree-utils.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/tree-utils.ts new file mode 100644 index 0000000000..235820abd6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/tree-utils.ts @@ -0,0 +1,88 @@ +export class BaseTreeNode { + children: TreeNode[] = []; + isLeaf = true; + parent?: TreeNode; + + constructor(props: T) { + Object.assign(this, props); + } + + static create(props: T) { + return new BaseTreeNode(props) as TreeNode; + } +} + +export function createTreeFromList( + list: T[], + keySelector: (item: T) => NodeKey, + parentKeySelector: typeof keySelector, + valueMapper: (item: T) => R, +) { + const map = createMapFromList(list, keySelector, valueMapper); + const tree: NodeValue[] = []; + + list.forEach(row => { + const id = keySelector(row); + const parentId = parentKeySelector(row); + const node = map.get(id); + + if (!node) return; + + if (parentId) { + const parent = map.get(parentId); + if (!parent) return; + (parent as any).children.push(node); + (parent as any).isLeaf = false; + (node as any).parent = parent; + } else { + tree.push(node); + } + }); + + return tree; +} + +export function createMapFromList( + list: T[], + keySelector: (item: T) => NodeKey, + valueMapper: (item: T) => R, +) { + type Key = ReturnType; + type Value = NodeValue; + const map = new Map(); + list.forEach(row => map.set(keySelector(row), valueMapper(row))); + return map; +} + +export function createTreeNodeFilterCreator( + key: keyof T, + mapperFn: (value: any) => string, +) { + return (search: string) => { + const regex = new RegExp('.*' + search + '.*', 'i'); + + return function collectNodes(nodes: TreeNode[], matches = []) { + for (const node of nodes) { + if (regex.test(mapperFn(node[key]))) matches.push(node); + + if (node.children.length) collectNodes(node.children, matches); + } + + return matches; + }; + }; +} + +export type TreeNode = { + [K in keyof T]: T[K]; +} & { + children: TreeNode[]; + isLeaf: boolean; + parent?: TreeNode; +}; + +type NodeKey = number | string | symbol | undefined | null; + +type NodeValue any> = F extends undefined + ? TreeNode + : ReturnType; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/age.validator.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/age.validator.ts new file mode 100644 index 0000000000..ee2e7f9fd3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/age.validator.ts @@ -0,0 +1,27 @@ +import { AbstractControl, ValidatorFn } from '@angular/forms'; + +export interface MinAgeError { + minAge: { + age: number; + }; +} + +export interface MinAgeOptions { + age?: number; +} + +export function validateMinAge({ age = 18 }: MinAgeOptions = {}): ValidatorFn { + return (control: AbstractControl): MinAgeError | null => { + if (['', null, undefined].indexOf(control.value) > -1) return null; + + return isValidMinAge(control.value, age) ? null : { minAge: { age } }; + }; +} + +function isValidMinAge(value: string | number, minAge: number) { + const date = new Date(); + date.setFullYear(date.getFullYear() - minAge); + date.setHours(23, 59, 59, 999); + + return Number(new Date(value)) <= date.valueOf(); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/credit-card.validator.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/credit-card.validator.ts new file mode 100644 index 0000000000..b4ca128ef5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/credit-card.validator.ts @@ -0,0 +1,32 @@ +import { AbstractControl, ValidatorFn } from '@angular/forms'; + +export interface CreditCardError { + creditCard: true; +} + +export function validateCreditCard(): ValidatorFn { + return (control: AbstractControl): CreditCardError | null => { + if (['', null, undefined].indexOf(control.value) > -1) return null; + + return isValidCreditCard(String(control.value)) ? null : { creditCard: true }; + }; +} + +function isValidCreditCard(value: string): boolean { + value = value.replace(/[ -]/g, ''); + + if (!/^[0-9]{13,19}$/.test(value)) return false; + + let checksum = 0; + let multiplier = 1; + + for (let i = value.length; i > 0; i--) { + const digit = Number(value[i - 1]) * multiplier; + /* tslint:disable-next-line:no-bitwise */ + checksum += (digit % 10) + ~~(digit / 10); + + multiplier = (multiplier * 2) % 3; + } + + return checksum % 10 === 0; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/index.ts new file mode 100644 index 0000000000..fb06e7f1d8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/index.ts @@ -0,0 +1,23 @@ +import { Validators } from '@angular/forms'; +import { validateMinAge } from './age.validator'; +import { validateCreditCard } from './credit-card.validator'; +import { validateRange } from './range.validator'; +import { validateRequired } from './required.validator'; +import { validateStringLength } from './string-length.validator'; +import { validateUrl } from './url.validator'; +export * from './age.validator'; +export * from './credit-card.validator'; +export * from './range.validator'; +export * from './required.validator'; +export * from './string-length.validator'; +export * from './url.validator'; + +export const AbpValidators = { + creditCard: validateCreditCard, + emailAddress: () => Validators.email, + minAge: validateMinAge, + range: validateRange, + required: validateRequired, + stringLength: validateStringLength, + url: validateUrl, +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/range.validator.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/range.validator.ts new file mode 100644 index 0000000000..9497ed0407 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/range.validator.ts @@ -0,0 +1,30 @@ +import { AbstractControl, ValidatorFn } from '@angular/forms'; + +export interface RangeError { + range: { + max: number; + min: number; + }; +} + +export interface RangeOptions { + maximum?: number; + minimum?: number; +} + +export function validateRange({ maximum = Infinity, minimum = 0 }: RangeOptions = {}): ValidatorFn { + return (control: AbstractControl): RangeError | null => { + if (['', null, undefined].indexOf(control.value) > -1) return null; + + const value = Number(control.value); + return getMinError(value, minimum, maximum) || getMaxError(value, maximum, minimum); + }; +} + +function getMaxError(value: number, max: number, min: number): RangeError { + return value > max ? { range: { max, min } } : null; +} + +function getMinError(value: number, min: number, max: number): RangeError { + return value < min ? { range: { min, max } } : null; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/required.validator.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/required.validator.ts new file mode 100644 index 0000000000..bf2a4b47ee --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/required.validator.ts @@ -0,0 +1,23 @@ +import { AbstractControl, ValidatorFn } from '@angular/forms'; + +export interface RequiredError { + required: true; +} + +export interface RequiredOptions { + allowEmptyStrings?: boolean; +} + +export function validateRequired({ allowEmptyStrings }: RequiredOptions = {}): ValidatorFn { + return (control: AbstractControl): RequiredError | null => { + return isValidRequired(control.value, allowEmptyStrings) ? null : { required: true }; + }; +} + +function isValidRequired(value: any, allowEmptyStrings: boolean): boolean { + if (value || value === 0 || value === false) return true; + + if (allowEmptyStrings && value === '') return true; + + return false; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/string-length.validator.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/string-length.validator.ts new file mode 100644 index 0000000000..934188a4fb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/string-length.validator.ts @@ -0,0 +1,36 @@ +import { AbstractControl, ValidatorFn } from '@angular/forms'; + +export interface StringLengthError { + maxlength?: { + requiredLength: number; + }; + minlength?: { + requiredLength: number; + }; +} + +export interface StringLengthOptions { + maximumLength?: number; + minimumLength?: number; +} + +export function validateStringLength({ + maximumLength = Infinity, + minimumLength = 0, +}: StringLengthOptions = {}): ValidatorFn { + return (control: AbstractControl): StringLengthError | null => { + if (['', null, undefined].indexOf(control.value) > -1) return null; + + const value = String(control.value); + + return getMinLengthError(value, minimumLength) || getMaxLengthError(value, maximumLength); + }; +} + +function getMaxLengthError(value: string, requiredLength: number): StringLengthError { + return value.length > requiredLength ? { maxlength: { requiredLength } } : null; +} + +function getMinLengthError(value: string, requiredLength: number): StringLengthError { + return value.length < requiredLength ? { minlength: { requiredLength } } : null; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/url.validator.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/url.validator.ts new file mode 100644 index 0000000000..705d07e17a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/url.validator.ts @@ -0,0 +1,23 @@ +import { AbstractControl, ValidatorFn } from '@angular/forms'; + +export interface UrlError { + url: true; +} + +export function validateUrl(): ValidatorFn { + return (control: AbstractControl): UrlError | null => { + if (['', null, undefined].indexOf(control.value) > -1) return null; + + return isValidUrl(control.value) ? null : { url: true }; + }; +} + +function isValidUrl(value: string): boolean { + if (/^http(s)?:\/\/[^/]/.test(value) || /^ftp:\/\/[^/]/.test(value)) { + const a = document.createElement('a'); + a.href = value; + return !!a.host; + } + + return false; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/core/testing/ng-package.json new file mode 100644 index 0000000000..e647bd0d3e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/testing/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/core/testing", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/core-testing.module.ts b/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/core-testing.module.ts new file mode 100644 index 0000000000..1f07423779 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/core-testing.module.ts @@ -0,0 +1,67 @@ +import { + ABP, + BaseCoreModule, + coreOptionsFactory, + CORE_OPTIONS, + LIST_QUERY_DEBOUNCE_TIME, + LOADER_DELAY, + PermissionService, + RestService, +} from '@abp/ng.core'; +import { APP_BASE_HREF } from '@angular/common'; +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'; + +/** + * CoreTestingModule is the module that will be used in tests + * and it provides mock alternatives + */ +@NgModule({ + exports: [RouterTestingModule, BaseCoreModule], + imports: [NoopAnimationsModule, RouterTestingModule, BaseCoreModule], +}) +export class CoreTestingModule { + static withConfig( + { baseHref = '/', listQueryDebounceTime = 0, routes = [], ...options } = {} as ABP.Test, + ): ModuleWithProviders { + return { + ngModule: CoreTestingModule, + providers: [ + { provide: APP_BASE_HREF, useValue: baseHref }, + { + provide: 'CORE_OPTIONS', + useValue: { + skipGetAppConfiguration: true, + ...options, + }, + }, + { + provide: CORE_OPTIONS, + useFactory: coreOptionsFactory, + deps: ['CORE_OPTIONS'], + }, + { + provide: LIST_QUERY_DEBOUNCE_TIME, + useValue: listQueryDebounceTime, + }, + { + provide: PermissionService, + useClass: MockPermissionService, + }, + { + provide: RestService, + useClass: MockRestService, + }, + { + provide: LOADER_DELAY, + useValue: 0, + }, + provideRoutes(routes), + ], + }; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/index.ts new file mode 100644 index 0000000000..128750c0bc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/index.ts @@ -0,0 +1,2 @@ +export * from './mock-permission.service'; +export * from './mock-rest.service'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/mock-permission.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/mock-permission.service.ts new file mode 100644 index 0000000000..81bbdcc625 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/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/nx/ng-packs/libs/core/testing/src/lib/services/mock-rest.service.ts b/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/mock-rest.service.ts new file mode 100644 index 0000000000..b7b4066a4c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/mock-rest.service.ts @@ -0,0 +1,21 @@ +import { ABP, CORE_OPTIONS, EnvironmentService, RestService } from '@abp/ng.core'; +import { HttpClient } from '@angular/common/http'; +import { Inject, Injectable } from '@angular/core'; +import { Observable, throwError } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class MockRestService extends RestService { + constructor( + @Inject(CORE_OPTIONS) protected options: ABP.Root, + protected http: HttpClient, + protected environment: EnvironmentService, + ) { + super(options, http, environment, null); + } + + handleError(err: any): Observable { + return throwError(err); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/clear-page.util.ts b/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/clear-page.util.ts new file mode 100644 index 0000000000..3570d25f2d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/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/nx/ng-packs/libs/core/testing/src/lib/utils/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/index.ts new file mode 100644 index 0000000000..3de5c9748e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/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/nx/ng-packs/libs/core/testing/src/lib/utils/wait.util.ts b/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/wait.util.ts new file mode 100644 index 0000000000..9bd6b4435f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/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/nx/ng-packs/libs/core/testing/src/public-api.ts b/npm/ng-packs/nx/ng-packs/libs/core/testing/src/public-api.ts new file mode 100644 index 0000000000..657f628e28 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/core/testing/src/public-api.ts @@ -0,0 +1,3 @@ +export * from './lib/core-testing.module'; +export * from './lib/services'; +export * from './lib/utils'; diff --git a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json index d7a0c76294..d2b6463421 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json @@ -12,13 +12,14 @@ ], "compilerOptions": { "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true + "strict": false, + "noImplicitReturns": false, + "noFallthroughCasesInSwitch": true, + "allowSyntheticDefaultImports": true, }, "angularCompilerOptions": { "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true + "strictInputAccessModifiers": false, + "strictTemplates": false } } diff --git a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json index 06de549e10..1bcbd8c948 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json +++ b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json @@ -2,9 +2,10 @@ { "extends": "./tsconfig.lib.json", "compilerOptions": { - "declarationMap": false + "declarationMap": false, }, "angularCompilerOptions": { "compilationMode": "partial" + // "enableIvy": false } } diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index 7048ede7f2..395d999edc 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -17,7 +17,7 @@ ng-zorro-antd "^11.0.0" tslib "^2.0.0" -"@abp/ng.core@~4.4.0", "@abp/ng.core@~4.4.0-rc.2": +"@abp/ng.core@~4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-4.4.0.tgz#e5026caaaa9afd5a17a07e49bbb39020516e7c54" integrity sha512-mF746bWt7bFS5dcRMAQCbm523/mABulWKJWDT/igNg0h19Lfnr9juaKz3eVrOixoxygBcSpK6tqv0C0Adxzr7Q== @@ -32,7 +32,7 @@ ts-toolbelt "6.15.4" tslib "^2.0.0" -"@abp/ng.feature-management@~4.4.0", "@abp/ng.feature-management@~4.4.0-rc.2": +"@abp/ng.feature-management@~4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-4.4.0.tgz#3b63b5e1101d9f92772d5b8c3b80f12b8cebec51" integrity sha512-9mZ1cl/qu6D/flWcQRklL6No89gE/MjJuMjVjr+qwZabyU6Y/h3ATM1l+CL3+Z1hJ3TKO4Au28FqbxfzycOu/w== @@ -40,7 +40,7 @@ "@abp/ng.theme.shared" "~4.4.0" tslib "^2.0.0" -"@abp/ng.identity@~4.4.0-rc.2": +"@abp/ng.identity@~4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-4.4.0.tgz#22c34b3962844bbbd891a560d8eb46f8f0c1fffb" integrity sha512-x1E6NBJiaCWjbicuey+8Z40izFpXnflZWEjjSxeCXgVCcAjxZyXOra7iGC/19Q4MNphFVa0cpgEPPI2bltA7yA== @@ -49,7 +49,7 @@ "@abp/ng.theme.shared" "~4.4.0" tslib "^2.0.0" -"@abp/ng.permission-management@~4.4.0", "@abp/ng.permission-management@~4.4.0-rc.2": +"@abp/ng.permission-management@~4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-4.4.0.tgz#81730f10d84f5d683a2bb11ce2c892cb8624327c" integrity sha512-uW0/tin7JslUa4LYdqIvF86scGBYb38q5I1AHBLnO9GRw0VQRkCO2RSES6td4Qu1cBnfV0rjGFKJLScwQ9nTpw== @@ -57,7 +57,7 @@ "@abp/ng.theme.shared" "~4.4.0" tslib "^2.0.0" -"@abp/ng.schematics@~4.4.0-rc.2": +"@abp/ng.schematics@~4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-4.4.0.tgz#e13689b85a4724736b79ca7257af3bee093e1d2a" integrity sha512-UFJait7QGGVK3YKF0JvWghIvF7mxn5nnUaGckcNhZA7N1+FFYwTtLqdAscPgA7HjsQch/c9eRd+jROJreiHdrw== @@ -69,7 +69,7 @@ should-quote "^1.0.0" typescript "~3.9.2" -"@abp/ng.setting-management@~4.4.0-rc.2": +"@abp/ng.setting-management@~4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-4.4.0.tgz#ebcadabcdbafbbc1b7015012d82b767661096040" integrity sha512-ji4v/6iFmLT8ANZfGieI/dGgoOsGLX4dzIfMjqe7ktobTsg5dcj4fUKVhxmPVq2FeiOT6r3znQREMMaWj6v1Bg== @@ -78,7 +78,7 @@ "@abp/ng.theme.shared" "~4.4.0" tslib "^2.0.0" -"@abp/ng.tenant-management@~4.4.0-rc.2": +"@abp/ng.tenant-management@~4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-4.4.0.tgz#e9e06876917d41dafec339eeea2f25428c8d5c14" integrity sha512-j92AVEkM+nnoYrR+RphZcb/X1CJ8SjzPby2/cIBr8VeW32TvRKIAD38Bkjm73Cju3D0Qbx5gyPYZiYyTLaxn6Q== @@ -87,7 +87,7 @@ "@abp/ng.theme.shared" "~4.4.0" tslib "^2.0.0" -"@abp/ng.theme.basic@~4.4.0-rc.2": +"@abp/ng.theme.basic@~4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-4.4.0.tgz#50053faf58016a330ca7ba1ef5f00559396f9dbf" integrity sha512-vSuetQRXQhpxWx2sNriLRCpKhyhGNdywYsjbFqLUuTDaTQI+UYEprGG87Pt4HqOsXJujuPtnySxQsp9zJH25+g== @@ -96,7 +96,7 @@ "@abp/ng.theme.shared" "~4.4.0" tslib "^2.0.0" -"@abp/ng.theme.shared@~4.4.0", "@abp/ng.theme.shared@~4.4.0-rc.2": +"@abp/ng.theme.shared@~4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-4.4.0.tgz#ba70fcdb9f7c064f0523ee63145b3b769ddfa419" integrity sha512-x49NAyxs7pKAoUFSh7ms3QXz7kh4nP2x0TuiipMM7ika29Nc9m5B0DQ9kj9jFLEC53b/sx15fAkfrXUY6yHSsA== @@ -117,13 +117,6 @@ dependencies: just-compare "^1.3.0" -"@abp/utils@^4.4.0-rc.2": - version "4.4.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.0-rc.2.tgz#c44e82de279d04949412959f001436d15f93b795" - integrity sha512-0rPEKeWr+J3IQt1iBIaJnMJC6EoNi4RRbw6zakS5g0QNoXYJgAjruRo58/0S/QP+pD45cW/vEjFU13nNuDJb7w== - dependencies: - just-compare "^1.3.0" - "@angular-builders/jest@^10.0.0": version "10.0.1" resolved "https://registry.yarnpkg.com/@angular-builders/jest/-/jest-10.0.1.tgz#a1a6fb5d11b5d54c051bdaa2012b5f046371560c" @@ -554,10 +547,10 @@ dependencies: "@babel/highlight" "^7.14.5" -"@babel/compat-data@^7.12.7", "@babel/compat-data@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea" - integrity sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w== +"@babel/compat-data@^7.12.7", "@babel/compat-data@^7.14.7", "@babel/compat-data@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== "@babel/core@7.12.10": version "7.12.10" @@ -602,19 +595,19 @@ source-map "^0.5.0" "@babel/core@^7.1.0", "@babel/core@^7.7.5", "@babel/core@^7.8.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" - integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.0.tgz#749e57c68778b73ad8082775561f67f5196aafa8" + integrity sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw== dependencies: "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.6" - "@babel/parser" "^7.14.6" + "@babel/generator" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.0" + "@babel/helper-module-transforms" "^7.15.0" + "@babel/helpers" "^7.14.8" + "@babel/parser" "^7.15.0" "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -631,12 +624,12 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.12.10", "@babel/generator@^7.14.5", "@babel/generator@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" - integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== +"@babel/generator@^7.12.10", "@babel/generator@^7.15.0", "@babel/generator@^7.8.3": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15" + integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.0" jsesc "^2.5.1" source-map "^0.5.0" @@ -655,26 +648,26 @@ "@babel/helper-explode-assignable-expression" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-compilation-targets@^7.12.5", "@babel/helper-compilation-targets@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" - integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== +"@babel/helper-compilation-targets@^7.12.5", "@babel/helper-compilation-targets@^7.14.5", "@babel/helper-compilation-targets@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz#973df8cbd025515f3ff25db0c05efc704fa79818" + integrity sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A== dependencies: - "@babel/compat-data" "^7.14.5" + "@babel/compat-data" "^7.15.0" "@babel/helper-validator-option" "^7.14.5" browserslist "^4.16.6" semver "^6.3.0" "@babel/helper-create-class-features-plugin@^7.14.5": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" - integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz#c9a137a4d137b2d0e2c649acf536d7ba1a76c0f7" + integrity sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q== dependencies: "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/helper-function-name" "^7.14.5" - "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.15.0" "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-replace-supers" "^7.15.0" "@babel/helper-split-export-declaration" "^7.14.5" "@babel/helper-create-regexp-features-plugin@^7.14.5": @@ -715,12 +708,12 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-member-expression-to-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz#d5c70e4ad13b402c95156c7a53568f504e2fb7b8" - integrity sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ== +"@babel/helper-member-expression-to-functions@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz#0ddaf5299c8179f27f37327936553e9bba60990b" + integrity sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.0" "@babel/helper-module-imports@^7.12.5", "@babel/helper-module-imports@^7.14.5": version "7.14.5" @@ -729,19 +722,19 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" - integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz#679275581ea056373eddbe360e1419ef23783b08" + integrity sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg== dependencies: "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" + "@babel/helper-replace-supers" "^7.15.0" + "@babel/helper-simple-access" "^7.14.8" "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.9" "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" "@babel/helper-optimise-call-expression@^7.14.5": version "7.14.5" @@ -764,22 +757,22 @@ "@babel/helper-wrap-function" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-replace-supers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" - integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== +"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz#ace07708f5bf746bf2e6ba99572cce79b5d4e7f4" + integrity sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.15.0" "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" -"@babel/helper-simple-access@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" - integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== +"@babel/helper-simple-access@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924" + integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.14.8" "@babel/helper-skip-transparent-expression-wrappers@^7.14.5": version "7.14.5" @@ -795,10 +788,10 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" + integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== "@babel/helper-validator-option@^7.12.11", "@babel/helper-validator-option@^7.14.5": version "7.14.5" @@ -815,14 +808,14 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.14.6", "@babel/helpers@^7.8.3": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" - integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== +"@babel/helpers@^7.12.5", "@babel/helpers@^7.14.8", "@babel/helpers@^7.8.3": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.3.tgz#c96838b752b95dcd525b4e741ed40bb1dc2a1357" + integrity sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g== dependencies: "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" "@babel/highlight@^7.14.5": version "7.14.5" @@ -833,15 +826,15 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.7", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.8.3": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz#d85cc68ca3cac84eae384c06f032921f5227f4b2" - integrity sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.7", "@babel/parser@^7.14.5", "@babel/parser@^7.15.0", "@babel/parser@^7.8.3": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862" + integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA== "@babel/plugin-proposal-async-generator-functions@^7.12.1": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz#4024990e3dd74181f4f426ea657769ff49a2df39" - integrity sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA== + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz#7028dc4fa21dc199bbacf98b39bab1267d0eaf9a" + integrity sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-remap-async-to-generator" "^7.14.5" @@ -904,11 +897,11 @@ "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-proposal-object-rest-spread@^7.12.1": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz#e581d5ccdfa187ea6ed73f56c6a21c1580b90fbf" - integrity sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A== + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" + integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== dependencies: - "@babel/compat-data" "^7.14.5" + "@babel/compat-data" "^7.14.7" "@babel/helper-compilation-targets" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" @@ -1069,16 +1062,16 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-block-scoping@^7.12.11": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" - integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf" + integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-classes@^7.12.1": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" - integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz#2a391ffb1e5292710b00f2e2c210e1435e7d449f" + integrity sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A== dependencies: "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/helper-function-name" "^7.14.5" @@ -1096,9 +1089,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-destructuring@^7.12.1": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz#d32ad19ff1a6da1e861dc62720d80d9776e3bf35" - integrity sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww== + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" + integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -1164,13 +1157,13 @@ babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-commonjs@^7.12.1": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" - integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz#3305896e5835f953b5cdb363acd9e8c2219a5281" + integrity sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig== dependencies: - "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-module-transforms" "^7.15.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" + "@babel/helper-simple-access" "^7.14.8" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.12.1": @@ -1193,9 +1186,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz#d537e8ee083ee6f6aa4f4eef9d2081d555746e4c" - integrity sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw== + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" + integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" @@ -1393,9 +1386,9 @@ regenerator-runtime "^0.13.4" "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" - integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b" + integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA== dependencies: regenerator-runtime "^0.13.4" @@ -1417,27 +1410,27 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.10", "@babel/traverse@^7.14.5", "@babel/traverse@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.5.tgz#c111b0f58afab4fea3d3385a406f692748c59870" - integrity sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.10", "@babel/traverse@^7.14.5", "@babel/traverse@^7.15.0", "@babel/traverse@^7.8.3": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98" + integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw== dependencies: "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" + "@babel/generator" "^7.15.0" "@babel/helper-function-name" "^7.14.5" "@babel/helper-hoist-variables" "^7.14.5" "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/parser" "^7.15.0" + "@babel/types" "^7.15.0" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" - integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== +"@babel/types@^7.0.0", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.15.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd" + integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ== dependencies: - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1453,38 +1446,38 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@commitlint/execute-rule@^12.1.4": - version "12.1.4" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-12.1.4.tgz#9973b02e9779adbf1522ae9ac207a4815ec73de1" - integrity sha512-h2S1j8SXyNeABb27q2Ok2vD1WfxJiXvOttKuRA9Or7LN6OQoC/KtT3844CIhhWNteNMu/wE0gkTqGxDVAnJiHg== +"@commitlint/execute-rule@^13.0.0": + version "13.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-13.0.0.tgz#7823303b82b5d86dac46e67cfa005f4433476981" + integrity sha512-lBz2bJhNAgkkU/rFMAw3XBNujbxhxlaFHY3lfKB/MxpAa+pIfmWB3ig9i1VKe0wCvujk02O0WiMleNaRn2KJqw== "@commitlint/load@>6.1.1": - version "12.1.4" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-12.1.4.tgz#e3c2dbc0e7d8d928f57a6878bd7219909fc0acab" - integrity sha512-Keszi0IOjRzKfxT+qES/n+KZyLrxy79RQz8wWgssCboYjKEp+wC+fLCgbiMCYjI5k31CIzIOq/16J7Ycr0C0EA== + version "13.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-13.1.0.tgz#d6c9b547551f2216586d6c1964d93f92e7b04277" + integrity sha512-zlZbjJCWnWmBOSwTXis8H7I6pYk6JbDwOCuARA6B9Y/qt2PD+NCo0E/7EuaaFoxjHl+o56QR5QttuMBrf+BJzg== dependencies: - "@commitlint/execute-rule" "^12.1.4" - "@commitlint/resolve-extends" "^12.1.4" - "@commitlint/types" "^12.1.4" + "@commitlint/execute-rule" "^13.0.0" + "@commitlint/resolve-extends" "^13.0.0" + "@commitlint/types" "^13.1.0" chalk "^4.0.0" cosmiconfig "^7.0.0" lodash "^4.17.19" resolve-from "^5.0.0" -"@commitlint/resolve-extends@^12.1.4": - version "12.1.4" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-12.1.4.tgz#e758ed7dcdf942618b9f603a7c28a640f6a0802a" - integrity sha512-R9CoUtsXLd6KSCfsZly04grsH6JVnWFmVtWgWs1KdDpdV+G3TSs37tColMFqglpkx3dsWu8dsPD56+D9YnJfqg== +"@commitlint/resolve-extends@^13.0.0": + version "13.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-13.0.0.tgz#a38fcd2474483bf9ec6e1e901b27b8a23abe7d73" + integrity sha512-1SyaE+UOsYTkQlTPUOoj4NwxQhGFtYildVS/d0TJuK8a9uAJLw7bhCLH2PEeH5cC2D1do4Eqhx/3bLDrSLH3hg== dependencies: import-fresh "^3.0.0" lodash "^4.17.19" resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/types@^12.1.4": - version "12.1.4" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-12.1.4.tgz#9618a5dc8991fb58e6de6ed89d7bf712fa74ba7e" - integrity sha512-KRIjdnWNUx6ywz+SJvjmNCbQKcKP6KArhjZhY2l+CWKxak0d77SOjggkMwFTiSgLODOwmuLTbarR2ZfWPiPMlw== +"@commitlint/types@^13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-13.1.0.tgz#12cfb6e932372b1816af8900e2d10694add28191" + integrity sha512-zcVjuT+OfKt8h91vhBxt05RMcTGEx6DM7Q9QZeuMbXFk6xgbsSEDMMapbJPA1bCZ81fa/1OQBijSYPrKvtt06g== dependencies: chalk "^4.0.0" @@ -1568,9 +1561,14 @@ which "^1.3.1" "@fortawesome/fontawesome-free@^5.14.0": - version "5.15.3" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.3.tgz#c36ffa64a2a239bf948541a97b6ae8d729e09a9a" - integrity sha512-rFnSUN/QOtnOAgqFRooTA3H57JLDm0QEG/jPdk+tLQNL/eWd+Aok8g3qCI+Q1xuDPWpGW/i9JySpJVsq8Q0s9w== + version "5.15.4" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" + integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -2552,9 +2550,9 @@ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== "@nodelib/fs.walk@^1.2.3": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2" - integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA== + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" @@ -2565,9 +2563,9 @@ integrity sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q== "@npmcli/git@^2.0.1": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.0.9.tgz#915bbfe66300e67b4da5ef765a4475ffb2ca5b6b" - integrity sha512-hTMbMryvOqGLwnmMBKs5usbPsJtyEsMsgXwJbmNrsEuQQh1LAIMDU77IoOrwkCg+NgQWl+ySlarJASwM3SutCA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.1.0.tgz#2fbd77e147530247d37f325930d457b3ebe894f6" + integrity sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw== dependencies: "@npmcli/promise-spawn" "^1.3.2" lru-cache "^6.0.0" @@ -2633,10 +2631,10 @@ is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-7.3.2.tgz#065ce49b338043ec7f741316ce06afd4d459d944" - integrity sha512-oJhK/yhl9Gt430OrZOzAl2wJqR0No9445vmZ9Ey8GjUZUpwuu/vmEFP0TDhDXdpGDoxD6/EIFHJEcY8nHXpDTA== +"@octokit/openapi-types@^9.5.0": + version "9.6.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-9.6.0.tgz#0260a84f5c61c01755402ab5ac5b1ab46e7c0730" + integrity sha512-L+8x7DpcNtHkMbTxxCxg3cozvHUNP46rOIzFwoMs0piWwQzAGNXqlIQO2GLvnKTWLUh99DkY+UyHVrP4jXlowg== "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" @@ -2723,11 +2721,11 @@ "@types/node" ">= 8" "@octokit/types@^6.0.3", "@octokit/types@^6.16.1": - version "6.16.4" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.16.4.tgz#d24f5e1bacd2fe96d61854b5bda0e88cf8288dfe" - integrity sha512-UxhWCdSzloULfUyamfOg4dJxV9B+XjgrIZscI0VCbp4eNrjmorGEw+4qdwcpTsu6DIrm9tQsFQS2pK5QkqQ04A== + version "6.25.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.25.0.tgz#c8e37e69dbe7ce55ed98ee63f75054e7e808bf1a" + integrity sha512-bNvyQKfngvAd/08COlYIN54nRgxskmejgywodizQNyiKoXmWRAjKup2/LYwm+T9V0gsKH6tuld1gM0PzmOiB4Q== dependencies: - "@octokit/openapi-types" "^7.3.2" + "@octokit/openapi-types" "^9.5.0" "@rollup/plugin-commonjs@^17.0.0": version "17.1.0" @@ -2839,9 +2837,9 @@ tslib "^2.0.0" "@szmarczak/http-timer@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" - integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ== + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== dependencies: defer-to-connect "^2.0.0" @@ -2863,9 +2861,9 @@ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@types/babel__core@^7.1.7": - version "7.1.14" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" - integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== + version "7.1.15" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.15.tgz#2ccfb1ad55a02c83f8e0ad327cbc332f55eb1024" + integrity sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -2874,31 +2872,31 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" - integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== + version "7.6.3" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" + integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" - integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639" - integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== + version "7.14.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== dependencies: "@babel/types" "^7.3.0" "@types/cacheable-request@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976" - integrity sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ== + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" + integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== dependencies: "@types/http-cache-semantics" "*" "@types/keyv" "*" @@ -2906,9 +2904,9 @@ "@types/responselike" "*" "@types/estree@*": - version "0.0.48" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74" - integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew== + version "0.0.50" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" + integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== "@types/estree@0.0.39": version "0.0.39" @@ -2916,9 +2914,9 @@ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + version "7.1.4" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" + integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== dependencies: "@types/minimatch" "*" "@types/node" "*" @@ -2931,9 +2929,9 @@ "@types/node" "*" "@types/http-cache-semantics@*": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" - integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A== + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" @@ -2963,9 +2961,9 @@ "@types/istanbul-lib-report" "*" "@types/jasmine@^3.3.9": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.7.7.tgz#56718af036be3c9f86eca560a22e39440b2b0784" - integrity sha512-yZzGe1d1T0y+imXDZ79F030nn8qbmiwpWKCZKvKN0KbTzwXAVYShUxkIxu1ba+vhIdabTGVGCfbtZC0oOam8TQ== + version "3.8.2" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.8.2.tgz#27ab0aaac29581bcbde5774e1843f90df977078e" + integrity sha512-u5h7dqzy2XpXTzhOzSNQUQpKGFvROF8ElNX9P/TJvsHnTg/JvsAseVsGWQAQQldqanYaM+5kwxW909BBFAUYsg== "@types/jest@^25.2.3": version "25.2.3" @@ -2975,37 +2973,37 @@ jest-diff "^25.2.1" pretty-format "^25.2.1" -"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== "@types/keyv@*": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" - integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.2.tgz#5d97bb65526c20b6e0845f6b0d2ade4f28604ee5" + integrity sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg== dependencies: "@types/node" "*" "@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/minimist@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" - integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*", "@types/node@>= 8": - version "15.12.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d" - integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== + version "16.4.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.13.tgz#7dfd9c14661edc65cccd43a29eb454174642370d" + integrity sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg== "@types/node@^12.11.1": - version "12.20.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.15.tgz#10ee6a6a3f971966fddfa3f6e89ef7a73ec622df" - integrity sha512-F6S4Chv4JicJmyrwlDkxUdGNSplsQdGwp1A0AJloEVDirWdZOAiRHhovDlsFkKUrquUXhz1imJhXHsf59auyAg== + version "12.20.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.19.tgz#538e61fc220f77ae4a4663c3d8c3cb391365c209" + integrity sha512-niAuZrwrjKck4+XhoCw6AAVQBENHftpXw9F4ryk66fTgYaKQ53R4FI7c9vUGGw5vQis1HKBHDR1gcYI/Bq1xvw== "@types/node@^8.0.31": version "8.10.66" @@ -3013,9 +3011,9 @@ integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== "@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/parse-json@^4.0.0": version "4.0.0" @@ -3033,9 +3031,9 @@ integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= "@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + version "1.5.5" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" + integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== "@types/resolve@1.17.1": version "1.17.1" @@ -3052,9 +3050,9 @@ "@types/node" "*" "@types/selenium-webdriver@^3.0.0": - version "3.0.17" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz#50bea0c3c2acc31c959c5b1e747798b3b3d06d4b" - integrity sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw== + version "3.0.19" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.19.tgz#28ecede76f15b13553b4e86074d4cf9a0bbe49c4" + integrity sha512-OFUilxQg+rWL2FMxtmIgCkUDlJB6pskkpvmew7yeXfzzsOBb5rc+y2+DjHm+r3r1ZPPcJefK3DveNSYWGiy68g== "@types/source-list-map@*": version "0.1.2" @@ -3074,30 +3072,30 @@ pretty-format "^24.3.0" "@types/webpack-sources@^0.1.5": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.8.tgz#078d75410435993ec8a0a2855e88706f3f751f81" - integrity sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA== + version "0.1.9" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.9.tgz#da69b06eb34f6432e6658acb5a6893c55d983920" + integrity sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new== dependencies: "@types/node" "*" "@types/source-list-map" "*" source-map "^0.6.1" "@types/yargs-parser@*": - version "20.2.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" - integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== "@types/yargs@^13.0.0": - version "13.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" - integrity sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ== + version "13.0.12" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092" + integrity sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ== dependencies: "@types/yargs-parser" "*" "@types/yargs@^15.0.0": - version "15.0.13" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" - integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== + version "15.0.14" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" + integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== dependencies: "@types/yargs-parser" "*" @@ -3344,7 +3342,7 @@ agent-base@4, agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" -agent-base@6: +agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -3746,12 +3744,12 @@ autoprefixer@10.2.1: postcss-value-parser "^4.1.0" autoprefixer@^10.2.4: - version "10.2.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.6.tgz#aadd9ec34e1c98d403e01950038049f0eb252949" - integrity sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg== + version "10.3.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.3.1.tgz#954214821d3aa06692406c6a0a9e9d401eafbed2" + integrity sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A== dependencies: browserslist "^4.16.6" - caniuse-lite "^1.0.30001230" + caniuse-lite "^1.0.30001243" colorette "^1.2.2" fraction.js "^4.1.1" normalize-range "^0.1.2" @@ -4090,16 +4088,16 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.16.1, browserslist@^4.16.6, browserslist@^4.9.1: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== +browserslist@^4.0.0, browserslist@^4.16.1, browserslist@^4.16.6, browserslist@^4.16.7, browserslist@^4.9.1: + version "4.16.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.7.tgz#108b0d1ef33c4af1b587c54f390e7041178e4335" + integrity sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA== dependencies: - caniuse-lite "^1.0.30001219" + caniuse-lite "^1.0.30001248" colorette "^1.2.2" - electron-to-chromium "^1.3.723" + electron-to-chromium "^1.3.793" escalade "^3.1.1" - node-releases "^1.1.71" + node-releases "^1.1.73" browserstack@^1.5.1: version "1.6.1" @@ -4128,9 +4126,9 @@ btoa-lite@^1.0.0: integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= buffer-from@1.x, buffer-from@^1.0.0, buffer-from@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-indexof@^1.0.0: version "1.1.1" @@ -4397,10 +4395,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001230: - version "1.0.30001237" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz#4b7783661515b8e7151fc6376cfd97f0e427b9e5" - integrity sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001243, caniuse-lite@^1.0.30001248: + version "1.0.30001249" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001249.tgz#90a330057f8ff75bfe97a94d047d5e14fabb2ee8" + integrity sha512-vcX4U8lwVXPdqzPWi6cAJ3FnQaqXbBqy/GZseKNQzRj37J7qZdGcBtxq/QLFNLLlfsoXLUdHw8Iwenri86Tagw== canonical-path@1.0.0: version "1.0.0" @@ -4447,10 +4445,10 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -4517,7 +4515,7 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1, chownr@^1.1.2: +chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -4694,7 +4692,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0, color-convert@^1.9.1, color-convert@^1.9.3: +color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -4718,10 +4716,10 @@ color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== +color-string@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312" + integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" @@ -4732,17 +4730,17 @@ color-support@^1.1.3: integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== color@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: - color-convert "^1.9.1" - color-string "^1.5.4" + color-convert "^1.9.3" + color-string "^1.6.0" colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" + integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== columnify@^1.5.4: version "1.5.4" @@ -4961,15 +4959,15 @@ conventional-changelog-core@^3.1.6: through2 "^3.0.0" conventional-changelog-core@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.2.tgz#f0897df6d53b5d63dec36b9442bd45354f8b3ce5" - integrity sha512-7pDpRUiobQDNkwHyJG7k9f6maPo9tfPzkSWbRq97GGiZqisElhnvUZSvyQH20ogfOjntB5aadvv6NNcKL1sReg== + version "4.2.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.3.tgz#ce44d4bbba4032e3dc14c00fcd5b53fc00b66433" + integrity sha512-MwnZjIoMRL3jtPH5GywVNqetGILC7g6RQFvdb8LRU/fA/338JbeWAku3PZ8yQ+mtVRViiISqJlb0sOz0htBZig== dependencies: add-stream "^1.0.0" - conventional-changelog-writer "^4.0.18" + conventional-changelog-writer "^5.0.0" conventional-commits-parser "^3.2.0" dateformat "^3.0.0" - get-pkg-repo "^1.0.0" + get-pkg-repo "^4.0.0" git-raw-commits "^2.0.8" git-remote-origin-url "^2.0.0" git-semver-tags "^4.1.1" @@ -4978,7 +4976,6 @@ conventional-changelog-core@^4.2.1: q "^1.5.1" read-pkg "^3.0.0" read-pkg-up "^3.0.0" - shelljs "^0.8.3" through2 "^4.0.0" conventional-changelog-ember@^2.0.9: @@ -5022,7 +5019,7 @@ conventional-changelog-preset-loader@^2.1.1, conventional-changelog-preset-loade resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== -conventional-changelog-writer@^4.0.18, conventional-changelog-writer@^4.0.6: +conventional-changelog-writer@^4.0.6: version "4.1.0" resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz#1ca7880b75aa28695ad33312a1f2366f4b12659f" integrity sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw== @@ -5038,6 +5035,21 @@ conventional-changelog-writer@^4.0.18, conventional-changelog-writer@^4.0.6: split "^1.0.0" through2 "^4.0.0" +conventional-changelog-writer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz#c4042f3f1542f2f41d7d2e0d6cad23aba8df8eec" + integrity sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g== + dependencies: + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.6" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + conventional-changelog@^3.1.24: version "3.1.24" resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.24.tgz#ebd180b0fd1b2e1f0095c4b04fd088698348a464" @@ -5100,7 +5112,7 @@ conventional-recommended-bump@^5.0.0: meow "^4.0.0" q "^1.5.1" -convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -5112,6 +5124,13 @@ convert-source-map@^0.3.3: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= +convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -5164,11 +5183,11 @@ copy-webpack-plugin@6.3.2: webpack-sources "^1.4.3" core-js-compat@^3.8.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.14.0.tgz#b574dabf29184681d5b16357bd33d104df3d29a5" - integrity sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A== + version "3.16.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.16.1.tgz#c44b7caa2dcb94b673a98f27eee1c8312f55bc2d" + integrity sha512-NHXQXvRbd4nxp9TEmooTJLUf94ySUG6+DSsscBpTftN1lQLQ4LjnWvc7AoIo4UjDsFF3hB8Uh5LLCRRdaiT5MQ== dependencies: - browserslist "^4.16.6" + browserslist "^4.16.7" semver "7.0.0" core-js@3.8.2: @@ -5589,9 +5608,9 @@ data-urls@^1.1.0: whatwg-url "^7.0.0" date-fns@^2.10.0: - version "2.22.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.22.1.tgz#1e5af959831ebb1d82992bf67b765052d8f0efc4" - integrity sha512-yUFPQjrxEmIsMqlHhAhmxkuH769baF21Kk+nZwZGyrMoyLA+LugaQtC0+Tqf9CBUUULWwUJt6Q5ySI3LJDDCGg== + version "2.23.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.23.0.tgz#4e886c941659af0cf7b30fafdd1eaa37e88788a9" + integrity sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA== dateformat@^3.0.0: version "3.0.3" @@ -5612,7 +5631,14 @@ debug@3.1.0, debug@~3.1.0: dependencies: ms "2.0.0" -debug@4, debug@4.3.1, debug@^4.1.0, debug@^4.1.1: +debug@4, debug@^4.1.0, debug@^4.1.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +debug@4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -5867,11 +5893,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -directory-tree@^2.2.3: - version "2.2.9" - resolved "https://registry.yarnpkg.com/directory-tree/-/directory-tree-2.2.9.tgz#702c193f8b19f1076b585bcf8a2db3b49b11a11c" - integrity sha512-BOHxPNvP+XWijPkzoSBvr164IiNxRzvyAiWelbJsU/wG5OYXByer0+Aqo74G1qU+nRKC4yU/czmkmunkWdPPvQ== - dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -5972,10 +5993,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.723: - version "1.3.752" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09" - integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A== +electron-to-chromium@^1.3.793: + version "1.3.802" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.802.tgz#0afa989321de3e904ac653ee79e0d642883731a1" + integrity sha512-dXB0SGSypfm3iEDxrb5n/IVKeX4uuTnFHdve7v+yKJqNpEP0D4mjFJ8e1znmSR+OOVlVC+kDO6f2kAkTFXvJBg== elliptic@^6.5.3: version "6.5.4" @@ -6086,9 +6107,9 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.17.2, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: - version "1.18.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" - integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== + version "1.18.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.5.tgz#9b10de7d4c206a3581fd5b2124233e04db49ae19" + integrity sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -6096,11 +6117,12 @@ es-abstract@^1.17.2, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: get-intrinsic "^1.1.1" has "^1.0.3" has-symbols "^1.0.2" + internal-slot "^1.0.3" is-callable "^1.2.3" is-negative-zero "^2.0.1" is-regex "^1.1.3" is-string "^1.0.6" - object-inspect "^1.10.3" + object-inspect "^1.11.0" object-keys "^1.1.1" object.assign "^4.1.2" string.prototype.trimend "^1.0.4" @@ -6471,16 +6493,15 @@ fast-glob@^2.2.6: micromatch "^3.1.10" fast-glob@^3.1.1, fast-glob@^3.2.4: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" + glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" + micromatch "^4.0.4" fast-json-stable-stringify@2.0.0: version "2.0.0" @@ -6503,9 +6524,9 @@ fastparse@^1.1.2: integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + version "1.11.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" + integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== dependencies: reusify "^1.0.4" @@ -6756,7 +6777,7 @@ fs-extra@8.1.0, fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: +fs-minipass@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== @@ -6837,7 +6858,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== @@ -6862,6 +6883,16 @@ get-pkg-repo@^1.0.0: parse-github-repo-url "^1.3.0" through2 "^2.0.0" +get-pkg-repo@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.1.2.tgz#c4ffd60015cf091be666a0212753fc158f01a4c0" + integrity sha512-/FjamZL9cBYllEbReZkxF2IMh80d8TJoC4e3bmLNif8ibHw95aj0N/tzqK0kZz9eU/3w3dL6lF4fnnX/sDdW3A== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + meow "^7.0.0" + through2 "^2.0.0" + get-port@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" @@ -6950,17 +6981,17 @@ git-semver-tags@^4.1.1: semver "^6.0.0" git-up@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.2.tgz#10c3d731051b366dc19d3df454bfca3f77913a7c" - integrity sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ== + version "4.0.5" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.5.tgz#e7bb70981a37ea2fb8fe049669800a1f9a01d759" + integrity sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA== dependencies: is-ssh "^1.3.0" - parse-url "^5.0.0" + parse-url "^6.0.0" git-url-parse@^11.1.2: - version "11.4.4" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.4.4.tgz#5d747debc2469c17bc385719f7d0427802d83d77" - integrity sha512-Y4o9o7vQngQDIU9IjyCmRJBin5iYjI5u9ZITnddRZpD7dcCFQj2sL2XuMNbLRE4b4B/4ENPsp2Q8P44fjAZ0Pw== + version "11.5.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.5.0.tgz#acaaf65239cb1536185b19165a24bbc754b3f764" + integrity sha512-TZYSMDeM37r71Lqg1mbnMlOqlHd7BSij9qN7XwTkRqSAYFMihGLGhfHwgqQob3GUhEneKnV4nskN9rbQw2KGxA== dependencies: git-up "^4.0.0" @@ -6979,7 +7010,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.2: +glob-parent@^5.0.0, glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -7027,7 +7058,7 @@ glob@7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -7072,9 +7103,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globby@^11.0.1: - version "11.0.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" - integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" @@ -7138,9 +7169,9 @@ got@^11.5.2: responselike "^2.0.0" graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== growly@^1.3.0: version "1.3.0" @@ -7209,6 +7240,13 @@ has-symbols@^1.0.1, has-symbols@^1.0.2: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -7302,7 +7340,7 @@ hosted-git-info@^3.0.6: dependencies: lru-cache "^6.0.0" -hosted-git-info@^4.0.1: +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== @@ -7659,13 +7697,12 @@ injection-js@^2.4.0: tslib "^2.0.0" inquirer-file-tree-selection-prompt@^1.0.2: - version "1.0.7" - resolved "https://registry.yarnpkg.com/inquirer-file-tree-selection-prompt/-/inquirer-file-tree-selection-prompt-1.0.7.tgz#d61c39b60d81f0f50c4a3855a843bb1ed93555e8" - integrity sha512-OVhnXFn8nMMePNUR2DdLeLreyKX6j7sJ38UGZhtrJsrArQhFVtLfehFMrNaAlQc2Nx6zTR5YZu9TnlY8cFurUQ== + version "1.0.12" + resolved "https://registry.yarnpkg.com/inquirer-file-tree-selection-prompt/-/inquirer-file-tree-selection-prompt-1.0.12.tgz#f30f696532ced0bc862454ae076a83ba236d16f7" + integrity sha512-XUdh+lxTnj+nNoO38MgLWvO/btCyXJkHpRK5F2q+Wh6NLbSjuVaPeQ1OVPkvB3ZS7DtXzK0uDzGXv9tQqbr4lA== dependencies: - chalk "^2.4.2" + chalk "^4.1.1" cli-cursor "^3.1.0" - directory-tree "^2.2.3" figures "^3.0.0" lodash "^4.17.11" rxjs "^6.5.2" @@ -7716,10 +7753,14 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" ip-regex@^2.1.0: version "2.1.0" @@ -7761,11 +7802,12 @@ is-accessor-descriptor@^1.0.0: kind-of "^6.0.0" is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" @@ -7778,9 +7820,9 @@ is-arrayish@^0.3.1: integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-bigint@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.3.tgz#fc9d9e364210480675653ddaea0518528d49a581" + integrity sha512-ZU538ajmYJmzysE5yU4Y7uIrPQ2j704u+hXFiIPQExpqzzUbpe5jCPdTfmz7jXRxZdvjY3KZ3ZNenoXQovX+Dg== is-binary-path@^1.0.0: version "1.0.1" @@ -7797,11 +7839,12 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-buffer@^1.1.5: version "1.1.6" @@ -7809,9 +7852,9 @@ is-buffer@^1.1.5: integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== is-ci@^2.0.0: version "2.0.0" @@ -7833,9 +7876,9 @@ is-color-stop@^1.0.0: rgba-regex "^1.0.0" is-core-module@^2.1.0, is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" + integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== dependencies: has "^1.0.3" @@ -7854,9 +7897,11 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" - integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" is-descriptor@^0.1.0: version "0.1.6" @@ -7965,9 +8010,11 @@ is-negative-zero@^2.0.1: integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-number-object@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" is-number@^3.0.0: version "3.0.0" @@ -8054,12 +8101,12 @@ is-reference@^1.2.1: "@types/estree" "*" is-regex@^1.0.4, is-regex@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" - has-symbols "^1.0.2" + has-tostringtag "^1.0.0" is-resolvable@^1.0.0: version "1.1.0" @@ -8079,14 +8126,16 @@ is-stream@^1.1.0: integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-string@^1.0.5, is-string@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" @@ -8212,10 +8261,10 @@ jasmine-core@~2.8.0: resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= -jasmine-core@~3.7.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.7.1.tgz#0401327f6249eac993d47bbfa18d4e8efacfb561" - integrity sha512-DH3oYDS/AUvvr22+xUBW62m1Xoy7tUlY1tsxKEJvl5JeJ7q8zd1K5bUwiOxdH+erj6l2vAMM3hV25Xs9/WrmuQ== +jasmine-core@~3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.8.0.tgz#815399aae5aa5d9beeb1262805f981b99ffc9bf0" + integrity sha512-zl0nZWDrmbCiKns0NcjkFGYkVTGCPUgoHypTaj+G2AzaWus7QGoXARSlYsSle2VRpSdfJmM+hzmFKzQNhF2kHg== jasmine@2.8.0: version "2.8.0" @@ -8227,12 +8276,12 @@ jasmine@2.8.0: jasmine-core "~2.8.0" jasmine@^3.3.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.7.0.tgz#d36638c0c815e6ad5666676e386d79e2ccb70835" - integrity sha512-wlzGQ+cIFzMEsI+wDqmOwvnjTvolLFwlcpYLCqSPPH0prOQaW3P+IzMhHYn934l1imNvw07oCyX+vGUv3wmtSQ== + version "3.8.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.8.0.tgz#4497bc797eede7ca9de18179aedd4cf50245d8dc" + integrity sha512-kdQ3SfcNpMbbMdgJPLyFe9IksixdnrgYaCJapP9sS0aLgdWdIZADNXEr+11Zafxm1VDfRSC5ZL4fzXT0bexzXw== dependencies: glob "^7.1.6" - jasmine-core "~3.7.0" + jasmine-core "~3.8.0" jasminewd2@^2.1.0: version "2.2.0" @@ -8792,9 +8841,9 @@ jsprim@^1.2.2: verror "1.10.0" jszip@^3.1.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.6.0.tgz#839b72812e3f97819cc13ac4134ffced95dd6af9" - integrity sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ== + version "3.7.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.7.1.tgz#bd63401221c15625a1228c556ca8a68da6fda3d9" + integrity sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg== dependencies: lie "~3.3.0" pako "~1.0.2" @@ -9371,6 +9420,23 @@ meow@^4.0.0: redent "^2.0.0" trim-newlines "^2.0.0" +meow@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306" + integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^2.5.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.13.1" + yargs-parser "^18.1.3" + meow@^8.0.0: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -9439,7 +9505,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2: +micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== @@ -9455,17 +9521,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.48.0, "mime-db@>= 1.43.0 < 2": - version "1.48.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== +mime-db@1.49.0, "mime-db@>= 1.43.0 < 2": + version "1.49.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" + integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.31" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== + version "2.1.32" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" + integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== dependencies: - mime-db "1.48.0" + mime-db "1.49.0" mime@1.6.0, mime@^1.4.1: version "1.6.0" @@ -9558,9 +9624,9 @@ minipass-collect@^1.0.2: minipass "^3.0.0" minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.3.tgz#34c7cea038c817a8658461bf35174551dce17a0a" - integrity sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ== + version "1.3.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.4.tgz#63f5af868a38746ca7b33b03393ddf8c291244fe" + integrity sha512-TielGogIzbUEtd1LsjZFs47RWuHHfhl6TiCx1InVxApBAmQ8bL0dL5ilkLGcRvuyW/A9nE+Lvn855Ewz8S0PnQ== dependencies: minipass "^3.1.0" minipass-sized "^1.0.3" @@ -9597,7 +9663,7 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== @@ -9612,7 +9678,7 @@ minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: dependencies: yallist "^4.0.0" -minizlib@^1.2.1: +minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== @@ -9663,7 +9729,7 @@ mkdirp@*, mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4, mkdirp@~1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -9762,9 +9828,9 @@ mz@^2.5.0: thenify-all "^1.0.0" nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== nanoid@^3.1.20, nanoid@^3.1.23: version "3.1.23" @@ -9794,9 +9860,9 @@ natural-compare@^1.4.0: integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= needle@^2.5.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe" - integrity sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg== + version "2.8.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.8.0.tgz#1c8ef9c1a2c29dcc1e83d73809d7bc681c80a048" + integrity sha512-ZTq6WYkN/3782H1393me3utVYdq2XyqNUFBsprEE3VMAT0+hP/cItpnITpqsY6ep2yeFE4Tqtqwc74VqUlUYtw== dependencies: debug "^3.2.6" iconv-lite "^0.4.4" @@ -9978,10 +10044,10 @@ node-notifier@^6.0.0: shellwords "^0.1.1" which "^1.3.1" -node-releases@^1.1.71: - version "1.1.73" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" - integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== +node-releases@^1.1.73: + version "1.1.74" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.74.tgz#e5866488080ebaa70a93b91144ccde06f3c3463e" + integrity sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw== node-sass-tilde-importer@^1.0.2: version "1.0.2" @@ -10047,10 +10113,10 @@ normalize-url@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -normalize-url@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.0.1.tgz#a4f27f58cf8c7b287b440b8a8201f42d0b00d256" - integrity sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ== +normalize-url@^6.0.1, normalize-url@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== npm-bundled@^1.0.1, npm-bundled@^1.1.1: version "1.1.2" @@ -10234,10 +10300,10 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.10.3, object-inspect@^1.9.0: - version "1.10.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" - integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== +object-inspect@^1.11.0, object-inspect@^1.9.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== object-is@^1.0.1: version "1.1.5" @@ -10714,13 +10780,13 @@ parse-path@^4.0.0: qs "^6.9.4" query-string "^6.13.8" -parse-url@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.3.tgz#c158560f14cb1560917e0b7fd8b01adc1e9d3cab" - integrity sha512-nrLCVMJpqo12X8uUJT4GJPd5AFaTOrGx/QpJy3HNcVtq0AZSstVIsnxS5fqNPuoqMUs3MyfBoOP6Zvu2Arok5A== +parse-url@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-6.0.0.tgz#f5dd262a7de9ec00914939220410b66cff09107d" + integrity sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw== dependencies: is-ssh "^1.3.0" - normalize-url "^6.0.1" + normalize-url "^6.1.0" parse-path "^4.0.0" protocols "^1.4.0" @@ -11303,9 +11369,9 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27: supports-color "^6.1.0" postcss@^8.1.4, postcss@^8.2.4: - version "8.3.4" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.4.tgz#41ece1c43f2f7c74dc7d90144047ce052757b822" - integrity sha512-/tZY0PXExXXnNhKv3TOvZAOUYRyuqcCbBm2c17YMDK0PlVII3K7/LKdt3ScHL+hhouddjUWi+1sKDf9xXW+8YA== + version "8.3.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" + integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== dependencies: colorette "^1.2.2" nanoid "^3.1.23" @@ -11317,9 +11383,9 @@ prelude-ls@~1.1.2: integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= prettier@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6" - integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA== + version "2.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" + integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== pretty-bytes@^5.3.0: version "5.6.0" @@ -11653,9 +11719,9 @@ read-package-json-fast@^1.1.3: npm-normalize-package-bin "^1.0.1" read-package-json-fast@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz#2dcb24d9e8dd50fb322042c8c35a954e6cc7ac9e" - integrity sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ== + version "2.0.3" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== dependencies: json-parse-even-better-errors "^2.3.0" npm-normalize-package-bin "^1.0.1" @@ -11792,13 +11858,6 @@ realpath-native@^2.0.0: resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -11840,11 +11899,16 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@0.13.7, regenerator-runtime@^0.13.4: +regenerator-runtime@0.13.7: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + regenerator-transform@^0.14.2: version "0.14.5" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" @@ -11996,9 +12060,9 @@ resize-observer-polyfill@^1.5.1: integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== resolve-alpn@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.1.2.tgz#30b60cfbb0c0b8dc897940fe13fe255afcdd4d28" - integrity sha512-8OyfzhAtA32LVUsJSke3auIyINcwdh5l3cvYKdKO0nvsYSKuiLfTM5i78PJswFPT8y6cPW+L1v6/hE95chcpDA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.0.tgz#058bb0888d1cd4d12474e9a4b6eb17bdd5addc44" + integrity sha512-e4FNQs+9cINYMO5NMFc6kOUCdohjqFPSgMuwuZAOUWqrfWsen+Yjy5qZFkV5K7VO7tFSLKcUL97olkED7sCBHA== resolve-cwd@^2.0.0: version "2.0.0" @@ -12078,7 +12142,7 @@ resolve@1.19.0: is-core-module "^2.1.0" path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.2: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.2: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -12195,9 +12259,9 @@ rollup@2.36.1: fsevents "~2.1.2" rollup@^2.37.0: - version "2.52.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.52.0.tgz#9df3de6028fae79569a985942b81110205a5a411" - integrity sha512-lSkBDGsVoXjqaBf7dsHwxBJz+p+hJEP72P+LOitA0yVs+Nzxj76FidkZE2thrmhjwGqLYiJo39opi7mAfaQ/Vg== + version "2.56.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.56.2.tgz#a045ff3f6af53ee009b5f5016ca3da0329e5470f" + integrity sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ== optionalDependencies: fsevents "~2.3.2" @@ -12265,7 +12329,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -12316,9 +12380,9 @@ sass@1.32.4: chokidar ">=2.0.0 <4.0.0" sass@^1.32.5: - version "1.35.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.35.1.tgz#90ecf774dfe68f07b6193077e3b42fb154b9e1cd" - integrity sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ== + version "1.37.5" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.37.5.tgz#f6838351f7cc814c4fcfe1d9a20e0cabbd1e7b3c" + integrity sha512-Cx3ewxz9QB/ErnVIiWg2cH0kiYZ0FPvheDTVC6BsiEGBTZKKZJ1Gq5Kq6jy3PKtL6+EJ8NIoaBW/RSd2R6cZOA== dependencies: chokidar ">=3.0.0 <4.0.0" @@ -12360,11 +12424,11 @@ schema-utils@^2.6.5, schema-utils@^2.7.0: ajv-keywords "^3.5.2" schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== dependencies: - "@types/json-schema" "^7.0.6" + "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" @@ -12563,15 +12627,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -12624,9 +12679,9 @@ slide@^1.1.6: integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== snapdragon-node@^2.0.1: version "2.1.1" @@ -12693,11 +12748,11 @@ socks-proxy-agent@^4.0.0: socks "~2.3.2" socks-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" - integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" + integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== dependencies: - agent-base "6" + agent-base "^6.0.2" debug "4" socks "^2.3.3" @@ -12827,9 +12882,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" - integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== + version "3.0.10" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" + integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== spdy-transport@^3.0.0: version "3.0.0" @@ -13308,22 +13363,22 @@ tapable@^2.2.0: integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + version "4.4.16" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.16.tgz#4a48b3c025e77d9d0c788f038a09b91c594d326d" + integrity sha512-gOVUT/KWPkGFZQmCRDVFNUWBl7niIo/PRR7lzrIqtZpit+st54lGROuVjc6zEQM9FhH+dJfQIl+9F0k8GNXg5g== dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" tar@^6.0.2, tar@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" - integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== + version "6.1.7" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.7.tgz#c566d1107d38b09e92983a68db5534fc7f6cab42" + integrity sha512-PBoRkOJU0X3lejJ8GaRCsobjXTgFofRDSPdSUhRSdlwJfifRlQBwGXitDItdGFu0/h0XDMCkig0RN1iT7DBxhA== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -13419,9 +13474,9 @@ terser@^4.1.2: source-map-support "~0.5.12" terser@^5.3.4, terser@^5.5.1: - version "5.7.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" - integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== + version "5.7.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.1.tgz#2dc7a61009b66bb638305cb2a824763b116bf784" + integrity sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg== dependencies: commander "^2.20.0" source-map "~0.7.2" @@ -13740,6 +13795,11 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + type-fest@^0.18.0: version "0.18.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" @@ -13801,19 +13861,19 @@ typescript@4.1.3: integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== typescript@^3.5.2, typescript@~3.9.2: - version "3.9.9" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" - integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== + version "3.9.10" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" + integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== typescript@~4.1.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" - integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== + version "4.1.6" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.6.tgz#1becd85d77567c3c741172339e93ce2e69932138" + integrity sha512-pxnwLxeb/Z5SP80JDRzVjh58KsM6jZHRAOtTpS7sXLS4ogXNKC9ANxHHZqLLeVHZN35jCtI4JdmLLbLiC1kBow== uglify-js@^3.1.4: - version "3.13.9" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.9.tgz#4d8d21dcd497f29cfd8e9378b9df123ad025999b" - integrity sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g== + version "3.14.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.1.tgz#e2cb9fe34db9cb4cf7e35d1d26dfea28e09a7d06" + integrity sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g== uid-number@0.0.6: version "0.0.6" @@ -13954,9 +14014,9 @@ urix@^0.1.0: integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse@^1.4.3, url-parse@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== + version "1.5.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" + integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" @@ -14491,9 +14551,9 @@ ws@^6.2.1: async-limiter "~1.0.0" ws@^7.0.0: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== xml-name-validator@^3.0.0: version "3.0.0" @@ -14540,7 +14600,7 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -14556,9 +14616,9 @@ yaml@^1.10.0: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.7" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" - integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs-parser@^13.1.2: version "13.1.2" @@ -14569,14 +14629,14 @@ yargs-parser@^13.1.2: decamelize "^1.2.0" yargs-parser@^15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" - integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== + version "15.0.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.3.tgz#316e263d5febe8b38eef61ac092b33dfcc9b1115" + integrity sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^18.1.0, yargs-parser@^18.1.2: +yargs-parser@^18.1.0, yargs-parser@^18.1.2, yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== From c30a3300d3a93f04b82995f6527bbb83310759d0 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 12 Aug 2021 10:10:56 +0300 Subject: [PATCH 03/56] clone theme-shared package to nx workspace --- npm/ng-packs/nx/ng-packs/angular.json | 89 ++++- .../ng-packs/libs/core/locale/ng-package.json | 2 +- .../nx/ng-packs/libs/core/ng-package.json | 2 +- .../libs/core/src/{index.ts => public-api.ts} | 0 .../libs/core/testing/ng-package.json | 2 +- .../nx/ng-packs/libs/core/tsconfig.json | 9 - .../ng-packs/libs/core/tsconfig.lib.prod.json | 4 +- .../ng-packs/libs/theme-shared/.eslintrc.json | 36 ++ .../nx/ng-packs/libs/theme-shared/README.md | 7 + .../theme-shared/extensions/ng-package.json | 7 + .../src/lib/adapters/date-time.adapter.ts | 56 +++ .../src/lib/adapters/date.adapter.ts | 40 ++ .../src/lib/adapters/time.adapter.ts | 35 ++ .../abstract-actions.component.ts | 32 ++ .../date-time-picker.component.ts | 76 ++++ .../extensible-form-prop.component.html | 138 +++++++ .../extensible-form-prop.component.ts | 193 +++++++++ .../extensible-form.component.html | 23 ++ .../extensible-form.component.ts | 64 +++ .../extensible-table.component.html | 40 ++ .../extensible-table.component.ts | 145 +++++++ .../grid-actions/grid-actions.component.html | 43 ++ .../grid-actions/grid-actions.component.ts | 36 ++ .../page-toolbar/page-toolbar.component.html | 20 + .../page-toolbar/page-toolbar.component.ts | 49 +++ .../src/lib/constants/extra-properties.ts | 1 + .../src/lib/directives/disabled.directive.ts | 19 + .../src/lib/directives/prop-data.directive.ts | 54 +++ .../extensions/src/lib/enums/props.enum.ts | 15 + .../extensions/src/lib/models/actions.ts | 79 ++++ .../src/lib/models/entity-actions.ts | 53 +++ .../extensions/src/lib/models/entity-props.ts | 71 ++++ .../extensions/src/lib/models/form-props.ts | 109 ++++++ .../lib/models/internal/object-extensions.ts | 108 +++++ .../src/lib/models/object-extensions.ts | 3 + .../extensions/src/lib/models/props.ts | 85 ++++ .../src/lib/models/toolbar-actions.ts | 78 ++++ .../src/lib/services/extensions.service.ts | 16 + .../src/lib/tokens/extensions.token.ts | 13 + .../src/lib/ui-extensions.module.ts | 56 +++ .../extensions/src/lib/utils/actions.util.ts | 49 +++ .../extensions/src/lib/utils/enum.util.ts | 73 ++++ .../extensions/src/lib/utils/factory.util.ts | 3 + .../src/lib/utils/form-props.util.ts | 61 +++ .../src/lib/utils/localization.util.ts | 33 ++ .../extensions/src/lib/utils/props.util.ts | 62 +++ .../extensions/src/lib/utils/state.util.ts | 200 ++++++++++ .../src/lib/utils/typeahead.util.ts | 72 ++++ .../src/lib/utils/validation.util.ts | 16 + .../theme-shared/extensions/src/public-api.ts | 70 ++++ .../extensions/src/tests/actions.spec.ts | 22 ++ .../extensions/src/tests/actions.util.spec.ts | 53 +++ .../src/tests/date-time.adapter.spec.ts | 35 ++ .../extensions/src/tests/date.adapter.spec.ts | 31 ++ .../src/tests/entity-actions.spec.ts | 151 +++++++ .../extensions/src/tests/entity-props.spec.ts | 166 ++++++++ .../extensions/src/tests/enum.util.spec.ts | 114 ++++++ .../src/tests/extensions.service.spec.ts | 50 +++ .../extensions/src/tests/factory.util.spec.ts | 28 ++ .../extensions/src/tests/form-props.spec.ts | 193 +++++++++ .../src/tests/form-props.util.spec.ts | 142 +++++++ .../src/tests/localization.util.spec.ts | 34 ++ .../extensions/src/tests/props.spec.ts | 22 ++ .../extensions/src/tests/props.util.spec.ts | 72 ++++ .../extensions/src/tests/state.util.spec.ts | 369 ++++++++++++++++++ .../extensions/src/tests/time.adapter.spec.ts | 36 ++ .../src/tests/toolbar-actions.spec.ts | 216 ++++++++++ .../src/tests/typeahead.util.spec.ts | 72 ++++ .../src/tests/validation.util.spec.ts | 20 + .../src/lib/ui-extensions-testing.module.ts | 8 + .../extensions/testing/src/public-api.ts | 1 + .../extensions/testing/ssng-package.json | 7 + .../ng-packs/libs/theme-shared/jest.config.js | 20 + .../libs/theme-shared/ng-package.json | 16 + .../ng-packs/libs/theme-shared/package.json | 22 ++ .../src/lib/animations/bounce.animations.ts | 23 ++ .../src/lib/animations/collapse.animations.ts | 90 +++++ .../src/lib/animations/fade.animations.ts | 74 ++++ .../theme-shared/src/lib/animations/index.ts | 6 + .../src/lib/animations/modal.animations.ts | 12 + .../src/lib/animations/slide.animations.ts | 7 + .../src/lib/animations/toast.animations.ts | 17 + .../breadcrumb/breadcrumb.component.html | 13 + .../breadcrumb/breadcrumb.component.ts | 58 +++ .../lib/components/button/button.component.ts | 82 ++++ .../lib/components/chart/chart.component.html | 11 + .../lib/components/chart/chart.component.ts | 142 +++++++ .../confirmation/confirmation.component.html | 39 ++ .../confirmation/confirmation.component.scss | 82 ++++ .../confirmation/confirmation.component.ts | 37 ++ .../http-error-wrapper.component.html | 37 ++ .../http-error-wrapper.component.scss | 14 + .../http-error-wrapper.component.ts | 90 +++++ .../theme-shared/src/lib/components/index.ts | 15 + .../loader-bar/loader-bar.component.scss | 24 ++ .../loader-bar/loader-bar.component.ts | 120 ++++++ .../components/loading/loading.component.ts | 40 ++ .../components/modal/modal-close.directive.ts | 16 + .../modal/modal-container.component.ts | 13 + .../lib/components/modal/modal-ref.service.ts | 26 ++ .../lib/components/modal/modal.component.html | 23 ++ .../lib/components/modal/modal.component.scss | 25 ++ .../lib/components/modal/modal.component.ts | 253 ++++++++++++ .../sort-order-icon.component.html | 3 + .../sort-order-icon.component.ts | 63 +++ .../table-empty-message.component.ts | 28 ++ .../lib/components/table/table.component.html | 81 ++++ .../lib/components/table/table.component.scss | 337 ++++++++++++++++ .../lib/components/table/table.component.ts | 110 ++++++ .../toast-container.component.html | 11 + .../toast-container.component.scss | 13 + .../toast-container.component.ts | 46 +++ .../lib/components/toast/toast.component.html | 17 + .../lib/components/toast/toast.component.scss | 81 ++++ .../lib/components/toast/toast.component.ts | 52 +++ .../theme-shared/src/lib/constants/scripts.ts | 1 + .../theme-shared/src/lib/constants/styles.ts | 181 +++++++++ .../src/lib/constants/validation.ts | 16 + .../src/lib/directives/ellipsis.directive.ts | 52 +++ .../theme-shared/src/lib/directives/index.ts | 5 + .../src/lib/directives/loading.directive.ts | 102 +++++ .../ngx-datatable-default.directive.ts | 84 ++++ .../ngx-datatable-list.directive.ts | 106 +++++ .../lib/directives/table-sort.directive.ts | 58 +++ .../libs/theme-shared/src/lib/enums/index.ts | 1 + .../theme-shared/src/lib/enums/route-names.ts | 3 + .../src/lib/handlers/error.handler.ts | 338 ++++++++++++++++ .../theme-shared/src/lib/handlers/index.ts | 2 + .../src/lib/handlers/lazy-style.handler.ts | 111 ++++++ .../theme-shared/src/lib/models/common.ts | 27 ++ .../src/lib/models/confirmation.ts | 29 ++ .../libs/theme-shared/src/lib/models/index.ts | 5 + .../theme-shared/src/lib/models/nav-item.ts | 15 + .../theme-shared/src/lib/models/statistics.ts | 14 + .../theme-shared/src/lib/models/toaster.ts | 55 +++ .../theme-shared/src/lib/providers/index.ts | 2 + .../providers/ng-bootstrap-config.provider.ts | 21 + .../src/lib/providers/route.provider.ts | 20 + .../src/lib/services/confirmation.service.ts | 100 +++++ .../theme-shared/src/lib/services/index.ts | 5 + .../src/lib/services/modal.service.ts | 54 +++ .../src/lib/services/nav-items.service.ts | 50 +++ .../src/lib/services/page-alert.service.ts | 34 ++ .../src/lib/services/toaster.service.ts | 138 +++++++ .../lib/tests/append-content.token.spec.ts | 30 ++ .../lib/tests/breadcrumb.component.spec.ts | 84 ++++ .../src/lib/tests/button.component.spec.ts | 56 +++ .../src/lib/tests/chart.component.spec.ts | 126 ++++++ .../lib/tests/confirmation.service.spec.ts | 135 +++++++ .../src/lib/tests/ellipsis.directive.spec.ts | 55 +++ .../src/lib/tests/error.component.spec.ts | 44 +++ .../src/lib/tests/error.handler.spec.ts | 328 ++++++++++++++++ .../src/lib/tests/lazy-style.handler.spec.ts | 66 ++++ .../lib/tests/loader-bar.component.spec.ts | 94 +++++ .../src/lib/tests/loading.directive.spec.ts | 93 +++++ .../tests/modal-container.component.spec.ts | 34 ++ .../src/lib/tests/modal.component.spec.ts | 213 ++++++++++ .../src/lib/tests/modal.service.spec.ts | 87 +++++ .../tests/sort-order-icon.component.spec.ts | 46 +++ .../lib/tests/table-sort.directive.spec.ts | 32 ++ .../src/lib/tests/table.component.spec.ts | 75 ++++ .../src/lib/tests/toaster.service.spec.ts | 122 ++++++ .../src/lib/tests/validation-utils.spec.ts | 52 +++ .../src/lib/theme-shared.module.ts | 140 +++++++ .../src/lib/tokens/append-content.token.ts | 15 + .../src/lib/tokens/http-error.token.ts | 18 + .../libs/theme-shared/src/lib/tokens/index.ts | 5 + .../src/lib/tokens/lazy-styles.token.ts | 3 + .../tokens/ngx-datatable-messages.token.ts | 17 + .../suppress-unsaved-changes-warning.token.ts | 6 + .../src/lib/utils/date-parser-formatter.ts | 56 +++ .../libs/theme-shared/src/lib/utils/index.ts | 3 + .../src/lib/utils/validation-utils.ts | 45 +++ .../src/lib/utils/widget-utils.ts | 16 + .../libs/theme-shared/src/public-api.ts | 17 + .../libs/theme-shared/src/test-setup.ts | 1 + .../theme-shared/styles/bootstrap-rtl.min.css | 7 + .../libs/theme-shared/testing/ng-package.json | 7 + .../testing/src/lib/models/config.ts | 5 + .../testing/src/lib/models/index.ts | 1 + .../src/lib/theme-shared-testing.module.ts | 52 +++ .../theme-shared/testing/src/public-api.ts | 1 + .../ng-packs/libs/theme-shared/tsconfig.json | 16 + .../libs/theme-shared/tsconfig.lib.json | 14 + .../libs/theme-shared/tsconfig.lib.prod.json | 11 + .../libs/theme-shared/tsconfig.spec.json | 10 + npm/ng-packs/nx/ng-packs/nx.json | 6 + npm/ng-packs/nx/ng-packs/package.json | 19 +- npm/ng-packs/nx/ng-packs/tsconfig.base.json | 5 +- npm/ng-packs/nx/ng-packs/yarn.lock | 125 +++--- npm/ng-packs/yarn.lock | 68 ++-- 191 files changed, 10657 insertions(+), 111 deletions(-) rename npm/ng-packs/nx/ng-packs/libs/core/src/{index.ts => public-api.ts} (100%) create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/date.adapter.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/time.adapter.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/date-time-picker/date-time-picker.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/constants/extra-properties.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/directives/disabled.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/directives/prop-data.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/enums/props.enum.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/entity-actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/entity-props.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/form-props.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/internal/object-extensions.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/object-extensions.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/props.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/toolbar-actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/services/extensions.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/tokens/extensions.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/ui-extensions.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/actions.util.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/enum.util.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/factory.util.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/form-props.util.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/localization.util.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/props.util.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/state.util.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/typeahead.util.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/validation.util.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/actions.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/actions.util.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/date-time.adapter.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/date.adapter.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/entity-actions.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/entity-props.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/enum.util.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/extensions.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/factory.util.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/form-props.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/form-props.util.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/localization.util.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/props.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/props.util.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/state.util.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/time.adapter.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/toolbar-actions.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/typeahead.util.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/validation.util.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/src/lib/ui-extensions-testing.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/ssng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/package.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/bounce.animations.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/collapse.animations.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/fade.animations.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/modal.animations.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/slide.animations.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/toast.animations.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/button/button.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/chart/chart.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/chart/chart.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.scss create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.scss create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loader-bar/loader-bar.component.scss create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loading/loading.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-close.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-container.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-ref.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.scss create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.scss create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.scss create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.scss create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/scripts.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/styles.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/validation.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ellipsis.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/loading.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/table-sort.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/enums/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/enums/route-names.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/error.handler.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/lazy-style.handler.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/common.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/confirmation.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/nav-item.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/statistics.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/toaster.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/ng-bootstrap-config.provider.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/route.provider.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/confirmation.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/modal.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/nav-items.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/page-alert.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/toaster.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/append-content.token.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/breadcrumb.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/button.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/chart.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/confirmation.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/ellipsis.directive.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/error.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/error.handler.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/lazy-style.handler.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/loader-bar.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/loading.directive.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal-container.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/table-sort.directive.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/table.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/toaster.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/validation-utils.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/theme-shared.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/append-content.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/http-error.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/lazy-styles.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/ngx-datatable-messages.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/date-parser-formatter.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/validation-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/widget-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/styles/bootstrap-rtl.min.css create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/models/config.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/models/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/theme-shared-testing.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.lib.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.lib.prod.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index b8ff6319a1..bee1d52477 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -8,9 +8,9 @@ "prefix": "abp", "architect": { "build": { - "builder": "@nrwl/angular:ng-packagr-lite", - "outputs": ["dist/libs/core"], + "builder": "@angular-devkit/build-ng-packagr:build", "options": { + "tsConfig": "libs/core/tsconfig.lib.json", "project": "libs/core/ng-package.json" }, "configurations": { @@ -160,6 +160,88 @@ } } } + }, + "theme-basic": { + "projectType": "library", + "root": "libs/theme-basic", + "sourceRoot": "libs/theme-basic/src", + "prefix": "abp", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "libs/theme-basic/tsconfig.lib.json", + "project": "libs/theme-basic/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/theme-basic/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/theme-basic/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/libs/theme-basic"], + "options": { + "jestConfig": "libs/theme-basic/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "libs/theme-basic/src/**/*.ts", + "libs/theme-basic/src/**/*.html" + ] + } + } + } + }, + "theme-shared": { + "projectType": "library", + "root": "libs/theme-shared", + "sourceRoot": "libs/theme-shared/src", + "prefix": "abp", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "libs/theme-shared/tsconfig.lib.json", + "project": "libs/theme-shared/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/theme-shared/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/theme-shared/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/libs/theme-shared"], + "options": { + "jestConfig": "libs/theme-shared/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "libs/theme-shared/src/**/*.ts", + "libs/theme-shared/src/**/*.html" + ] + } + } + } } }, "cli": { @@ -186,7 +268,8 @@ "@nrwl/angular:library": { "style": "scss", "linter": "eslint", - "unitTestRunner": "jest" + "unitTestRunner": "jest", + "strict": false }, "@nrwl/angular:component": { "style": "scss" diff --git a/npm/ng-packs/nx/ng-packs/libs/core/locale/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/core/locale/ng-package.json index f2542d13fb..2ebc715ba0 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/locale/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/libs/core/locale/ng-package.json @@ -1,6 +1,6 @@ { "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../dist/core/locale", + "dest": "../../../dist/libs/core/locale", "lib": { "entryFile": "src/public-api.ts" } diff --git a/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json index 7ebb0a5287..670a0ac99d 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json @@ -2,7 +2,7 @@ "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", "dest": "../../dist/libs/core", "lib": { - "entryFile": "src/index.ts" + "entryFile": "src/public-api.ts" }, "allowedNonPeerDependencies": [ "@abp/utils", diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/index.ts b/npm/ng-packs/nx/ng-packs/libs/core/src/public-api.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/index.ts rename to npm/ng-packs/nx/ng-packs/libs/core/src/public-api.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/core/testing/ng-package.json index e647bd0d3e..45fdf674ea 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/testing/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/libs/core/testing/ng-package.json @@ -1,6 +1,6 @@ { "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../dist/core/testing", + "dest": "../../../dist/libs/core/testing", "lib": { "entryFile": "src/public-api.ts" } diff --git a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json index d2b6463421..692cc17b32 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json @@ -11,15 +11,6 @@ } ], "compilerOptions": { - "forceConsistentCasingInFileNames": true, - "strict": false, - "noImplicitReturns": false, - "noFallthroughCasesInSwitch": true, "allowSyntheticDefaultImports": true, - }, - "angularCompilerOptions": { - "strictInjectionParameters": true, - "strictInputAccessModifiers": false, - "strictTemplates": false } } diff --git a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json index 1bcbd8c948..7f09086ce4 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json +++ b/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json @@ -5,7 +5,7 @@ "declarationMap": false, }, "angularCompilerOptions": { - "compilationMode": "partial" - // "enableIvy": false + "compilationMode": "partial", + "enableIvy": false } } diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/.eslintrc.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md b/npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md new file mode 100644 index 0000000000..0578cf669d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md @@ -0,0 +1,7 @@ +# theme-shared + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test theme-shared` to execute the unit tests. diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/ng-package.json new file mode 100644 index 0000000000..345e5ff42e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/libs/theme-shared/extensions", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts new file mode 100644 index 0000000000..11da774d1b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts @@ -0,0 +1,56 @@ +import { Injectable } from '@angular/core'; +import { NgbDateStruct, NgbTimeStruct } from '@ng-bootstrap/ng-bootstrap'; + +@Injectable() +export class DateTimeAdapter { + value: NgbDateTimeStruct; + + fromModel(value: string | Date): NgbDateTimeStruct | null { + if (!value) return null; + + const date = new Date(value); + + if (isNaN((date as unknown) as number)) return null; + + this.value = { + year: date.getFullYear(), + month: date.getMonth() + 1, + day: date.getDate(), + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds(), + }; + + return this.value; + } + + toModel(value: NgbDateTimeStruct | null): string { + if (!value) return ''; + + const now = new Date(); + + value = { + year: now.getUTCFullYear(), + month: now.getMonth() + 1, + day: now.getDate(), + hour: 0, + minute: 0, + second: 0, + ...this.value, + ...value, + }; + + const date = new Date( + value.year, + value.month - 1, + value.day, + value.hour, + value.minute, + value.second, + ); + + return new Date(date).toISOString(); + } +} + +type NgbDateTimeStruct = NgbDateStruct & NgbTimeStruct; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/date.adapter.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/date.adapter.ts new file mode 100644 index 0000000000..17db36415e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/date.adapter.ts @@ -0,0 +1,40 @@ +import { formatDate } from '@angular/common'; +import { Injectable } from '@angular/core'; +import { NgbDateAdapter, NgbDateStruct } from '@ng-bootstrap/ng-bootstrap'; + +@Injectable() +export class DateAdapter extends NgbDateAdapter { + fromModel(value: string | Date): NgbDateStruct | null { + if (!value) return null; + + let date: Date; + + if (typeof value === 'string') { + date = this.dateOf(value); + } else { + date = new Date(value); + } + + if (isNaN(date as unknown as number)) return null; + + return { + day: date.getDate(), + month: date.getMonth() + 1, + year: date.getFullYear(), + }; + } + + toModel(value: NgbDateStruct | null): string { + if (!value) return ''; + + const date = new Date(value.year, value.month - 1, value.day); + const formattedDate = formatDate(date, 'yyyy-MM-dd', 'en'); + + return formattedDate; + } + + protected dateOf(value: string): Date { + const dateUtc = new Date(Date.parse(value)); + return new Date(dateUtc.getTime() + Math.abs(dateUtc.getTimezoneOffset() * 60000)); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/time.adapter.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/time.adapter.ts new file mode 100644 index 0000000000..33c25ddd8c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/time.adapter.ts @@ -0,0 +1,35 @@ +import { formatDate } from '@angular/common'; +import { Injectable } from '@angular/core'; +import { NgbTimeAdapter, NgbTimeStruct } from '@ng-bootstrap/ng-bootstrap'; + +@Injectable() +export class TimeAdapter extends NgbTimeAdapter { + fromModel(value: string | Date): NgbTimeStruct | null { + if (!value) return null; + + const date = isTimeStr(value) + ? new Date(0, 0, 1, ...value.split(':').map(Number)) + : new Date(value); + + if (isNaN((date as unknown) as number)) return null; + + return { + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds(), + }; + } + + toModel(value: NgbTimeStruct | null): string { + if (!value) return ''; + + const date = new Date(0, 0, 1, value.hour, value.minute, value.second); + const formattedDate = formatDate(date, 'HH:mm', 'en'); + + return formattedDate; + } +} + +function isTimeStr(value: string | Date): value is string { + return /^((2[123])|[01][0-9])(\:[0-5][0-9]){1,2}$/.test(String(value)); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts new file mode 100644 index 0000000000..14d680059a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts @@ -0,0 +1,32 @@ +import { Directive, Injector, Input } from '@angular/core'; +import { ActionData, ActionList } from '../../models/actions'; +import { ExtensionsService } from '../../services/extensions.service'; +import { EXTENSIONS_ACTION_TYPE, EXTENSIONS_IDENTIFIER } from '../../tokens/extensions.token'; + +// tslint:disable: directive-class-suffix +// Fix for https://github.com/angular/angular/issues/23904 +// @dynamic +@Directive() +export abstract class AbstractActionsComponent> extends ActionData< + InferredRecord +> { + readonly actionList: L; + + readonly getInjected: InferredData['getInjected']; + + @Input() readonly record: InferredData['record']; + + constructor(injector: Injector) { + super(); + + // tslint:disable-next-line + this.getInjected = injector.get.bind(injector); + const extensions = injector.get(ExtensionsService); + const name = injector.get(EXTENSIONS_IDENTIFIER); + const type = injector.get(EXTENSIONS_ACTION_TYPE); + this.actionList = (extensions[type].get(name).actions as unknown) as L; + } +} + +type InferredData = ActionData>; +type InferredRecord = L extends ActionList ? R : never; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/date-time-picker/date-time-picker.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/date-time-picker/date-time-picker.component.ts new file mode 100644 index 0000000000..7890e65b36 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/date-time-picker/date-time-picker.component.ts @@ -0,0 +1,76 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + Optional, + SkipSelf, + ViewChild, +} from '@angular/core'; +import { ControlContainer } from '@angular/forms'; +import { + NgbDateAdapter, + NgbInputDatepicker, + NgbTimeAdapter, + NgbTimepicker, +} from '@ng-bootstrap/ng-bootstrap'; +import { DateTimeAdapter } from '../../adapters/date-time.adapter'; +import { FormProp } from '../../models/form-props'; +import { selfFactory } from '../../utils/factory.util'; + +@Component({ + exportAs: 'abpDateTimePicker', + selector: 'abp-date-time-picker', + template: ` + + + `, + changeDetection: ChangeDetectionStrategy.OnPush, + viewProviders: [ + { + provide: ControlContainer, + useFactory: selfFactory, + deps: [[new Optional(), new SkipSelf(), ControlContainer]], + }, + { + provide: NgbDateAdapter, + useClass: DateTimeAdapter, + }, + { + provide: NgbTimeAdapter, + useClass: DateTimeAdapter, + }, + ], +}) +export class DateTimePickerComponent { + @Input() prop: FormProp; + @Input() meridian = false; + + @ViewChild(NgbInputDatepicker) date: NgbInputDatepicker; + @ViewChild(NgbTimepicker) time: NgbTimepicker; + + constructor(public readonly cdRef: ChangeDetectorRef) {} + + setDate(datestr: string) { + this.date.writeValue(datestr); + } + + setTime(datestr: string) { + this.time.writeValue(datestr); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html new file mode 100644 index 0000000000..a197405837 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html @@ -0,0 +1,138 @@ +
+ + + + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts new file mode 100644 index 0000000000..0f792e8578 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts @@ -0,0 +1,193 @@ +import { ABP, AbpValidators, ConfigStateService, TrackByService } from '@abp/ng.core'; +import { + AfterViewInit, + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + ElementRef, + Input, + OnChanges, + Optional, + SimpleChanges, + SkipSelf, + ViewChild, +} from '@angular/core'; +import { + ControlContainer, + FormGroup, + FormGroupDirective, + ValidatorFn, + Validators, +} from '@angular/forms'; +import { NgbDateAdapter, NgbTimeAdapter } from '@ng-bootstrap/ng-bootstrap'; +import { Observable, of } from 'rxjs'; +import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators'; +import snq from 'snq'; +import { DateAdapter } from '../../adapters/date.adapter'; +import { TimeAdapter } from '../../adapters/time.adapter'; +import { EXTRA_PROPERTIES_KEY } from '../../constants/extra-properties'; +import { ePropType } from '../../enums/props.enum'; +import { FormProp } from '../../models/form-props'; +import { PropData } from '../../models/props'; +import { selfFactory } from '../../utils/factory.util'; +import { addTypeaheadTextSuffix } from '../../utils/typeahead.util'; + +@Component({ + selector: 'abp-extensible-form-prop', + templateUrl: './extensible-form-prop.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, + viewProviders: [ + { + provide: ControlContainer, + useFactory: selfFactory, + deps: [[new Optional(), new SkipSelf(), ControlContainer]], + }, + { provide: NgbDateAdapter, useClass: DateAdapter }, + { provide: NgbTimeAdapter, useClass: TimeAdapter }, + ], +}) +export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { + @Input() data: PropData; + + @Input() prop: FormProp; + + @Input() first: boolean; + + @ViewChild('field') private fieldRef: ElementRef; + + asterisk = ''; + + options$: Observable[]> = of([]); + + validators: ValidatorFn[] = []; + + readonly: boolean; + + disabled: boolean; + + private readonly form: FormGroup; + + typeaheadModel: any; + + setTypeaheadValue(selectedOption: ABP.Option) { + this.typeaheadModel = selectedOption || { key: null, value: null }; + const { key, value } = this.typeaheadModel; + const [keyControl, valueControl] = this.getTypeaheadControls(); + if (valueControl.value && !value) valueControl.markAsDirty(); + keyControl.setValue(key); + valueControl.setValue(value); + } + + search = (text$: Observable) => + text$ + ? text$.pipe( + debounceTime(300), + distinctUntilChanged(), + switchMap(text => this.prop.options(this.data, text)), + ) + : of([]); + + typeaheadFormatter = (option: ABP.Option) => option.key; + + get meridian() { + return ( + this.configState.getDeep('localization.currentCulture.dateTimeFormat.shortTimePattern') || '' + ).includes('tt'); + } + + get isInvalid() { + const control = this.form.get(this.prop.name); + return control.touched && control.invalid; + } + + constructor( + public readonly cdRef: ChangeDetectorRef, + public readonly track: TrackByService, + protected configState: ConfigStateService, + groupDirective: FormGroupDirective, + ) { + this.form = groupDirective.form; + } + + private getTypeaheadControls() { + const { name } = this.prop; + const extraPropName = `${EXTRA_PROPERTIES_KEY}.${name}`; + const keyControl = + this.form.get(addTypeaheadTextSuffix(extraPropName)) || + this.form.get(addTypeaheadTextSuffix(name)); + const valueControl = this.form.get(extraPropName) || this.form.get(name); + return [keyControl, valueControl]; + } + + private setAsterisk() { + this.asterisk = this.validators.some(isRequired) ? '*' : ''; + } + + ngAfterViewInit() { + if (this.first && this.fieldRef) { + this.fieldRef.nativeElement.focus(); + } + } + + getComponent(prop: FormProp): string { + switch (prop.type) { + case ePropType.Boolean: + return 'checkbox'; + case ePropType.Date: + return 'date'; + case ePropType.DateTime: + return 'dateTime'; + case ePropType.Hidden: + return 'hidden'; + case ePropType.MultiSelect: + return 'multiselect'; + case ePropType.Text: + return 'textarea'; + case ePropType.Time: + return 'time'; + case ePropType.Typeahead: + return 'typeahead'; + default: + return prop.options ? 'select' : 'input'; + } + } + + getType(prop: FormProp): string { + switch (prop.type) { + case ePropType.Date: + case ePropType.String: + return 'text'; + case ePropType.Boolean: + return 'checkbox'; + case ePropType.Number: + return 'number'; + case ePropType.Email: + return 'email'; + case ePropType.Password: + return 'password'; + default: + return 'hidden'; + } + } + + ngOnChanges({ prop }: SimpleChanges) { + const currentProp = snq(() => prop.currentValue); + const { options, readonly, disabled, validators } = currentProp || {}; + + if (options) this.options$ = options(this.data); + if (readonly) this.readonly = readonly(this.data); + if (disabled) this.disabled = disabled(this.data); + if (validators) { + this.validators = validators(this.data); + this.setAsterisk(); + } + + const [keyControl, valueControl] = this.getTypeaheadControls(); + if (keyControl && valueControl) + this.typeaheadModel = { key: keyControl.value, value: valueControl.value }; + } +} + +function isRequired(validator: ValidatorFn) { + return validator === Validators.required || validator === AbpValidators.required; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html new file mode 100644 index 0000000000..259538820b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts new file mode 100644 index 0000000000..f15f173faa --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts @@ -0,0 +1,64 @@ +import { TrackByService } from '@abp/ng.core'; +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Inject, + Input, + Optional, + QueryList, + SkipSelf, + ViewChildren, +} from '@angular/core'; +import { ControlContainer, FormGroup } from '@angular/forms'; +import { EXTRA_PROPERTIES_KEY } from '../../constants/extra-properties'; +import { FormPropList } from '../../models/form-props'; +import { ExtensionsService } from '../../services/extensions.service'; +import { EXTENSIONS_IDENTIFIER } from '../../tokens/extensions.token'; +import { selfFactory } from '../../utils/factory.util'; +import { ExtensibleFormPropComponent } from './extensible-form-prop.component'; + +@Component({ + exportAs: 'abpExtensibleForm', + selector: 'abp-extensible-form', + templateUrl: './extensible-form.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, + viewProviders: [ + { + provide: ControlContainer, + useFactory: selfFactory, + deps: [[new Optional(), new SkipSelf(), ControlContainer]], + }, + ], +}) +export class ExtensibleFormComponent { + @ViewChildren(ExtensibleFormPropComponent) + formProps: QueryList; + + @Input() + set selectedRecord(record: R) { + const type = !record || JSON.stringify(record) === '{}' ? 'create' : 'edit'; + this.propList = this.extensions[`${type}FormProps`].get(this.identifier).props; + this.record = record; + } + + extraPropertiesKey = EXTRA_PROPERTIES_KEY; + propList: FormPropList; + record: R; + + get form(): FormGroup { + return (this.container ? this.container.control : { controls: {} }) as FormGroup; + } + + get extraProperties(): FormGroup { + return (this.form.controls.extraProperties || { controls: {} }) as FormGroup; + } + + constructor( + public readonly cdRef: ChangeDetectorRef, + public readonly track: TrackByService, + private container: ControlContainer, + private extensions: ExtensionsService, + @Inject(EXTENSIONS_IDENTIFIER) private identifier: string, + ) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html new file mode 100644 index 0000000000..81e2845ac0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + +
+
+
+
+
+
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts new file mode 100644 index 0000000000..6aea101dc7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts @@ -0,0 +1,145 @@ +import { + ListService, + ConfigStateService, + getShortDateFormat, + getShortDateShortTimeFormat, + getShortTimeFormat, + PermissionService, +} from '@abp/ng.core'; +import { formatDate } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + Inject, + Injector, + Input, + LOCALE_ID, + TemplateRef, + TrackByFunction, + Type, + InjectionToken, + InjectFlags, + SimpleChanges, + OnChanges, +} from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { ePropType } from '../../enums/props.enum'; +import { EntityProp, EntityPropList } from '../../models/entity-props'; +import { PropData } from '../../models/props'; +import { ExtensionsService } from '../../services/extensions.service'; +import { EXTENSIONS_IDENTIFIER } from '../../tokens/extensions.token'; +import { EntityActionList } from '../../models/entity-actions'; +const DEFAULT_ACTIONS_COLUMN_WIDTH = 150; + +@Component({ + exportAs: 'abpExtensibleTable', + selector: 'abp-extensible-table', + templateUrl: './extensible-table.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ExtensibleTableComponent implements OnChanges { + protected _actionsText: string; + @Input() + set actionsText(value: string) { + this._actionsText = value; + } + get actionsText(): string { + return this._actionsText ?? (this.actionList.length > 1 ? 'AbpUi::Actions' : ''); + } + + @Input() data: R[]; + @Input() list: ListService; + @Input() recordsTotal: number; + @Input() set actionsColumnWidth(width: number) { + this.setColumnWidths(width ? Number(width) : undefined); + } + @Input() actionsTemplate: TemplateRef; + + getInjected: (token: Type | InjectionToken, notFoundValue?: T, flags?: InjectFlags) => T; + + readonly columnWidths: number[]; + + readonly propList: EntityPropList; + + readonly actionList: EntityActionList; + + readonly trackByFn: TrackByFunction> = (_, item) => item.name; + + hasAtLeastOnePermittedAction: boolean; + + constructor( + @Inject(LOCALE_ID) private locale: string, + private config: ConfigStateService, + injector: Injector, + ) { + // tslint:disable-next-line + this.getInjected = injector.get.bind(injector); + const extensions = injector.get(ExtensionsService); + const name = injector.get(EXTENSIONS_IDENTIFIER); + this.propList = extensions.entityProps.get(name).props; + this.actionList = extensions['entityActions'].get(name) + .actions as unknown as EntityActionList; + + const permissionService = injector.get(PermissionService); + this.hasAtLeastOnePermittedAction = + permissionService.filterItemsByPolicy( + this.actionList.toArray().map(action => ({ requiredPolicy: action.permission })), + ).length > 0; + this.setColumnWidths(DEFAULT_ACTIONS_COLUMN_WIDTH); + } + + private setColumnWidths(actionsColumn: number) { + const widths = [actionsColumn]; + this.propList.forEach(({ value: prop }) => { + widths.push(prop.columnWidth); + }); + (this.columnWidths as any) = widths; + } + + private getDate(value: Date, format: string) { + return value ? formatDate(value, format, this.locale) : ''; + } + + private getIcon(value: boolean) { + return value + ? '
' + : '
'; + } + + getContent(prop: EntityProp, data: PropData): Observable { + return prop.valueResolver(data).pipe( + map(value => { + switch (prop.type) { + case ePropType.Boolean: + return this.getIcon(value); + case ePropType.Date: + return this.getDate(value, getShortDateFormat(this.config)); + case ePropType.Time: + return this.getDate(value, getShortTimeFormat(this.config)); + case ePropType.DateTime: + return this.getDate(value, getShortDateShortTimeFormat(this.config)); + default: + return value; + // More types can be handled in the future + } + }), + ); + } + + ngOnChanges({ data }: SimpleChanges) { + if (!data?.currentValue) return; + + this.data = data.currentValue.map((record, index) => { + this.propList.forEach(prop => { + const propData = { getInjected: this.getInjected, record, index } as any; + record[`_${prop.value.name}`] = { + visible: prop.value.visible(propData), + value: this.getContent(prop.value, propData), + }; + }); + + return record; + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.html new file mode 100644 index 0000000000..6172cacd20 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.html @@ -0,0 +1,43 @@ +
+ +
+ + +
+
+ + + + + + + + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.ts new file mode 100644 index 0000000000..30d36699b6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.ts @@ -0,0 +1,36 @@ +import { + ChangeDetectionStrategy, + Component, + Injector, + Input, + TrackByFunction, +} from '@angular/core'; +import { EntityAction, EntityActionList } from '../../models/entity-actions'; +import { EXTENSIONS_ACTION_TYPE } from '../../tokens/extensions.token'; +import { AbstractActionsComponent } from '../abstract-actions/abstract-actions.component'; + +@Component({ + exportAs: 'abpGridActions', + selector: 'abp-grid-actions', + templateUrl: './grid-actions.component.html', + providers: [ + { + provide: EXTENSIONS_ACTION_TYPE, + useValue: 'entityActions', + }, + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class GridActionsComponent extends AbstractActionsComponent> { + @Input() icon = 'fa fa-cog'; + + @Input() readonly index: number; + + @Input() text = ''; + + readonly trackByFn: TrackByFunction> = (_, item) => item.text; + + constructor(injector: Injector) { + super(injector); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.html new file mode 100644 index 0000000000..38be2289d7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.html @@ -0,0 +1,20 @@ +
+
+ + + + + + + + + + + +
+
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.ts new file mode 100644 index 0000000000..dfd7c0105d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.ts @@ -0,0 +1,49 @@ +import { + ChangeDetectionStrategy, + Component, + InjectFlags, + InjectionToken, + Injector, + TrackByFunction, + Type, +} from '@angular/core'; +import { ToolbarActionList, ToolbarComponent } from '../../models/toolbar-actions'; +import { + EXTENSIONS_ACTION_CALLBACK, + EXTENSIONS_ACTION_DATA, + EXTENSIONS_ACTION_TYPE, +} from '../../tokens/extensions.token'; +import { AbstractActionsComponent } from '../abstract-actions/abstract-actions.component'; + +@Component({ + exportAs: 'abpPageToolbar', + selector: 'abp-page-toolbar', + templateUrl: './page-toolbar.component.html', + providers: [ + { + provide: EXTENSIONS_ACTION_TYPE, + useValue: 'toolbarActions', + }, + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PageToolbarComponent extends AbstractActionsComponent> { + readonly trackByFn: TrackByFunction> = (_, item) => + item.action || item.component; + + constructor(private readonly injector: Injector) { + super(injector); + } + + createInjector(action: ToolbarComponent): Injector { + const get = (token: Type | InjectionToken, notFoundValue?: T, flags?: InjectFlags) => { + return token === EXTENSIONS_ACTION_DATA + ? this.data + : token === EXTENSIONS_ACTION_CALLBACK + ? (data = this.data) => action.action(data) + : this.getInjected.call(this.injector, token, notFoundValue, flags); + }; + + return { get }; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/constants/extra-properties.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/constants/extra-properties.ts new file mode 100644 index 0000000000..e46e633e07 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/constants/extra-properties.ts @@ -0,0 +1 @@ +export const EXTRA_PROPERTIES_KEY = 'extraProperties'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/directives/disabled.directive.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/directives/disabled.directive.ts new file mode 100644 index 0000000000..da3b985666 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/directives/disabled.directive.ts @@ -0,0 +1,19 @@ +import { Directive, Host, Input, OnChanges, SimpleChanges } from '@angular/core'; +import { NgControl } from '@angular/forms'; + +@Directive({ + selector: '[abpDisabled]', +}) +export class DisabledDirective implements OnChanges { + @Input() + abpDisabled: boolean; + + constructor(@Host() private ngControl: NgControl) {} + + // Related issue: https://github.com/angular/angular/issues/35330 + ngOnChanges({ abpDisabled }: SimpleChanges) { + if (this.ngControl.control && abpDisabled) { + this.ngControl.control[abpDisabled.currentValue ? 'disable' : 'enable'](); + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/directives/prop-data.directive.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/directives/prop-data.directive.ts new file mode 100644 index 0000000000..8de502f14b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/directives/prop-data.directive.ts @@ -0,0 +1,54 @@ +import { + Directive, + Injector, + Input, + OnChanges, + OnDestroy, + TemplateRef, + ViewContainerRef, +} from '@angular/core'; +import { PropData, PropList } from '../models/props'; + +@Directive({ + exportAs: 'abpPropData', + selector: '[abpPropData]', +}) +export class PropDataDirective> extends PropData> + implements OnChanges, OnDestroy { + /* tslint:disable:no-input-rename */ + @Input('abpPropDataFromList') readonly propList: L; + + @Input('abpPropDataWithRecord') readonly record: InferredData['record']; + + @Input('abpPropDataAtIndex') readonly index: number; + /* tslint:enable:no-input-rename */ + + readonly getInjected: InferredData['getInjected']; + + constructor( + private tempRef: TemplateRef, + private vcRef: ViewContainerRef, + injector: Injector, + ) { + super(); + + // tslint:disable-next-line + this.getInjected = injector.get.bind(injector); + } + + ngOnChanges() { + this.vcRef.clear(); + + this.vcRef.createEmbeddedView(this.tempRef, { + $implicit: this.data, + index: 0, + }); + } + + ngOnDestroy() { + this.vcRef.clear(); + } +} + +type InferredData = PropData>; +type InferredRecord = L extends PropList ? R : never; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/enums/props.enum.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/enums/props.enum.ts new file mode 100644 index 0000000000..27cb4990a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/enums/props.enum.ts @@ -0,0 +1,15 @@ +export const enum ePropType { + Boolean = 'boolean', + Date = 'date', + DateTime = 'dateTime', + Email = 'email', + Enum = 'enum', + Hidden = 'hidden', + MultiSelect = 'multiselect', + Number = 'number', + Password = 'password', + String = 'string', + Text = 'text', + Time = 'time', + Typeahead = 'typeahead', +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/actions.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/actions.ts new file mode 100644 index 0000000000..4b1d1bd740 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/actions.ts @@ -0,0 +1,79 @@ +/* tslint:disable:variable-name */ +import { LinkedList } from '@abp/utils'; +import { InjectFlags, InjectionToken, Type } from '@angular/core'; +import { O } from 'ts-toolbelt'; + +export abstract class ActionList> extends LinkedList {} + +export abstract class ActionData { + abstract getInjected: ( + token: Type | InjectionToken, + notFoundValue?: T, + flags?: InjectFlags, + ) => T; + index?: number; + abstract record: R; + + get data(): ReadonlyActionData { + return { + getInjected: this.getInjected, + index: this.index, + record: this.record, + }; + } +} + +export type ReadonlyActionData = O.Readonly, 'data'>>; + +export abstract class Action { + constructor( + public readonly permission: string, + public readonly visible: ActionPredicate = _ => true, + public readonly action: ActionCallback = _ => {}, + ) {} +} + +export type ActionCallback = (data?: Omit, 'data'>) => R; +export type ActionPredicate = (data?: Omit, 'data'>) => boolean; + +export abstract class ActionsFactory> { + protected abstract _ctor: Type; + private contributorCallbacks: ActionContributorCallbacks> = {}; + + get(name: string): C { + this.contributorCallbacks[name] = this.contributorCallbacks[name] || []; + + return new this._ctor(this.contributorCallbacks[name]); + } +} + +export abstract class Actions { + protected abstract _ctor: Type; + + get actions(): L { + const actionList = new this._ctor(); + + this.callbackList.forEach(callback => callback(actionList)); + + return actionList; + } + + constructor(private readonly callbackList: ActionContributorCallback[]) {} + + addContributor(contributeCallback: ActionContributorCallback) { + this.callbackList.push(contributeCallback); + } + + clearContributors() { + while (this.callbackList.length) this.callbackList.pop(); + } +} + +export type ActionContributorCallbacks> = Record< + string, + ActionContributorCallback[] +>; + +export type ActionContributorCallback> = (actionList: L) => any; + +type InferredActionList = C extends Actions ? L : never; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/entity-actions.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/entity-actions.ts new file mode 100644 index 0000000000..4938e10337 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/entity-actions.ts @@ -0,0 +1,53 @@ +/* tslint:disable:variable-name */ +import { Type } from '@angular/core'; +import { O } from 'ts-toolbelt'; +import { + Action, + ActionContributorCallback, + ActionContributorCallbacks, + ActionList, + Actions, + ActionsFactory, +} from './actions'; + +export class EntityActionList extends ActionList> {} + +export class EntityActions extends Actions> { + protected _ctor: Type> = EntityActionList; +} + +export class EntityActionsFactory extends ActionsFactory> { + protected _ctor: Type> = EntityActions; +} + +export class EntityAction extends Action { + readonly text: string; + readonly icon: string; + + constructor(options: EntityActionOptions) { + super(options.permission, options.visible, options.action); + this.text = options.text; + this.icon = options.icon || ''; + } + + static create(options: EntityActionOptions) { + return new EntityAction(options); + } + + static createMany(arrayOfOptions: EntityActionOptions[]) { + return arrayOfOptions.map(EntityAction.create); + } +} + +export type EntityActionOptions = O.Optional< + O.Writable>, + 'permission' | 'visible' | 'icon' +>; + +export type EntityActionDefaults = Record[]>; +export type EntityActionContributorCallback = ActionContributorCallback< + EntityActionList +>; +export type EntityActionContributorCallbacks = ActionContributorCallbacks< + EntityActionList +>; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/entity-props.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/entity-props.ts new file mode 100644 index 0000000000..84ae0c360f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/entity-props.ts @@ -0,0 +1,71 @@ +/* tslint:disable:variable-name */ +import { Type } from '@angular/core'; +import { Observable, of } from 'rxjs'; +import { O } from 'ts-toolbelt'; +import { + Prop, + PropCallback, + PropContributorCallback, + PropContributorCallbacks, + PropList, + Props, + PropsFactory, +} from './props'; +import { ActionCallback } from './actions'; + +export class EntityPropList extends PropList> {} + +export class EntityProps extends Props> { + protected _ctor: Type> = EntityPropList; +} + +export class EntityPropsFactory extends PropsFactory> { + protected _ctor: Type> = EntityProps; +} + +export class EntityProp extends Prop { + readonly columnWidth: number | undefined; + readonly sortable: boolean; + readonly valueResolver: PropCallback>; + readonly action: ActionCallback; + + constructor(options: EntityPropOptions) { + super( + options.type, + options.name, + options.displayName, + options.permission, + options.visible, + options.isExtra, + ); + + this.columnWidth = options.columnWidth; + this.sortable = options.sortable || false; + this.valueResolver = options.valueResolver || (data => of(data.record[this.name])); + this.action = options.action; + } + + static create(options: EntityPropOptions) { + return new EntityProp(options); + } + + static createMany(arrayOfOptions: EntityPropOptions[]) { + return arrayOfOptions.map(EntityProp.create); + } +} + +export type EntityPropOptions = O.Optional< + O.Writable>, + | 'permission' + | 'visible' + | 'displayName' + | 'isExtra' + | 'columnWidth' + | 'sortable' + | 'valueResolver' + | 'action' +>; + +export type EntityPropDefaults = Record[]>; +export type EntityPropContributorCallback = PropContributorCallback>; +export type EntityPropContributorCallbacks = PropContributorCallbacks>; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/form-props.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/form-props.ts new file mode 100644 index 0000000000..f9e6dca9ff --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/form-props.ts @@ -0,0 +1,109 @@ +/* tslint:disable:variable-name */ +import { ABP } from '@abp/ng.core'; +import { Injector, Type } from '@angular/core'; +import { AsyncValidatorFn, ValidatorFn } from '@angular/forms'; +import { Observable } from 'rxjs'; +import { O } from 'ts-toolbelt'; +import { + Prop, + PropCallback, + PropContributorCallback, + PropContributorCallbacks, + PropData, + PropList, + PropPredicate, + Props, + PropsFactory, +} from './props'; + +export class FormPropList extends PropList> {} + +export class FormProps extends Props> { + protected _ctor: Type> = FormPropList; +} + +export class CreateFormPropsFactory extends PropsFactory> { + protected _ctor: Type> = FormProps; +} + +export class EditFormPropsFactory extends PropsFactory> { + protected _ctor: Type> = FormProps; +} + +export class FormProp extends Prop { + readonly validators: PropCallback; + readonly asyncValidators: PropCallback; + readonly disabled: PropPredicate; + readonly readonly: PropPredicate; + readonly autocomplete: string; + readonly defaultValue: boolean | number | string | Date; + readonly options: PropCallback[]>> | undefined; + readonly id: string | undefined; + + constructor(options: FormPropOptions) { + super( + options.type, + options.name, + options.displayName, + options.permission, + options.visible, + options.isExtra, + ); + + this.asyncValidators = options.asyncValidators || (_ => []); + this.validators = options.validators || (_ => []); + this.disabled = options.disabled || (_ => false); + this.readonly = options.readonly || (_ => false); + this.autocomplete = options.autocomplete || 'off'; + this.options = options.options; + this.id = options.id || options.name; + const defaultValue = options.defaultValue; + this.defaultValue = isFalsyValue(defaultValue) ? defaultValue : defaultValue || null; + } + + static create(options: FormPropOptions) { + return new FormProp(options); + } + + static createMany(arrayOfOptions: FormPropOptions[]) { + return arrayOfOptions.map(FormProp.create); + } +} + +export class FormPropData extends PropData { + getInjected: PropData['getInjected']; + + constructor(injector: Injector, public readonly record: R) { + super(); + + // tslint:disable-next-line + this.getInjected = injector.get.bind(injector); + } +} + +export type FormPropOptions = O.Optional< + O.Writable>, + | 'permission' + | 'visible' + | 'displayName' + | 'isExtra' + | 'validators' + | 'asyncValidators' + | 'disabled' + | 'readonly' + | 'autocomplete' + | 'defaultValue' + | 'options' + | 'id' +>; + +export type CreateFormPropDefaults = Record[]>; +export type CreateFormPropContributorCallback = PropContributorCallback>; +export type CreateFormPropContributorCallbacks = PropContributorCallbacks>; +export type EditFormPropDefaults = Record[]>; +export type EditFormPropContributorCallback = PropContributorCallback>; +export type EditFormPropContributorCallbacks = PropContributorCallbacks>; + +function isFalsyValue(defaultValue: FormProp['defaultValue']): boolean { + return [0, '', false].indexOf(defaultValue as any) > -1; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/internal/object-extensions.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/internal/object-extensions.ts new file mode 100644 index 0000000000..776785ed4c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/internal/object-extensions.ts @@ -0,0 +1,108 @@ +import { ePropType } from '../../enums/props.enum'; +import { EntityPropList } from '../entity-props'; +import { FormPropList } from '../form-props'; +import { PropContributorCallbacks } from '../props'; + +export type DisplayNameGeneratorFn = ( + displayName: LocalizableStringDto, + fallback: LocalizableStringDto, +) => string; + +export type EntityExtensions = Record; + +export interface EntityExtensionDto { + properties: EntityExtensionProperties; + configuration: Record; +} + +export type EntityExtensionProperties = Record; + +export interface ExtensionEnumDto { + fields: ExtensionEnumFieldDto[]; + localizationResource?: string; + transformed?: any; +} + +export interface ExtensionEnumFieldDto { + name?: string; + value: any; +} + +export interface ExtensionPropertyApiCreateDto { + isAvailable: boolean; +} + +export interface ExtensionPropertyApiDto { + onGet: ExtensionPropertyApiGetDto; + onCreate: ExtensionPropertyApiCreateDto; + onUpdate: ExtensionPropertyApiUpdateDto; +} + +export interface ExtensionPropertyApiGetDto { + isAvailable: boolean; +} + +export interface ExtensionPropertyApiUpdateDto { + isAvailable: boolean; +} + +export interface ExtensionPropertyAttributeDto { + typeSimple?: string; + config: Record; +} + +export interface ExtensionPropertyDto { + type?: string; + typeSimple?: ePropType; + displayName: LocalizableStringDto; + api: ExtensionPropertyApiDto; + ui: ExtensionPropertyUiDto; + attributes: ExtensionPropertyAttributeDto[]; + configuration: Record; + defaultValue: any; +} + +export interface ExtensionPropertyUiDto { + onTable: ExtensionPropertyUiTableDto; + onCreateForm: ExtensionPropertyUiFormDto; + onEditForm: ExtensionPropertyUiFormDto; + lookup?: ExtensionPropertyUiLookupDto; +} + +export interface ExtensionPropertyUiFormDto { + isVisible: boolean; +} + +export interface ExtensionPropertyUiLookupDto { + url?: string; + resultListPropertyName?: string; + displayPropertyName?: string; + valuePropertyName?: string; + filterParamName?: string; +} + +export interface ExtensionPropertyUiTableDto { + isSortable?: boolean; + isVisible: boolean; +} + +export interface LocalizableStringDto { + name?: string; + resource?: string; +} + +export interface ModuleExtensionDto { + entities: Record; + configuration: Record; +} + +export interface ObjectExtensionsDto { + modules: Record; + enums: Record; +} + +export interface PropContributors { + prop: PropContributorCallbacks>; + createForm: PropContributorCallbacks>; + editForm: PropContributorCallbacks>; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/object-extensions.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/object-extensions.ts new file mode 100644 index 0000000000..65bc2a7fdf --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/object-extensions.ts @@ -0,0 +1,3 @@ +import * as ObjectExtensions from './internal/object-extensions'; + +export { ObjectExtensions }; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/props.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/props.ts new file mode 100644 index 0000000000..ef37bee218 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/props.ts @@ -0,0 +1,85 @@ +/* tslint:disable:variable-name */ +import { LinkedList } from '@abp/utils'; +import { InjectFlags, InjectionToken, Type } from '@angular/core'; +import { O } from 'ts-toolbelt'; +import { ePropType } from '../enums/props.enum'; + +export abstract class PropList> extends LinkedList {} + +export abstract class PropData { + abstract getInjected: ( + token: Type | InjectionToken, + notFoundValue?: T, + flags?: InjectFlags, + ) => T; + index?: number; + abstract record: R; + + get data(): ReadonlyPropData { + return { + getInjected: this.getInjected, + index: this.index, + record: this.record, + }; + } +} + +export type ReadonlyPropData = O.Readonly, 'data'>>; + +export abstract class Prop { + constructor( + public readonly type: ePropType, + public readonly name: string, + public readonly displayName: string, + public readonly permission: string, + public readonly visible: PropPredicate = _ => true, + public readonly isExtra = false, + ) { + this.displayName = this.displayName || this.name; + } +} + +export type PropCallback = (data?: Omit, 'data'>, auxData?: any) => R; +export type PropPredicate = (data?: Omit, 'data'>, auxData?: any) => boolean; + +export abstract class PropsFactory> { + protected abstract _ctor: Type; + private contributorCallbacks: PropContributorCallbacks> = {}; + + get(name: string): C { + this.contributorCallbacks[name] = this.contributorCallbacks[name] || []; + + return new this._ctor(this.contributorCallbacks[name]); + } +} + +export abstract class Props { + protected abstract _ctor: Type; + + get props(): L { + const propList = new this._ctor(); + + this.callbackList.forEach(callback => callback(propList)); + + return propList; + } + + constructor(private readonly callbackList: PropContributorCallback[]) {} + + addContributor(contributeCallback: PropContributorCallback) { + this.callbackList.push(contributeCallback); + } + + clearContributors() { + while (this.callbackList.length) this.callbackList.pop(); + } +} + +export type PropContributorCallbacks> = Record< + string, + PropContributorCallback[] +>; + +export type PropContributorCallback> = (propList: L) => any; + +type InferredPropList = C extends Props ? L : never; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/toolbar-actions.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/toolbar-actions.ts new file mode 100644 index 0000000000..1a166b083d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/toolbar-actions.ts @@ -0,0 +1,78 @@ +/* tslint:disable:variable-name */ +import { Type } from '@angular/core'; +import { O } from 'ts-toolbelt'; +import { + Action, + ActionContributorCallback, + ActionContributorCallbacks, + ActionList, + Actions, + ActionsFactory, +} from './actions'; + +export class ToolbarActionList extends ActionList< + R, + ToolbarAction | ToolbarComponent +> {} + +export class ToolbarActions extends Actions> { + protected _ctor: Type> = ToolbarActionList; +} + +export class ToolbarActionsFactory extends ActionsFactory> { + protected _ctor: Type> = ToolbarActions; +} + +export class ToolbarAction extends Action { + readonly text: string; + readonly icon: string; + + constructor(options: ToolbarActionOptions) { + super(options.permission, options.visible, options.action); + this.text = options.text; + this.icon = options.icon || ''; + } + + static create(options: ToolbarActionOptions) { + return new ToolbarAction(options); + } + + static createMany(arrayOfOptions: ToolbarActionOptions[]) { + return arrayOfOptions.map(ToolbarAction.create); + } +} + +export class ToolbarComponent extends Action { + readonly component: Type; + + constructor(options: ToolbarComponentOptions) { + super(options.permission, options.visible, options.action); + this.component = options.component; + } + + static create(options: ToolbarComponentOptions) { + return new ToolbarComponent(options); + } + + static createMany(arrayOfOptions: ToolbarComponentOptions[]) { + return arrayOfOptions.map(ToolbarComponent.create); + } +} + +export type ToolbarActionOptions = O.Optional< + O.Writable>, + 'permission' | 'visible' | 'icon' +>; + +export type ToolbarComponentOptions = O.Optional< + O.Writable>, + 'permission' | 'visible' | 'action' +>; + +export type ToolbarActionDefaults = Record[]>; +export type ToolbarActionContributorCallback = ActionContributorCallback< + ToolbarActionList +>; +export type ToolbarActionContributorCallbacks = ActionContributorCallbacks< + ToolbarActionList +>; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/services/extensions.service.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/services/extensions.service.ts new file mode 100644 index 0000000000..e57a874ef8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/services/extensions.service.ts @@ -0,0 +1,16 @@ +import { Injectable } from '@angular/core'; +import { EntityActionsFactory } from '../models/entity-actions'; +import { EntityPropsFactory } from '../models/entity-props'; +import { CreateFormPropsFactory, EditFormPropsFactory } from '../models/form-props'; +import { ToolbarActionsFactory } from '../models/toolbar-actions'; + +@Injectable({ + providedIn: 'root', +}) +export class ExtensionsService { + readonly entityActions = new EntityActionsFactory(); + readonly toolbarActions = new ToolbarActionsFactory(); + readonly entityProps = new EntityPropsFactory(); + readonly createFormProps = new CreateFormPropsFactory(); + readonly editFormProps = new EditFormPropsFactory(); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/tokens/extensions.token.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/tokens/extensions.token.ts new file mode 100644 index 0000000000..ba504756aa --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/tokens/extensions.token.ts @@ -0,0 +1,13 @@ +import { InjectionToken } from '@angular/core'; +import { ActionCallback, ReadonlyActionData as ActionData } from '../models/actions'; +import { ExtensionsService } from '../services/extensions.service'; + +export const EXTENSIONS_IDENTIFIER = new InjectionToken('EXTENSIONS_IDENTIFIER'); +export type ActionKeys = Extract<'entityActions' | 'toolbarActions', keyof ExtensionsService>; + +export const EXTENSIONS_ACTION_TYPE = new InjectionToken('EXTENSIONS_ACTION_TYPE'); + +export const EXTENSIONS_ACTION_DATA = new InjectionToken('EXTENSIONS_ACTION_DATA'); +export const EXTENSIONS_ACTION_CALLBACK = new InjectionToken>( + 'EXTENSIONS_ACTION_DATA', +); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/ui-extensions.module.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/ui-extensions.module.ts new file mode 100644 index 0000000000..28456e0324 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/ui-extensions.module.ts @@ -0,0 +1,56 @@ +import { CoreModule } from '@abp/ng.core'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { NgModule } from '@angular/core'; +import { + NgbDatepickerModule, + NgbDropdownModule, + NgbTimepickerModule, + NgbTypeaheadModule, +} from '@ng-bootstrap/ng-bootstrap'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; +import { DateTimePickerComponent } from './components/date-time-picker/date-time-picker.component'; +import { ExtensibleFormPropComponent } from './components/extensible-form/extensible-form-prop.component'; +import { ExtensibleFormComponent } from './components/extensible-form/extensible-form.component'; +import { ExtensibleTableComponent } from './components/extensible-table/extensible-table.component'; +import { GridActionsComponent } from './components/grid-actions/grid-actions.component'; +import { PageToolbarComponent } from './components/page-toolbar/page-toolbar.component'; +import { DisabledDirective } from './directives/disabled.directive'; +import { PropDataDirective } from './directives/prop-data.directive'; + +@NgModule({ + exports: [ + DateTimePickerComponent, + PageToolbarComponent, + GridActionsComponent, + ExtensibleFormComponent, + ExtensibleTableComponent, + PropDataDirective, + DisabledDirective, + ], + declarations: [ + DateTimePickerComponent, + PageToolbarComponent, + GridActionsComponent, + ExtensibleFormPropComponent, + ExtensibleFormComponent, + ExtensibleTableComponent, + PropDataDirective, + DisabledDirective, + ], + imports: [ + CoreModule, + ThemeSharedModule, + NgxValidateCoreModule, + NgbDatepickerModule, + NgbDropdownModule, + NgbTimepickerModule, + NgbTypeaheadModule, + ], +}) +export class BaseUiExtensionsModule {} + +@NgModule({ + exports: [BaseUiExtensionsModule], + imports: [BaseUiExtensionsModule], +}) +export class UiExtensionsModule {} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/actions.util.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/actions.util.ts new file mode 100644 index 0000000000..f4501317df --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/actions.util.ts @@ -0,0 +1,49 @@ +import { ActionContributorCallback, ActionList, ActionsFactory } from '../models/actions'; +import { + EntityActionContributorCallbacks, + EntityActionDefaults, + EntityActions, + EntityActionsFactory, +} from '../models/entity-actions'; +import { + ToolbarActionContributorCallbacks, + ToolbarActionDefaults, + ToolbarActions, + ToolbarActionsFactory, +} from '../models/toolbar-actions'; + +export function mergeWithDefaultActions>( + extension: F, + defaultActions: InferredActionDefaults, + ...contributors: InferredActionContributorCallbacks[] +) { + Object.keys(defaultActions).forEach((name: string) => { + const actions: InferredActions = extension.get(name); + actions.clearContributors(); + actions.addContributor((actionList: ActionList) => + actionList.addManyTail(defaultActions[name]), + ); + contributors.forEach(contributor => + (contributor[name] || []).forEach((callback: ActionContributorCallback) => + actions.addContributor(callback), + ), + ); + }); +} +type InferredActionDefaults = F extends EntityActionsFactory + ? EntityActionDefaults + : F extends ToolbarActionsFactory + ? ToolbarActionDefaults + : never; + +type InferredActionContributorCallbacks = F extends EntityActionsFactory + ? EntityActionContributorCallbacks + : F extends ToolbarActionsFactory + ? ToolbarActionContributorCallbacks + : never; + +type InferredActions = F extends EntityActionsFactory + ? EntityActions + : F extends ToolbarActionsFactory + ? ToolbarActions + : never; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/enum.util.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/enum.util.ts new file mode 100644 index 0000000000..bb8da3694f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/enum.util.ts @@ -0,0 +1,73 @@ +import { ABP, LocalizationService } from '@abp/ng.core'; +import { merge, Observable, of } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { EXTRA_PROPERTIES_KEY } from '../constants/extra-properties'; +import { ObjectExtensions } from '../models/object-extensions'; +import { PropCallback } from '../models/props'; + +export function createEnum(members: ObjectExtensions.ExtensionEnumFieldDto[]) { + const enumObject: any = {}; + + members.forEach(({ name, value }) => { + enumObject[(enumObject[name] = value as any)] = name; + }); + + return enumObject; +} + +export function createEnumValueResolver( + enumType: string, + lookupEnum: ObjectExtensions.ExtensionEnumDto, + propName: string, +): PropCallback> { + return data => { + const value = data.record[EXTRA_PROPERTIES_KEY][propName]; + const key = lookupEnum.transformed[value]; + const l10n = data.getInjected(LocalizationService); + const localizeEnum = createEnumLocalizer(l10n, enumType, lookupEnum); + + return createLocalizationStream(l10n, localizeEnum(key)); + }; +} + +export function createEnumOptions( + enumType: string, + lookupEnum: ObjectExtensions.ExtensionEnumDto, +): PropCallback[]>> { + return data => { + const l10n = data.getInjected(LocalizationService); + const localizeEnum = createEnumLocalizer(l10n, enumType, lookupEnum); + + return createLocalizationStream( + l10n, + lookupEnum.fields.map(({ name, value }) => ({ + key: localizeEnum(name), + value, + })), + ); + }; +} + +function createLocalizationStream(l10n: LocalizationService, mapTarget: any) { + return merge(of(null), l10n.languageChange$).pipe(map(() => mapTarget)); +} + +function createEnumLocalizer( + l10n: LocalizationService, + enumType: string, + lookupEnum: ObjectExtensions.ExtensionEnumDto, +): (key: string) => string { + const resource = lookupEnum.localizationResource; + const shortType = getShortEnumType(enumType); + + return key => + l10n.localizeWithFallbackSync( + [resource], + ['Enum:' + shortType + '.' + key, shortType + '.' + key, key], + key, + ); +} + +function getShortEnumType(enumType: string): string { + return enumType.split('.').pop(); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/factory.util.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/factory.util.ts new file mode 100644 index 0000000000..5bb6265075 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/factory.util.ts @@ -0,0 +1,3 @@ +export function selfFactory(dependency?: any) { + return dependency; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/form-props.util.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/form-props.util.ts new file mode 100644 index 0000000000..828ac383d0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/form-props.util.ts @@ -0,0 +1,61 @@ +import { FormControl, FormGroup } from '@angular/forms'; +import { DateTimeAdapter } from '../adapters/date-time.adapter'; +import { DateAdapter } from '../adapters/date.adapter'; +import { TimeAdapter } from '../adapters/time.adapter'; +import { EXTRA_PROPERTIES_KEY } from '../constants/extra-properties'; +import { ePropType } from '../enums/props.enum'; +import { FormPropList } from '../models/form-props'; +import { PropData } from '../models/props'; +import { ExtensionsService } from '../services/extensions.service'; +import { EXTENSIONS_IDENTIFIER } from '../tokens/extensions.token'; + +export function generateFormFromProps(data: PropData) { + const extensions = data.getInjected(ExtensionsService); + const identifier = data.getInjected(EXTENSIONS_IDENTIFIER); + + const form = new FormGroup({}); + const extraForm = new FormGroup({}); + form.addControl(EXTRA_PROPERTIES_KEY, extraForm); + + const record = data.record || {}; + const type = JSON.stringify(record) === '{}' ? 'create' : 'edit'; + const props: FormPropList = extensions[`${type}FormProps`].get(identifier).props; + const extraProperties = record[EXTRA_PROPERTIES_KEY] || {}; + + props.forEach(({ value: prop }) => { + const name = prop.name; + const isExtraProperty = prop.isExtra || name in extraProperties; + let value = isExtraProperty ? extraProperties[name] : name in record ? record[name] : undefined; + + if (typeof value === 'undefined') value = prop.defaultValue; + + if (value) { + let adapter: DateAdapter | TimeAdapter | DateTimeAdapter; + switch (prop.type) { + case ePropType.Date: + adapter = new DateAdapter(); + value = adapter.toModel(adapter.fromModel(value)); + break; + case ePropType.Time: + adapter = new TimeAdapter(); + value = adapter.toModel(adapter.fromModel(value)); + break; + case ePropType.DateTime: + adapter = new DateTimeAdapter(); + value = adapter.toModel(adapter.fromModel(value) as any); + break; + default: + break; + } + } + + const formControl = new FormControl(value, { + asyncValidators: prop.asyncValidators(data), + validators: prop.validators(data), + }); + + (isExtraProperty ? extraForm : form).addControl(name, formControl); + }); + + return form; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/localization.util.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/localization.util.ts new file mode 100644 index 0000000000..227735591b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/localization.util.ts @@ -0,0 +1,33 @@ +import { + ApplicationLocalizationConfigurationDto, + createLocalizationPipeKeyGenerator, +} from '@abp/ng.core'; +import { ObjectExtensions } from '../models/object-extensions'; + +export function createDisplayNameLocalizationPipeKeyGenerator( + localization: ApplicationLocalizationConfigurationDto, +) { + const generateLocalizationPipeKey = createLocalizationPipeKeyGenerator(localization); + + return ( + displayName: ObjectExtensions.LocalizableStringDto, + fallback: ObjectExtensions.LocalizableStringDto, + ) => { + if (displayName && displayName.name) + return generateLocalizationPipeKey( + [displayName.resource], + [displayName.name], + displayName.name, + ); + + const key = generateLocalizationPipeKey( + [fallback.resource], + ['DisplayName:' + fallback.name], + undefined, + ); + + if (key) return key; + + return generateLocalizationPipeKey([fallback.resource], [fallback.name], fallback.name); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/props.util.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/props.util.ts new file mode 100644 index 0000000000..b750131065 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/props.util.ts @@ -0,0 +1,62 @@ +import { of } from 'rxjs'; +import { EXTRA_PROPERTIES_KEY } from '../constants/extra-properties'; +import { + EntityPropContributorCallbacks, + EntityPropDefaults, + EntityProps, + EntityPropsFactory, +} from '../models/entity-props'; +import { + CreateFormPropContributorCallbacks, + CreateFormPropDefaults, + CreateFormPropsFactory, + EditFormPropContributorCallbacks, + EditFormPropDefaults, + EditFormPropsFactory, + FormProps, +} from '../models/form-props'; +import { PropContributorCallback, PropData, PropList, PropsFactory } from '../models/props'; + +export function createExtraPropertyValueResolver(name: string) { + return (data?: PropData) => of(data.record[EXTRA_PROPERTIES_KEY][name]); +} + +export function mergeWithDefaultProps>( + extension: F, + defaultProps: InferredPropDefaults, + ...contributors: InferredPropContributorCallbacks[] +) { + Object.keys(defaultProps).forEach((name: string) => { + const props: InferredProps = extension.get(name); + props.clearContributors(); + props.addContributor((propList: PropList) => propList.addManyTail(defaultProps[name])); + contributors.forEach(contributor => + (contributor[name] || []).forEach((callback: PropContributorCallback) => + props.addContributor(callback), + ), + ); + }); +} +type InferredPropDefaults = F extends EntityPropsFactory + ? EntityPropDefaults + : F extends CreateFormPropsFactory + ? CreateFormPropDefaults + : F extends EditFormPropsFactory + ? EditFormPropDefaults + : never; + +type InferredPropContributorCallbacks = F extends EntityPropsFactory + ? EntityPropContributorCallbacks + : F extends CreateFormPropsFactory + ? CreateFormPropContributorCallbacks + : F extends EditFormPropsFactory + ? EditFormPropContributorCallbacks + : never; + +type InferredProps = F extends EntityPropsFactory + ? EntityProps + : F extends CreateFormPropsFactory + ? FormProps + : F extends EditFormPropsFactory + ? FormProps + : never; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/state.util.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/state.util.ts new file mode 100644 index 0000000000..4920687077 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/state.util.ts @@ -0,0 +1,200 @@ +import { + ABP, + ApplicationLocalizationConfigurationDto, + ConfigStateService, + ExtensionPropertyUiLookupDto, +} from '@abp/ng.core'; +import { Observable, pipe, zip } from 'rxjs'; +import { filter, map, switchMap, take } from 'rxjs/operators'; +import { ePropType } from '../enums/props.enum'; +import { EntityProp, EntityPropList } from '../models/entity-props'; +import { FormProp, FormPropList } from '../models/form-props'; +import { ObjectExtensions } from '../models/object-extensions'; +import { PropCallback } from '../models/props'; +import { createEnum, createEnumOptions, createEnumValueResolver } from './enum.util'; +import { createDisplayNameLocalizationPipeKeyGenerator } from './localization.util'; +import { createExtraPropertyValueResolver } from './props.util'; +import { + createTypeaheadDisplayNameGenerator, + createTypeaheadOptions, + getTypeaheadType, + hasTypeaheadTextSuffix, +} from './typeahead.util'; +import { getValidatorsFromProperty } from './validation.util'; + +function selectObjectExtensions( + configState: ConfigStateService, +): Observable { + return configState.getOne$('objectExtensions'); +} + +function selectLocalization( + configState: ConfigStateService, +): Observable { + return configState.getOne$('localization'); +} + +function selectEnums( + configState: ConfigStateService, +): Observable> { + return selectObjectExtensions(configState).pipe( + map((extensions: ObjectExtensions.ObjectExtensionsDto) => + Object.keys(extensions.enums).reduce((acc, key) => { + const { fields, localizationResource } = extensions.enums[key]; + acc[key] = { + fields, + localizationResource, + transformed: createEnum(fields), + }; + return acc; + }, {} as Record), + ), + ); +} + +export function getObjectExtensionEntitiesFromStore( + configState: ConfigStateService, + moduleKey: string, +) { + return selectObjectExtensions(configState).pipe( + map(extensions => { + if (!extensions) return null; + + return (extensions.modules[moduleKey] || ({} as ObjectExtensions.ModuleExtensionDto)) + .entities; + }), + map(entities => (isUndefined(entities) ? {} : entities)), + filter(Boolean), + take(1), + ); +} + +export function mapEntitiesToContributors( + configState: ConfigStateService, + resource: string, +) { + return pipe( + switchMap(entities => + zip(selectLocalization(configState), selectEnums(configState)).pipe( + map(([localization, enums]) => { + const generateDisplayName = createDisplayNameLocalizationPipeKeyGenerator(localization); + + return Object.keys(entities).reduce( + (acc, key: keyof ObjectExtensions.EntityExtensions) => { + acc.prop[key] = []; + acc.createForm[key] = []; + acc.editForm[key] = []; + + const entity: ObjectExtensions.EntityExtensionDto = entities[key]; + if (!entity) return acc; + + const properties = entity.properties; + if (!properties) return acc; + + const mapPropertiesToContributors = createPropertiesToContributorsMapper( + generateDisplayName, + resource, + enums, + ); + + return mapPropertiesToContributors(properties, acc, key); + }, + { + prop: {}, + createForm: {}, + editForm: {}, + } as ObjectExtensions.PropContributors, + ); + }), + ), + ), + take(1), + ); +} + +function createPropertiesToContributorsMapper( + generateDisplayName: ObjectExtensions.DisplayNameGeneratorFn, + resource: string, + enums: Record, +) { + return ( + properties: ObjectExtensions.EntityExtensionProperties, + contributors: ObjectExtensions.PropContributors, + key: string, + ) => { + const isExtra = true; + const generateTypeaheadDisplayName = createTypeaheadDisplayNameGenerator( + generateDisplayName, + properties, + ); + + Object.keys(properties).forEach((name: string) => { + const property = properties[name]; + const propName = name; + const lookup = property.ui.lookup || ({} as ExtensionPropertyUiLookupDto); + const type = getTypeaheadType(lookup, name) || getTypeFromProperty(property); + const generateDN = hasTypeaheadTextSuffix(name) + ? generateTypeaheadDisplayName + : generateDisplayName; + const displayName = generateDN(property.displayName, { name, resource }); + + if (property.ui.onTable.isVisible) { + const sortable = Boolean(property.ui.onTable.isSortable); + const columnWidth = type === ePropType.Boolean ? 150 : 250; + const valueResolver = + type === ePropType.Enum + ? createEnumValueResolver(property.type, enums[property.type], propName) + : createExtraPropertyValueResolver(propName); + + const entityProp = new EntityProp({ + type, + name: propName, + displayName, + sortable, + columnWidth, + valueResolver, + isExtra, + }); + + const contributor = (propList: EntityPropList) => propList.addTail(entityProp); + contributors.prop[key].push(contributor); + } + + const isOnCreateForm = property.ui.onCreateForm.isVisible; + const isOnEditForm = property.ui.onEditForm.isVisible; + + if (isOnCreateForm || isOnEditForm) { + const defaultValue = property.defaultValue; + const validators = () => getValidatorsFromProperty(property); + let options: PropCallback[]>>; + if (type === ePropType.Enum) options = createEnumOptions(propName, enums[property.type]); + else if (type === ePropType.Typeahead) options = createTypeaheadOptions(lookup); + + const formProp = new FormProp({ + type, + name: propName, + displayName, + options, + defaultValue, + validators, + isExtra, + }); + + const formContributor = (propList: FormPropList) => propList.addTail(formProp); + + if (isOnCreateForm) contributors.createForm[key].push(formContributor); + if (isOnEditForm) contributors.editForm[key].push(formContributor); + } + }); + + return contributors; + }; +} + +function getTypeFromProperty(property: ObjectExtensions.ExtensionPropertyDto): ePropType { + return (property.typeSimple.replace(/\?$/, '') as string) as ePropType; +} + +function isUndefined(obj: any): obj is undefined { + return typeof obj === 'undefined'; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/typeahead.util.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/typeahead.util.ts new file mode 100644 index 0000000000..b34528104d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/typeahead.util.ts @@ -0,0 +1,72 @@ +import { ABP, ExtensionPropertyUiLookupDto, RestService } from '@abp/ng.core'; +import { Observable, of } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { ePropType } from '../enums/props.enum'; +import { ObjectExtensions } from '../models/object-extensions'; +import { PropCallback } from '../models/props'; + +const TYPEAHEAD_TEXT_SUFFIX = '_Text'; +const TYPEAHEAD_TEXT_SUFFIX_REGEX = /_Text$/; + +export function createTypeaheadOptions( + lookup: ExtensionPropertyUiLookupDto, +): PropCallback[]>> { + return (data, searchText) => + searchText + ? data + .getInjected(RestService) + .request( + { + method: 'GET', + url: lookup.url, + params: { + [lookup.filterParamName]: searchText, + }, + }, + { apiName: 'Default' }, + ) + .pipe( + map(response => { + const list = response[lookup.resultListPropertyName]; + const mapToOption = (item: any) => ({ + key: item[lookup.displayPropertyName], + value: item[lookup.valuePropertyName], + }); + return list.map(mapToOption); + }), + ) + : of([]); +} + +export function getTypeaheadType(lookup: ExtensionPropertyUiLookupDto, name: string) { + return Boolean(lookup.url) + ? ePropType.Typeahead + : name.endsWith(TYPEAHEAD_TEXT_SUFFIX) + ? ePropType.Hidden + : undefined; +} + +export function createTypeaheadDisplayNameGenerator( + displayNameGeneratorFn: ObjectExtensions.DisplayNameGeneratorFn, + properties: ObjectExtensions.EntityExtensionProperties, +): ObjectExtensions.DisplayNameGeneratorFn { + return (displayName, fallback) => { + const name = removeTypeaheadTextSuffix(fallback.name); + return displayNameGeneratorFn(displayName || properties[name].displayName, { + name, + resource: fallback.resource, + }); + }; +} + +export function addTypeaheadTextSuffix(name: string) { + return name + TYPEAHEAD_TEXT_SUFFIX; +} + +export function hasTypeaheadTextSuffix(name: string) { + return TYPEAHEAD_TEXT_SUFFIX_REGEX.test(name); +} + +export function removeTypeaheadTextSuffix(name: string) { + return name.replace(TYPEAHEAD_TEXT_SUFFIX_REGEX, ''); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/validation.util.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/validation.util.ts new file mode 100644 index 0000000000..d87c6c1260 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/validation.util.ts @@ -0,0 +1,16 @@ +import { AbpValidators } from '@abp/ng.core'; +import { ValidatorFn } from '@angular/forms'; +import { ObjectExtensions } from '../models/object-extensions'; + +export function getValidatorsFromProperty( + property: ObjectExtensions.ExtensionPropertyDto, +): ValidatorFn[] { + const validators: ValidatorFn[] = []; + + property.attributes.forEach(attr => { + if (attr.typeSimple in AbpValidators) + validators.push(AbpValidators[attr.typeSimple](attr.config)); + }); + + return validators; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/public-api.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/public-api.ts new file mode 100644 index 0000000000..a3afbe7efd --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/public-api.ts @@ -0,0 +1,70 @@ +export * from './lib/adapters/date-time.adapter'; +export * from './lib/adapters/date.adapter'; +export * from './lib/adapters/time.adapter'; +export * from './lib/components/date-time-picker/date-time-picker.component'; +export * from './lib/components/extensible-form/extensible-form-prop.component'; +export * from './lib/components/extensible-form/extensible-form.component'; +export * from './lib/components/extensible-table/extensible-table.component'; +export * from './lib/components/grid-actions/grid-actions.component'; +export * from './lib/components/page-toolbar/page-toolbar.component'; +export * from './lib/constants/extra-properties'; +export * from './lib/directives/disabled.directive'; +export * from './lib/directives/prop-data.directive'; +export * from './lib/enums/props.enum'; +export { + ActionCallback, + ActionList, + ActionPredicate, + ReadonlyActionData as ActionData, +} from './lib/models/actions'; +export { + EntityAction, + EntityActionContributorCallback, + EntityActionList, + EntityActionOptions, + EntityActions, + EntityActionsFactory, +} from './lib/models/entity-actions'; +export { + EntityProp, + EntityPropContributorCallback, + EntityPropList, + EntityPropOptions, + EntityProps, + EntityPropsFactory, +} from './lib/models/entity-props'; +export { + CreateFormPropContributorCallback, + CreateFormPropsFactory, + EditFormPropContributorCallback, + EditFormPropsFactory, + FormProp, + FormPropData, + FormPropList, + FormPropOptions, + FormProps, +} from './lib/models/form-props'; +export * from './lib/models/object-extensions'; +export { + PropCallback, + PropList, + PropPredicate, + ReadonlyPropData as PropData, +} from './lib/models/props'; +export { + ToolbarAction, + ToolbarActionContributorCallback, + ToolbarActionList, + ToolbarActionOptions, + ToolbarActions, + ToolbarActionsFactory, + ToolbarComponent, + ToolbarComponentOptions, +} from './lib/models/toolbar-actions'; +export * from './lib/services/extensions.service'; +export * from './lib/tokens/extensions.token'; +export * from './lib/ui-extensions.module'; +export * from './lib/utils/actions.util'; +export * from './lib/utils/form-props.util'; +export * from './lib/utils/props.util'; +export * from './lib/utils/state.util'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/actions.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/actions.spec.ts new file mode 100644 index 0000000000..ea8d111bec --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/actions.spec.ts @@ -0,0 +1,22 @@ +import { ActionData } from '../lib/models/actions'; + +describe('ActionData', () => { + describe('#data', () => { + it('should return record and getInjected', () => { + const spy = jest.fn(); + class Data extends ActionData { + index = 0; + record = 'X'; + getInjected = spy; + } + + const data = new Data(); + data.data.getInjected(null); + + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledWith(null); + expect(data.data.index).toBe(0); + expect(data.data.record).toBe('X'); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/actions.util.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/actions.util.spec.ts new file mode 100644 index 0000000000..fd3b27c564 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/actions.util.spec.ts @@ -0,0 +1,53 @@ +import { + EntityAction, + EntityActionContributorCallbacks, + EntityActionDefaults, + EntityActionsFactory, +} from '../lib/models/entity-actions'; +import { mergeWithDefaultActions } from '../lib/utils/actions.util'; + +describe('Entity Action Utils', () => { + describe('#mergeEntityActions', () => { + let entityActions: EntityActionsFactory; + + beforeEach(() => { + entityActions = new EntityActionsFactory(); + }); + + it('should merge default actions with action contributors', () => { + const defaults: EntityActionDefaults = { + x: [(1 as any) as EntityAction, (2 as any) as EntityAction, (3 as any) as EntityAction], + y: [(1 as any) as EntityAction, (2 as any) as EntityAction, (3 as any) as EntityAction], + }; + + const contributors1: EntityActionContributorCallbacks = { + x: [ + actionList => { + const x2 = actionList.dropByIndex(1); // 1 <-> 3 + actionList.addHead(x2.value); // 2 <-> 1 <-> 3 + }, + actionList => { + actionList.dropTail(); // 2 <-> 1 + }, + ], + }; + + const contributors2: EntityActionContributorCallbacks = { + y: [ + actionList => { + const y2 = actionList.dropByIndex(1); // 1 <-> 3 + actionList.addTail(y2.value); // 1 <-> 3 <-> 2 + }, + actionList => { + actionList.dropHead(); // 3 <-> 2 + }, + ], + }; + + mergeWithDefaultActions(entityActions, defaults, contributors1, contributors2); + + expect(entityActions.get('x').actions.toString()).toBe('2 <-> 1'); + expect(entityActions.get('y').actions.toString()).toBe('3 <-> 2'); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/date-time.adapter.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/date-time.adapter.spec.ts new file mode 100644 index 0000000000..621246b5e0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/date-time.adapter.spec.ts @@ -0,0 +1,35 @@ +import { DateTimeAdapter } from '../lib/adapters/date-time.adapter'; + +describe('DateTime Adapter', () => { + const adapter = new DateTimeAdapter(); + const date = new Date(2002, 2, 30, 13, 30, 45, 0); + const year = date.getFullYear(); + const month = date.getMonth() + 1; + const day = date.getDate(); + const hour = date.getHours(); + const minute = date.getMinutes(); + const second = date.getSeconds(); + + describe('#fromModel', () => { + test.each` + param | expected + ${undefined} | ${null} + ${null} | ${null} + ${'x'} | ${null} + ${date} | ${{ year, month, day, hour, minute, second }} + `('should return $expected when $param is given', ({ param, expected }) => { + expect(adapter.fromModel(param)).toEqual(expected); + }); + }); + + describe('#toModel', () => { + test.each` + param | expected + ${undefined} | ${''} + ${null} | ${''} + ${{ year, month, day, hour, minute, second }} | ${date.toISOString()} + `('should return $expected when $param is given', ({ param, expected }) => { + expect(adapter.toModel(param)).toEqual(expected); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/date.adapter.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/date.adapter.spec.ts new file mode 100644 index 0000000000..e1101f6a29 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/date.adapter.spec.ts @@ -0,0 +1,31 @@ +import { DateAdapter } from '../lib/adapters/date.adapter'; + +describe('Date Adapter', () => { + const adapter = new DateAdapter(); + + describe('#fromModel', () => { + test.each` + param | expected + ${undefined} | ${null} + ${null} | ${null} + ${'x'} | ${null} + ${'2002-03-30'} | ${{ day: 30, month: 3, year: 2002 }} + ${'03/30/2002'} | ${{ day: 30, month: 3, year: 2002 }} + ${new Date(0)} | ${{ day: 1, month: 1, year: 1970 }} + `('should return $expected when $param is given', ({ param, expected }) => { + expect(adapter.fromModel(param)).toEqual(expected); + }); + }); + + describe('#toModel', () => { + test.each` + param | expected + ${undefined} | ${''} + ${null} | ${''} + ${{ day: 30, month: 3, year: 2002 }} | ${'2002-03-30'} + ${{ day: 1, month: 1, year: 1970 }} | ${'1970-01-01'} + `('should return $expected when $param is given', ({ param, expected }) => { + expect(adapter.toModel(param)).toEqual(expected); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/entity-actions.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/entity-actions.spec.ts new file mode 100644 index 0000000000..35833a1950 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/entity-actions.spec.ts @@ -0,0 +1,151 @@ +import { LinkedList } from '@abp/utils'; +import { + EntityAction, + EntityActionContributorCallback, + EntityActionList, + EntityActions, + EntityActionsFactory, +} from '../lib/models/entity-actions'; + +describe('EntityActionList', () => { + it('should inherit from LinkedList', () => { + expect(new EntityActionList() instanceof LinkedList).toBe(true); + }); +}); + +describe('EntityActions', () => { + const add1toTail: EntityActionContributorCallback = actionList => actionList.addTail(1 as any); + const add2toTail: EntityActionContributorCallback = actionList => actionList.addTail(2 as any); + const add3toTail: EntityActionContributorCallback = actionList => actionList.addTail(3 as any); + const dropIndex1: EntityActionContributorCallback = actionList => actionList.dropByIndex(1); + + describe('#actions', () => { + test.each` + callbackList | expected + ${[]} | ${''} + ${[add1toTail, add2toTail, add3toTail]} | ${'1 <-> 2 <-> 3'} + ${[add3toTail, add2toTail, add1toTail]} | ${'3 <-> 2 <-> 1'} + ${[add1toTail, add2toTail, add3toTail, dropIndex1]} | ${'1 <-> 3'} + `( + 'should return $expected when given callbackList is $callbackList', + ({ callbackList, expected }) => { + const creator = new EntityActions(callbackList); + expect(creator.actions.toString()).toBe(expected); + }, + ); + }); + + describe('#addContributor', () => { + const creator = new EntityActions([]); + + test.each` + callbackList | callback | expected + ${[]} | ${add1toTail} | ${'1'} + ${[add1toTail]} | ${add2toTail} | ${'1 <-> 2'} + ${[add1toTail, add2toTail]} | ${add3toTail} | ${'1 <-> 2 <-> 3'} + ${[add1toTail, add2toTail, add3toTail]} | ${dropIndex1} | ${'1 <-> 3'} + `( + 'should set actions to $expected when callbackList is $callbackList and given callback is $callback', + ({ callback, expected }) => { + creator.addContributor(callback); + expect(creator.actions.toString()).toBe(expected); + }, + ); + }); +}); + +describe('EntityActionsFactory', () => { + describe('#get', () => { + it('should create and return an EntityActions instance', () => { + const entityActions = new EntityActionsFactory(); + const creator = entityActions.get(''); + + expect(creator).toBeInstanceOf(EntityActions); + }); + + it('should store and pass contributorCallbacks to EntityActionsCreator instance it returns', () => { + const entityActions = new EntityActionsFactory(); + const creatorX1 = entityActions.get('X'); + + expect(creatorX1).toBeInstanceOf(EntityActions); + expect(creatorX1.actions.toArray()).toHaveLength(0); + + creatorX1.addContributor(actionList => actionList.addTail(1 as any)); + + const creatorX2 = entityActions.get('X'); + expect(creatorX2.actions.toArray()).toHaveLength(1); + }); + }); +}); + +describe('EntityAction', () => { + it('should be created when options object is passed as argument', () => { + const options = { + text: 'TEXT', + action: () => 'ACTION', + permission: 'PERMISSION', + visible: () => false, + icon: 'ICON', + }; + + const action = new EntityAction(options); + + expect(action.text).toBe(options.text); + expect(action.action(null)).toBe(options.action()); + expect(action.permission).toBe(options.permission); + expect(action.visible(null)).toBe(options.visible()); + expect(action.icon).toBe(options.icon); + }); + + it('should be created when only required options are passed', () => { + const options = { + text: 'TEXT', + action: () => 'ACTION', + }; + + const action = new EntityAction(options); + + expect(action.text).toBe(options.text); + expect(action.action).toBe(options.action); + expect(action.permission).toBeUndefined(); + expect(action.visible(null)).toBe(true); + expect(action.icon).toBe(''); + }); + + describe('#create', () => { + it('should return a new instance from given options', () => { + const options = { + text: 'TEXT', + action: () => 'ACTION', + }; + + const action = EntityAction.create(options); + + expect(action).toBeInstanceOf(EntityAction); + expect(action.text).toBe(options.text); + expect(action.action).toBe(options.action); + }); + }); + + describe('#createMany', () => { + it('should return multiple instances from given options array', () => { + const options1 = { + text: 'TEXT 1', + action: () => 'ACTION 1', + }; + const options2 = { + text: 'TEXT 2', + action: () => 'ACTION 2', + }; + + const [action1, action2] = EntityAction.createMany([options1, options2]); + + expect(action1).toBeInstanceOf(EntityAction); + expect(action1.text).toBe(options1.text); + expect(action1.action).toBe(options1.action); + expect(action2).toBeInstanceOf(EntityAction); + expect(action2.text).toBe(options2.text); + expect(action2.action).toBe(options2.action); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/entity-props.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/entity-props.spec.ts new file mode 100644 index 0000000000..faccbf53b2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/entity-props.spec.ts @@ -0,0 +1,166 @@ +import { LinkedList } from '@abp/utils'; +import { NEVER } from 'rxjs'; +import { ePropType } from '../lib/enums/props.enum'; +import { + EntityProp, + EntityPropContributorCallback, + EntityPropList, + EntityProps, + EntityPropsFactory, +} from '../lib/models/entity-props'; +import { PropData } from '../lib/models/props'; + +describe('EntityPropList', () => { + it('should inherit from LinkedList', () => { + expect(new EntityPropList() instanceof LinkedList).toBe(true); + }); +}); + +describe('EntityProps', () => { + const add1toTail: EntityPropContributorCallback = propList => propList.addTail(1 as any); + const add2toTail: EntityPropContributorCallback = propList => propList.addTail(2 as any); + const add3toTail: EntityPropContributorCallback = propList => propList.addTail(3 as any); + const dropIndex1: EntityPropContributorCallback = propList => propList.dropByIndex(1); + + describe('#props', () => { + test.each` + callbackList | expected + ${[]} | ${''} + ${[add1toTail, add2toTail, add3toTail]} | ${'1 <-> 2 <-> 3'} + ${[add3toTail, add2toTail, add1toTail]} | ${'3 <-> 2 <-> 1'} + ${[add1toTail, add2toTail, add3toTail, dropIndex1]} | ${'1 <-> 3'} + `( + 'should return $expected when given callbackList is $callbackList', + ({ callbackList, expected }) => { + const creator = new EntityProps(callbackList); + expect(creator.props.toString()).toBe(expected); + }, + ); + }); + + describe('#addContributor', () => { + const creator = new EntityProps([]); + + test.each` + callbackList | callback | expected + ${[]} | ${add1toTail} | ${'1'} + ${[add1toTail]} | ${add2toTail} | ${'1 <-> 2'} + ${[add1toTail, add2toTail]} | ${add3toTail} | ${'1 <-> 2 <-> 3'} + ${[add1toTail, add2toTail, add3toTail]} | ${dropIndex1} | ${'1 <-> 3'} + `( + 'should set props to $expected when callbackList is $callbackList and given callback is $callback', + ({ callback, expected }) => { + creator.addContributor(callback); + expect(creator.props.toString()).toBe(expected); + }, + ); + }); +}); + +describe('EntityPropsFactory', () => { + describe('#get', () => { + it('should create and return an EntityProps instance', () => { + const entityProps = new EntityPropsFactory(); + const creator = entityProps.get(''); + + expect(creator).toBeInstanceOf(EntityProps); + }); + + it('should store and pass contributorCallbacks to EntityPropsCreator instance it returns', () => { + const entityProps = new EntityPropsFactory(); + const creatorX1 = entityProps.get('X'); + + expect(creatorX1).toBeInstanceOf(EntityProps); + expect(creatorX1.props.toArray()).toHaveLength(0); + + creatorX1.addContributor(propList => propList.addTail(1 as any)); + + const creatorX2 = entityProps.get('X'); + expect(creatorX2.props.toArray()).toHaveLength(1); + }); + }); +}); + +describe('EntityProp', () => { + it('should be created when options object is passed as argument', () => { + const options = { + type: ePropType.String, + name: 'NAME', + displayName: 'DISPLAY NAME', + permission: 'PERMISSION', + visible: () => false, + valueResolver: () => NEVER, + sortable: true, + columnWidth: 999, + }; + + const prop = new EntityProp(options); + + expect(prop.type).toBe(options.type); + expect(prop.name).toBe(options.name); + expect(prop.displayName).toBe(options.displayName); + expect(prop.permission).toBe(options.permission); + expect(prop.visible()).toBe(options.visible()); + expect(prop.valueResolver()).toBe(options.valueResolver()); + expect(prop.sortable).toBe(options.sortable); + expect(prop.columnWidth).toBe(options.columnWidth); + }); + + it('should be created when only required options are passed', done => { + const options = { + type: ePropType.String, + name: 'NAME', + }; + + const prop = new EntityProp(options); + + expect(prop.type).toBe(options.type); + expect(prop.name).toBe(options.name); + expect(prop.displayName).toBe(options.name); + expect(prop.permission).toBeUndefined(); + expect(prop.visible()).toBe(true); + expect(prop.sortable).toBe(false); + expect(prop.columnWidth).toBeUndefined(); + prop.valueResolver({ record: { NAME: 'X' } } as PropData).subscribe(value => { + expect(value).toBe('X'); + done(); + }); + }); + + describe('#create', () => { + it('should return a new instance from given options', () => { + const options = { + type: ePropType.String, + name: 'NAME', + }; + + const prop = EntityProp.create(options); + + expect(prop).toBeInstanceOf(EntityProp); + expect(prop.type).toBe(options.type); + expect(prop.name).toBe(options.name); + }); + }); + + describe('#createMany', () => { + it('should return multiple instances from given options array', () => { + const options1 = { + type: ePropType.String, + name: 'NAME 1', + }; + const options2 = { + type: ePropType.Boolean, + name: 'NAME 2', + }; + + const [prop1, prop2] = EntityProp.createMany([options1, options2]); + + expect(prop1).toBeInstanceOf(EntityProp); + expect(prop1.type).toBe(options1.type); + expect(prop1.name).toBe(options1.name); + expect(prop2).toBeInstanceOf(EntityProp); + expect(prop2.type).toBe(options2.type); + expect(prop2.name).toBe(options2.name); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/enum.util.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/enum.util.spec.ts new file mode 100644 index 0000000000..6c9ffeaa38 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/enum.util.spec.ts @@ -0,0 +1,114 @@ +import { ConfigStateService, LocalizationService } from '@abp/ng.core'; +import { BehaviorSubject } from 'rxjs'; +import { take } from 'rxjs/operators'; +import { PropData } from '../lib/models/props'; +import { createEnum, createEnumOptions, createEnumValueResolver } from '../lib/utils/enum.util'; + +const mockSessionState = { + languageChange$: new BehaviorSubject('tr'), + getLanguage: () => 'tr', + onLanguageChange$: () => new BehaviorSubject('tr'), +} as any; + +const fields = [ + { name: 'foo', value: 1 }, + { name: 'bar', value: 2 }, + { name: 'baz', value: 3 }, +]; + +class MockPropData extends PropData { + getInjected: PropData['getInjected']; + + constructor(public readonly record: R) { + super(); + } +} + +const mockL10n = { + values: { + Default: { + 'Enum:MyEnum.foo': 'Foo', + 'MyEnum.bar': 'Bar', + baz: 'Baz', + }, + }, + defaultResourceName: 'Default', + currentCulture: null, + languages: [], +}; + +describe('Enum Utils', () => { + describe('#createEnum', () => { + const enumFromFields = createEnum(fields); + + test.each` + key | expected + ${'foo'} | ${1} + ${'bar'} | ${2} + ${'baz'} | ${3} + ${1} | ${'foo'} + ${2} | ${'bar'} + ${3} | ${'baz'} + `('should create an enum that returns $expected when $key is accessed', ({ key, expected }) => { + expect(enumFromFields[key]).toBe(expected); + }); + }); + + describe('#createEnumValueResolver', () => { + test.each` + value | expected + ${1} | ${'Foo'} + ${2} | ${'Bar'} + ${3} | ${'Baz'} + `( + 'should create a resolver that returns observable $expected when enum value is $value', + async ({ value, expected }) => { + const service = createMockLocalizationService(); + const valueResolver = createEnumValueResolver( + 'MyCompanyName.MyProjectName.MyEnum', + { + fields, + localizationResource: null, + transformed: createEnum(fields), + }, + 'EnumProp', + ); + const propData = new MockPropData({ extraProperties: { EnumProp: value } }); + propData.getInjected = () => service as any; + + const resolved = await valueResolver(propData).pipe(take(1)).toPromise(); + + expect(resolved).toBe(expected); + }, + ); + }); + + describe('#createEnumOptions', () => { + it('should create a generator that returns observable options from enums', async () => { + const service = createMockLocalizationService(); + const options = createEnumOptions('MyCompanyName.MyProjectName.MyEnum', { + fields, + localizationResource: null, + transformed: createEnum(fields), + }); + + const propData = new MockPropData({}); + propData.getInjected = () => service as any; + + const resolved = await options(propData).pipe(take(1)).toPromise(); + + expect(resolved).toEqual([ + { key: 'Foo', value: 1 }, + { key: 'Bar', value: 2 }, + { key: 'Baz', value: 3 }, + ]); + }); + }); +}); + +function createMockLocalizationService() { + const configState = new ConfigStateService(); + configState.setState({ localization: mockL10n } as any); + + return new LocalizationService(mockSessionState, null, null, configState, null); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/extensions.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/extensions.service.spec.ts new file mode 100644 index 0000000000..73aa7efe12 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/extensions.service.spec.ts @@ -0,0 +1,50 @@ +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { EntityActionsFactory } from '../lib/models/entity-actions'; +import { EntityPropsFactory } from '../lib/models/entity-props'; +import { CreateFormPropsFactory, EditFormPropsFactory } from '../lib/models/form-props'; +import { ToolbarActionsFactory } from '../lib/models/toolbar-actions'; +import { ExtensionsService } from '../lib/services/extensions.service'; + +describe('ExtensionsService', () => { + let service: ExtensionsService; + let spectator: SpectatorService; + + const createService = createServiceFactory({ + service: ExtensionsService, + }); + + beforeEach(() => { + spectator = createService(); + service = spectator.service; + }); + + describe('#entityActions', () => { + it('should be an instance of EntityActionsFactory class', () => { + expect(service.entityActions).toBeInstanceOf(EntityActionsFactory); + }); + }); + + describe('#toolbarActions', () => { + it('should be an instance of ToolbarActionsFactory class', () => { + expect(service.toolbarActions).toBeInstanceOf(ToolbarActionsFactory); + }); + }); + + describe('#entityProps', () => { + it('should be an instance of EntityPropsFactory class', () => { + expect(service.entityProps).toBeInstanceOf(EntityPropsFactory); + }); + }); + + describe('#createFormProps', () => { + it('should be an instance of CreateFormPropsFactory class', () => { + expect(service.createFormProps).toBeInstanceOf(CreateFormPropsFactory); + }); + }); + + describe('#editFormProps', () => { + it('should be an instance of EditFormPropsFactory class', () => { + expect(service.editFormProps).toBeInstanceOf(EditFormPropsFactory); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/factory.util.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/factory.util.spec.ts new file mode 100644 index 0000000000..61bd744f23 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/factory.util.spec.ts @@ -0,0 +1,28 @@ +import { selfFactory } from '../lib/utils/factory.util'; + +describe('Factory Utils', () => { + describe('#selfFactory', () => { + const arr = []; + const obj = {}; + const date = new Date(); + const promise = Promise.resolve(null); + + test.each` + parameter + ${'x'} + ${''} + ${1} + ${0} + ${true} + ${false} + ${arr} + ${obj} + ${date} + ${promise} + ${null} + ${undefined} + `('should return given $parameter back', ({ parameter }) => { + expect(selfFactory(parameter)).toBe(parameter); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/form-props.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/form-props.spec.ts new file mode 100644 index 0000000000..a7ad56aca9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/form-props.spec.ts @@ -0,0 +1,193 @@ +import { LinkedList } from '@abp/utils'; +import { NEVER } from 'rxjs'; +import { ePropType } from '../lib/enums/props.enum'; +import { + CreateFormPropContributorCallback, + CreateFormPropsFactory, + EditFormPropsFactory, + FormProp, + FormPropList, + FormProps, +} from '../lib/models/form-props'; + +describe('FormPropList', () => { + it('should inherit from LinkedList', () => { + expect(new FormPropList() instanceof LinkedList).toBe(true); + }); +}); + +describe('FormProps', () => { + const add1toTail: CreateFormPropContributorCallback = propList => propList.addTail(1 as any); + const add2toTail: CreateFormPropContributorCallback = propList => propList.addTail(2 as any); + const add3toTail: CreateFormPropContributorCallback = propList => propList.addTail(3 as any); + const dropIndex1: CreateFormPropContributorCallback = propList => propList.dropByIndex(1); + + describe('#props', () => { + test.each` + callbackList | expected + ${[]} | ${''} + ${[add1toTail, add2toTail, add3toTail]} | ${'1 <-> 2 <-> 3'} + ${[add3toTail, add2toTail, add1toTail]} | ${'3 <-> 2 <-> 1'} + ${[add1toTail, add2toTail, add3toTail, dropIndex1]} | ${'1 <-> 3'} + `( + 'should return $expected when given callbackList is $callbackList', + ({ callbackList, expected }) => { + const creator = new FormProps(callbackList); + expect(creator.props.toString()).toBe(expected); + }, + ); + }); + + describe('#addContributor', () => { + const creator = new FormProps([]); + + test.each` + callbackList | callback | expected + ${[]} | ${add1toTail} | ${'1'} + ${[add1toTail]} | ${add2toTail} | ${'1 <-> 2'} + ${[add1toTail, add2toTail]} | ${add3toTail} | ${'1 <-> 2 <-> 3'} + ${[add1toTail, add2toTail, add3toTail]} | ${dropIndex1} | ${'1 <-> 3'} + `( + 'should set props to $expected when callbackList is $callbackList and given callback is $callback', + ({ callback, expected }) => { + creator.addContributor(callback); + expect(creator.props.toString()).toBe(expected); + }, + ); + }); +}); + +describe('FormPropsFactory', () => { + describe('#get', () => { + it('should create and return an FormProps instance', () => { + const formProps = new CreateFormPropsFactory(); + const creator = formProps.get(''); + + expect(creator).toBeInstanceOf(FormProps); + }); + + it('should store and pass contributorCallbacks to FormPropsCreator instance it returns', () => { + const formProps = new EditFormPropsFactory(); + const creatorX1 = formProps.get('X'); + + expect(creatorX1).toBeInstanceOf(FormProps); + expect(creatorX1.props.toArray()).toHaveLength(0); + + creatorX1.addContributor(propList => propList.addTail(1 as any)); + + const creatorX2 = formProps.get('X'); + expect(creatorX2.props.toArray()).toHaveLength(1); + }); + }); +}); + +describe('FormProp', () => { + it('should be created when options object is passed as argument', () => { + const options = { + type: ePropType.String, + name: 'NAME', + displayName: 'DISPLAY NAME', + permission: 'PERMISSION', + visible: () => false, + asyncValidators: () => [null], + validators: () => [null], + disabled: () => true, + readonly: () => true, + autocomplete: 'AUTOCOMPLETE', + defaultValue: 'DEFAULT VALUE', + options: () => NEVER, + id: 'ID', + }; + + const prop = new FormProp(options); + + expect(prop.type).toBe(options.type); + expect(prop.name).toBe(options.name); + expect(prop.displayName).toBe(options.displayName); + expect(prop.permission).toBe(options.permission); + expect(prop.visible()).toBe(options.visible()); + expect(prop.asyncValidators()).toEqual(options.asyncValidators()); + expect(prop.validators()).toEqual(options.validators()); + expect(prop.disabled()).toBe(options.disabled()); + expect(prop.readonly()).toBe(options.readonly()); + expect(prop.autocomplete).toBe(options.autocomplete); + expect(prop.defaultValue).toBe(options.defaultValue); + expect(prop.options()).toBe(options.options()); + expect(prop.id).toBe(options.id); + }); + + it('should be created when only required options are passed', () => { + const options = { + type: ePropType.String, + name: 'NAME', + }; + + const prop = new FormProp(options); + + expect(prop.type).toBe(options.type); + expect(prop.name).toBe(options.name); + expect(prop.displayName).toBe(options.name); + expect(prop.permission).toBeUndefined(); + expect(prop.visible()).toBe(true); + expect(prop.asyncValidators()).toEqual([]); + expect(prop.validators()).toEqual([]); + expect(prop.disabled()).toBe(false); + expect(prop.readonly()).toBe(false); + expect(prop.autocomplete).toBe('off'); + expect(prop.defaultValue).toBeNull(); + expect(prop.options).toBeUndefined(); + expect(prop.id).toBe(options.name); + }); + + test.each` + defaultValue | expected + ${0} | ${0} + ${''} | ${''} + ${false} | ${false} + ${undefined} | ${null} + `( + 'should set defaultValue as $expected when $defaultValue is given', + ({ defaultValue, expected }) => { + const options = { type: null, name: null, defaultValue }; + const prop = new FormProp(options); + expect(prop.defaultValue).toBe(expected); + }, + ); + + describe('#create', () => { + it('should return a new instance from given options', () => { + const options = { + type: ePropType.String, + name: 'NAME', + }; + + const prop = FormProp.create(options); + + expect(prop).toBeInstanceOf(FormProp); + expect(prop.type).toBe(options.type); + expect(prop.name).toBe(options.name); + }); + }); + + describe('#createMany', () => { + it('should return multiple instances from given options array', () => { + const options1 = { + type: ePropType.String, + name: 'NAME 1', + }; + const options2 = { + type: ePropType.Boolean, + name: 'NAME 2', + }; + + const [prop1, prop2] = FormProp.createMany([options1, options2]); + + expect(prop1).toBeInstanceOf(FormProp); + expect(prop1.type).toBe(options1.type); + expect(prop1.name).toBe(options1.name); + expect(prop2).toBeInstanceOf(FormProp); + expect(prop2.type).toBe(options2.type); + expect(prop2.name).toBe(options2.name); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/form-props.util.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/form-props.util.spec.ts new file mode 100644 index 0000000000..123912cb9a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/form-props.util.spec.ts @@ -0,0 +1,142 @@ +import { LocalizationService } from '@abp/ng.core'; +import { Injector } from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { ePropType } from '../lib/enums/props.enum'; +import { FormProp, FormPropData } from '../lib/models/form-props'; +import { ExtensionsService } from '../lib/services/extensions.service'; +import { EXTENSIONS_IDENTIFIER } from '../lib/tokens/extensions.token'; +import { generateFormFromProps } from '../lib/utils/form-props.util'; + +describe('Form Prop Utils', () => { + describe('#generateFormFromProps', () => { + let spectator: SpectatorService>; + let injector: Injector; + const identifier = 'X'; + + const createService = createServiceFactory({ + service: ExtensionsService, + providers: [ + { + provide: EXTENSIONS_IDENTIFIER, + useValue: identifier, + }, + { + provide: LocalizationService, + useValue: { currentLang: 'en' }, + }, + ], + }); + + beforeEach(() => { + spectator = createService(); + const props = FormProp.createMany([ + { + type: ePropType.String, + name: 'foo', + validators: () => [Validators.required], + defaultValue: 'bar', + }, + { + type: ePropType.Boolean, + name: 'bool', + }, + { + type: ePropType.Date, + name: 'date', + }, + { + type: ePropType.DateTime, + name: 'dateTime', + }, + { + type: ePropType.Time, + name: 'time', + }, + ]); + + spectator.service.createFormProps + .get(identifier) + .addContributor(propList => propList.addManyTail(props)); + spectator.service.editFormProps + .get(identifier) + .addContributor(propList => propList.addManyTail(props)); + + const generator = getInjected(spectator); + injector = { + get: () => generator.next().value as any, + }; + }); + + it('should return a blank FormGroup instance', () => { + const data = new FormPropData(injector, null); + + const formGroup = generateFormFromProps(data); + expect(formGroup).toBeInstanceOf(FormGroup); + expect(formGroup.value.foo).toBe('bar'); + + const formControl = formGroup.get('foo'); + expect(formControl).toBeInstanceOf(FormControl); + expect(formControl.valid).toBe(true); + }); + + it('should return a prefilled FormGroup instance', () => { + const data = new FormPropData(injector, { id: 1, foo: null }); + + const formGroup = generateFormFromProps(data); + expect(formGroup).toBeInstanceOf(FormGroup); + expect(formGroup.value.foo).toBe(null); + + const formControl = formGroup.get('foo'); + expect(formControl).toBeInstanceOf(FormControl); + expect(formControl.invalid).toBe(true); + }); + + it('should add a FormGroup named extraProperties', () => { + const data = new FormPropData(injector, null); + + const formGroup = generateFormFromProps(data); + const extraPropertiesGroup = formGroup.get('extraProperties'); + expect(extraPropertiesGroup).toBeInstanceOf(FormGroup); + }); + + it('should add extraProperties to extraProperties FormGroup', () => { + const data = new FormPropData(injector, { + id: 1, + foo: undefined, + extraProperties: { + bool: true, + date: '03/30/2002', + dateTime: '2002-03-30 13:30:59Z', + time: '13:30:59', + }, + }); + + const formGroup = generateFormFromProps(data); + const extraPropertiesGroup = formGroup.get('extraProperties'); + expect(extraPropertiesGroup.value).toEqual({ + bool: true, + date: '2002-03-30', + dateTime: '2002-03-30T13:30:59.000Z', + time: '13:30', + }); + }); + }); +}); + +function* getInjected(spectator: SpectatorService) { + yield spectator.service; + yield spectator.inject(EXTENSIONS_IDENTIFIER); + yield spectator.inject(LocalizationService); +} + +interface Foo { + id: number; + foo: string; + extraProperties?: { + bool: boolean; + date: string; + dateTime: string; + time: string; + }; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/localization.util.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/localization.util.spec.ts new file mode 100644 index 0000000000..007b304b42 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/localization.util.spec.ts @@ -0,0 +1,34 @@ +import { ApplicationLocalizationConfigurationDto } from '@abp/ng.core'; +import { createDisplayNameLocalizationPipeKeyGenerator } from '../lib/utils/localization.util'; + +describe('Localization Utils', () => { + describe('#createDisplayNameLocalizationPipeKeyGenerator', () => { + const generateDisplayName = createDisplayNameLocalizationPipeKeyGenerator({ + values: { + Foo: { Bar: 'Bar', 'DisplayName:Bar': 'Bar' }, + Default: { Bar: 'Bar', 'DisplayName:Bar': 'Bar' }, + }, + defaultResourceName: 'Default', + currentCulture: null, + languages: [], + languageFilesMap: null, + languagesMap: null, + } as ApplicationLocalizationConfigurationDto); + + test.each` + displayName | fallback | expected + ${{ name: 'Bar', resource: 'Foo' }} | ${null} | ${'Foo::Bar'} + ${{ name: 'Baz', resource: 'Foo' }} | ${null} | ${'Baz'} + ${null} | ${{ name: 'Bar', resource: 'Foo' }} | ${'Foo::DisplayName:Bar'} + ${null} | ${{ name: 'Bar', resource: 'Default' }} | ${'Default::DisplayName:Bar'} + ${null} | ${{ name: 'Baz', resource: 'Default' }} | ${'Baz'} + `( + 'should return $expected when diplay name is $displayName and fallback is $fallback', + ({ displayName, fallback, expected }) => { + const result = generateDisplayName(displayName, fallback); + + expect(result).toBe(expected); + }, + ); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/props.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/props.spec.ts new file mode 100644 index 0000000000..adaaea677d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/props.spec.ts @@ -0,0 +1,22 @@ +import { PropData } from '../lib/models/props'; + +describe('PropData', () => { + describe('#data', () => { + it('should return record and getInjected', () => { + const spy = jest.fn(); + class Data extends PropData { + index = 0; + record = 'X'; + getInjected = spy; + } + + const data = new Data(); + data.data.getInjected(null); + + expect(spy).toHaveBeenCalledTimes(1); + expect(spy).toHaveBeenCalledWith(null); + expect(data.data.index).toBe(0); + expect(data.data.record).toBe('X'); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/props.util.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/props.util.spec.ts new file mode 100644 index 0000000000..0c18d71eb5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/props.util.spec.ts @@ -0,0 +1,72 @@ +import { + EntityProp, + EntityPropContributorCallbacks, + EntityPropDefaults, + EntityPropsFactory, +} from '../lib/models/entity-props'; +import { PropData } from '../lib/models/props'; +import { createExtraPropertyValueResolver, mergeWithDefaultProps } from '../lib/utils/props.util'; + +class MockPropData extends PropData { + getInjected: PropData['getInjected']; + + constructor(public readonly record: R) { + super(); + } +} + +describe('Entity Prop Utils', () => { + describe('#createExtraPropertyValueResolver', () => { + it('should return a resolver that resolves an observable value from extraProperties', async () => { + const valueResolver = createExtraPropertyValueResolver('foo'); + const propData = new MockPropData({ extraProperties: { foo: 'bar' } }); + + const bar = await valueResolver(propData).toPromise(); + expect(bar).toBe('bar'); + }); + }); + + describe('#mergeEntityProps', () => { + let entityProps: EntityPropsFactory; + + beforeEach(() => { + entityProps = new EntityPropsFactory(); + }); + + it('should merge default props with prop contributors', () => { + const defaults: EntityPropDefaults = { + x: [(1 as any) as EntityProp, (2 as any) as EntityProp, (3 as any) as EntityProp], + y: [(1 as any) as EntityProp, (2 as any) as EntityProp, (3 as any) as EntityProp], + }; + + const contributors1: EntityPropContributorCallbacks = { + x: [ + propList => { + const x2 = propList.dropByIndex(1); // 1 <-> 3 + propList.addHead(x2.value); // 2 <-> 1 <-> 3 + }, + propList => { + propList.dropTail(); // 2 <-> 1 + }, + ], + }; + + const contributors2: EntityPropContributorCallbacks = { + y: [ + propList => { + const y2 = propList.dropByIndex(1); // 1 <-> 3 + propList.addTail(y2.value); // 1 <-> 3 <-> 2 + }, + propList => { + propList.dropHead(); // 3 <-> 2 + }, + ], + }; + + mergeWithDefaultProps(entityProps, defaults, contributors1, contributors2); + + expect(entityProps.get('x').props.toString()).toBe('2 <-> 1'); + expect(entityProps.get('y').props.toString()).toBe('3 <-> 2'); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/state.util.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/state.util.spec.ts new file mode 100644 index 0000000000..f9538a25eb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/state.util.spec.ts @@ -0,0 +1,369 @@ +import { ConfigStateService } from '@abp/ng.core'; +import { of } from 'rxjs'; +import { take } from 'rxjs/operators'; +import { ePropType } from '../lib/enums/props.enum'; +import { EntityPropList } from '../lib/models/entity-props'; +import { FormPropList } from '../lib/models/form-props'; +import { ObjectExtensions } from '../lib/models/object-extensions'; +import { + getObjectExtensionEntitiesFromStore, + mapEntitiesToContributors, +} from '../lib/utils/state.util'; + +const configState = new ConfigStateService(); +configState.setState(createMockState() as any); + +describe('State Utils', () => { + describe('#getObjectExtensionEntitiesFromStore', () => { + it('should return observable entities of an existing module', async () => { + const entities = await getObjectExtensionEntitiesFromStore( + configState, + 'Identity', + ).toPromise(); + expect('Role' in entities).toBe(true); + }); + + it('should return observable empty object if module does not exist', async () => { + const entities = await getObjectExtensionEntitiesFromStore(configState, 'Saas').toPromise(); + expect(entities).toEqual({}); + }); + + it('should not emit when object extensions do not exist', done => { + const emptyConfigState = new ConfigStateService(); + const emit = jest.fn(); + + getObjectExtensionEntitiesFromStore(emptyConfigState, 'Identity').subscribe(emit); + + setTimeout(() => { + expect(emit).not.toHaveBeenCalled(); + done(); + }, 1000); + }); + }); + + describe('#mapEntitiesToContributors', () => { + it('should return contributors from given entities', async () => { + const contributors = await of(createMockEntities()) + .pipe(mapEntitiesToContributors(configState, 'AbpIdentity'), take(1)) + .toPromise(); + + const propList = new EntityPropList(); + contributors.prop.Role.forEach(callback => callback(propList)); + + expect(propList.length).toBe(4); + expect(propList.head.value.name).toBe('Title'); + expect(propList.head.next.value.name).toBe('IsHero'); + expect(propList.head.next.next.value.name).toBe('MyEnum'); + expect(propList.head.next.next.next.value.name).toBe('Foo_Text'); + + const createFormList = new FormPropList(); + contributors.createForm.Role.forEach(callback => callback(createFormList)); + + expect(createFormList.length).toBe(4); + expect(createFormList.head.value.name).toBe('Title'); + expect(createFormList.head.next.value.name).toBe('MyEnum'); + expect(createFormList.head.next.next.value.name).toBe('Foo'); + expect(createFormList.head.next.next.next.value.name).toBe('Foo_Text'); + + const editFormList = new FormPropList(); + contributors.editForm.Role.forEach(callback => callback(editFormList)); + + expect(editFormList.length).toBe(4); + expect(editFormList.head.value.name).toBe('Title'); + expect(editFormList.head.next.value.name).toBe('IsHero'); + expect(editFormList.head.next.next.value.name).toBe('Foo'); + expect(editFormList.head.next.next.next.value.name).toBe('Foo_Text'); + }); + }); +}); + +function createMockState() { + return { + objectExtensions: { + modules: { + Identity: { + entities: createMockEntities(), + configuration: null, + }, + }, + enums: { + 'MyCompanyName.MyProjectName.MyEnum': { + fields: [ + { + name: 'MyEnumValue0', + value: 0, + }, + { + name: 'MyEnumValue1', + value: 1, + }, + { + name: 'MyEnumValue2', + value: 2, + }, + ], + localizationResource: null, + }, + }, + }, + localization: { + values: { + Default: {}, + AbpIdentity: {}, + }, + defaultResourceName: 'Default', + currentCulture: null, + languages: [], + }, + }; +} + +function createMockEntities(): Record { + return { + Role: { + properties: { + Title: { + type: 'System.String', + typeSimple: ePropType.String, + displayName: null, + api: { + onGet: { + isAvailable: true, + }, + onCreate: { + isAvailable: true, + }, + onUpdate: { + isAvailable: true, + }, + }, + ui: { + onTable: { + isSortable: true, + isVisible: true, + }, + onCreateForm: { + isVisible: true, + }, + onEditForm: { + isVisible: true, + }, + lookup: null, + }, + attributes: [ + { + typeSimple: 'required', + config: {}, + }, + { + typeSimple: 'stringLength', + config: { + maximumLength: 20, + minimumLength: 2, + }, + }, + ], + configuration: {}, + defaultValue: null, + }, + IsHero: { + type: 'System.Boolean', + typeSimple: ePropType.Boolean, + displayName: null, + api: { + onGet: { + isAvailable: true, + }, + onCreate: { + isAvailable: true, + }, + onUpdate: { + isAvailable: true, + }, + }, + ui: { + onTable: { + isSortable: false, + isVisible: true, + }, + onCreateForm: { + isVisible: false, + }, + onEditForm: { + isVisible: true, + }, + lookup: null, + }, + attributes: [], + configuration: {}, + defaultValue: null, + }, + AsOf: { + type: 'System.Date', + typeSimple: ePropType.Date, + displayName: { + name: 'Active as of', + resource: 'AbpIdentity', + }, + api: { + onGet: { + isAvailable: true, + }, + onCreate: { + isAvailable: true, + }, + onUpdate: { + isAvailable: true, + }, + }, + ui: { + onTable: { + isSortable: false, + isVisible: false, + }, + onCreateForm: { + isVisible: false, + }, + onEditForm: { + isVisible: false, + }, + lookup: null, + }, + attributes: [], + configuration: {}, + defaultValue: null, + }, + MyEnum: { + type: 'MyCompanyName.MyProjectName.MyEnum', + typeSimple: ePropType.Enum, + displayName: null, + api: { + onGet: { + isAvailable: true, + }, + onCreate: { + isAvailable: true, + }, + onUpdate: { + isAvailable: true, + }, + }, + ui: { + onTable: { + isSortable: false, + isVisible: true, + }, + onCreateForm: { + isVisible: true, + }, + onEditForm: { + isVisible: false, + }, + lookup: null, + }, + attributes: [ + { + typeSimple: 'required', + config: { + allowEmptyStrings: false, + }, + }, + { + typeSimple: 'enumDataType', + config: { + enumType: 'MyCompanyName.MyProjectName.MyEnum', + dataType: 'Custom', + customDataType: 'Enumeration', + }, + }, + ], + configuration: {}, + defaultValue: 2, + }, + Foo: { + type: 'System.String', + typeSimple: ePropType.String, + displayName: null, + api: { + onGet: { + isAvailable: false, + }, + onCreate: { + isAvailable: true, + }, + onUpdate: { + isAvailable: true, + }, + }, + ui: { + onTable: { + isVisible: false, + }, + onCreateForm: { + isVisible: true, + }, + onEditForm: { + isVisible: true, + }, + lookup: { + url: '/api/identity/roles', + resultListPropertyName: 'items', + displayPropertyName: 'text', + valuePropertyName: 'id', + filterParamName: 'filter', + }, + }, + attributes: [], + configuration: {}, + defaultValue: null, + }, + Foo_Text: { + type: 'System.String', + typeSimple: ePropType.String, + displayName: { + name: 'Foo', + resource: '_', + }, + api: { + onGet: { + isAvailable: true, + }, + onCreate: { + isAvailable: true, + }, + onUpdate: { + isAvailable: true, + }, + }, + ui: { + onTable: { + isVisible: true, + }, + onCreateForm: { + isVisible: true, + }, + onEditForm: { + isVisible: true, + }, + lookup: { + url: null, + resultListPropertyName: 'items', + displayPropertyName: 'text', + valuePropertyName: 'id', + filterParamName: 'filter', + }, + }, + attributes: [], + configuration: {}, + defaultValue: null, + }, + }, + configuration: {}, + }, + User: { + properties: null, + configuration: {}, + }, + ClaimType: null, + }; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/time.adapter.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/time.adapter.spec.ts new file mode 100644 index 0000000000..40d7fab58b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/time.adapter.spec.ts @@ -0,0 +1,36 @@ +import { TimeAdapter } from '../lib/adapters/time.adapter'; + +describe('Time Adapter', () => { + const adapter = new TimeAdapter(); + + describe('#fromModel', () => { + const date = new Date(); + const hour = date.getHours(); + const minute = date.getMinutes(); + const second = date.getSeconds(); + + test.each` + param | expected + ${undefined} | ${null} + ${null} | ${null} + ${'x'} | ${null} + ${'13:30:45'} | ${{ hour: 13, minute: 30, second: 45 }} + ${'13:30'} | ${{ hour: 13, minute: 30, second: 0 }} + ${date} | ${{ hour, minute, second }} + `('should return $expected when $param is given', ({ param, expected }) => { + expect(adapter.fromModel(param)).toEqual(expected); + }); + }); + + describe('#toModel', () => { + test.each` + param | expected + ${undefined} | ${''} + ${null} | ${''} + ${{ hour: 13, minute: 30, second: 0 }} | ${'13:30'} + ${{ hour: 13, minute: 30, second: 45 }} | ${'13:30'} + `('should return $expected when $param is given', ({ param, expected }) => { + expect(adapter.toModel(param)).toEqual(expected); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/toolbar-actions.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/toolbar-actions.spec.ts new file mode 100644 index 0000000000..a966628a56 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/toolbar-actions.spec.ts @@ -0,0 +1,216 @@ +import { LinkedList } from '@abp/utils'; +import { + ToolbarAction, + ToolbarActionContributorCallback, + ToolbarActionList, + ToolbarActions, + ToolbarActionsFactory, + ToolbarComponent, +} from '../lib/models/toolbar-actions'; + +describe('ToolbarActionList', () => { + it('should inherit from LinkedList', () => { + expect(new ToolbarActionList() instanceof LinkedList).toBe(true); + }); +}); + +describe('ToolbarActions', () => { + const add1toTail: ToolbarActionContributorCallback = actionList => actionList.addTail(1 as any); + const add2toTail: ToolbarActionContributorCallback = actionList => actionList.addTail(2 as any); + const add3toTail: ToolbarActionContributorCallback = actionList => actionList.addTail(3 as any); + const dropIndex1: ToolbarActionContributorCallback = actionList => actionList.dropByIndex(1); + + describe('#actions', () => { + test.each` + callbackList | expected + ${[]} | ${''} + ${[add1toTail, add2toTail, add3toTail]} | ${'1 <-> 2 <-> 3'} + ${[add3toTail, add2toTail, add1toTail]} | ${'3 <-> 2 <-> 1'} + ${[add1toTail, add2toTail, add3toTail, dropIndex1]} | ${'1 <-> 3'} + `( + 'should return $expected when given callbackList is $callbackList', + ({ callbackList, expected }) => { + const creator = new ToolbarActions(callbackList); + expect(creator.actions.toString()).toBe(expected); + }, + ); + }); + + describe('#addContributor', () => { + const creator = new ToolbarActions([]); + + test.each` + callbackList | callback | expected + ${[]} | ${add1toTail} | ${'1'} + ${[add1toTail]} | ${add2toTail} | ${'1 <-> 2'} + ${[add1toTail, add2toTail]} | ${add3toTail} | ${'1 <-> 2 <-> 3'} + ${[add1toTail, add2toTail, add3toTail]} | ${dropIndex1} | ${'1 <-> 3'} + `( + 'should set actions to $expected when callbackList is $callbackList and given callback is $callback', + ({ callback, expected }) => { + creator.addContributor(callback); + expect(creator.actions.toString()).toBe(expected); + }, + ); + }); +}); + +describe('ToolbarActionsFactory', () => { + describe('#get', () => { + it('should create and return an ToolbarActions instance', () => { + const entityActions = new ToolbarActionsFactory(); + const creator = entityActions.get(''); + + expect(creator).toBeInstanceOf(ToolbarActions); + }); + + it('should store and pass contributorCallbacks to ToolbarActionsCreator instance it returns', () => { + const entityActions = new ToolbarActionsFactory(); + const creatorX1 = entityActions.get('X'); + + expect(creatorX1).toBeInstanceOf(ToolbarActions); + expect(creatorX1.actions.toArray()).toHaveLength(0); + + creatorX1.addContributor(actionList => actionList.addTail(1 as any)); + + const creatorX2 = entityActions.get('X'); + expect(creatorX2.actions.toArray()).toHaveLength(1); + }); + }); +}); + +describe('ToolbarAction', () => { + it('should be created when options object is passed as argument', () => { + const options = { + text: 'TEXT', + action: () => 'ACTION', + permission: 'PERMISSION', + visible: () => false, + icon: 'ICON', + }; + + const action = new ToolbarAction(options); + + expect(action.text).toBe(options.text); + expect(action.action(null)).toBe(options.action()); + expect(action.permission).toBe(options.permission); + expect(action.visible(null)).toBe(options.visible()); + expect(action.icon).toBe(options.icon); + }); + + it('should be created when only required options are passed', () => { + const options = { + text: 'TEXT', + action: () => 'ACTION', + }; + + const action = new ToolbarAction(options); + + expect(action.text).toBe(options.text); + expect(action.action).toBe(options.action); + expect(action.permission).toBeUndefined(); + expect(action.visible(null)).toBe(true); + expect(action.icon).toBe(''); + }); + + describe('#create', () => { + it('should return a new instance from given options', () => { + const options = { + text: 'TEXT', + action: () => 'ACTION', + }; + + const action = ToolbarAction.create(options); + + expect(action).toBeInstanceOf(ToolbarAction); + expect(action.text).toBe(options.text); + expect(action.action).toBe(options.action); + }); + }); + + describe('#createMany', () => { + it('should return multiple instances from given options array', () => { + const options1 = { + text: 'TEXT 1', + action: () => 'ACTION 1', + }; + const options2 = { + text: 'TEXT 2', + action: () => 'ACTION 2', + }; + + const [action1, action2] = ToolbarAction.createMany([options1, options2]); + + expect(action1).toBeInstanceOf(ToolbarAction); + expect(action1.text).toBe(options1.text); + expect(action1.action).toBe(options1.action); + expect(action2).toBeInstanceOf(ToolbarAction); + expect(action2.text).toBe(options2.text); + expect(action2.action).toBe(options2.action); + }); + }); +}); +class MockComponent1 {} +class MockComponent2 {} + +describe('ToolbarComponent', () => { + it('should be created when options object is passed as argument', () => { + const options = { + component: MockComponent1, + action: () => 'ACTION', + permission: 'PERMISSION', + visible: () => false, + }; + + const action = new ToolbarComponent(options); + + expect(action.component).toBe(options.component); + expect(action.action).toBe(options.action); + expect(action.permission).toBe(options.permission); + expect(action.visible).toBe(options.visible); + }); + + it('should be created when only required options are passed', () => { + const options = { + component: MockComponent1, + }; + + const action = new ToolbarComponent(options); + + expect(action.component).toBe(options.component); + expect(action.action()).toBeUndefined(); + expect(action.permission).toBeUndefined(); + expect(action.visible()).toBe(true); + }); + + describe('#create', () => { + it('should return a new instance from given options', () => { + const options = { + component: MockComponent1, + }; + + const action = ToolbarComponent.create(options); + + expect(action).toBeInstanceOf(ToolbarComponent); + expect(action.component).toBe(options.component); + }); + }); + + describe('#createMany', () => { + it('should return multiple instances from given options array', () => { + const options1 = { + component: MockComponent1, + }; + const options2 = { + component: MockComponent2, + }; + + const [action1, action2] = ToolbarComponent.createMany([options1, options2]); + + expect(action1).toBeInstanceOf(ToolbarComponent); + expect(action1.component).toBe(options1.component); + expect(action2).toBeInstanceOf(ToolbarComponent); + expect(action2.component).toBe(options2.component); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/typeahead.util.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/typeahead.util.spec.ts new file mode 100644 index 0000000000..479b1d4fcf --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/typeahead.util.spec.ts @@ -0,0 +1,72 @@ +import { ExtensionPropertyUiLookupDto } from '@abp/ng.core'; +import { of } from 'rxjs'; +import { createTypeaheadOptions } from '../lib/utils/typeahead.util'; + +const lookup: ExtensionPropertyUiLookupDto = { + url: 'url', + resultListPropertyName: 'list', + displayPropertyName: 'text', + valuePropertyName: 'id', + filterParamName: 'filter', +}; + +describe('Typeahead Utils', () => { + describe('#createTypeaheadOptions', () => { + it('should return observable empty array when search text does not exist', async () => { + const list = await createTypeaheadOptions(null)(null, null).toPromise(); + expect(list).toEqual([]); + }); + + it('should call request method of RestService with lookup url, filter param and search text', async () => { + const data = createData([]); + const service = data.getInjected(); + await createTypeaheadOptions(lookup)(data, 'x').toPromise(); + expect(service.request).toHaveBeenCalledTimes(1); + expect(service.request).toHaveBeenCalledWith( + { + method: 'GET', + url: 'url', + params: { + filter: 'x', + }, + }, + { apiName: 'Default' }, + ); + }); + + it('should return options based on given lookup data', async () => { + const data = createData([ + { + text: 'foo', + id: 'bar', + }, + { + text: 'baz', + id: 'qux', + }, + ]); + + const options = await createTypeaheadOptions(lookup)(data, 'x').toPromise(); + expect(options).toEqual([ + { + key: 'foo', + value: 'bar', + }, + { + key: 'baz', + value: 'qux', + }, + ]); + }); + }); +}); + +function createData(list: { text: string; id: string }[]): any { + const service = { request: jest.fn(() => of({ list })) }; + + return { + getInjected: () => service, + index: 0, + record: null, + }; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/validation.util.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/validation.util.spec.ts new file mode 100644 index 0000000000..abf4a6c486 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/validation.util.spec.ts @@ -0,0 +1,20 @@ +import { Validators } from '@angular/forms'; +import { ObjectExtensions } from '../lib/models/object-extensions'; +import { getValidatorsFromProperty } from '../lib/utils/validation.util'; + +describe('Validation Utils', () => { + describe('#getValidatorsFromProperty', () => { + it('should return a list of validators derived from property attributes', () => { + const property = { + attributes: [ + { + typeSimple: 'emailAddress', + config: {}, + }, + ], + } as ObjectExtensions.ExtensionPropertyDto; + + expect(getValidatorsFromProperty(property)[0]).toBe(Validators.email); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/src/lib/ui-extensions-testing.module.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/src/lib/ui-extensions-testing.module.ts new file mode 100644 index 0000000000..593cce3733 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/src/lib/ui-extensions-testing.module.ts @@ -0,0 +1,8 @@ +import { BaseUiExtensionsModule } from '@abp/ng.theme.shared/extensions'; +import { NgModule } from '@angular/core'; + +@NgModule({ + exports: [BaseUiExtensionsModule], + imports: [BaseUiExtensionsModule], +}) +export class UiExtensionsTestingModule {} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/src/public-api.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/src/public-api.ts new file mode 100644 index 0000000000..d524c9cd0c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/src/public-api.ts @@ -0,0 +1 @@ +export * from './lib/ui-extensions-testing.module'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/ssng-package.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/ssng-package.json new file mode 100644 index 0000000000..10757e7f04 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/ssng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/theme-shared/extensions/testing", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/jest.config.js b/npm/ng-packs/nx/ng-packs/libs/theme-shared/jest.config.js new file mode 100644 index 0000000000..04cdf90d4a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'theme-shared', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/libs/theme-shared', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json new file mode 100644 index 0000000000..69a7ee91b9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json @@ -0,0 +1,16 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/libs/theme-shared", + "lib": { + "entryFile": "src/public-api.ts" + }, + "allowedNonPeerDependencies": [ + "@abp/ng.core", + "@fortawesome/fontawesome-free", + "@ng-bootstrap/ng-bootstrap", + "@ngx-validate/core", + "@swimlane/ngx-datatable", + "bootstrap", + "chart.js" + ] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/package.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/package.json new file mode 100644 index 0000000000..557782119a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/package.json @@ -0,0 +1,22 @@ +{ + "name": "@abp/ng.theme.shared", + "version": "4.4.0", + "homepage": "https://abp.io", + "repository": { + "type": "git", + "url": "https://github.com/abpframework/abp.git" + }, + "dependencies": { + "@abp/ng.core": "~4.4.0", + "@fortawesome/fontawesome-free": "^5.14.0", + "@ng-bootstrap/ng-bootstrap": "^7.0.0", + "@ngx-validate/core": "^0.0.13", + "@swimlane/ngx-datatable": "^17.1.0", + "bootstrap": "~4.6.0", + "chart.js": "^2.9.3", + "tslib": "^2.0.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/bounce.animations.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/bounce.animations.ts new file mode 100644 index 0000000000..c539725a0a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/bounce.animations.ts @@ -0,0 +1,23 @@ +import { animate, animation, keyframes, style } from '@angular/animations'; + +export const bounceIn = animation( + [ + style({ opacity: '0', display: '{{ display }}' }), + animate( + '{{ time}} {{ easing }}', + keyframes([ + style({ opacity: '0', transform: '{{ transform }} scale(0.0)', offset: 0 }), + style({ opacity: '0', transform: '{{ transform }} scale(0.8)', offset: 0.5 }), + style({ opacity: '1', transform: '{{ transform }} scale(1.0)', offset: 1 }) + ]) + ) + ], + { + params: { + time: '350ms', + easing: 'cubic-bezier(.7,.31,.72,1.47)', + display: 'block', + transform: 'translate(-50%, -50%)' + } + } +); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/collapse.animations.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/collapse.animations.ts new file mode 100644 index 0000000000..945ca6ab08 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/collapse.animations.ts @@ -0,0 +1,90 @@ +import { + animate, + animation, + trigger, + state, + style, + transition, + useAnimation, +} from '@angular/animations'; + +export const collapseY = animation( + [ + style({ height: '*', overflow: 'hidden', 'box-sizing': 'border-box' }), + animate('{{ time }} {{ easing }}', style({ height: '0', padding: '0px' })), + ], + { params: { time: '350ms', easing: 'ease' } }, +); + +export const collapseYWithMargin = animation( + [ + style({ 'margin-top': '0' }), + animate('{{ time }} {{ easing }}', style({ 'margin-left': '-100%' })), + ], + { + params: { time: '500ms', easing: 'ease' }, + }, +); + +export const collapseX = animation( + [ + style({ width: '*', overflow: 'hidden', 'box-sizing': 'border-box' }), + animate('{{ time }} {{ easing }}', style({ width: '0', padding: '0px' })), + ], + { params: { time: '350ms', easing: 'ease' } }, +); + +export const expandY = animation( + [ + style({ height: '0', overflow: 'hidden', 'box-sizing': 'border-box' }), + animate('{{ time }} {{ easing }}', style({ height: '*', padding: '*' })), + ], + { params: { time: '350ms', easing: 'ease' } }, +); + +export const expandYWithMargin = animation( + [ + style({ 'margin-top': '-100%' }), + animate('{{ time }} {{ easing }}', style({ 'margin-top': '0' })), + ], + { + params: { time: '500ms', easing: 'ease' }, + }, +); + +export const expandX = animation( + [ + style({ width: '0', overflow: 'hidden', 'box-sizing': 'border-box' }), + animate('{{ time }} {{ easing }}', style({ width: '*', padding: '*' })), + ], + { params: { time: '350ms', easing: 'ease' } }, +); + +export const collapse = trigger('collapse', [ + state('collapsed', style({ height: '0', overflow: 'hidden' })), + state('expanded', style({ height: '*', overflow: 'hidden' })), + transition('expanded => collapsed', useAnimation(collapseY)), + transition('collapsed => expanded', useAnimation(expandY)), +]); + +export const collapseWithMargin = trigger('collapseWithMargin', [ + state('collapsed', style({ 'margin-top': '-100%' })), + state('expanded', style({ 'margin-top': '0' })), + transition('expanded => collapsed', useAnimation(collapseYWithMargin), { + params: { time: '400ms', easing: 'linear' }, + }), + transition('collapsed => expanded', useAnimation(expandYWithMargin)), +]); + +export const collapseLinearWithMargin = trigger('collapseLinearWithMargin', [ + state('collapsed', style({ 'margin-top': '-100vh' })), + state('expanded', style({ 'margin-top': '0' })), + transition( + 'expanded => collapsed', + useAnimation(collapseYWithMargin, { params: { time: '200ms', easing: 'linear' } }), + ), + transition( + 'collapsed => expanded', + useAnimation(expandYWithMargin, { params: { time: '250ms', easing: 'linear' } }), + ), +]); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/fade.animations.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/fade.animations.ts new file mode 100644 index 0000000000..3321974a77 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/fade.animations.ts @@ -0,0 +1,74 @@ +import { animate, animation, style } from '@angular/animations'; + +export const fadeIn = animation([style({ opacity: '0' }), animate('{{ time}} {{ easing }}', style({ opacity: '1' }))], { + params: { time: '350ms', easing: 'ease' }, +}); + +export const fadeOut = animation( + [style({ opacity: '1' }), animate('{{ time}} {{ easing }}', style({ opacity: '0' }))], + { params: { time: '350ms', easing: 'ease' } }, +); + +export const fadeInDown = animation( + [ + style({ opacity: '0', transform: '{{ transform }} translateY(-20px)' }), + animate('{{ time }} {{ easing }}', style({ opacity: '1', transform: '{{ transform }} translateY(0)' })), + ], + { params: { time: '350ms', easing: 'ease', transform: '' } }, +); + +export const fadeInUp = animation( + [ + style({ opacity: '0', transform: '{{ transform }} translateY(20px)' }), + animate('{{ time }} {{ easing }}', style({ opacity: '1', transform: '{{ transform }} translateY(0)' })), + ], + { params: { time: '350ms', easing: 'ease', transform: '' } }, +); + +export const fadeInLeft = animation( + [ + style({ opacity: '0', transform: '{{ transform }} translateX(20px)' }), + animate('{{ time }} {{ easing }}', style({ opacity: '1', transform: '{{ transform }} translateX(0)' })), + ], + { params: { time: '350ms', easing: 'ease', transform: '' } }, +); + +export const fadeInRight = animation( + [ + style({ opacity: '0', transform: '{{ transform }} translateX(-20px)' }), + animate('{{ time }} {{ easing }}', style({ opacity: '1', transform: '{{ transform }} translateX(0)' })), + ], + { params: { time: '350ms', easing: 'ease', transform: '' } }, +); + +export const fadeOutDown = animation( + [ + style({ opacity: '1', transform: '{{ transform }} translateY(0)' }), + animate('{{ time }} {{ easing }}', style({ opacity: '0', transform: '{{ transform }} translateY(20px)' })), + ], + { params: { time: '350ms', easing: 'ease', transform: '' } }, +); + +export const fadeOutUp = animation( + [ + style({ opacity: '1', transform: '{{ transform }} translateY(0)' }), + animate('{{ time }} {{ easing }}', style({ opacity: '0', transform: '{{ transform }} translateY(-20px)' })), + ], + { params: { time: '350ms', easing: 'ease', transform: '' } }, +); + +export const fadeOutLeft = animation( + [ + style({ opacity: '1', transform: '{{ transform }} translateX(0)' }), + animate('{{ time }} {{ easing }}', style({ opacity: '0', transform: '{{ transform }} translateX(20px)' })), + ], + { params: { time: '350ms', easing: 'ease', transform: '' } }, +); + +export const fadeOutRight = animation( + [ + style({ opacity: '1', transform: '{{ transform }} translateX(0)' }), + animate('{{ time }} {{ easing }}', style({ opacity: '0', transform: '{{ transform }} translateX(-20px)' })), + ], + { params: { time: '350ms', easing: 'ease', transform: '' } }, +); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/index.ts new file mode 100644 index 0000000000..d625d76d8e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/index.ts @@ -0,0 +1,6 @@ +export * from './bounce.animations'; +export * from './collapse.animations'; +export * from './fade.animations'; +export * from './modal.animations'; +export * from './slide.animations'; +export * from './toast.animations'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/modal.animations.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/modal.animations.ts new file mode 100644 index 0000000000..da979f331b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/modal.animations.ts @@ -0,0 +1,12 @@ +import { transition, trigger, useAnimation } from '@angular/animations'; +import { fadeIn, fadeInDown, fadeOut } from './fade.animations'; + +export const fadeAnimation = trigger('fade', [ + transition(':enter', useAnimation(fadeIn)), + transition(':leave', useAnimation(fadeOut)), +]); + +export const dialogAnimation = trigger('dialog', [ + transition(':enter', useAnimation(fadeInDown)), + transition(':leave', useAnimation(fadeOut)), +]); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/slide.animations.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/slide.animations.ts new file mode 100644 index 0000000000..32ff155e55 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/slide.animations.ts @@ -0,0 +1,7 @@ +import { animate, state, style, transition, trigger, query } from '@angular/animations'; +export const slideFromBottom = trigger('slideFromBottom', [ + transition('* <=> *', [ + style({ 'margin-top': '20px', opacity: '0' }), + animate('0.2s ease-out', style({ opacity: '1', 'margin-top': '0px' })), + ]), +]); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/toast.animations.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/toast.animations.ts new file mode 100644 index 0000000000..7ac6a7519b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/toast.animations.ts @@ -0,0 +1,17 @@ +import { animate, query, style, transition, trigger } from '@angular/animations'; + +export const toastInOut = trigger('toastInOut', [ + transition('* <=> *', [ + query( + ':enter', + [ + style({ opacity: 0, transform: 'translateY(20px)' }), + animate('350ms ease', style({ opacity: 1, transform: 'translateY(0)' })), + ], + { optional: true }, + ), + query(':leave', animate('450ms ease', style({ opacity: 0 })), { + optional: true, + }), + ]), +]); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html new file mode 100644 index 0000000000..da17512ea1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html @@ -0,0 +1,13 @@ + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts new file mode 100644 index 0000000000..65c3c0a0af --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts @@ -0,0 +1,58 @@ +import { + ABP, + getRoutePath, + RouterEvents, + RoutesService, + SubscriptionService, + TreeNode, +} from '@abp/ng.core'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { map, startWith } from 'rxjs/operators'; +import { eThemeSharedRouteNames } from '../../enums'; + +@Component({ + selector: 'abp-breadcrumb', + templateUrl: './breadcrumb.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [SubscriptionService], +}) +export class BreadcrumbComponent implements OnInit { + segments: Partial[] = []; + + constructor( + public readonly cdRef: ChangeDetectorRef, + private router: Router, + private routes: RoutesService, + private subscription: SubscriptionService, + private routerEvents: RouterEvents, + ) {} + + ngOnInit(): void { + this.subscription.addOne( + this.routerEvents.getNavigationEvents('End').pipe( + // tslint:disable-next-line:deprecation + startWith(null), + map(() => this.routes.search({ path: getRoutePath(this.router) })), + ), + route => { + this.segments = []; + if (route) { + let node = { parent: route } as TreeNode; + + while (node.parent) { + node = node.parent; + const { parent, children, isLeaf, ...segment } = node; + if (!isAdministration(segment)) this.segments.unshift(segment); + } + + this.cdRef.detectChanges(); + } + }, + ); + } +} + +function isAdministration(route: ABP.Route) { + return route.name === eThemeSharedRouteNames.Administration; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/button/button.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/button/button.component.ts new file mode 100644 index 0000000000..83bef06f26 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/button/button.component.ts @@ -0,0 +1,82 @@ +import { + Component, + EventEmitter, + Input, + Output, + ViewChild, + ElementRef, + Renderer2, + OnInit, +} from '@angular/core'; +import { ABP } from '@abp/ng.core'; + +@Component({ + selector: 'abp-button', + template: ` + + `, +}) +export class ButtonComponent implements OnInit { + @Input() + buttonId = ''; + + @Input() + buttonClass = 'btn btn-primary'; + + @Input() + buttonType = 'button'; + + @Input() + iconClass: string; + + @Input() + loading = false; + + @Input() + disabled = false; + + @Input() + attributes: ABP.Dictionary; + + // tslint:disable + @Output() readonly click = new EventEmitter(); + + @Output() readonly focus = new EventEmitter(); + + @Output() readonly blur = new EventEmitter(); + // tslint:enable + + @Output() readonly abpClick = new EventEmitter(); + + @Output() readonly abpFocus = new EventEmitter(); + + @Output() readonly abpBlur = new EventEmitter(); + + @ViewChild('button', { static: true }) + buttonRef: ElementRef; + + get icon(): string { + return `${this.loading ? 'fa fa-spinner fa-spin' : this.iconClass || 'd-none'}`; + } + + constructor(private renderer: Renderer2) {} + + ngOnInit() { + if (this.attributes) { + Object.keys(this.attributes).forEach(key => { + this.renderer.setAttribute(this.buttonRef.nativeElement, key, this.attributes[key]); + }); + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/chart/chart.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/chart/chart.component.html new file mode 100644 index 0000000000..211614c90d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/chart/chart.component.html @@ -0,0 +1,11 @@ +
+ +
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/chart/chart.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/chart/chart.component.ts new file mode 100644 index 0000000000..e019840b7c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/chart/chart.component.ts @@ -0,0 +1,142 @@ +import { + AfterViewInit, + Component, + ElementRef, + EventEmitter, + Input, + OnDestroy, + Output, + ChangeDetectorRef, +} from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; +import { chartJsLoaded$ } from '../../utils/widget-utils'; +declare const Chart: any; + +@Component({ + selector: 'abp-chart', + templateUrl: './chart.component.html', +}) +export class ChartComponent implements AfterViewInit, OnDestroy { + @Input() type: string; + + @Input() options: any = {}; + + @Input() plugins: any[] = []; + + @Input() width: string; + + @Input() height: string; + + @Input() responsive = true; + + // tslint:disable-next-line: no-output-on-prefix + @Output() readonly onDataSelect: EventEmitter = new EventEmitter(); + + @Output() readonly initialized = new BehaviorSubject(this); + + private _initialized: boolean; + + _data: any; + + chart: any; + + constructor(public el: ElementRef, private cdRef: ChangeDetectorRef) {} + + @Input() get data(): any { + return this._data; + } + + set data(val: any) { + this._data = val; + this.reinit(); + } + + get canvas() { + return this.el.nativeElement.children[0].children[0]; + } + + get base64Image() { + return this.chart.toBase64Image(); + } + + ngAfterViewInit() { + chartJsLoaded$.subscribe(() => { + this.testChartJs(); + + this.initChart(); + this._initialized = true; + }); + } + + testChartJs() { + try { + // tslint:disable-next-line: no-unused-expression + Chart; + } catch (error) { + throw new Error(`Chart is not found. Import the Chart from app.module like shown below: + import('chart.js'); + `); + } + } + + onCanvasClick = event => { + if (this.chart) { + const element = this.chart.getElementAtEvent(event); + const dataset = this.chart.getDatasetAtEvent(event); + if (element && element.length && dataset) { + this.onDataSelect.emit({ + originalEvent: event, + element: element[0], + dataset, + }); + } + } + }; + + initChart = () => { + const opts = this.options || {}; + opts.responsive = this.responsive; + + // allows chart to resize in responsive mode + if (opts.responsive && (this.height || this.width)) { + opts.maintainAspectRatio = false; + } + + this.chart = new Chart(this.canvas, { + type: this.type, + data: this.data, + options: this.options, + plugins: this.plugins, + }); + + this.cdRef.detectChanges(); + }; + + generateLegend = () => { + if (this.chart) { + return this.chart.generateLegend(); + } + }; + + refresh = () => { + if (this.chart) { + this.chart.update(); + this.cdRef.detectChanges(); + } + }; + + reinit = () => { + if (this.chart) { + this.chart.destroy(); + this.initChart(); + } + }; + + ngOnDestroy() { + if (this.chart) { + this.chart.destroy(); + this._initialized = false; + this.chart = null; + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.html new file mode 100644 index 0000000000..47c555a16b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.html @@ -0,0 +1,39 @@ +
+
+
+
+ +
+
+

+

+
+ +
+
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.scss b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.scss new file mode 100644 index 0000000000..a6d25a4946 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.scss @@ -0,0 +1,82 @@ +.confirmation { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: flex; + align-items: center; + justify-content: center; + z-index: 1060; + .confirmation-backdrop { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 1061 !important; + } + .confirmation-dialog { + display: flex; + flex-direction: column; + margin: 20px auto; + padding: 0; + width: 450px; + min-height: 300px; + z-index: 1062 !important; + @media screen and (max-width: 500px) { + width: 90vw; + } + .icon-container { + display: flex; + align-items: center; + justify-content: center; + margin: 0 0 10px 0; + padding: 20px; + .icon { + width: 100px; + height: 100px; + stroke-width: 1; + font-size: 80px; + text-align: center; + } + } + .content { + flex-grow: 1; + display: block; + .title { + display: block; + margin: 0; + padding: 0; + font-size: 27px; + font-weight: 600; + text-align: center; + } + .message { + display: block; + margin: 10px auto; + padding: 20px; + font-size: 16px; + font-weight: 400; + text-align: center; + } + } + .footer { + display: flex; + align-items: center; + justify-content: flex-end; + margin: 10px 0 0 0; + padding: 20px; + width: 100%; + .confirmation-button { + display: inline-block; + margin: 0px 5px; + padding: 10px 20px; + border: none; + border-radius: 6px; + font-size: 14px; + font-weight: 600; + } + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.ts new file mode 100644 index 0000000000..13462612e6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.ts @@ -0,0 +1,37 @@ +import { Component } from '@angular/core'; +import { ReplaySubject } from 'rxjs'; +import { Confirmation } from '../../models/confirmation'; + +@Component({ + selector: 'abp-confirmation', + templateUrl: './confirmation.component.html', + styleUrls: ['./confirmation.component.scss'], +}) +export class ConfirmationComponent { + confirm = Confirmation.Status.confirm; + reject = Confirmation.Status.reject; + dismiss = Confirmation.Status.dismiss; + + confirmation$: ReplaySubject; + + clear: (status: Confirmation.Status) => void; + + close(status: Confirmation.Status) { + this.clear(status); + } + + getIconClass({ severity }: Confirmation.DialogData): string { + switch (severity) { + case 'info': + return 'fa-info-circle'; + case 'success': + return 'fa-check-circle'; + case 'warning': + return 'fa-exclamation-triangle'; + case 'error': + return 'fa-times-circle'; + default: + return 'fa-question-circle'; + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html new file mode 100644 index 0000000000..046e8bb67a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html @@ -0,0 +1,37 @@ +
+ + +
+
+
+

{{ statusText }} {{ title | abpLocalization }}

+
+ {{ details | abpLocalization }} +
+ +
+
+
+
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.scss b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.scss new file mode 100644 index 0000000000..b9f7690a5b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.scss @@ -0,0 +1,14 @@ +.error { + position: fixed; + top: 0; + width: 100vw; + height: 100vh; + z-index: 999999; +} + +.centered { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts new file mode 100644 index 0000000000..fb1b2d4a6c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts @@ -0,0 +1,90 @@ +import { Config, SubscriptionService } from '@abp/ng.core'; +import { + AfterViewInit, + ApplicationRef, + Component, + ComponentFactoryResolver, + ElementRef, + EmbeddedViewRef, + Injector, + OnDestroy, + OnInit, + Type, + ViewChild, +} from '@angular/core'; +import { fromEvent, Subject } from 'rxjs'; +import { debounceTime, filter } from 'rxjs/operators'; +import snq from 'snq'; + +@Component({ + selector: 'abp-http-error-wrapper', + templateUrl: './http-error-wrapper.component.html', + styleUrls: ['http-error-wrapper.component.scss'], + providers: [SubscriptionService], +}) +export class HttpErrorWrapperComponent implements AfterViewInit, OnDestroy, OnInit { + appRef: ApplicationRef; + + cfRes: ComponentFactoryResolver; + + injector: Injector; + + status = 0; + + title: Config.LocalizationParam = 'Oops!'; + + details: Config.LocalizationParam = 'Sorry, an error has occured.'; + + customComponent: Type = null; + + destroy$: Subject; + + hideCloseIcon = false; + + backgroundColor: string; + + isHomeShow = true; + + @ViewChild('container', { static: false }) + containerRef: ElementRef; + + get statusText(): string { + return this.status ? `[${this.status}]` : ''; + } + + constructor(private subscription: SubscriptionService) {} + + ngOnInit() { + this.backgroundColor = + snq(() => window.getComputedStyle(document.body).getPropertyValue('background-color')) || + '#fff'; + } + + ngAfterViewInit() { + if (this.customComponent) { + const customComponentRef = this.cfRes + .resolveComponentFactory(this.customComponent) + .create(this.injector); + customComponentRef.instance.errorStatus = this.status; + customComponentRef.instance.destroy$ = this.destroy$; + this.appRef.attachView(customComponentRef.hostView); + this.containerRef.nativeElement.appendChild( + (customComponentRef.hostView as EmbeddedViewRef).rootNodes[0], + ); + customComponentRef.changeDetectorRef.detectChanges(); + } + + const keyup$ = fromEvent(document, 'keyup').pipe( + debounceTime(150), + filter((key: KeyboardEvent) => key && key.key === 'Escape'), + ); + this.subscription.addOne(keyup$, () => this.destroy()); + } + + ngOnDestroy() {} + + destroy() { + this.destroy$.next(); + this.destroy$.complete(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/index.ts new file mode 100644 index 0000000000..45036680be --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/index.ts @@ -0,0 +1,15 @@ +export * from './breadcrumb/breadcrumb.component'; +export * from './button/button.component'; +export * from './chart/chart.component'; +export * from './confirmation/confirmation.component'; +export * from './http-error-wrapper/http-error-wrapper.component'; +export * from './loader-bar/loader-bar.component'; +export * from './loading/loading.component'; +export * from './modal/modal.component'; +export * from './modal/modal-close.directive'; +export * from './modal/modal-ref.service'; +export * from './sort-order-icon/sort-order-icon.component'; +export * from './table-empty-message/table-empty-message.component'; +export * from './table/table.component'; +export * from './toast-container/toast-container.component'; +export * from './toast/toast.component'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loader-bar/loader-bar.component.scss b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loader-bar/loader-bar.component.scss new file mode 100644 index 0000000000..19a4f2ee8f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loader-bar/loader-bar.component.scss @@ -0,0 +1,24 @@ +.abp-loader-bar { + left: 0; + opacity: 0; + position: fixed; + top: 0; + transition: opacity 0.4s linear 0.4s; + z-index: 99999; + + &.is-loading { + opacity: 1; + transition: none; + } + + .abp-progress { + height: 3px; + left: 0; + position: fixed; + top: 0; + + &.progressing { + transition: width 0.4s ease; + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts new file mode 100644 index 0000000000..3fd01d1b4d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts @@ -0,0 +1,120 @@ +import { HttpWaitService, RouterWaitService, SubscriptionService } from '@abp/ng.core'; +import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { combineLatest, Subscription, timer } from 'rxjs'; + +@Component({ + selector: 'abp-loader-bar', + template: ` +
+
+
+ `, + styleUrls: ['./loader-bar.component.scss'], + providers: [SubscriptionService], +}) +export class LoaderBarComponent implements OnDestroy, OnInit { + protected _isLoading: boolean; + + @Input() + set isLoading(value: boolean) { + this._isLoading = value; + this.cdRef.detectChanges(); + } + get isLoading(): boolean { + return this._isLoading; + } + + @Input() + containerClass = 'abp-loader-bar'; + + @Input() + color = '#77b6ff'; + + progressLevel = 0; + + interval = new Subscription(); + + timer = new Subscription(); + + intervalPeriod = 350; + + stopDelay = 800; + + private readonly clearProgress = () => { + this.progressLevel = 0; + this.cdRef.detectChanges(); + }; + + private readonly reportProgress = () => { + if (this.progressLevel < 75) { + this.progressLevel += 1 + Math.random() * 9; + } else if (this.progressLevel < 90) { + this.progressLevel += 0.4; + } else if (this.progressLevel < 100) { + this.progressLevel += 0.1; + } else { + this.interval.unsubscribe(); + } + this.cdRef.detectChanges(); + }; + + get boxShadow(): string { + return `0 0 10px rgba(${this.color}, 0.5)`; + } + + constructor( + private router: Router, + private cdRef: ChangeDetectorRef, + private subscription: SubscriptionService, + private httpWaitService: HttpWaitService, + private routerWaitService: RouterWaitService, + ) {} + + ngOnInit() { + this.subscribeLoading(); + } + + subscribeLoading() { + this.subscription.addOne( + combineLatest([this.httpWaitService.getLoading$(), this.routerWaitService.getLoading$()]), + ([httpLoading, routerLoading]) => { + if (httpLoading || routerLoading) this.startLoading(); + else this.stopLoading(); + }, + ); + } + + ngOnDestroy() { + this.interval.unsubscribe(); + } + + startLoading() { + if (this.isLoading || !this.interval.closed) return; + + this.isLoading = true; + this.progressLevel = 0; + this.cdRef.detectChanges(); + this.interval = timer(0, this.intervalPeriod).subscribe(this.reportProgress); + this.timer.unsubscribe(); + } + + stopLoading() { + this.interval.unsubscribe(); + + this.progressLevel = 100; + this.isLoading = false; + + if (!this.timer.closed) return; + + this.timer = timer(this.stopDelay).subscribe(this.clearProgress); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loading/loading.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loading/loading.component.ts new file mode 100644 index 0000000000..c68757b4a0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loading/loading.component.ts @@ -0,0 +1,40 @@ +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; + +@Component({ + selector: 'abp-loading', + template: ` +
+ +
+ `, + encapsulation: ViewEncapsulation.None, + styles: [ + ` + .abp-loading { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 1040; + } + + .abp-loading .abp-spinner { + position: absolute; + top: 50%; + left: 50%; + font-size: 14px; + -moz-transform: translateX(-50%) translateY(-50%); + -o-transform: translateX(-50%) translateY(-50%); + -ms-transform: translateX(-50%) translateY(-50%); + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + } + `, + ], +}) +export class LoadingComponent implements OnInit { + constructor() {} + + ngOnInit() {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-close.directive.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-close.directive.ts new file mode 100644 index 0000000000..a20c8d8a34 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-close.directive.ts @@ -0,0 +1,16 @@ +import { Directive, HostListener, Optional } from '@angular/core'; +import { ModalComponent } from './modal.component'; + +@Directive({ selector: '[abpClose]' }) +export class ModalCloseDirective { + constructor(@Optional() private modal: ModalComponent) { + if (!modal) { + console.error('Please use abpClose within an abp-modal'); + } + } + + @HostListener('click') + onClick() { + this.modal?.close(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-container.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-container.component.ts new file mode 100644 index 0000000000..1b07955270 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-container.component.ts @@ -0,0 +1,13 @@ +import { Component, ViewChild, ViewContainerRef } from '@angular/core'; + +/** + * @deprecated To be removed in v5.0 + */ +@Component({ + selector: 'abp-modal-container', + template: '', +}) +export class ModalContainerComponent { + @ViewChild('container', { static: true, read: ViewContainerRef }) + container: ViewContainerRef; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-ref.service.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-ref.service.ts new file mode 100644 index 0000000000..c9f7ea41e2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-ref.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@angular/core'; + +export type ModalDismissMode = 'hard' | 'soft'; + +export interface DismissableModal { + dismiss(mode: ModalDismissMode); +} + +@Injectable({ providedIn: 'root' }) +export class ModalRefService { + modalRefs: DismissableModal[] = []; + + register(modal: DismissableModal) { + this.modalRefs.push(modal); + } + unregister(modal: DismissableModal) { + const index = this.modalRefs.indexOf(modal); + if (index > -1) { + this.modalRefs.splice(index, 1); + } + } + + dismissAll(mode: ModalDismissMode) { + this.modalRefs.forEach(modal => modal.dismiss(mode)); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.html new file mode 100644 index 0000000000..ee0d99b7cb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.html @@ -0,0 +1,23 @@ + + + + + + + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.scss b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.scss new file mode 100644 index 0000000000..321bf9342d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.scss @@ -0,0 +1,25 @@ +.modal { + &.show { + display: block !important; + } + + &-backdrop { + opacity: 0.8; + } + + &::-webkit-scrollbar { + width: 7px; + } + + &::-webkit-scrollbar-track { + background: #ddd; + } + + &::-webkit-scrollbar-thumb { + background: #8a8686; + } + + &-dialog { + z-index: 1050; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.ts new file mode 100644 index 0000000000..feb4ba5fd8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.ts @@ -0,0 +1,253 @@ +import { SubscriptionService, uuid } from '@abp/ng.core'; +import { + Component, + ContentChild, + ElementRef, + EventEmitter, + Inject, + Input, + isDevMode, + OnDestroy, + OnInit, + Optional, + Output, + TemplateRef, + ViewChild +} from '@angular/core'; +import { NgbModal, NgbModalOptions, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { fromEvent, Subject } from 'rxjs'; +import { debounceTime, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators'; +import { Confirmation } from '../../models/confirmation'; +import { ConfirmationService } from '../../services/confirmation.service'; +import { SUPPRESS_UNSAVED_CHANGES_WARNING } from '../../tokens/suppress-unsaved-changes-warning.token'; +import { ButtonComponent } from '../button/button.component'; +import { DismissableModal, ModalDismissMode, ModalRefService } from './modal-ref.service'; + +export type ModalSize = 'sm' | 'md' | 'lg' | 'xl'; + +@Component({ + selector: 'abp-modal', + templateUrl: './modal.component.html', + styleUrls: ['./modal.component.scss'], + providers: [SubscriptionService], +}) +export class ModalComponent implements OnInit, OnDestroy, DismissableModal { + /** + * @deprecated Use centered property of options input instead. To be deleted in v5.0. + */ + @Input() centered = false; + /** + * @deprecated Use windowClass property of options input instead. To be deleted in v5.0. + */ + @Input() modalClass = ''; + /** + * @deprecated Use size property of options input instead. To be deleted in v5.0. + */ + @Input() size: ModalSize = 'lg'; + + @Input() + get visible(): boolean { + return this._visible; + } + set visible(value: boolean) { + if (typeof value !== 'boolean') return; + this.toggle$.next(value); + } + + @Input() + get busy(): boolean { + return this._busy; + } + set busy(value: boolean) { + if (this.abpSubmit && this.abpSubmit instanceof ButtonComponent) { + this.abpSubmit.loading = value; + } + + this._busy = value; + } + + @Input() options: NgbModalOptions = {}; + + @Input() suppressUnsavedChangesWarning = this.suppressUnsavedChangesWarningToken; + + @ViewChild('modalContent') modalContent: TemplateRef; + + @ContentChild('abpHeader', { static: false }) abpHeader: TemplateRef; + + @ContentChild('abpBody', { static: false }) abpBody: TemplateRef; + + @ContentChild('abpFooter', { static: false }) abpFooter: TemplateRef; + + @ContentChild(ButtonComponent, { static: false, read: ButtonComponent }) + abpSubmit: ButtonComponent; + + /** + * @deprecated will be removed in v5.0 + */ + @ContentChild('abpClose', { static: false, read: ElementRef }) + abpClose: ElementRef; + + @Output() readonly visibleChange = new EventEmitter(); + + @Output() readonly init = new EventEmitter(); + + @Output() readonly appear = new EventEmitter(); + + @Output() readonly disappear = new EventEmitter(); + + _visible = false; + + _busy = false; + + modalRef: NgbModalRef; + + isConfirmationOpen = false; + + destroy$ = new Subject(); + + modalIdentifier = `modal-${uuid()}`; + + private toggle$ = new Subject(); + + get modalWindowRef() { + return document.querySelector(`ngb-modal-window.${this.modalIdentifier}`); + } + + get isFormDirty(): boolean { + return Boolean(this.modalWindowRef.querySelector('.ng-dirty')); + } + + constructor( + private confirmationService: ConfirmationService, + private subscription: SubscriptionService, + @Optional() + @Inject(SUPPRESS_UNSAVED_CHANGES_WARNING) + private suppressUnsavedChangesWarningToken: boolean, + private modal: NgbModal, + private modalRefService: ModalRefService, + ) { + this.initToggleStream(); + } + ngOnInit(): void { + this.modalRefService.register(this); + } + + dismiss(mode: ModalDismissMode) { + switch (mode) { + case 'hard': + this.visible = false; + break; + case 'soft': + this.close(); + break; + default: + break; + } + } + + private initToggleStream() { + this.subscription.addOne(this.toggle$.pipe(debounceTime(0), distinctUntilChanged()), value => + this.toggle(value), + ); + } + + private toggle(value: boolean) { + this._visible = value; + this.visibleChange.emit(value); + + if (!value) { + this.modalRef?.dismiss(); + this.disappear.emit(); + this.destroy$.next(); + return; + } + + setTimeout(() => this.listen(), 0); + this.modalRef = this.modal.open(this.modalContent, { + // TODO: set size to 'lg' when removed the size variable + size: this.size, + centered: this.centered, + keyboard: false, + scrollable: true, + beforeDismiss: () => { + if (!this.visible) return true; + + this.close(); + return !this.visible; + }, + ...this.options, + windowClass: `${this.modalClass} ${this.options.windowClass || ''} ${this.modalIdentifier}`, + }); + + this.appear.emit(); + } + + ngOnDestroy(): void { + this.modalRefService.unregister(this); + this.toggle(false); + this.destroy$.next(); + } + + close() { + if (this.busy) return; + + if (this.isFormDirty && !this.suppressUnsavedChangesWarning) { + if (this.isConfirmationOpen) return; + + this.isConfirmationOpen = true; + this.confirmationService + .warn( + 'AbpAccount::AreYouSureYouWantToCancelEditingWarningMessage', + 'AbpAccount::AreYouSure', + { dismissible: false }, + ) + .subscribe((status: Confirmation.Status) => { + this.isConfirmationOpen = false; + if (status === Confirmation.Status.confirm) { + this.visible = false; + } + }); + } else { + this.visible = false; + } + } + + listen() { + fromEvent(this.modalWindowRef, 'keyup') + .pipe( + takeUntil(this.destroy$), + debounceTime(150), + filter((key: KeyboardEvent) => key && key.key === 'Escape'), + ) + .subscribe(() => this.close()); + + fromEvent(window, 'beforeunload') + .pipe(takeUntil(this.destroy$)) + .subscribe(event => { + event.preventDefault(); + if (this.isFormDirty && !this.suppressUnsavedChangesWarning) { + event.returnValue = true; + } else { + delete event.returnValue; + } + }); + + setTimeout(() => { + if (!this.abpClose) return; + this.warnForDeprecatedClose(); + fromEvent(this.abpClose.nativeElement, 'click') + .pipe(takeUntil(this.destroy$)) + .subscribe(() => this.close()); + }, 0); + + this.init.emit(); + } + + private warnForDeprecatedClose() { + if (isDevMode()) { + console.warn( + 'Please use abpClose directive instead of #abpClose template variable. #abpClose will be removed in v5.0', + ); + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html new file mode 100644 index 0000000000..a3a142cc01 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html @@ -0,0 +1,3 @@ +
+ +
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts new file mode 100644 index 0000000000..439989ef73 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts @@ -0,0 +1,63 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +/** + * @deprecated To be deleted in v5.0. Use ngx-datatale instead. + */ +@Component({ + selector: 'abp-sort-order-icon', + templateUrl: './sort-order-icon.component.html', +}) +export class SortOrderIconComponent { + private _order: 'asc' | 'desc' | ''; + private _selectedSortKey: string; + + @Input() + sortKey: string; + + @Input() + set selectedSortKey(value: string) { + this._selectedSortKey = value; + this.selectedSortKeyChange.emit(value); + } + get selectedSortKey(): string { + return this._selectedSortKey; + } + + @Input() + set order(value: 'asc' | 'desc' | '') { + this._order = value; + this.orderChange.emit(value); + } + get order(): 'asc' | 'desc' | '' { + return this._order; + } + + @Output() readonly orderChange = new EventEmitter(); + @Output() readonly selectedSortKeyChange = new EventEmitter(); + + @Input() + iconClass: string; + + get icon(): string { + if (this.selectedSortKey === this.sortKey) return `sorting_${this.order}`; + else return 'sorting'; + } + + sort(key: string) { + this.selectedSortKey = key; + switch (this.order) { + case '': + this.order = 'asc'; + this.orderChange.emit('asc'); + break; + case 'asc': + this.order = 'desc'; + this.orderChange.emit('desc'); + break; + case 'desc': + this.order = ''; + this.orderChange.emit(''); + break; + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts new file mode 100644 index 0000000000..5924a9f187 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts @@ -0,0 +1,28 @@ +import { Component, OnInit, Input } from '@angular/core'; + +@Component({ + // tslint:disable-next-line: component-selector + selector: '[abp-table-empty-message]', + template: ` + + {{ emptyMessage | abpLocalization }} + + ` +}) +export class TableEmptyMessageComponent { + @Input() + colspan = 2; + + @Input() + message: string; + + @Input() + localizationResource = 'AbpAccount'; + + @Input() + localizationProp = 'NoDataAvailableInDatatable'; + + get emptyMessage(): string { + return this.message || `${this.localizationResource}::${this.localizationProp}`; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.html new file mode 100644 index 0000000000..6cbea56304 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.html @@ -0,0 +1,81 @@ +
+
+ +
+ +
+
+
+ + +
+
+
+
+ + + + +
+
+
+
+ + + +
+
+
+
+ + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + {{ + emptyMessage | abpLocalization + }} + + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.scss b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.scss new file mode 100644 index 0000000000..98d4eb5811 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.scss @@ -0,0 +1,337 @@ +.ui-table { + position: relative; + + .ui-table-tbody > tr:nth-child(even):hover, + .ui-table-tbody > tr:hover { + filter: brightness(90%); + } + + .ui-table-empty { + padding: 20px 0; + text-align: center; + border: 1px solid #e0e0e0; + border-top-width: 0; + } + + .ui-table-caption, + .ui-table-summary { + background-color: #f4f4f4; + color: #333333; + border: 1px solid #c8c8c8; + padding: 0.571em 1em; + text-align: center; + } + .ui-table-caption { + border-bottom: 0 none; + font-weight: 700; + } + .ui-table-summary { + border-top: 0 none; + font-weight: 700; + } + .ui-table-thead > tr > th { + padding: 0.571em 0.857em; + border: 1px solid #c8c8c8; + font-weight: 700; + color: #333333; + background-color: #f4f4f4; + } + .ui-table-tbody > tr > td { + padding: 0.571em 0.857em; + } + .ui-table-tfoot > tr > td { + padding: 0.571em 0.857em; + border: 1px solid #c8c8c8; + font-weight: 700; + color: #333333; + background-color: #ffffff; + } + .ui-sortable-column { + -moz-transition: box-shadow 0.2s; + -o-transition: box-shadow 0.2s; + -webkit-transition: box-shadow 0.2s; + transition: box-shadow 0.2s; + } + .ui-sortable-column:focus { + outline: 0 none; + outline-offset: 0; + -webkit-box-shadow: inset 0 0 0 0.2em #8dcdff; + -moz-box-shadow: inset 0 0 0 0.2em #8dcdff; + box-shadow: inset 0 0 0 0.2em #8dcdff; + } + .ui-sortable-column .ui-sortable-column-icon { + color: #848484; + } + .ui-sortable-column:not(.ui-state-highlight):hover { + background-color: #e0e0e0; + color: #333333; + } + .ui-sortable-column:not(.ui-state-highlight):hover .ui-sortable-column-icon { + color: #333333; + } + .ui-sortable-column.ui-state-highlight { + background-color: #007ad9; + color: #ffffff; + } + .ui-sortable-column.ui-state-highlight .ui-sortable-column-icon { + color: #ffffff; + } + .ui-editable-column input { + font-size: 14px; + font-family: 'Open Sans', 'Helvetica Neue', sans-serif; + } + .ui-editable-column input:focus { + outline: 1px solid #007ad9; + outline-offset: 2px; + } + .ui-table-tbody > tr { + background-color: #ffffff; + color: #333333; + } + .ui-table-tbody > tr > td { + background-color: inherit; + border: 1px solid #c8c8c8; + } + .ui-table-tbody > tr.ui-state-highlight { + background-color: #007ad9; + color: #ffffff; + } + .ui-table-tbody > tr.ui-state-highlight a { + color: #ffffff; + } + .ui-table-tbody > tr.ui-contextmenu-selected { + background-color: #007ad9; + color: #ffffff; + } + .ui-table-tbody > tr.ui-table-dragpoint-top > td { + -webkit-box-shadow: inset 0 2px 0 0 #007ad9; + -moz-box-shadow: inset 0 2px 0 0 #007ad9; + box-shadow: inset 0 2px 0 0 #007ad9; + } + .ui-table-tbody > tr.ui-table-dragpoint-bottom > td { + -webkit-box-shadow: inset 0 -2px 0 0 #007ad9; + -moz-box-shadow: inset 0 -2px 0 0 #007ad9; + box-shadow: inset 0 -2px 0 0 #007ad9; + } + .ui-table-tbody > tr:nth-child(even) { + background-color: #f9f9f9; + } + .ui-table-tbody > tr:nth-child(even).ui-state-highlight { + background-color: #007ad9; + color: #ffffff; + } + .ui-table-tbody > tr:nth-child(even).ui-state-highlight a { + color: #ffffff; + } + .ui-table-tbody > tr:nth-child(even).ui-contextmenu-selected { + background-color: #007ad9; + color: #ffffff; + } + + &.ui-table-hoverable-rows + .ui-table-tbody + > tr.ui-selectable-row:not(.ui-state-highlight):not(.ui-contextmenu-selected):hover { + cursor: pointer; + background-color: #eaeaea; + color: #333333; + } + .ui-column-resizer-helper { + background-color: #007ad9; + } + @media screen and (max-width: 40em) { + &.ui-table-responsive .ui-table-tbody > tr > td { + border: 0 none; + } + } + + table { + border-collapse: collapse; + width: 100%; + table-layout: fixed; + } + + .ui-table-tbody > tr > td, + .ui-table-tfoot > tr > td, + .ui-table-thead > tr > th { + padding: 0.571em 0.857em; + } + + .ui-sortable-column { + cursor: pointer; + } + + p-sorticon { + vertical-align: middle; + } + + .ui-table-auto-layout > .ui-table-wrapper { + overflow-x: auto; + } + + .ui-table-auto-layout > .ui-table-wrapper > table { + table-layout: auto; + } + + .ui-table-caption, + .ui-table-summary { + padding: 0.25em 0.5em; + text-align: center; + font-weight: 700; + } + + .ui-table-caption { + border-bottom: 0; + } + + .ui-table-summary { + border-top: 0; + } + + .ui-table-scrollable-wrapper { + position: relative; + } + + .ui-table-scrollable-footer, + .ui-table-scrollable-header { + overflow: hidden; + border: 0; + } + + .ui-table-scrollable-body { + overflow: auto; + position: relative; + } + + .ui-table-virtual-table { + position: absolute; + } + + .ui-table-loading-virtual-table { + display: none; + } + + .ui-table-frozen-view .ui-table-scrollable-body { + overflow: hidden; + } + + .ui-table-frozen-view > .ui-table-scrollable-body > table > .ui-table-tbody > tr > td:last-child { + border-right: 0; + } + + .ui-table-unfrozen-view { + position: absolute; + top: 0; + } + + .ui-table-resizable > .ui-table-wrapper { + overflow-x: auto; + } + + .ui-table-resizable .ui-table-tbody > tr > td, + .ui-table-resizable .ui-table-tfoot > tr > td, + .ui-table-resizable .ui-table-thead > tr > th { + overflow: hidden; + } + + .ui-table-resizable .ui-resizable-column { + background-clip: padding-box; + position: relative; + } + + .ui-table-resizable-fit .ui-resizable-column:last-child .ui-column-resizer { + display: none; + } + + .ui-column-resizer { + display: block; + position: absolute !important; + top: 0; + right: 0; + margin: 0; + width: 0.5em; + height: 100%; + padding: 0; + cursor: col-resize; + border: 1px solid rgba(0, 0, 0, 0); + } + + .ui-column-resizer-helper { + width: 1px; + position: absolute; + z-index: 10; + display: none; + } + + .ui-table-tbody > tr > td.ui-editing-cell { + padding: 0; + } + + .ui-table-tbody > tr > td.ui-editing-cell p-celleditor > * { + width: 100%; + } + + .ui-table-reorder-indicator-down, + .ui-table-reorder-indicator-up { + position: absolute; + display: none; + } + + .ui-table-responsive .ui-table-tbody > tr > td .ui-column-title { + display: none; + } + + @media screen and (max-width: 40em) { + .ui-table-responsive .ui-table-tfoot > tr > td, + .ui-table-responsive .ui-table-thead > tr > th, + .ui-table-responsive colgroup { + display: none !important; + } + .ui-table-responsive .ui-table-tbody > tr > td { + text-align: left; + display: block; + border: 0; + width: 100% !important; + box-sizing: border-box; + float: left; + clear: left; + } + .ui-table-responsive .ui-table-tbody > tr > td .ui-column-title { + padding: 0.4em; + min-width: 30%; + display: inline-block; + margin: -0.4em 1em -0.4em -0.4em; + font-weight: 700; + } + } + + .ui-widget { + font-family: 'Open Sans', 'Helvetica Neue', sans-serif; + font-size: 14px; + text-decoration: none; + } + + .page-item.disabled .page-link, + .page-link { + background-color: transparent; + border: none; + } + + .page-item.disabled .page-link { + box-shadow: none; + } + + .pagination { + margin-bottom: 0; + } + + .pagination-wrapper { + display: flex; + justify-content: center; + border-top: 0; + padding: 0; + } + + .op-0 { + opacity: 0; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.ts new file mode 100644 index 0000000000..0baf78f883 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.ts @@ -0,0 +1,110 @@ +import { + Component, + ElementRef, + EventEmitter, + Input, + OnInit, + Output, + TemplateRef, + TrackByFunction, + ViewChild, + ViewEncapsulation, +} from '@angular/core'; + +/** + * + * @deprecated To be deleted in v5.0. Use ngx-datatale instead. + */ +@Component({ + selector: 'abp-table', + templateUrl: 'table.component.html', + styleUrls: ['table.component.scss'], + encapsulation: ViewEncapsulation.None, +}) +export class TableComponent implements OnInit { + private _totalRecords: number; + bodyScrollLeft = 0; + + @Input() + value: any[]; + + @Input() + headerTemplate: TemplateRef; + + @Input() + bodyTemplate: TemplateRef; + + @Input() + colgroupTemplate: TemplateRef; + + @Input() + scrollHeight: string; + + @Input() + scrollable: boolean; + + @Input() + rows: number; + + @Input() + page = 1; + + @Input() + trackingProp = 'id'; + + @Input() + emptyMessage = 'AbpAccount::NoDataAvailableInDatatable'; + + @Output() + readonly pageChange = new EventEmitter(); + + @ViewChild('wrapper', { read: ElementRef }) + wrapperRef: ElementRef; + + @Input() + get totalRecords(): number { + return this._totalRecords || this.value.length; + } + set totalRecords(newValue: number) { + if (newValue < 0) this._totalRecords = 0; + + this._totalRecords = newValue; + } + + get totalPages(): number { + if (!this.rows) { + return; + } + + return Math.ceil(this.totalRecords / this.rows); + } + + get slicedValue(): any[] { + if (!this.rows || this.rows >= this.value.length) { + return this.value; + } + + const start = (this.page - 1) * this.rows; + return this.value.slice(start, start + this.rows); + } + + marginCalculator: MarginCalculator; + + trackByFn: TrackByFunction = (_, value) => { + return typeof value === 'object' ? value[this.trackingProp] || value : value; + }; + + ngOnInit() { + this.marginCalculator = document.body.dir === 'rtl' ? rtlCalculator : ltrCalculator; + } +} + +function ltrCalculator(div: HTMLDivElement): string { + return `0 auto 0 -${div.scrollLeft}px`; +} + +function rtlCalculator(div: HTMLDivElement): string { + return `0 ${-(div.scrollWidth - div.clientWidth - div.scrollLeft)}px 0 auto`; +} + +type MarginCalculator = (div: HTMLDivElement) => string; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.html new file mode 100644 index 0000000000..3dc2427f92 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.html @@ -0,0 +1,11 @@ +
+ +
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.scss b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.scss new file mode 100644 index 0000000000..281e08998d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.scss @@ -0,0 +1,13 @@ +.abp-toast-container { + position: fixed; + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-end; + min-width: 350px; + min-height: 80px; + z-index: 1900; + &.new-on-top { + flex-direction: column-reverse; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.ts new file mode 100644 index 0000000000..28d66123a9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.ts @@ -0,0 +1,46 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { toastInOut } from '../../animations/toast.animations'; +import { Toaster } from '../../models/toaster'; +import { ReplaySubject } from 'rxjs'; + +@Component({ + selector: 'abp-toast-container', + templateUrl: './toast-container.component.html', + styleUrls: ['./toast-container.component.scss'], + animations: [toastInOut], +}) +export class ToastContainerComponent implements OnInit { + toasts$: ReplaySubject; + + toasts = [] as Toaster.Toast[]; + + @Input() + top: string; + + @Input() + right = '30px'; + + @Input() + bottom = '30px'; + + @Input() + left: string; + + @Input() + toastKey: string; + + ngOnInit() { + this.toasts$.subscribe(toasts => { + this.toasts = this.toastKey + ? toasts.filter(t => { + return t.options && t.options.containerKey !== this.toastKey; + }) + : toasts; + }); + } + + trackByFunc(index, toast) { + if (!toast) return null; + return toast.options.id; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.html new file mode 100644 index 0000000000..8af75bdfc4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.html @@ -0,0 +1,17 @@ +
+
+ +
+
+ +
+ {{ toast.title | abpLocalization: toast.options?.titleLocalizationParams }} +
+

+
+
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.scss b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.scss new file mode 100644 index 0000000000..64bf8a6068 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.scss @@ -0,0 +1,81 @@ +@mixin fillColor($background, $color) { + border: 2px solid $background; + background-color: $background; + color: $color; + box-shadow: 0 0 10px -5px rgba(#000, 0.4); + &:hover { + border: 2px solid darken($background, 5); + background-color: darken($background, 5); + box-shadow: 0 0 15px -5px rgba(#000, 0.4); + } +} + +$toastClass: abp-toast; + +.#{$toastClass} { + display: grid; + grid-template-columns: 50px 1fr; + gap: 10px; + margin: 5px 0; + padding: 10px; + border-radius: 0px; + width: 350px; + user-select: none; + box-shadow: 0 0 10px -5px rgba(#000, 0.4); + z-index: 9999; + @include fillColor(#f0f0f0, #000); + opacity: 1; + &.#{$toastClass}-success { + @include fillColor(#51a351, #fff); + } + &.#{$toastClass}-info { + @include fillColor(#2f96b4, #fff); + } + &.#{$toastClass}-warning { + @include fillColor(#f89406, #fff); + } + &.#{$toastClass}-error { + @include fillColor(#bd362f, #fff); + } + .#{$toastClass}-icon { + display: flex; + align-items: center; + justify-content: center; + .icon { + font-size: 36px; + } + } + .#{$toastClass}-content { + position: relative; + .#{$toastClass}-close-button { + position: absolute; + top: 0; + right: 0; + display: flex; + align-items: center; + justify-content: center; + margin: 0; + padding: 0px 5px 0 0; + width: 25px; + height: 25px; + border: none; + border-radius: 50%; + background: transparent; + color: inherit; + &:focus { + outline: none; + } + } + .#{$toastClass}-title { + margin: 0; + padding: 0; + font-size: 1rem; + font-weight: 600; + } + .#{$toastClass}-message { + margin: 0; + padding: 0; + max-width: 240px; + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.ts new file mode 100644 index 0000000000..48298e74a0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.ts @@ -0,0 +1,52 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { Toaster } from '../../models/toaster'; +import { ToasterService } from '../../services/toaster.service'; +import snq from 'snq'; + +@Component({ + selector: 'abp-toast', + templateUrl: './toast.component.html', + styleUrls: ['./toast.component.scss'], +}) +export class ToastComponent implements OnInit { + @Input() + toast: Toaster.Toast; + + get severityClass(): string { + if (!this.toast || !this.toast.severity) return ''; + return `abp-toast-${this.toast.severity}`; + } + + get iconClass(): string { + switch (this.toast.severity) { + case 'success': + return 'fa-check-circle'; + case 'info': + return 'fa-info-circle'; + case 'warning': + return 'fa-exclamation-triangle'; + case 'error': + return 'fa-times-circle'; + default: + return 'fa-exclamation-circle'; + } + } + + constructor(private toasterService: ToasterService) {} + + ngOnInit() { + if (snq(() => this.toast.options.sticky)) return; + const timeout = snq(() => this.toast.options.life) || 5000; + setTimeout(() => { + this.close(); + }, timeout); + } + + close() { + this.toasterService.remove(this.toast.options.id); + } + + tap() { + if (this.toast.options?.tapToDismiss) this.close(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/scripts.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/scripts.ts new file mode 100644 index 0000000000..08d725cd4e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/scripts.ts @@ -0,0 +1 @@ +export default ''; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/styles.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/styles.ts new file mode 100644 index 0000000000..669fc2cbae --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/styles.ts @@ -0,0 +1,181 @@ +export default ` +.is-invalid .form-control { + border-color: #dc3545; + border-style: solid !important; + padding-right: calc(1.5em + .75rem); + background-image: url(data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e); + background-repeat: no-repeat; + background-position: right calc(.375em + .1875rem) center; + background-size: calc(.75em + .375rem) calc(.75em + .375rem); +} + +.is-invalid .invalid-feedback, +.is-invalid + * .invalid-feedback { + display: block; +} + +.data-tables-filter { + text-align: right; +} + +[dir=rtl] .data-tables-filter { + text-align: left; +} + +.pointer { + cursor: pointer; +} + +.navbar .dropdown-submenu a::after { + transform: rotate(-90deg); + position: absolute; + right: 16px; + top: 18px; +} + +.navbar .dropdown-menu { + min-width: 215px; +} + +.datatable-scroll { + margin-bottom: 5px !important; + width: unset !important; +} + +.ui-table-scrollable-body::-webkit-scrollbar { + height: 5px !important; + width: 5px !important; +} + +.ui-table-scrollable-body::-webkit-scrollbar-track { + background: #ddd; +} + +.ui-table-scrollable-body::-webkit-scrollbar-thumb { + background: #8a8686; +} + +.abp-ellipsis-inline { + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.abp-ellipsis { + overflow: hidden !important; + text-overflow: ellipsis; + white-space: nowrap; +} + +.ui-widget-overlay { + z-index: 1000; +} + +.color-white { + color: #FFF !important; +} + +.custom-checkbox > label { + cursor: pointer; +} + +/* { + if (!newValue && this.timerSubscription) { + this.timerSubscription.unsubscribe(); + this.timerSubscription = null; + this._loading = newValue; + + if (this.rootNode) { + this.renderer.removeChild(this.rootNode.parentElement, this.rootNode); + this.rootNode = null; + } + return; + } + + this.timerSubscription = timer(this.delay) + .pipe(take(1)) + .subscribe(() => { + if (!this.componentRef) { + this.componentRef = this.cdRes + .resolveComponentFactory(LoadingComponent) + .create(this.injector); + } + + if (newValue && !this.rootNode) { + this.rootNode = (this.componentRef.hostView as EmbeddedViewRef).rootNodes[0]; + this.targetElement.appendChild(this.rootNode); + } else if (this.rootNode) { + this.renderer.removeChild(this.rootNode.parentElement, this.rootNode); + this.rootNode = null; + } + + this._loading = newValue; + this.timerSubscription = null; + }); + }, 0); + } + + @Input('abpLoadingTargetElement') + targetElement: HTMLElement; + + @Input('abpLoadingDelay') + delay = 0; + + componentRef: ComponentRef; + rootNode: HTMLDivElement; + timerSubscription: Subscription; + + constructor( + private elRef: ElementRef, + private vcRef: ViewContainerRef, + private cdRes: ComponentFactoryResolver, + private injector: Injector, + private renderer: Renderer2, + ) {} + + ngOnInit() { + if (!this.targetElement) { + const { offsetHeight, offsetWidth } = this.elRef.nativeElement; + if (!offsetHeight && !offsetWidth && this.elRef.nativeElement.children.length) { + this.targetElement = this.elRef.nativeElement.children[0] as HTMLElement; + } else { + this.targetElement = this.elRef.nativeElement; + } + } + } + + ngOnDestroy() { + if (this.timerSubscription) { + this.timerSubscription.unsubscribe(); + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts new file mode 100644 index 0000000000..e8b9ffac85 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts @@ -0,0 +1,84 @@ +import { DOCUMENT } from '@angular/common'; +import { AfterViewInit, Directive, HostBinding, Inject, Input, OnDestroy } from '@angular/core'; +import { ColumnMode, DatatableComponent, ScrollerComponent } from '@swimlane/ngx-datatable'; +import { fromEvent, Subscription } from 'rxjs'; +import { debounceTime } from 'rxjs/operators'; + +@Directive({ + // tslint:disable-next-line + selector: 'ngx-datatable[default]', + exportAs: 'ngxDatatableDefault', +}) +export class NgxDatatableDefaultDirective implements AfterViewInit, OnDestroy { + private subscription = new Subscription(); + + private resizeDiff = 0; + + @Input() class = 'material bordered'; + + @HostBinding('class') + get classes(): string { + return `ngx-datatable ${this.class}`; + } + + constructor(private table: DatatableComponent, @Inject(DOCUMENT) private document: MockDocument) { + this.table.columnMode = ColumnMode.force; + this.table.footerHeight = 50; + this.table.headerHeight = 50; + this.table.rowHeight = 'auto'; + this.table.scrollbarH = true; + this.table.virtualization = false; + } + + private fixHorizontalGap(scroller: ScrollerComponent) { + const { body, documentElement } = this.document; + + if (documentElement.scrollHeight !== documentElement.clientHeight) { + if (this.resizeDiff === 0) { + this.resizeDiff = window.innerWidth - body.offsetWidth; + scroller.scrollWidth -= this.resizeDiff; + } + } else { + scroller.scrollWidth += this.resizeDiff; + this.resizeDiff = 0; + } + } + + private fixStyleOnWindowResize() { + // avoided @HostListener('window:resize') in favor of performance + const subscription = fromEvent(window, 'resize') + .pipe(debounceTime(500)) + .subscribe(() => { + const { scroller } = this.table.bodyComponent; + + if (!scroller) return; + + this.fixHorizontalGap(scroller); + }); + + this.subscription.add(subscription); + } + + ngAfterViewInit() { + this.fixStyleOnWindowResize(); + } + + ngOnDestroy() { + this.subscription.unsubscribe(); + } +} + +// fix: https://github.com/angular/angular/issues/20351 +interface MockDocument { + body: MockBody; + documentElement: MockDocumentElement; +} + +interface MockBody { + offsetWidth: number; +} + +interface MockDocumentElement { + clientHeight: number; + scrollHeight: number; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts new file mode 100644 index 0000000000..cf800db556 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts @@ -0,0 +1,106 @@ +import { ListService, LocalizationService } from '@abp/ng.core'; +import { + ChangeDetectorRef, + Directive, + Inject, + Input, + OnChanges, + OnDestroy, + OnInit, + Optional, + SimpleChanges, +} from '@angular/core'; +import { DatatableComponent } from '@swimlane/ngx-datatable'; +import { Subscription } from 'rxjs'; +import { + defaultNgxDatatableMessages, + NgxDatatableMessages, + NGX_DATATABLE_MESSAGES, +} from '../tokens/ngx-datatable-messages.token'; + +@Directive({ + // tslint:disable-next-line + selector: 'ngx-datatable[list]', + exportAs: 'ngxDatatableList', +}) +export class NgxDatatableListDirective implements OnChanges, OnDestroy, OnInit { + private subscription = new Subscription(); + private querySubscription = new Subscription(); + + @Input() list: ListService; + + constructor( + private table: DatatableComponent, + private cdRef: ChangeDetectorRef, + private localizationService: LocalizationService, + @Optional() @Inject(NGX_DATATABLE_MESSAGES) private ngxDatatableMessages: NgxDatatableMessages, + ) { + this.setInitialValues(); + } + + private setInitialValues() { + this.table.externalPaging = true; + this.table.externalSorting = true; + + const { emptyMessage, selectedMessage, totalMessage } = + this.ngxDatatableMessages || defaultNgxDatatableMessages; + + this.table.messages = { + emptyMessage: this.localizationService.instant(emptyMessage), + totalMessage: this.localizationService.instant(totalMessage), + selectedMessage: this.localizationService.instant(selectedMessage), + }; + } + + private subscribeToPage() { + const sub = this.table.page.subscribe(({ offset }) => { + this.list.page = offset; + this.table.offset = offset; + }); + this.subscription.add(sub); + } + + private subscribeToSort() { + const sub = this.table.sort.subscribe(({ sorts: [{ prop, dir }] }) => { + if (prop === this.list.sortKey && this.list.sortOrder === 'desc') { + this.list.sortKey = ''; + this.list.sortOrder = ''; + this.table.sorts = []; + this.cdRef.detectChanges(); + } else { + this.list.sortKey = prop; + this.list.sortOrder = dir; + } + }); + this.subscription.add(sub); + } + + private subscribeToQuery() { + if (!this.querySubscription.closed) this.querySubscription.unsubscribe(); + + this.querySubscription = this.list.query$.subscribe(() => { + const offset = this.list.page; + if (this.table.offset !== offset) this.table.offset = offset; + }); + } + + ngOnChanges({ list }: SimpleChanges) { + this.subscribeToQuery(); + + if (!list.firstChange) return; + + const { maxResultCount, page } = list.currentValue; + this.table.limit = maxResultCount; + this.table.offset = page; + } + + ngOnDestroy() { + this.subscription.unsubscribe(); + this.querySubscription.unsubscribe(); + } + + ngOnInit() { + this.subscribeToPage(); + this.subscribeToSort(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/table-sort.directive.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/table-sort.directive.ts new file mode 100644 index 0000000000..011768be7b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/table-sort.directive.ts @@ -0,0 +1,58 @@ +import { SortOrder, SortPipe } from '@abp/ng.core'; +import { + ChangeDetectorRef, + Directive, + Host, + Input, + OnChanges, + Optional, + Self, + SimpleChanges, +} from '@angular/core'; +import clone from 'just-clone'; +import snq from 'snq'; +import { TableComponent } from '../components/table/table.component'; + +export interface TableSortOptions { + key: string; + order: SortOrder; +} + +/** + * + * @deprecated To be deleted in v5.0 + */ +@Directive({ + selector: '[abpTableSort]', + providers: [SortPipe], +}) +export class TableSortDirective implements OnChanges { + @Input() + abpTableSort: TableSortOptions; + + @Input() + value: any[] = []; + + get table(): TableComponent | any { + return ( + this.abpTable || snq(() => this.cdRef['_view'].component) || snq(() => this.cdRef['context']) // 'context' for ivy + ); + } + + constructor( + @Host() @Optional() @Self() private abpTable: TableComponent, + private sortPipe: SortPipe, + private cdRef: ChangeDetectorRef, + ) {} + + ngOnChanges({ value, abpTableSort }: SimpleChanges) { + if (this.table && (value || abpTableSort)) { + this.abpTableSort = this.abpTableSort || ({} as TableSortOptions); + this.table.value = this.sortPipe.transform( + clone(this.value), + this.abpTableSort.order, + this.abpTableSort.key, + ); + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/enums/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/enums/index.ts new file mode 100644 index 0000000000..3bda94b078 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/enums/index.ts @@ -0,0 +1 @@ +export * from './route-names'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/enums/route-names.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/enums/route-names.ts new file mode 100644 index 0000000000..0be2894fd3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/enums/route-names.ts @@ -0,0 +1,3 @@ +export const enum eThemeSharedRouteNames { + Administration = 'AbpUiNavigation::Menu:Administration', +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/error.handler.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/error.handler.ts new file mode 100644 index 0000000000..8d61c4c899 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/error.handler.ts @@ -0,0 +1,338 @@ +import { AuthService, LocalizationParam, RestOccurError, RouterEvents } from '@abp/ng.core'; +import { HttpErrorResponse } from '@angular/common/http'; +import { + ApplicationRef, + ComponentFactoryResolver, + ComponentRef, + EmbeddedViewRef, + Inject, + Injectable, + Injector, + RendererFactory2, +} from '@angular/core'; +import { NavigationError, ResolveEnd } from '@angular/router'; +import { Actions, ofActionSuccessful } from '@ngxs/store'; +import { Observable, of, Subject, throwError } from 'rxjs'; +import { catchError, filter, map, switchMap } from 'rxjs/operators'; +import snq from 'snq'; +import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http-error-wrapper.component'; +import { ErrorScreenErrorCodes, HttpErrorConfig } from '../models/common'; +import { Confirmation } from '../models/confirmation'; +import { ConfirmationService } from '../services/confirmation.service'; +import { HTTP_ERROR_HANDLER } from '../tokens/http-error.token'; + +export const DEFAULT_ERROR_MESSAGES = { + defaultError: { + title: 'An error has occurred!', + details: 'Error detail not sent by server.', + }, + defaultError401: { + title: 'You are not authenticated!', + details: 'You should be authenticated (sign in) in order to perform this operation.', + }, + defaultError403: { + title: 'You are not authorized!', + details: 'You are not allowed to perform this operation.', + }, + defaultError404: { + title: 'Resource not found!', + details: 'The resource requested could not found on the server.', + }, + defaultError500: { + title: 'Internal server error', + details: 'Error detail not sent by server.', + }, +}; + +export const DEFAULT_ERROR_LOCALIZATIONS = { + defaultError: { + title: 'AbpUi::DefaultErrorMessage', + details: 'AbpUi::DefaultErrorMessageDetail', + }, + defaultError401: { + title: 'AbpUi::DefaultErrorMessage401', + details: 'AbpUi::DefaultErrorMessage401Detail', + }, + defaultError403: { + title: 'AbpUi::DefaultErrorMessage403', + details: 'AbpUi::DefaultErrorMessage403Detail', + }, + defaultError404: { + title: 'AbpUi::DefaultErrorMessage404', + details: 'AbpUi::DefaultErrorMessage404Detail', + }, + defaultError500: { + title: 'AbpUi::500Message', + details: 'AbpUi::DefaultErrorMessage', + }, +}; + +@Injectable({ providedIn: 'root' }) +export class ErrorHandler { + componentRef: ComponentRef; + + protected httpErrorHandler = this.injector.get(HTTP_ERROR_HANDLER, (_, err: HttpErrorResponse) => + throwError(err), + ); + + constructor( + protected actions: Actions, + protected routerEvents: RouterEvents, + protected confirmationService: ConfirmationService, + protected cfRes: ComponentFactoryResolver, + protected rendererFactory: RendererFactory2, + protected injector: Injector, + @Inject('HTTP_ERROR_CONFIG') protected httpErrorConfig: HttpErrorConfig, + ) { + this.listenToRestError(); + this.listenToRouterError(); + this.listenToRouterDataResolved(); + } + + protected listenToRouterError() { + this.routerEvents + .getNavigationEvents('Error') + .pipe(filter(this.filterRouteErrors)) + .subscribe(() => this.show404Page()); + } + + protected listenToRouterDataResolved() { + this.routerEvents + .getEvents(ResolveEnd) + .pipe(filter(() => !!this.componentRef)) + .subscribe(() => { + this.componentRef.destroy(); + this.componentRef = null; + }); + } + + protected listenToRestError() { + this.actions + .pipe( + ofActionSuccessful(RestOccurError), + map(action => action.payload), + filter(this.filterRestErrors), + switchMap(this.executeErrorHandler), + ) + .subscribe(); + } + + private executeErrorHandler = error => { + const returnValue = this.httpErrorHandler(this.injector, error); + + return (returnValue instanceof Observable ? returnValue : of(null)).pipe( + catchError(err => { + this.handleError(err); + return of(null); + }), + ); + }; + + private handleError(err: any) { + const body = snq(() => err.error.error, { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, + }); + + if (err instanceof HttpErrorResponse && err.headers.get('_AbpErrorFormat')) { + const confirmation$ = this.showError(null, null, body); + + if (err.status === 401) { + confirmation$.subscribe(() => { + this.navigateToLogin(); + }); + } + } else { + switch (err.status) { + case 401: + this.canCreateCustomError(401) + ? this.show401Page() + : this.showError( + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title, + }, + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.details, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.details, + }, + ).subscribe(() => this.navigateToLogin()); + break; + case 403: + this.createErrorComponent({ + title: { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError403.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.title, + }, + details: { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError403.details, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.details, + }, + status: 403, + }); + break; + case 404: + this.canCreateCustomError(404) + ? this.show404Page() + : this.showError( + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.details, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.details, + }, + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title, + }, + ); + break; + case 500: + this.createErrorComponent({ + title: { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError500.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.title, + }, + details: { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError500.details, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.details, + }, + status: 500, + }); + break; + case 0: + if (err.statusText === 'Unknown Error') { + this.createErrorComponent({ + title: { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, + }, + details: err.message, + isHomeShow: false, + }); + } + break; + default: + this.showError( + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.details, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.details, + }, + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, + }, + ); + break; + } + } + } + + protected show401Page() { + this.createErrorComponent({ + title: { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title, + }, + status: 401, + }); + } + + protected show404Page() { + this.createErrorComponent({ + title: { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title, + }, + status: 404, + }); + } + + protected showError( + message?: LocalizationParam, + title?: LocalizationParam, + body?: any, + ): Observable { + if (body) { + if (body.details) { + message = body.details; + title = body.message; + } else if (body.message) { + title = { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, + }; + message = body.message; + } else { + message = body.message || { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, + }; + } + } + + return this.confirmationService.error(message, title, { + hideCancelBtn: true, + yesText: 'AbpAccount::Close', + }); + } + + private navigateToLogin() { + this.injector.get(AuthService).navigateToLogin(); + } + + createErrorComponent(instance: Partial) { + const renderer = this.rendererFactory.createRenderer(null, null); + const host = renderer.selectRootElement(document.body, true); + + this.componentRef = this.cfRes + .resolveComponentFactory(HttpErrorWrapperComponent) + .create(this.injector); + + for (const key in instance) { + /* istanbul ignore else */ + if (this.componentRef.instance.hasOwnProperty(key)) { + this.componentRef.instance[key] = instance[key]; + } + } + + this.componentRef.instance.hideCloseIcon = this.httpErrorConfig.errorScreen.hideCloseIcon; + const appRef = this.injector.get(ApplicationRef); + + if (this.canCreateCustomError(instance.status as ErrorScreenErrorCodes)) { + this.componentRef.instance.cfRes = this.cfRes; + this.componentRef.instance.appRef = appRef; + this.componentRef.instance.injector = this.injector; + this.componentRef.instance.customComponent = this.httpErrorConfig.errorScreen.component; + } + + appRef.attachView(this.componentRef.hostView); + renderer.appendChild(host, (this.componentRef.hostView as EmbeddedViewRef).rootNodes[0]); + + const destroy$ = new Subject(); + this.componentRef.instance.destroy$ = destroy$; + destroy$.subscribe(() => { + this.componentRef.destroy(); + this.componentRef = null; + }); + } + + canCreateCustomError(status: ErrorScreenErrorCodes): boolean { + return snq( + () => + this.httpErrorConfig.errorScreen.component && + this.httpErrorConfig.errorScreen.forWhichErrors.indexOf(status) > -1, + ); + } + + protected filterRestErrors = ({ status }: HttpErrorResponse): boolean => { + if (typeof status !== 'number') return false; + + return this.httpErrorConfig.skipHandledErrorCodes.findIndex(code => code === status) < 0; + }; + + protected filterRouteErrors = (navigationError: NavigationError): boolean => { + return ( + snq(() => navigationError.error.message.indexOf('Cannot match') > -1) && + this.httpErrorConfig.skipHandledErrorCodes.findIndex(code => code === 404) < 0 + ); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/index.ts new file mode 100644 index 0000000000..11eb07398e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/index.ts @@ -0,0 +1,2 @@ +export * from './error.handler'; +export * from './lazy-style.handler'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/lazy-style.handler.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/lazy-style.handler.ts new file mode 100644 index 0000000000..79bed70563 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/lazy-style.handler.ts @@ -0,0 +1,111 @@ +import { + getLocaleDirection, + LazyLoadService, + LOADING_STRATEGY, + LocalizationService, +} from '@abp/ng.core'; +import { Injectable, Injector } from '@angular/core'; +import { map, startWith } from 'rxjs/operators'; +import { BOOTSTRAP } from '../constants/styles'; +import { LocaleDirection } from '../models/common'; +import { LAZY_STYLES } from '../tokens/lazy-styles.token'; + +@Injectable({ + providedIn: 'root', +}) +export class LazyStyleHandler { + private lazyLoad: LazyLoadService; + private styles: string[]; + private _dir: LocaleDirection = 'ltr'; + + readonly loaded = new Map(); + + set dir(dir: LocaleDirection) { + if (dir === this._dir) return; + + this.switchCSS(dir); + this.setBodyDir(dir); + this._dir = dir; + } + + get dir(): LocaleDirection { + return this._dir; + } + + constructor(injector: Injector) { + this.setStyles(injector); + this.setLazyLoad(injector); + this.listenToLanguageChanges(injector); + } + + private getHrefFromLink(link: HTMLLinkElement | null): string { + if (!link) return ''; + + const a = document.createElement('a'); + a.href = link.href; + return a.pathname.replace(/^\//, ''); + } + + private getLoadedBootstrap(): LoadedStyle { + const href = createLazyStyleHref(BOOTSTRAP, this.dir); + const selector = `[href*="${href.replace(/\.css$/, '')}"]`; + const link = document.querySelector(selector); + return { href, link }; + } + + private listenToLanguageChanges(injector: Injector) { + const l10n = injector.get(LocalizationService); + + // will always listen, no need to unsubscribe + l10n.languageChange$.pipe(startWith(l10n.currentLang)).subscribe(locale => { + this.dir = getLocaleDirection(locale); + }); + } + + private setBodyDir(dir: LocaleDirection) { + document.body.dir = dir; + } + + private setLazyLoad(injector: Injector) { + this.lazyLoad = injector.get(LazyLoadService); + const { href, link } = this.getLoadedBootstrap(); + this.lazyLoad.loaded.set(href, link); + } + + private setStyles(injector: Injector) { + this.styles = injector.get(LAZY_STYLES, [BOOTSTRAP]); + } + + private switchCSS(dir: LocaleDirection) { + this.styles.forEach(style => { + const oldHref = createLazyStyleHref(style, this.dir); + const newHref = createLazyStyleHref(style, dir); + const link = this.loaded.get(newHref); + const href = this.getHrefFromLink(link) || newHref; + + const strategy = LOADING_STRATEGY.PrependAnonymousStyleToHead(href); + this.lazyLoad.load(strategy).subscribe(() => { + const oldLink = this.lazyLoad.loaded.get(oldHref) as HTMLLinkElement; + this.loaded.delete(newHref); + this.loaded.set(oldHref, oldLink); + const newLink = this.lazyLoad.loaded.get(href) as HTMLLinkElement; + this.lazyLoad.loaded.delete(href); + this.lazyLoad.loaded.set(newHref, newLink); + this.lazyLoad.remove(oldHref); + }); + }); + } +} + +export function createLazyStyleHref(style: string, dir: string): string { + return style.replace(/{{\s*dir\s*}}/g, dir); +} + +export function initLazyStyleHandler(injector: Injector) { + return () => new LazyStyleHandler(injector); +} + +interface LoadedStyle { + href: string; + link: HTMLLinkElement; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/common.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/common.ts new file mode 100644 index 0000000000..0e8dd9e592 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/common.ts @@ -0,0 +1,27 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { Injector, Type } from '@angular/core'; +import { Validation } from '@ngx-validate/core'; +import { Observable } from 'rxjs'; + +export interface RootParams { + httpErrorConfig: HttpErrorConfig; + validation?: Partial; +} + +export type ErrorScreenErrorCodes = 401 | 403 | 404 | 500; + +export interface HttpErrorConfig { + skipHandledErrorCodes?: ErrorScreenErrorCodes[] | number[]; + errorScreen?: { + component: Type; + forWhichErrors?: ErrorScreenErrorCodes[]; + hideCloseIcon?: boolean; + }; +} + +export type HttpErrorHandler = ( + injector: Injector, + httpError: HttpErrorResponse, +) => Observable; + +export type LocaleDirection = 'ltr' | 'rtl'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/confirmation.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/confirmation.ts new file mode 100644 index 0000000000..ad2ceb7545 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/confirmation.ts @@ -0,0 +1,29 @@ +import { Config, LocalizationParam } from '@abp/ng.core'; + +export namespace Confirmation { + export interface Options { + id?: any; + dismissible?: boolean; + messageLocalizationParams?: string[]; + titleLocalizationParams?: string[]; + hideCancelBtn?: boolean; + hideYesBtn?: boolean; + cancelText?: LocalizationParam; + yesText?: LocalizationParam; + } + + export interface DialogData { + message: Config.LocalizationParam; + title?: Config.LocalizationParam; + severity?: Severity; + options?: Partial; + } + + export type Severity = 'neutral' | 'success' | 'info' | 'warning' | 'error'; + + export enum Status { + confirm = 'confirm', + reject = 'reject', + dismiss = 'dismiss', + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/index.ts new file mode 100644 index 0000000000..d1e2e71c5c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/index.ts @@ -0,0 +1,5 @@ +export * from './common'; +export * from './confirmation'; +export * from './statistics'; +export * from './toaster'; +export * from './nav-item'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/nav-item.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/nav-item.ts new file mode 100644 index 0000000000..7fcb154cbf --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/nav-item.ts @@ -0,0 +1,15 @@ +import { Type } from '@angular/core'; + +export class NavItem { + id: string | number; + component?: Type; + html?: string; + action?: () => void; + order?: number; + requiredPolicy?: string; + visible?: () => boolean; + constructor(props: Partial) { + props = { ...props, visible: props.visible || (() => true) }; + Object.assign(this, props); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/statistics.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/statistics.ts new file mode 100644 index 0000000000..65bd5dfa8f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/statistics.ts @@ -0,0 +1,14 @@ +export namespace Statistics { + export interface Response { + data: Data; + } + + export interface Data { + [key: string]: number; + } + + export interface Filter { + startDate: string | Date; + endDate: string | Date; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/toaster.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/toaster.ts new file mode 100644 index 0000000000..1cd4e18bea --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/toaster.ts @@ -0,0 +1,55 @@ +import { Config, LocalizationParam } from '@abp/ng.core'; + +export namespace Toaster { + export interface ToastOptions { + life?: number; + sticky?: boolean; + closable?: boolean; + tapToDismiss?: boolean; + messageLocalizationParams?: string[]; + titleLocalizationParams?: string[]; + id: any; + containerKey?: string; + } + + export interface Toast { + message: LocalizationParam; + title?: LocalizationParam; + severity?: string; + options?: ToastOptions; + } + + export type Severity = 'neutral' | 'success' | 'info' | 'warning' | 'error'; + export type ToasterId = string | number; + + export interface Service { + show: ( + message: LocalizationParam, + title: LocalizationParam, + severity: Toaster.Severity, + options: Partial, + ) => ToasterId; + remove: (id: number) => void; + clear: (containerKey?: string) => void; + info: ( + message: Config.LocalizationParam, + title?: Config.LocalizationParam, + options?: Partial, + ) => ToasterId; + success: ( + message: Config.LocalizationParam, + title?: Config.LocalizationParam, + options?: Partial, + ) => ToasterId; + warn: ( + message: Config.LocalizationParam, + title?: Config.LocalizationParam, + options?: Partial, + ) => ToasterId; + error: ( + message: Config.LocalizationParam, + title?: Config.LocalizationParam, + options?: Partial, + ) => ToasterId; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/index.ts new file mode 100644 index 0000000000..40efb9df39 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/index.ts @@ -0,0 +1,2 @@ +export * from './ng-bootstrap-config.provider'; +export * from './route.provider'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/ng-bootstrap-config.provider.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/ng-bootstrap-config.provider.ts new file mode 100644 index 0000000000..be60e9b2f6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/ng-bootstrap-config.provider.ts @@ -0,0 +1,21 @@ +import { APP_INITIALIZER } from '@angular/core'; +import { NgbInputDatepickerConfig, NgbTypeaheadConfig } from '@ng-bootstrap/ng-bootstrap'; + +export const NG_BOOTSTRAP_CONFIG_PROVIDERS = [ + { + provide: APP_INITIALIZER, + useFactory: configureNgBootstrap, + deps: [NgbInputDatepickerConfig, NgbTypeaheadConfig], + multi: true, + }, +]; + +export function configureNgBootstrap( + datepicker: NgbInputDatepickerConfig, + typeahead: NgbTypeaheadConfig, +) { + return () => { + datepicker.container = 'body'; + typeahead.container = 'body'; + }; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/route.provider.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/route.provider.ts new file mode 100644 index 0000000000..577d688c4e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/route.provider.ts @@ -0,0 +1,20 @@ +import { RoutesService } from '@abp/ng.core'; +import { APP_INITIALIZER } from '@angular/core'; +import { eThemeSharedRouteNames } from '../enums/route-names'; + +export const THEME_SHARED_ROUTE_PROVIDERS = [ + { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, +]; + +export function configureRoutes(routesService: RoutesService) { + return () => { + routesService.add([ + { + path: undefined, + name: eThemeSharedRouteNames.Administration, + iconClass: 'fa fa-wrench', + order: 100, + }, + ]); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/confirmation.service.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/confirmation.service.ts new file mode 100644 index 0000000000..e2556d311a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/confirmation.service.ts @@ -0,0 +1,100 @@ +import { ContentProjectionService, LocalizationParam, PROJECTION_STRATEGY } from '@abp/ng.core'; +import { ComponentRef, Injectable } from '@angular/core'; +import { fromEvent, Observable, ReplaySubject, Subject } from 'rxjs'; +import { debounceTime, filter, takeUntil } from 'rxjs/operators'; +import { ConfirmationComponent } from '../components/confirmation/confirmation.component'; +import { Confirmation } from '../models/confirmation'; + +@Injectable({ providedIn: 'root' }) +export class ConfirmationService { + status$: Subject; + confirmation$ = new ReplaySubject(1); + + private containerComponentRef: ComponentRef; + + clear = (status: Confirmation.Status = Confirmation.Status.dismiss) => { + this.confirmation$.next(); + this.status$.next(status); + }; + + constructor(private contentProjectionService: ContentProjectionService) {} + + private setContainer() { + this.containerComponentRef = this.contentProjectionService.projectContent( + PROJECTION_STRATEGY.AppendComponentToBody(ConfirmationComponent, { + confirmation$: this.confirmation$, + clear: this.clear, + }), + ); + + setTimeout(() => { + this.containerComponentRef.changeDetectorRef.detectChanges(); + }, 0); + } + + info( + message: LocalizationParam, + title: LocalizationParam, + options?: Partial, + ): Observable { + return this.show(message, title, 'info', options); + } + + success( + message: LocalizationParam, + title: LocalizationParam, + options?: Partial, + ): Observable { + return this.show(message, title, 'success', options); + } + + warn( + message: LocalizationParam, + title: LocalizationParam, + options?: Partial, + ): Observable { + return this.show(message, title, 'warning', options); + } + + error( + message: LocalizationParam, + title: LocalizationParam, + options?: Partial, + ): Observable { + return this.show(message, title, 'error', options); + } + + show( + message: LocalizationParam, + title: LocalizationParam, + severity?: Confirmation.Severity, + options = {} as Partial, + ): Observable { + if (!this.containerComponentRef) this.setContainer(); + + this.confirmation$.next({ + message, + title, + severity: severity || 'neutral', + options, + }); + + this.status$ = new Subject(); + const { dismissible = true } = options; + if (dismissible) this.listenToEscape(); + + return this.status$; + } + + private listenToEscape() { + fromEvent(document, 'keyup') + .pipe( + takeUntil(this.status$), + debounceTime(150), + filter((key: KeyboardEvent) => key && key.key === 'Escape'), + ) + .subscribe(_ => { + this.clear(); + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/index.ts new file mode 100644 index 0000000000..1b39fcc0f0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/index.ts @@ -0,0 +1,5 @@ +export * from './confirmation.service'; +export * from './modal.service'; +export * from './toaster.service'; +export * from './nav-items.service'; +export * from './page-alert.service'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/modal.service.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/modal.service.ts new file mode 100644 index 0000000000..a75cfe5089 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/modal.service.ts @@ -0,0 +1,54 @@ +import { ContentProjectionService, PROJECTION_STRATEGY } from '@abp/ng.core'; +import { ComponentRef, Injectable, TemplateRef, ViewContainerRef, OnDestroy } from '@angular/core'; +import { ModalContainerComponent } from '../components/modal/modal-container.component'; + +/** + * @deprecated Use ng-bootstrap modal. To be deleted in v5.0. + */ +@Injectable({ + providedIn: 'root', +}) +export class ModalService implements OnDestroy { + private containerComponentRef: ComponentRef; + + constructor(private contentProjectionService: ContentProjectionService) { + this.setContainer(); + } + + private setContainer() { + this.containerComponentRef = this.contentProjectionService.projectContent( + PROJECTION_STRATEGY.AppendComponentToBody(ModalContainerComponent), + ); + + this.containerComponentRef.changeDetectorRef.detectChanges(); + } + + clearModal() { + this.getContainer().clear(); + this.detectChanges(); + } + + detectChanges() { + this.containerComponentRef.changeDetectorRef.detectChanges(); + } + + getContainer(): ViewContainerRef { + return this.containerComponentRef.instance.container; + } + + renderTemplate(template: TemplateRef, context?: T) { + const containerRef = this.getContainer(); + + const strategy = PROJECTION_STRATEGY.ProjectTemplateToContainer( + template, + containerRef, + context, + ); + + this.contentProjectionService.projectContent(strategy); + } + + ngOnDestroy() { + this.containerComponentRef.destroy(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/nav-items.service.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/nav-items.service.ts new file mode 100644 index 0000000000..ca361a2940 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/nav-items.service.ts @@ -0,0 +1,50 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { NavItem } from '../models/nav-item'; + +@Injectable({ providedIn: 'root' }) +export class NavItemsService { + private _items$ = new BehaviorSubject([]); + + get items(): NavItem[] { + return this._items$.value; + } + + get items$(): Observable { + return this._items$.asObservable(); + } + + addItems(newItems: NavItem[]) { + const items = [...this.items]; + newItems.forEach(item => items.push(new NavItem(item))); + items.sort(sortItems); + this._items$.next(items); + } + + removeItem(id: string | number) { + const index = this.items.findIndex(item => item.id === id); + + if (index < 0) return; + + const items = [...this.items.slice(0, index), ...this.items.slice(index + 1)]; + this._items$.next(items); + } + + patchItem(id: string | number, item: Partial>) { + const index = this.items.findIndex(i => i.id === id); + + if (index < 0) return; + + const items = [...this.items]; + items[index] = new NavItem({ ...items[index], ...item }); + items.sort(sortItems); + this._items$.next(items); + } +} + +function sortItems(a: NavItem, b: NavItem) { + if (!a.order) return 1; + if (!b.order) return -1; + + return a.order - b.order; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/page-alert.service.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/page-alert.service.ts new file mode 100644 index 0000000000..c66d02c004 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/page-alert.service.ts @@ -0,0 +1,34 @@ +import { Injectable } from '@angular/core'; +import { InternalStore } from '@abp/ng.core'; + +export interface PageAlert { + type: 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark'; + message: string; + dismissible?: boolean; + title?: string; + messageLocalizationParams?: string[]; + titleLocalizationParams?: string[]; +} + +@Injectable({ providedIn: 'root' }) +export class PageAlertService { + private alerts = new InternalStore([]); + + alerts$ = this.alerts.sliceState(state => state); + + constructor() {} + + show(alert: PageAlert) { + const newAlert: PageAlert = { + ...alert, + dismissible: alert.dismissible ?? true, + }; + this.alerts.set([newAlert, ...this.alerts.state]); + } + + remove(index: number) { + const alerts = [...this.alerts.state]; + alerts.splice(index, 1); + this.alerts.set(alerts); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/toaster.service.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/toaster.service.ts new file mode 100644 index 0000000000..efd04b6ba0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/toaster.service.ts @@ -0,0 +1,138 @@ +import { + ContentProjectionService, + LocalizationParam, + PROJECTION_STRATEGY, + Strict, +} from '@abp/ng.core'; +import { ComponentRef, Injectable } from '@angular/core'; +import { ReplaySubject } from 'rxjs'; +import snq from 'snq'; +import { ToastContainerComponent } from '../components/toast-container/toast-container.component'; +import { Toaster } from '../models'; + +@Injectable({ + providedIn: 'root', +}) +export class ToasterService implements ToasterContract { + private toasts$ = new ReplaySubject(1); + + private lastId = -1; + + private toasts = [] as Toaster.Toast[]; + + private containerComponentRef: ComponentRef; + + constructor(private contentProjectionService: ContentProjectionService) {} + + private setContainer() { + this.containerComponentRef = this.contentProjectionService.projectContent( + PROJECTION_STRATEGY.AppendComponentToBody(ToastContainerComponent, { toasts$: this.toasts$ }), + ); + + this.containerComponentRef.changeDetectorRef.detectChanges(); + } + + /** + * Creates an info toast with given parameters. + * @param message Content of the toast + * @param title Title of the toast + * @param options Spesific style or structural options for individual toast + */ + info( + message: LocalizationParam, + title?: LocalizationParam, + options?: Partial, + ): Toaster.ToasterId { + return this.show(message, title, 'info', options); + } + + /** + * Creates a success toast with given parameters. + * @param message Content of the toast + * @param title Title of the toast + * @param options Spesific style or structural options for individual toast + */ + success( + message: LocalizationParam, + title?: LocalizationParam, + options?: Partial, + ): Toaster.ToasterId { + return this.show(message, title, 'success', options); + } + + /** + * Creates a warning toast with given parameters. + * @param message Content of the toast + * @param title Title of the toast + * @param options Spesific style or structural options for individual toast + */ + warn( + message: LocalizationParam, + title?: LocalizationParam, + options?: Partial, + ): Toaster.ToasterId { + return this.show(message, title, 'warning', options); + } + + /** + * Creates an error toast with given parameters. + * @param message Content of the toast + * @param title Title of the toast + * @param options Spesific style or structural options for individual toast + */ + error( + message: LocalizationParam, + title?: LocalizationParam, + options?: Partial, + ): Toaster.ToasterId { + return this.show(message, title, 'error', options); + } + + /** + * Creates a toast with given parameters. + * @param message Content of the toast + * @param title Title of the toast + * @param severity Sets color of the toast. "success", "warning" etc. + * @param options Spesific style or structural options for individual toast + */ + + show( + message: LocalizationParam, + title: LocalizationParam = null, + severity: Toaster.Severity = 'neutral', + options = {} as Partial, + ): Toaster.ToasterId { + if (!this.containerComponentRef) this.setContainer(); + + const id = ++this.lastId; + this.toasts.push({ + message, + title, + severity, + options: { closable: true, id, ...options }, + }); + this.toasts$.next(this.toasts); + return id; + } + + /** + * Removes the toast with given id. + * @param id ID of the toast to be removed. + */ + remove(id: number): void { + this.toasts = this.toasts.filter(toast => snq(() => toast.options.id) !== id); + this.toasts$.next(this.toasts); + } + + /** + * Removes all open toasts at once. + */ + clear(containerKey?: string): void { + this.toasts = !containerKey + ? [] + : this.toasts.filter(toast => snq(() => toast.options.containerKey) !== containerKey); + this.toasts$.next(this.toasts); + } +} + +export type ToasterContract = Strict; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/append-content.token.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/append-content.token.spec.ts new file mode 100644 index 0000000000..fe3b0ac37c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/append-content.token.spec.ts @@ -0,0 +1,30 @@ +import { Component } from '@angular/core'; +import { createComponentFactory, Spectator } from '@ngneat/spectator'; +import { THEME_SHARED_APPEND_CONTENT } from '../tokens/append-content.token'; +import { DomInsertionService } from '@abp/ng.core'; +import { chartJsLoaded$ } from '../utils'; +import styles from '../constants/styles'; + +@Component({ selector: 'abp-dummy', template: '' }) +class DummyComponent {} + +describe('AppendContentToken', () => { + let spectator: Spectator; + const createComponent = createComponentFactory(DummyComponent); + + beforeEach(() => (spectator = createComponent())); + + it('should insert a style element to the DOM', () => { + spectator.inject(THEME_SHARED_APPEND_CONTENT); + expect(spectator.inject(DomInsertionService).has(styles)).toBe(true); + }); + + it('should be loaded the chart.js', done => { + chartJsLoaded$.subscribe(loaded => { + expect(loaded).toBe(true); + done(); + }); + + spectator.inject(THEME_SHARED_APPEND_CONTENT); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/breadcrumb.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/breadcrumb.component.spec.ts new file mode 100644 index 0000000000..87487f9b04 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/breadcrumb.component.spec.ts @@ -0,0 +1,84 @@ +import { + ABP, + CORE_OPTIONS, + LocalizationPipe, + RouterOutletComponent, + RoutesService, +} from '@abp/ng.core'; +import { HttpClient } from '@angular/common/http'; +import { RouterModule } from '@angular/router'; +import { createRoutingFactory, SpectatorRouting, SpyObject } from '@ngneat/spectator/jest'; +import { Store } from '@ngxs/store'; +import { mockRoutesService } from '../../../../core/src/lib/tests/routes.service.spec'; +import { BreadcrumbComponent } from '../components/breadcrumb/breadcrumb.component'; + +const mockRoutes: ABP.Route[] = [ + { name: 'Identity', path: '/identity' }, + { name: 'Users', path: '/identity/users', parentName: 'Identity' }, +]; + +describe('BreadcrumbComponent', () => { + let spectator: SpectatorRouting; + let routes: RoutesService; + let store: SpyObject; + + const createRouting = createRoutingFactory({ + component: RouterOutletComponent, + stubsEnabled: false, + detectChanges: false, + mocks: [Store, HttpClient], + providers: [ + { provide: CORE_OPTIONS, useValue: {} }, + { + provide: RoutesService, + useFactory: () => mockRoutesService(), + }, + ], + declarations: [LocalizationPipe, BreadcrumbComponent], + imports: [RouterModule], + routes: [ + { + path: '', + children: [ + { + path: 'identity', + children: [ + { + path: 'users', + component: BreadcrumbComponent, + }, + ], + }, + ], + }, + ], + }); + + beforeEach(() => { + spectator = createRouting(); + routes = spectator.inject(RoutesService); + store = spectator.inject(Store); + }); + + it('should display the breadcrumb', async () => { + routes.add(mockRoutes); + await spectator.router.navigateByUrl('/identity/users'); + // for abpLocalization + store.selectSnapshot.mockReturnValueOnce('Identity'); + store.selectSnapshot.mockReturnValueOnce('Users'); + spectator.detectChanges(); + + const elements = spectator.queryAll('li'); + expect(elements).toHaveLength(3); + expect(elements[1]).toHaveText('Identity'); + expect(elements[2]).toHaveText('Users'); + }); + + it('should not display the breadcrumb when empty', async () => { + routes.add([]); + await spectator.router.navigateByUrl('/identity/users'); + + spectator.detectChanges(); + expect(spectator.query('ol.breadcrumb')).toBeFalsy(); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/button.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/button.component.spec.ts new file mode 100644 index 0000000000..c272b665e7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/button.component.spec.ts @@ -0,0 +1,56 @@ +import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; +import { ButtonComponent } from '../components'; + +describe('ButtonComponent', () => { + let spectator: SpectatorHost; + + const createHost = createHostFactory(ButtonComponent); + + beforeEach( + () => + (spectator = createHost('Button', { + hostProps: { attributes: { autofocus: '', name: 'abp-button' } }, + })), + ); + + it('should display the button', () => { + expect(spectator.query('button')).toBeTruthy(); + }); + + it('should equal the default classes to btn btn-primary', () => { + expect(spectator.query('button')).toHaveClass('btn btn-primary'); + }); + + it('should equal the default type to button', () => { + expect(spectator.query('button')).toHaveAttribute('type', 'button'); + }); + + it('should enabled', () => { + expect(spectator.query('[disabled]')).toBeFalsy(); + }); + + it('should have the text content', () => { + expect(spectator.query('button')).toHaveText('Button'); + }); + + it('should display the icon', () => { + expect(spectator.query('i.d-none')).toBeFalsy(); + expect(spectator.query('i')).toHaveClass('fa'); + }); + + it('should display the spinner icon', () => { + spectator.component.loading = true; + spectator.detectComponentChanges(); + expect(spectator.query('i')).toHaveClass('fa-spinner'); + }); + + it('should disabled when the loading input is true', () => { + spectator.component.loading = true; + spectator.detectComponentChanges(); + expect(spectator.query('[disabled]')).toBeTruthy(); + }); + + it('should disabled when the loading input is true', () => { + expect(spectator.query('[autofocus][name="abp-button"]')).toBeTruthy(); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/chart.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/chart.component.spec.ts new file mode 100644 index 0000000000..b1bd0fba16 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/chart.component.spec.ts @@ -0,0 +1,126 @@ +import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; +import { ChartComponent } from '../components'; +import { chartJsLoaded$ } from '../utils/widget-utils'; +import { ReplaySubject } from 'rxjs'; +import * as widgetUtils from '../utils/widget-utils'; +// import 'chart.js'; +declare const Chart; + +Object.defineProperty(window, 'getComputedStyle', { + value: () => ({ + getPropertyValue: prop => { + return ''; + }, + }), +}); + +describe('ChartComponent', () => { + let spectator: SpectatorHost; + const createHost = createHostFactory({ component: ChartComponent }); + + beforeEach(() => { + (widgetUtils as any).chartJsLoaded$ = new ReplaySubject(1); + spectator = createHost('', { + hostProps: { + data: { + datasets: [ + { + data: [11], + backgroundColor: ['#FF6384'], + label: 'My dataset', + }, + ], + labels: ['Red'], + }, + }, + }); + }); + + test('should throw error when chart.js is not loaded', () => { + try { + spectator.component.testChartJs(); + } catch (error) { + expect(error.message).toContain('Chart is not found'); + } + }); + + test('should have a success class by default', async done => { + await import('chart.js'); + + chartJsLoaded$.next(); + setTimeout(() => { + expect(spectator.component.chart).toBeTruthy(); + done(); + }, 0); + }); + + describe('#reinit', () => { + it('should call the destroy method', done => { + chartJsLoaded$.next(); + const spy = jest.spyOn(spectator.component.chart, 'destroy'); + spectator.setHostInput({ + data: { + datasets: [ + { + data: [12], + label: 'My dataset', + }, + ], + labels: ['Red'], + }, + }); + spectator.detectChanges(); + setTimeout(() => { + expect(spy).toHaveBeenCalled(); + done(); + }, 0); + }); + }); + + describe('#refresh', () => { + it('should call the update method', done => { + chartJsLoaded$.next(); + const spy = jest.spyOn(spectator.component.chart, 'update'); + spectator.component.refresh(); + setTimeout(() => { + expect(spy).toHaveBeenCalled(); + done(); + }, 0); + }); + }); + + describe('#generateLegend', () => { + it('should call the generateLegend method', done => { + chartJsLoaded$.next(); + const spy = jest.spyOn(spectator.component.chart, 'generateLegend'); + spectator.component.generateLegend(); + setTimeout(() => { + expect(spy).toHaveBeenCalled(); + done(); + }, 0); + }); + }); + + describe('#onCanvasClick', () => { + it('should emit the onDataSelect', done => { + spectator.component.onDataSelect.subscribe(() => { + done(); + }); + + chartJsLoaded$.next(); + jest.spyOn(spectator.component.chart, 'getElementAtEvent').mockReturnValue([document.createElement('div')]); + spectator.click('canvas'); + }); + }); + + describe('#base64Image', () => { + it('should return the base64 image', done => { + chartJsLoaded$.next(); + + setTimeout(() => { + expect(spectator.component.base64Image).toContain('base64'); + done(); + }, 0); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/confirmation.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/confirmation.service.spec.ts new file mode 100644 index 0000000000..ab63cb3cb5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/confirmation.service.spec.ts @@ -0,0 +1,135 @@ +import { CoreTestingModule } from '@abp/ng.core/testing'; +import { NgModule } from '@angular/core'; +import { fakeAsync, tick } from '@angular/core/testing'; +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { NgxsModule } from '@ngxs/store'; +import { timer } from 'rxjs'; +import { take } from 'rxjs/operators'; +import { ConfirmationComponent } from '../components'; +import { Confirmation } from '../models'; +import { ConfirmationService } from '../services'; + +@NgModule({ + exports: [ConfirmationComponent], + entryComponents: [ConfirmationComponent], + declarations: [ConfirmationComponent], + imports: [CoreTestingModule.withConfig()], +}) +export class MockModule {} + +describe('ConfirmationService', () => { + let spectator: SpectatorService; + let service: ConfirmationService; + const createService = createServiceFactory({ + service: ConfirmationService, + imports: [NgxsModule.forRoot(), CoreTestingModule.withConfig(), MockModule], + }); + + beforeEach(() => { + spectator = createService(); + service = spectator.service; + }); + + afterEach(() => { + clearElements(); + }); + + test('should display a confirmation popup', fakeAsync(() => { + service.show('MESSAGE', 'TITLE'); + + tick(); + + expect(selectConfirmationContent('.title')).toBe('TITLE'); + expect(selectConfirmationContent('.message')).toBe('MESSAGE'); + })); + + test('should display HTML string in title, message, and buttons', fakeAsync(() => { + service.show( + 'MESSAGE', + 'TITLE', + 'neutral', + { + cancelText: 'CANCEL', + yesText: 'YES', + }, + ); + + tick(); + + expect(selectConfirmationContent('.custom-title')).toBe('TITLE'); + expect(selectConfirmationContent('.custom-message')).toBe('MESSAGE'); + expect(selectConfirmationContent('.custom-cancel')).toBe('CANCEL'); + expect(selectConfirmationContent('.custom-yes')).toBe('YES'); + })); + + test.each` + type | selector | icon + ${'info'} | ${'.info'} | ${'.fa-info-circle'} + ${'success'} | ${'.success'} | ${'.fa-check-circle'} + ${'warn'} | ${'.warning'} | ${'.fa-exclamation-triangle'} + ${'error'} | ${'.error'} | ${'.fa-times-circle'} + `('should display $type confirmation popup', async ({ type, selector, icon }) => { + service[type]('MESSAGE', 'TITLE'); + + await timer(0).toPromise(); + + expect(selectConfirmationContent('.title')).toBe('TITLE'); + expect(selectConfirmationContent('.message')).toBe('MESSAGE'); + expect(selectConfirmationElement(selector)).toBeTruthy(); + expect(selectConfirmationElement(icon)).toBeTruthy(); + }); + + test('should close with ESC key', done => { + service + .info('', '') + .pipe(take(1)) + .subscribe(status => { + expect(status).toBe(Confirmation.Status.dismiss); + done(); + }); + + const escape = new KeyboardEvent('keyup', { key: 'Escape' }); + document.dispatchEvent(escape); + }); + + test('should close when click cancel button', async done => { + service.info('', '', { yesText: 'Sure', cancelText: 'Exit' }).subscribe(status => { + expect(status).toBe(Confirmation.Status.reject); + done(); + }); + + await timer(0).toPromise(); + + expect(selectConfirmationContent('button#cancel')).toBe('Exit'); + expect(selectConfirmationContent('button#confirm')).toBe('Sure'); + + selectConfirmationElement('button#cancel').click(); + }); + + test.each` + dismissible | count + ${true} | ${1} + ${false} | ${0} + `( + 'should call the listenToEscape method $count times when dismissible is $dismissible', + ({ dismissible, count }) => { + const spy = spyOn(service as any, 'listenToEscape'); + + service.info('', '', { dismissible }); + + expect(spy).toHaveBeenCalledTimes(count); + }, + ); +}); + +function clearElements(selector = '.confirmation') { + document.querySelectorAll(selector).forEach(element => element.parentNode.removeChild(element)); +} + +function selectConfirmationContent(selector = '.confirmation'): string { + return selectConfirmationElement(selector).textContent.trim(); +} + +function selectConfirmationElement(selector = '.confirmation'): T { + return document.querySelector(selector); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/ellipsis.directive.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/ellipsis.directive.spec.ts new file mode 100644 index 0000000000..727a1c5312 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/ellipsis.directive.spec.ts @@ -0,0 +1,55 @@ +import { createDirectiveFactory, SpectatorDirective } from '@ngneat/spectator/jest'; +import { EllipsisDirective } from '../directives/ellipsis.directive'; + +describe('EllipsisDirective', () => { + let spectator: SpectatorDirective; + let directive: EllipsisDirective; + let el: HTMLDivElement; + const createDirective = createDirectiveFactory({ + directive: EllipsisDirective, + }); + + beforeEach(() => { + spectator = createDirective( + '
test content
', + { + hostProps: { + title: 'test title', + width: '100px', + }, + }, + ); + directive = spectator.directive; + el = spectator.query('div'); + }); + + test('should be created', () => { + expect(directive).toBeTruthy(); + }); + + test('should have 100px ellipsis width', () => { + expect(directive.width).toBe('100px'); + }); + + test('should be enabled if abpEllipsisEnabled input is true', () => { + expect(directive.enabled).toBe(true); + }); + + test('should have given title', () => { + expect(directive.title).toBe('test title'); + }); + + test('should have element innerText as title if not specified', () => { + spectator.setHostInput({ title: undefined }); + expect(directive.title).toBe(el.innerText); + }); + + test('should add abp-ellipsis-inline class to element if width is given', () => { + expect(el).toHaveClass('abp-ellipsis-inline'); + }); + + test('should add abp-ellipsis class to element if width is not given', () => { + spectator.setHostInput({ width: undefined }); + expect(el).toHaveClass('abp-ellipsis'); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/error.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/error.component.spec.ts new file mode 100644 index 0000000000..e86f620dad --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/error.component.spec.ts @@ -0,0 +1,44 @@ +import { SpectatorHost, createHostFactory } from '@ngneat/spectator/jest'; +import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http-error-wrapper.component'; +import { CORE_OPTIONS, LocalizationPipe } from '@abp/ng.core'; +import { Store } from '@ngxs/store'; +import { Renderer2, ElementRef } from '@angular/core'; +import { Subject } from 'rxjs'; +import { HttpClient } from '@angular/common/http'; + +describe('ErrorComponent', () => { + let spectator: SpectatorHost; + const createHost = createHostFactory({ + component: HttpErrorWrapperComponent, + declarations: [LocalizationPipe], + mocks: [Store, HttpClient], + providers: [ + { provide: CORE_OPTIONS, useValue: {} }, + { provide: Renderer2, useValue: { removeChild: () => null } }, + { provide: ElementRef, useValue: { nativeElement: document.createElement('div') } }, + ], + }); + + beforeEach(() => { + spectator = createHost(''); + spectator.component.destroy$ = new Subject(); + }); + + describe('#destroy', () => { + it('should be call when pressed the esc key', done => { + spectator.component.destroy$.subscribe(res => { + done(); + }); + + spectator.keyboard.pressEscape(); + }); + + it('should be call when clicked the close button', done => { + spectator.component.destroy$.subscribe(res => { + done(); + }); + + spectator.click('#abp-close-button'); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/error.handler.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/error.handler.spec.ts new file mode 100644 index 0000000000..a6908e03bf --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/error.handler.spec.ts @@ -0,0 +1,328 @@ +import { RestOccurError } from '@abp/ng.core'; +import { CoreTestingModule } from '@abp/ng.core/testing'; +import { APP_BASE_HREF } from '@angular/common'; +import { HttpErrorResponse, HttpHeaders } from '@angular/common/http'; +import { Component, NgModule } from '@angular/core'; +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { NgxsModule, Store } from '@ngxs/store'; +import { OAuthService } from 'angular-oauth2-oidc'; +import { of } from 'rxjs'; +import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http-error-wrapper.component'; +import { DEFAULT_ERROR_LOCALIZATIONS, DEFAULT_ERROR_MESSAGES, ErrorHandler } from '../handlers'; +import { ConfirmationService } from '../services'; +import { httpErrorConfigFactory } from '../tokens/http-error.token'; + +@NgModule({ + exports: [HttpErrorWrapperComponent], + declarations: [HttpErrorWrapperComponent], + entryComponents: [HttpErrorWrapperComponent], + imports: [CoreTestingModule], +}) +class MockModule {} + +let spectator: SpectatorService; +let service: ErrorHandler; +let store: Store; +const errorConfirmation: jest.Mock = jest.fn(() => of(null)); +const CONFIRMATION_BUTTONS = { + hideCancelBtn: true, + yesText: 'AbpAccount::Close', +}; +describe('ErrorHandler', () => { + const createService = createServiceFactory({ + service: ErrorHandler, + imports: [NgxsModule.forRoot([]), CoreTestingModule.withConfig(), MockModule], + mocks: [OAuthService], + providers: [ + { provide: APP_BASE_HREF, useValue: '/' }, + { + provide: 'HTTP_ERROR_CONFIG', + useFactory: httpErrorConfigFactory, + }, + { + provide: ConfirmationService, + useValue: { + error: errorConfirmation, + }, + }, + ], + }); + + beforeEach(() => { + spectator = createService(); + service = spectator.service; + store = spectator.inject(Store); + store.selectSnapshot = jest.fn(() => '/x'); + }); + + afterEach(() => { + errorConfirmation.mockClear(); + removeIfExistsInDom(selectHtmlErrorWrapper); + }); + + test('should display HttpErrorWrapperComponent when server error occurs', () => { + const createComponent = jest.spyOn(service, 'createErrorComponent'); + const error = new HttpErrorResponse({ status: 500 }); + const params = { + title: { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError500.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.title, + }, + details: { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError500.details, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.details, + }, + status: 500, + }; + + expect(selectHtmlErrorWrapper()).toBeNull(); + + store.dispatch(new RestOccurError(error)); + + expect(createComponent).toHaveBeenCalledWith(params); + }); + + test('should display HttpErrorWrapperComponent when authorize error occurs', () => { + const createComponent = jest.spyOn(service, 'createErrorComponent'); + const error = new HttpErrorResponse({ status: 403 }); + const params = { + title: { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError403.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.title, + }, + details: { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError403.details, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.details, + }, + status: 403, + }; + + expect(selectHtmlErrorWrapper()).toBeNull(); + + store.dispatch(new RestOccurError(error)); + + expect(createComponent).toHaveBeenCalledWith(params); + }); + + test('should display HttpErrorWrapperComponent when unknown error occurs', () => { + const createComponent = jest.spyOn(service, 'createErrorComponent'); + const error = new HttpErrorResponse({ status: 0, statusText: 'Unknown Error' }); + const params = { + title: { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, + }, + details: error.message, + isHomeShow: false, + }; + + expect(selectHtmlErrorWrapper()).toBeNull(); + + store.dispatch(new RestOccurError(error)); + + expect(createComponent).toHaveBeenCalledWith(params); + }); + + test('should call error method of ConfirmationService when not found error occurs', () => { + store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 404 }))); + + expect(errorConfirmation).toHaveBeenCalledWith( + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.details, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.details, + }, + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title, + }, + CONFIRMATION_BUTTONS, + ); + }); + + test('should call error method of ConfirmationService when default error occurs', () => { + store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 412 }))); + + expect(errorConfirmation).toHaveBeenCalledWith( + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.details, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.details, + }, + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, + }, + CONFIRMATION_BUTTONS, + ); + }); + + test('should call error method of ConfirmationService when authenticated error occurs', () => { + store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 401 }))); + + expect(errorConfirmation).toHaveBeenCalledWith( + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title, + }, + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.details, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.details, + }, + CONFIRMATION_BUTTONS, + ); + }); + + test('should call error method of ConfirmationService when authenticated error occurs with _AbpErrorFormat header', () => { + const headers: HttpHeaders = new HttpHeaders({ + _AbpErrorFormat: '_AbpErrorFormat', + }); + store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 401, headers }))); + + expect(errorConfirmation).toHaveBeenCalledWith( + { + key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, + defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, + }, + null, + CONFIRMATION_BUTTONS, + ); + }); + + test('should call error method of ConfirmationService when error occurs with _AbpErrorFormat header', () => { + let headers: HttpHeaders = new HttpHeaders(); + headers = headers.append('_AbpErrorFormat', '_AbpErrorFormat'); + store.dispatch( + new RestOccurError( + new HttpErrorResponse({ + error: { error: { message: 'test message', details: 'test detail' } }, + status: 412, + headers, + }), + ), + ); + + expect(errorConfirmation).toHaveBeenCalledWith( + 'test detail', + 'test message', + CONFIRMATION_BUTTONS, + ); + }); +}); + +@Component({ + selector: 'abp-dummy-error', + template: '

{{errorStatus}}

', +}) +class DummyErrorComponent { + errorStatus; + destroy$; +} + +@NgModule({ + declarations: [DummyErrorComponent], + exports: [DummyErrorComponent], + entryComponents: [DummyErrorComponent], +}) +class ErrorModule {} + +// TODO: error component does not place to the DOM. +// describe('ErrorHandler with custom error component', () => { +// const createService = createServiceFactory({ +// service: ErrorHandler, +// imports: [ +// RouterModule.forRoot([], { relativeLinkResolution: 'legacy' }), +// NgxsModule.forRoot([]), +// CoreModule, +// MockModule, +// ErrorModule, +// ], +// mocks: [OAuthService, ConfirmationService], +// providers: [ +// { provide: APP_BASE_HREF, useValue: '/' }, +// { +// provide: 'HTTP_ERROR_CONFIG', +// useFactory: customHttpErrorConfigFactory, +// }, +// ], +// }); + +// beforeEach(() => { +// spectator = createService(); +// service = spectator.service; +// store = spectator.inject(Store); +// store.selectSnapshot = jest.fn(() => '/x'); +// }); + +// afterEach(() => { +// removeIfExistsInDom(selectCustomError); +// }); + +// describe('Custom error component', () => { +// test('should be created when 401 error is dispatched', () => { +// store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 401 }))); + +// expect(selectCustomErrorText()).toBe('401'); +// }); + +// test('should be created when 403 error is dispatched', () => { +// store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 403 }))); + +// expect(selectCustomErrorText()).toBe('403'); +// }); + +// test('should be created when 404 error is dispatched', () => { +// store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 404 }))); + +// expect(selectCustomErrorText()).toBe('404'); +// }); + +// test('should be created when RouterError is dispatched', () => { +// store.dispatch(new RouterError(null, null, new NavigationError(1, 'test', 'Cannot match'))); + +// expect(selectCustomErrorText()).toBe('404'); +// }); + +// test('should be created when 500 error is dispatched', () => { +// store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 500 }))); + +// expect(selectCustomErrorText()).toBe('500'); +// }); + +// test('should call destroy method of componentRef when destroy$ emits', () => { +// store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 401 }))); + +// expect(selectCustomErrorText()).toBe('401'); + +// const destroyComponent = jest.spyOn(service.componentRef, 'destroy'); + +// service.componentRef.instance.destroy$.next(); + +// expect(destroyComponent).toHaveBeenCalledTimes(1); +// }); +// }); +// }); + +export function customHttpErrorConfigFactory() { + return httpErrorConfigFactory({ + errorScreen: { + component: DummyErrorComponent, + forWhichErrors: [401, 403, 404, 500], + }, + }); +} + +function removeIfExistsInDom(errorSelector: () => HTMLDivElement | null) { + const abpError = errorSelector(); + if (abpError) abpError.parentNode.removeChild(abpError); +} + +function selectHtmlErrorWrapper(): HTMLDivElement | null { + return document.querySelector('abp-http-error-wrapper'); +} + +function selectCustomError(): HTMLDivElement | null { + return document.querySelector('abp-dummy-error'); +} + +function selectCustomErrorText(): string { + return selectCustomError().querySelector('p').textContent; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/lazy-style.handler.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/lazy-style.handler.spec.ts new file mode 100644 index 0000000000..1c120db08f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/lazy-style.handler.spec.ts @@ -0,0 +1,66 @@ +import { LazyLoadService, LOADING_STRATEGY, LocalizationService } from '@abp/ng.core'; +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { EMPTY, of } from 'rxjs'; +import { BOOTSTRAP } from '../constants/styles'; +import { createLazyStyleHref, initLazyStyleHandler, LazyStyleHandler } from '../handlers'; + +const languageChange$ = of({ payload: 'en' }); + +describe('LazyStyleHandler', () => { + let spectator: SpectatorService; + let handler: LazyStyleHandler; + let lazyLoad: LazyLoadService; + + const createService = createServiceFactory({ + service: LazyStyleHandler, + providers: [ + { + provide: LocalizationService, + useValue: { currentLang: 'en', languageChange$ }, + }, + ], + }); + + beforeEach(() => { + spectator = createService(); + handler = spectator.service; + lazyLoad = handler['lazyLoad']; + }); + + describe('#dir', () => { + it('should initially be "ltr"', () => { + expect(handler.dir).toBe('ltr'); + }); + + it('should set bootstrap to rtl', () => { + const oldHref = createLazyStyleHref(BOOTSTRAP, 'ltr'); + const newHref = createLazyStyleHref(BOOTSTRAP, 'rtl'); + lazyLoad.loaded.set(newHref, null); // avoid actual loading + const load = jest.spyOn(lazyLoad, 'load'); + const remove = jest.spyOn(lazyLoad, 'remove'); + const strategy = LOADING_STRATEGY.PrependAnonymousStyleToHead(newHref); + + handler.dir = 'rtl'; + + expect(load).toHaveBeenCalledWith(strategy); + expect(remove).toHaveBeenCalledWith(oldHref); + }); + }); +}); + +describe('initLazyStyleHandler', () => { + it('should return a LazyStyleHandler factory', () => { + const generator = (function*() { + yield undefined; // LAZY_STYLES + yield { loaded: new Map() }; // LazyLoadService + yield { currentLang: 'en', languageChange$: EMPTY }; // LocalizationService + })(); + + const injector = { + get: () => generator.next().value as any, + }; + const factory = initLazyStyleHandler(injector); + + expect(factory()).toBeInstanceOf(LazyStyleHandler); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/loader-bar.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/loader-bar.component.spec.ts new file mode 100644 index 0000000000..2326009044 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/loader-bar.component.spec.ts @@ -0,0 +1,94 @@ +import { NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router'; +import { createComponentFactory, Spectator, SpyObject } from '@ngneat/spectator/jest'; +import { Subject, timer } from 'rxjs'; +import { LoaderBarComponent } from '../components/loader-bar/loader-bar.component'; +import { HttpWaitService, LOADER_DELAY, SubscriptionService } from '@abp/ng.core'; +import { HttpRequest } from '@angular/common/http'; + +describe('LoaderBarComponent', () => { + let spectator: Spectator; + let router: SpyObject; + const events$ = new Subject(); + + const createComponent = createComponentFactory({ + component: LoaderBarComponent, + detectChanges: false, + providers: [ + SubscriptionService, + { provide: Router, useValue: { events: events$ } }, + { provide: LOADER_DELAY, useValue: 0 }, + ], + }); + + beforeEach(() => { + spectator = createComponent({}); + spectator.component.intervalPeriod = 1; + spectator.component.stopDelay = 1; + router = spectator.inject(Router); + }); + + it('should initial variable values are correct', () => { + expect(spectator.component.containerClass).toBe('abp-loader-bar'); + expect(spectator.component.color).toBe('#77b6ff'); + }); + + it('should increase the progressLevel', done => { + spectator.detectChanges(); + const httpWaitService = spectator.inject(HttpWaitService); + httpWaitService.addRequest(new HttpRequest('GET', 'test')); + spectator.detectChanges(); + setTimeout(() => { + expect(spectator.component.progressLevel > 0).toBeTruthy(); + done(); + }, 10); + }); + + it('should be interval unsubscribed', done => { + spectator.detectChanges(); + const httpWaitService = spectator.inject(HttpWaitService); + httpWaitService.addRequest(new HttpRequest('GET', 'test')); + expect(spectator.component.interval.closed).toBe(false); + timer(400).subscribe(() => { + expect(spectator.component.interval.closed).toBe(true); + done(); + }); + }); + + it('should start and stop the loading with navigation', done => { + spectator.detectChanges(); + events$.next(new NavigationStart(1, 'test')); + expect(spectator.component.interval.closed).toBe(false); + + events$.next(new NavigationEnd(1, 'test', 'test')); + events$.next(new NavigationError(1, 'test', 'test')); + expect(spectator.component.progressLevel).toBe(100); + + timer(2).subscribe(() => { + expect(spectator.component.progressLevel).toBe(0); + done(); + }); + }); + + it('should stop the loading with navigation', done => { + spectator.detectChanges(); + events$.next(new NavigationStart(1, 'test')); + expect(spectator.component.interval.closed).toBe(false); + + events$.next(new NavigationEnd(1, 'testend', 'testend')); + expect(spectator.component.progressLevel).toBe(100); + + timer(2).subscribe(() => { + expect(spectator.component.progressLevel).toBe(0); + done(); + }); + }); + + describe('#startLoading', () => { + it('should return when isLoading is true', done => { + spectator.detectChanges(); + events$.next(new NavigationStart(1, 'test')); + events$.next(new NavigationStart(1, 'test')); + done(); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/loading.directive.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/loading.directive.spec.ts new file mode 100644 index 0000000000..b359a2000c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/loading.directive.spec.ts @@ -0,0 +1,93 @@ +import { SpectatorDirective, createDirectiveFactory } from '@ngneat/spectator/jest'; +import { LoadingDirective } from '../directives'; +import { LoadingComponent } from '../components'; + +import { Component } from '@angular/core'; + +@Component({ + selector: 'abp-dummy', + template: '
Testing Loading Directive
', +}) +export class DummyComponent {} + +describe('LoadingDirective', () => { + let spectator: SpectatorDirective; + const createDirective = createDirectiveFactory({ + directive: LoadingDirective, + declarations: [LoadingComponent, DummyComponent], + entryComponents: [LoadingComponent], + }); + + describe('default', () => { + beforeEach(() => { + spectator = createDirective('
Testing Loading Directive
', { + hostProps: { loading: true }, + }); + }); + + it('should create the loading component', done => { + setTimeout(() => { + expect(spectator.directive.rootNode).toBeTruthy(); + expect(spectator.directive.componentRef).toBeTruthy(); + done(); + }, 20); + }); + }); + + describe('with custom target', () => { + const mockTarget = document.createElement('div'); + const spy = jest.spyOn(mockTarget, 'appendChild'); + + beforeEach(() => { + spectator = createDirective( + '
Testing Loading Directive
', + { + hostProps: { loading: true, target: mockTarget, delay: 0 }, + }, + ); + }); + + it('should add the loading component to the DOM', done => { + setTimeout(() => { + expect(spy).toHaveBeenCalled(); + done(); + }, 20); + }); + + it('should remove the loading component to the DOM', done => { + const rendererSpy = jest.spyOn(spectator.directive['renderer'], 'removeChild'); + setTimeout(() => spectator.setHostInput({ loading: false }), 0); + setTimeout(() => { + expect(rendererSpy).toHaveBeenCalled(); + expect(spectator.directive.rootNode).toBeFalsy(); + done(); + }, 20); + }); + + it('should appear with delay', done => { + spectator.setHostInput({ loading: false, delay: 20 }); + spectator.detectChanges(); + setTimeout(() => spectator.setHostInput({ loading: true }), 0); + setTimeout(() => expect(spectator.directive.loading).toBe(false), 15); + setTimeout(() => { + expect(spectator.directive.loading).toBe(true); + done(); + }, 50); + }); + }); + + describe('with a component selector', () => { + beforeEach(() => { + spectator = createDirective('', { + hostProps: { loading: true }, + }); + }); + + it('should select the child element', done => { + setTimeout(() => { + expect(spectator.directive.targetElement.id).toBe('dummy'); + done(); + }, 20); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal-container.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal-container.component.spec.ts new file mode 100644 index 0000000000..9cb45127e5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal-container.component.spec.ts @@ -0,0 +1,34 @@ +import { Component, ComponentFactoryResolver, ComponentRef } from '@angular/core'; +import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; +import { ModalContainerComponent } from '../components/modal/modal-container.component'; + +describe('ModalContainerComponent', () => { + @Component({ template: '
bar
' }) + class TestComponent {} + + let componentRef: ComponentRef; + let spectator: Spectator; + + const createComponent = createComponentFactory({ + component: ModalContainerComponent, + entryComponents: [TestComponent], + }); + + beforeEach(() => (spectator = createComponent())); + + afterEach(() => componentRef.destroy()); + + describe('#container', () => { + it('should be a ViewContainerRef', () => { + let foo = document.querySelector('div.foo'); + expect(foo).toBeNull(); + + const cfResolver = spectator.inject(ComponentFactoryResolver); + const factory = cfResolver.resolveComponentFactory(TestComponent); + componentRef = spectator.component.container.createComponent(factory); + + foo = document.querySelector('div.foo'); + expect(foo.textContent).toBe('bar'); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal.component.spec.ts new file mode 100644 index 0000000000..db6bcbc39c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal.component.spec.ts @@ -0,0 +1,213 @@ +import { LocalizationPipe } from '@abp/ng.core'; +import { RouterTestingModule } from '@angular/router/testing'; +import { NgbModal, NgbModalModule } from '@ng-bootstrap/ng-bootstrap'; +import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; +import { Store } from '@ngxs/store'; +import { fromEvent, Subject, timer } from 'rxjs'; +import { delay, reduce, take } from 'rxjs/operators'; +import { ButtonComponent, ConfirmationComponent, ModalComponent } from '../components'; +import { Confirmation } from '../models'; +import { ConfirmationService } from '../services'; + +describe('ModalComponent', () => { + let spectator: SpectatorHost< + ModalComponent, + { visible: boolean; busy: boolean; ngDirty: boolean } + >; + let appearFn; + let disappearFn; + let mockConfirmation$: Subject; + const createHost = createHostFactory({ + component: ModalComponent, + imports: [RouterTestingModule, NgbModalModule], + declarations: [ConfirmationComponent, LocalizationPipe, ButtonComponent], + providers: [ + { + provide: ConfirmationService, + useValue: { + warn() { + mockConfirmation$ = new Subject(); + return mockConfirmation$; + }, + }, + }, + ], + mocks: [Store], + }); + + beforeEach(async () => { + appearFn = jest.fn(); + disappearFn = jest.fn(); + + spectator = createHost( + ` + +
+
+ + +
+
+ + + + +
+ `, + { + hostProps: { + visible: true, + busy: false, + ngDirty: false, + appearFn, + disappearFn, + }, + }, + ); + + await wait0ms(); + }); + + afterEach(() => { + const modalService = spectator.inject(NgbModal); + modalService.dismissAll(); + }); + + it('should open the ngb-modal with backdrop', () => { + const modal = selectModal(); + expect(modal).toBeTruthy(); + expect(document.querySelector('ngb-modal-backdrop')).toBeTruthy(); + }); + + it('should reflect its input properties to the template', () => { + const modal = selectModal('.test'); + expect(modal).toBeTruthy(); + expect(modal.querySelector('div.modal-sm')).toBeTruthy(); + expect(modal.querySelector('div.modal-dialog-centered')).toBeTruthy(); + }); + + it('should emit the appear output when made visible', () => { + expect(appearFn).toHaveBeenCalled(); + }); + + it('should emit the disappear output when made invisible', async () => { + spectator.hostComponent.visible = false; + spectator.detectChanges(); + + await wait0ms(); + + expect(disappearFn).toHaveBeenCalledTimes(1); + }); + + xit('should close with the abpClose', async () => { + await wait0ms(); + + spectator.dispatchMouseEvent(spectator.component.abpClose, 'click'); + + await wait0ms(); + + expect(disappearFn).toHaveBeenCalledTimes(1); + }); + + it('should open the confirmation popup and works correct', async () => { + const confirmationService = spectator.inject(ConfirmationService); + const warnSpy = jest.spyOn(confirmationService, 'warn'); + + await wait0ms(); + + spectator.hostComponent.ngDirty = true; + spectator.detectChanges(); + + expect(selectModal()).toBeTruthy(); + spectator.component.close(); // 1st try + + await wait0ms(); + + spectator.component.close(); // 2nd try + + await wait0ms(); + + expect(selectModal()).toBeTruthy(); + expect(warnSpy).toHaveBeenCalledTimes(1); + warnSpy.mockClear(); + + mockConfirmation$.next(Confirmation.Status.reject); + + await wait0ms(); + + expect(selectModal()).toBeTruthy(); + spectator.component.close(); + + await wait0ms(); + + expect(selectModal()).toBeTruthy(); + expect(warnSpy).toHaveBeenCalledTimes(1); + warnSpy.mockClear(); + + mockConfirmation$.next(Confirmation.Status.confirm); + await wait0ms(); + + // TODO: There is presumably a problem with change detection + // expect(selectModal()).toBeNull(); + expect(disappearFn).toHaveBeenCalledTimes(1); + }); + + it('should close with esc key', async () => { + await wait0ms(); + spectator.dispatchKeyboardEvent(spectator.component.modalWindowRef, 'keyup', 'Escape'); + + await wait300ms(); + + expect(spectator.component.visible).toBe(false); + }); + + it('should not close when busy is true', async () => { + spectator.hostComponent.busy = true; + spectator.detectChanges(); + + spectator.component.close(); + + await wait0ms(); + + expect(disappearFn).not.toHaveBeenCalled(); + }); + + xit('should not let window unload when form is dirty', async done => { + fromEvent(window, 'beforeunload') + .pipe( + take(2), + delay(0), + reduce((acc, v) => acc.concat(v), []), + ) + .subscribe(([event1, event2]) => { + expect(event1.returnValue).toBe(false); + expect(event2.returnValue).toBe(false); + done(); + }); + + spectator.hostComponent.ngDirty = true; + spectator.detectChanges(); + spectator.dispatchFakeEvent(window, 'beforeunload'); + + await wait0ms(); + + spectator.hostComponent.ngDirty = false; + spectator.detectChanges(); + spectator.dispatchFakeEvent(window, 'beforeunload'); + }); +}); + +function selectModal(modalSelector = ''): Element { + return document.querySelector(`ngb-modal-window.modal${modalSelector}`); +} + +async function wait0ms() { + await timer(0).toPromise(); +} + +async function wait300ms() { + await timer(300).toPromise(); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal.service.spec.ts new file mode 100644 index 0000000000..0c383bc7cf --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal.service.spec.ts @@ -0,0 +1,87 @@ +import { Component, TemplateRef, ViewChild } from '@angular/core'; +import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; +import { ModalContainerComponent } from '../components/modal/modal-container.component'; +import { ModalService } from '../services'; + +describe('ModalContainerComponent', () => { + @Component({ + template: ` + +
bar
+
+ `, + }) + class TestComponent { + @ViewChild('ref', { static: true }) + template: TemplateRef; + + constructor(public modalService: ModalService) {} + } + + let spectator: Spectator; + let service: ModalService; + + const createComponent = createComponentFactory({ + component: TestComponent, + entryComponents: [ModalContainerComponent], + }); + + beforeEach(() => { + spectator = createComponent(); + service = spectator.component.modalService; + }); + + afterEach(() => { + service.getContainer().clear(); + service['containerComponentRef'].changeDetectorRef.detectChanges(); + service['containerComponentRef'].destroy(); + }); + + describe('#getContainer', () => { + it('should return the ViewContainerRef of ModalContainerComponent', () => { + let foo = document.querySelector('div.foo'); + expect(foo).toBeNull(); + + const containerRef = service.getContainer(); + const embeddedViewRef = containerRef.createEmbeddedView(spectator.component.template); + + foo = document.querySelector('div.foo'); + expect(foo).toBe(embeddedViewRef.rootNodes[0]); + expect(foo.textContent).toBe('bar'); + }); + }); + + describe('#renderTemplate', () => { + it('should render given template using the ViewContainerRef of ModalContainerComponent', () => { + let foo = document.querySelector('div.foo'); + expect(foo).toBeNull(); + + service.renderTemplate(spectator.component.template); + + foo = document.querySelector('div.foo'); + expect(foo.textContent).toBe('bar'); + }); + }); + + describe('#detectChanges', () => { + it('should call detectChanges on the containerComponentRef', () => { + const spy = jest.spyOn(service['containerComponentRef'].changeDetectorRef, 'detectChanges'); + + service.detectChanges(); + + expect(spy).toHaveBeenCalledTimes(1); + }); + }); + + describe('#clearModal', () => { + it('should call clear on the ViewContainerRef and detectChanges', () => { + const clear = jest.spyOn(service.getContainer(), 'clear'); + const detectChanges = jest.spyOn(service, 'detectChanges'); + + service.clearModal(); + + expect(clear).toHaveBeenCalledTimes(1); + expect(detectChanges).toHaveBeenCalledTimes(1); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts new file mode 100644 index 0000000000..a91f5b76c1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts @@ -0,0 +1,46 @@ +import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; +import { SortOrderIconComponent } from '../components/sort-order-icon/sort-order-icon.component'; + +describe('SortOrderIconComponent', () => { + let spectator: SpectatorHost; + let component: SortOrderIconComponent; + const createHost = createHostFactory(SortOrderIconComponent); + + beforeEach(() => { + spectator = createHost( + '', + { + hostProps: { + selectedSortKey: '', + order: '', + }, + }, + ); + component = spectator.component; + }); + + test('should have correct icon class when selectedSortKey and sortKey are the same', () => { + const newKey = 'testKey'; + component.sort(newKey); + expect(component.selectedSortKey).toBe(newKey); + expect(component.order).toBe('asc'); + expect(component.icon).toBe('sorting_asc'); + }); + + test("shouldn't have any icon class when sortKey and selectedSortKey are different", () => { + const newKey = 'otherKey'; + component.sort(newKey); + expect(component.selectedSortKey).toBe(newKey); + expect(component.order).toBe('asc'); + expect(component.icon).toBe('sorting'); + }); + + test('should change order correctly when sort function called', () => { + component.sort('testKey'); + expect(component.order).toBe('asc'); + component.sort('testKey'); + expect(component.order).toBe('desc'); + component.sort('testKey'); + expect(component.order).toBe(''); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/table-sort.directive.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/table-sort.directive.spec.ts new file mode 100644 index 0000000000..ad43a11b87 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/table-sort.directive.spec.ts @@ -0,0 +1,32 @@ +import { SpectatorDirective, createDirectiveFactory } from '@ngneat/spectator/jest'; +import { TableSortDirective } from '../directives/table-sort.directive'; +import { TableComponent } from '../components/table/table.component'; +import { DummyLocalizationPipe } from './table.component.spec'; +import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'; + +describe('TableSortDirective', () => { + let spectator: SpectatorDirective; + let directive: TableSortDirective; + const createDirective = createDirectiveFactory({ + directive: TableSortDirective, + declarations: [TableComponent, DummyLocalizationPipe], + imports: [NgbPaginationModule], + }); + + beforeEach(() => { + spectator = createDirective( + ``, + ); + directive = spectator.directive; + }); + + test('should be created', () => { + expect(directive).toBeTruthy(); + }); + + test('should change table value', () => { + expect(directive.value).toEqual([1, 4, 2]); + const table = spectator.query(TableComponent); + expect(table.value).toEqual([1, 2, 4]); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/table.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/table.component.spec.ts new file mode 100644 index 0000000000..d456cebd34 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/table.component.spec.ts @@ -0,0 +1,75 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'; +import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; +import { TableComponent } from '../components'; + +@Pipe({ + name: 'abpLocalization', +}) +export class DummyLocalizationPipe implements PipeTransform { + transform(value: any, ...args: any[]): any { + return value; + } +} + +describe('TableComponent', () => { + let spectator: SpectatorHost; + const createHost = createHostFactory({ + component: TableComponent, + declarations: [DummyLocalizationPipe], + imports: [NgbPaginationModule], + }); + + describe('without value', () => { + beforeEach(() => { + spectator = createHost( + ` + + + name`, + { + hostProps: { + value: [], + }, + }, + ); + }); + + it('should display the empty message', () => { + expect(spectator.query('caption.ui-table-empty')).toHaveText( + 'AbpAccount::NoDataAvailableInDatatable', + ); + }); + + it('should display the header', () => { + expect(spectator.query('thead')).toBeTruthy(); + expect(spectator.query('th')).toHaveText('name'); + }); + + it('should place the colgroup template', () => { + expect(spectator.query('colgroup')).toBeTruthy(); + expect(spectator.query('col')).toBeTruthy(); + }); + }); + + describe('with value', () => { + // TODO + beforeEach(() => { + spectator = createHost( + ` + name + `, + { + hostProps: { + value: [], + }, + }, + ); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/toaster.service.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/toaster.service.spec.ts new file mode 100644 index 0000000000..ab885726de --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/toaster.service.spec.ts @@ -0,0 +1,122 @@ +import { CoreTestingModule } from '@abp/ng.core/testing'; +import { NgModule } from '@angular/core'; +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { NgxsModule } from '@ngxs/store'; +import { timer } from 'rxjs'; +import { ToastContainerComponent } from '../components/toast-container/toast-container.component'; +import { ToastComponent } from '../components/toast/toast.component'; +import { ToasterService } from '../services/toaster.service'; + +@NgModule({ + exports: [ToastContainerComponent], + entryComponents: [ToastContainerComponent], + declarations: [ToastContainerComponent, ToastComponent], + imports: [CoreTestingModule.withConfig()], +}) +export class MockModule {} +const toastClassPrefix = 'abp-toast'; + +describe('ToasterService', () => { + let spectator: SpectatorService; + let service: ToasterService; + const createService = createServiceFactory({ + service: ToasterService, + imports: [NgxsModule.forRoot(), CoreTestingModule.withConfig(), MockModule], + }); + + beforeEach(() => { + spectator = createService(); + service = spectator.service; + }); + + afterEach(() => { + clearElements(); + }); + + test('should display a toast', async () => { + service.show('MESSAGE', 'TITLE'); + + await timer(0).toPromise(); + service['containerComponentRef'].changeDetectorRef.detectChanges(); + + expect(selectToasterElement('.fa-exclamation-circle')).toBeTruthy(); + expect(selectToasterContent(`.${toastClassPrefix}-title`)).toBe('TITLE'); + expect(selectToasterContent(`.${toastClassPrefix}-message`)).toBe('MESSAGE'); + }); + + test.each` + type | selector | icon + ${'info'} | ${`.${toastClassPrefix}-info`} | ${'.fa-info-circle'} + ${'success'} | ${`.${toastClassPrefix}-success`} | ${'.fa-check-circle'} + ${'warn'} | ${`.${toastClassPrefix}-warning`} | ${'.fa-exclamation-triangle'} + ${'error'} | ${`.${toastClassPrefix}-error`} | ${'.fa-times-circle'} + `('should display $type toast', async ({ type, selector, icon }) => { + service[type]('MESSAGE', 'TITLE'); + + await timer(0).toPromise(); + service['containerComponentRef'].changeDetectorRef.detectChanges(); + expect(selectToasterContent(`.${toastClassPrefix}-title`)).toBe('TITLE'); + expect(selectToasterContent(`.${toastClassPrefix}-message`)).toBe('MESSAGE'); + expect(selectToasterElement()).toBe(document.querySelector(selector)); + expect(selectToasterElement(icon)).toBeTruthy(); + }); + + test('should display multiple toasts', async () => { + service.show('MESSAGE_1', 'TITLE_1'); + service.show('MESSAGE_2', 'TITLE_2'); + + await timer(0).toPromise(); + service['containerComponentRef'].changeDetectorRef.detectChanges(); + + const titles = document.querySelectorAll(`.${toastClassPrefix}-title`); + expect(titles.length).toBe(2); + + const messages = document.querySelectorAll(`.${toastClassPrefix}-message`); + expect(messages.length).toBe(2); + }); + + test('should remove a toast when remove is called', async () => { + service.show('MESSAGE'); + service.remove(0); + + await timer(0).toPromise(); + service['containerComponentRef'].changeDetectorRef.detectChanges(); + + expect(selectToasterElement()).toBeNull(); + }); + + test('should remove toasts when clear is called', async () => { + service.show('MESSAGE'); + service.clear(); + + await timer(0).toPromise(); + service['containerComponentRef'].changeDetectorRef.detectChanges(); + + expect(selectToasterElement()).toBeNull(); + }); + + test('should remove toasts based on containerKey when clear is called with key', async () => { + service.show('MESSAGE_1', 'TITLE_1', 'neutral', { containerKey: 'x' }); + service.show('MESSAGE_2', 'TITLE_2', 'neutral', { containerKey: 'y' }); + service.clear('x'); + + await timer(0).toPromise(); + service['containerComponentRef'].changeDetectorRef.detectChanges(); + + expect(selectToasterElement('.fa-exclamation-circle')).toBeTruthy(); + expect(selectToasterContent(`.${toastClassPrefix}-title`)).toBe('TITLE_2'); + expect(selectToasterContent(`.${toastClassPrefix}-message`)).toBe('MESSAGE_2'); + }); +}); + +function clearElements(selector = `.${toastClassPrefix}`) { + document.querySelectorAll(selector).forEach(element => element.parentNode.removeChild(element)); +} + +function selectToasterContent(selector = `.${toastClassPrefix}`): string { + return selectToasterElement(selector).textContent.trim(); +} + +function selectToasterElement(selector = `.${toastClassPrefix}`): T { + return document.querySelector(selector); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/validation-utils.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/validation-utils.spec.ts new file mode 100644 index 0000000000..19353dae28 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/validation-utils.spec.ts @@ -0,0 +1,52 @@ +import { ConfigState, ConfigStateService } from '@abp/ng.core'; +import { Component, Injector } from '@angular/core'; +import { createComponentFactory, Spectator } from '@ngneat/spectator'; +import { NgxValidateCoreModule, validatePassword } from '@ngx-validate/core'; +import { NgxsModule, Store } from '@ngxs/store'; +import { HttpClient } from '@angular/common/http'; +import { getPasswordValidators } from '../utils'; +import { Validators } from '@angular/forms'; +import { OAuthService } from 'angular-oauth2-oidc'; + +@Component({ template: '', selector: 'abp-dummy' }) +class DummyComponent {} + +describe('ValidationUtils', () => { + let spectator: Spectator; + const createComponent = createComponentFactory({ + component: DummyComponent, + imports: [NgxValidateCoreModule.forRoot()], + mocks: [HttpClient, OAuthService], + }); + + beforeEach(() => (spectator = createComponent())); + + describe('#getPasswordValidators', () => { + it('should return password valdiators', () => { + const configState = spectator.inject(ConfigStateService); + configState.setState({ + setting: { + values: { + 'Abp.Identity.Password.RequiredLength': '6', + 'Abp.Identity.Password.RequiredUniqueChars': '1', + 'Abp.Identity.Password.RequireNonAlphanumeric': 'True', + 'Abp.Identity.Password.RequireLowercase': 'True', + 'Abp.Identity.Password.RequireUppercase': 'True', + 'Abp.Identity.Password.RequireDigit': 'True', + }, + }, + }); + + const validators = getPasswordValidators(spectator.inject(Injector)); + const expectedValidators = [ + validatePassword(['number', 'small', 'capital', 'special']), + Validators.minLength(6), + Validators.maxLength(128), + ]; + + validators.forEach((validator, index) => { + expect(validator.toString()).toBe(expectedValidators[index].toString()); + }); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/theme-shared.module.ts new file mode 100644 index 0000000000..11a2ce3493 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/theme-shared.module.ts @@ -0,0 +1,140 @@ +import { CoreModule, noop } from '@abp/ng.core'; +import { DatePipe } from '@angular/common'; +import { APP_INITIALIZER, Injector, ModuleWithProviders, NgModule } from '@angular/core'; +import { NgbDateParserFormatter, NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'; +import { + defaultMapErrorsFn, + NgxValidateCoreModule, + VALIDATION_BLUEPRINTS, + VALIDATION_MAP_ERRORS_FN, + VALIDATION_VALIDATE_ON_SUBMIT, +} from '@ngx-validate/core'; +import { NgxDatatableModule } from '@swimlane/ngx-datatable'; +import { BreadcrumbComponent } from './components/breadcrumb/breadcrumb.component'; +import { ButtonComponent } from './components/button/button.component'; +import { ChartComponent } from './components/chart/chart.component'; +import { ConfirmationComponent } from './components/confirmation/confirmation.component'; +import { HttpErrorWrapperComponent } from './components/http-error-wrapper/http-error-wrapper.component'; +import { LoaderBarComponent } from './components/loader-bar/loader-bar.component'; +import { LoadingComponent } from './components/loading/loading.component'; +import { ModalCloseDirective } from './components/modal/modal-close.directive'; +import { ModalContainerComponent } from './components/modal/modal-container.component'; +import { ModalComponent } from './components/modal/modal.component'; +import { SortOrderIconComponent } from './components/sort-order-icon/sort-order-icon.component'; +import { TableEmptyMessageComponent } from './components/table-empty-message/table-empty-message.component'; +import { TableComponent } from './components/table/table.component'; +import { ToastContainerComponent } from './components/toast-container/toast-container.component'; +import { ToastComponent } from './components/toast/toast.component'; +import { DEFAULT_VALIDATION_BLUEPRINTS } from './constants/validation'; +import { EllipsisModule } from './directives/ellipsis.directive'; +import { LoadingDirective } from './directives/loading.directive'; +import { NgxDatatableDefaultDirective } from './directives/ngx-datatable-default.directive'; +import { NgxDatatableListDirective } from './directives/ngx-datatable-list.directive'; +import { TableSortDirective } from './directives/table-sort.directive'; +import { ErrorHandler } from './handlers/error.handler'; +import { initLazyStyleHandler } from './handlers/lazy-style.handler'; +import { RootParams } from './models/common'; +import { NG_BOOTSTRAP_CONFIG_PROVIDERS } from './providers'; +import { THEME_SHARED_ROUTE_PROVIDERS } from './providers/route.provider'; +import { THEME_SHARED_APPEND_CONTENT } from './tokens/append-content.token'; +import { httpErrorConfigFactory, HTTP_ERROR_CONFIG } from './tokens/http-error.token'; +import { DateParserFormatter } from './utils/date-parser-formatter'; + +const declarationsWithExports = [ + BreadcrumbComponent, + ButtonComponent, + ChartComponent, + ConfirmationComponent, + LoaderBarComponent, + LoadingComponent, + ModalComponent, + TableComponent, + TableEmptyMessageComponent, + ToastComponent, + ToastContainerComponent, + SortOrderIconComponent, + NgxDatatableDefaultDirective, + NgxDatatableListDirective, + LoadingDirective, + TableSortDirective, + ModalCloseDirective, +]; + +@NgModule({ + imports: [ + CoreModule, + NgxDatatableModule, + NgxValidateCoreModule, + NgbPaginationModule, + EllipsisModule, + ], + declarations: [...declarationsWithExports, HttpErrorWrapperComponent, ModalContainerComponent], + exports: [NgxDatatableModule, EllipsisModule, ...declarationsWithExports], + providers: [DatePipe], + entryComponents: [ + HttpErrorWrapperComponent, + LoadingComponent, + ModalContainerComponent, + ToastContainerComponent, + ConfirmationComponent, + ], +}) +export class BaseThemeSharedModule {} + +@NgModule({ + imports: [BaseThemeSharedModule], + exports: [BaseThemeSharedModule], +}) +export class ThemeSharedModule { + static forRoot( + { httpErrorConfig, validation = {} } = {} as RootParams, + ): ModuleWithProviders { + return { + ngModule: ThemeSharedModule, + providers: [ + { + provide: APP_INITIALIZER, + multi: true, + deps: [ErrorHandler], + useFactory: noop, + }, + THEME_SHARED_ROUTE_PROVIDERS, + { + provide: APP_INITIALIZER, + multi: true, + deps: [THEME_SHARED_APPEND_CONTENT], + useFactory: noop, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [Injector], + useFactory: initLazyStyleHandler, + }, + { provide: HTTP_ERROR_CONFIG, useValue: httpErrorConfig }, + { + provide: 'HTTP_ERROR_CONFIG', + useFactory: httpErrorConfigFactory, + deps: [HTTP_ERROR_CONFIG], + }, + { provide: NgbDateParserFormatter, useClass: DateParserFormatter }, + NG_BOOTSTRAP_CONFIG_PROVIDERS, + { + provide: VALIDATION_BLUEPRINTS, + useValue: { + ...DEFAULT_VALIDATION_BLUEPRINTS, + ...(validation.blueprints || {}), + }, + }, + { + provide: VALIDATION_MAP_ERRORS_FN, + useValue: validation.mapErrorsFn || defaultMapErrorsFn, + }, + { + provide: VALIDATION_VALIDATE_ON_SUBMIT, + useValue: validation.validateOnSubmit, + }, + ], + }; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/append-content.token.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/append-content.token.ts new file mode 100644 index 0000000000..2ba7898480 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/append-content.token.ts @@ -0,0 +1,15 @@ +import { CONTENT_STRATEGY, DomInsertionService } from '@abp/ng.core'; +import { inject, InjectionToken } from '@angular/core'; +import styles from '../constants/styles'; +import { chartJsLoaded$ } from '../utils/widget-utils'; + +export const THEME_SHARED_APPEND_CONTENT = new InjectionToken('THEME_SHARED_APPEND_CONTENT', { + providedIn: 'root', + factory: () => { + const domInsertion: DomInsertionService = inject(DomInsertionService); + + domInsertion.insertContent(CONTENT_STRATEGY.AppendStyleToHead(styles)); + + import('chart.js').then(() => chartJsLoaded$.next(true)); + }, +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/http-error.token.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/http-error.token.ts new file mode 100644 index 0000000000..39cb43a350 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/http-error.token.ts @@ -0,0 +1,18 @@ +import { InjectionToken } from '@angular/core'; +import { HttpErrorConfig, HttpErrorHandler } from '../models/common'; + +export function httpErrorConfigFactory(config = {} as HttpErrorConfig) { + if (config.errorScreen && config.errorScreen.component && !config.errorScreen.forWhichErrors) { + config.errorScreen.forWhichErrors = [401, 403, 404, 500]; + } + + return { + skipHandledErrorCodes: [], + errorScreen: {}, + ...config, + } as HttpErrorConfig; +} + +export const HTTP_ERROR_CONFIG = new InjectionToken('HTTP_ERROR_CONFIG'); + +export const HTTP_ERROR_HANDLER = new InjectionToken('HTTP_ERROR_HANDLER'); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/index.ts new file mode 100644 index 0000000000..148c34084c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/index.ts @@ -0,0 +1,5 @@ +export * from './append-content.token'; +export * from './http-error.token'; +export * from './lazy-styles.token'; +export * from './ngx-datatable-messages.token'; +export * from './suppress-unsaved-changes-warning.token'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/lazy-styles.token.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/lazy-styles.token.ts new file mode 100644 index 0000000000..73ca3044fc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/lazy-styles.token.ts @@ -0,0 +1,3 @@ +import { InjectionToken } from '@angular/core'; + +export const LAZY_STYLES = new InjectionToken('LAZY_STYLES'); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/ngx-datatable-messages.token.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/ngx-datatable-messages.token.ts new file mode 100644 index 0000000000..bf1a73ab09 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/ngx-datatable-messages.token.ts @@ -0,0 +1,17 @@ +import { InjectionToken } from '@angular/core'; + +export interface NgxDatatableMessages { + emptyMessage: string; + totalMessage: string; + selectedMessage: string; +} + +export const defaultNgxDatatableMessages = { + emptyMessage: 'AbpUi::NoDataAvailableInDatatable', + totalMessage: 'AbpUi::Total', + selectedMessage: 'AbpUi::Selected', +}; + +export const NGX_DATATABLE_MESSAGES = new InjectionToken>( + 'NGX_DATATABLE_MESSAGES', +); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts new file mode 100644 index 0000000000..af68c8130c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts @@ -0,0 +1,6 @@ +import { InjectionToken } from '@angular/core'; + +// TODO: Should be documented +export const SUPPRESS_UNSAVED_CHANGES_WARNING = new InjectionToken( + 'SUPPRESS_UNSAVED_CHANGES_WARNING', +); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/date-parser-formatter.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/date-parser-formatter.ts new file mode 100644 index 0000000000..cf8565435a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/date-parser-formatter.ts @@ -0,0 +1,56 @@ +import { ApplicationLocalizationConfigurationDto, ConfigStateService } from '@abp/ng.core'; +import { formatDate } from '@angular/common'; +import { Inject, Injectable, LOCALE_ID } from '@angular/core'; +import { NgbDateParserFormatter, NgbDateStruct } from '@ng-bootstrap/ng-bootstrap'; +import snq from 'snq'; + +function isNumber(value: any): boolean { + return !isNaN(toInteger(value)); +} + +function toInteger(value: any): number { + return parseInt(`${value}`, 10); +} + +@Injectable() +export class DateParserFormatter extends NgbDateParserFormatter { + constructor(private configState: ConfigStateService, @Inject(LOCALE_ID) private locale: string) { + super(); + } + + parse(value: string): NgbDateStruct { + if (value) { + const dateParts = value.trim().split('-'); + if (dateParts.length === 1 && isNumber(dateParts[0])) { + return { year: toInteger(dateParts[0]), month: null, day: null }; + } else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) { + return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null }; + } else if ( + dateParts.length === 3 && + isNumber(dateParts[0]) && + isNumber(dateParts[1]) && + isNumber(dateParts[2]) + ) { + return { + year: toInteger(dateParts[0]), + month: toInteger(dateParts[1]), + day: toInteger(dateParts[2]), + }; + } + } + return null; + } + + format(date: NgbDateStruct): string { + if (!date) return ''; + + const localization: ApplicationLocalizationConfigurationDto = this.configState.getOne( + 'localization', + ); + + const dateFormat = + snq(() => localization.currentCulture.dateTimeFormat.shortDatePattern) || 'yyyy-MM-dd'; + + return formatDate(new Date(date.year, date.month - 1, date.day), dateFormat, this.locale); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/index.ts new file mode 100644 index 0000000000..9f290b5ca3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/index.ts @@ -0,0 +1,3 @@ +export * from './date-parser-formatter'; +export * from './validation-utils'; +export * from './widget-utils'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/validation-utils.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/validation-utils.ts new file mode 100644 index 0000000000..a9ec1d4270 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/validation-utils.ts @@ -0,0 +1,45 @@ +import { ABP, ConfigStateService } from '@abp/ng.core'; +import { Injector } from '@angular/core'; +import { ValidatorFn, Validators } from '@angular/forms'; +import { PasswordRules, validatePassword } from '@ngx-validate/core'; + +const { minLength, maxLength } = Validators; + +export function getPasswordValidators(injector: Injector): ValidatorFn[] { + const getRule = getRuleFn(injector); + + const passwordRulesArr = [] as PasswordRules; + let requiredLength = 1; + + if (getRule('RequireDigit') === 'true') { + passwordRulesArr.push('number'); + } + + if (getRule('RequireLowercase') === 'true') { + passwordRulesArr.push('small'); + } + + if (getRule('RequireUppercase') === 'true') { + passwordRulesArr.push('capital'); + } + + if (getRule('RequireNonAlphanumeric') === 'true') { + passwordRulesArr.push('special'); + } + + if (Number.isInteger(+getRule('RequiredLength'))) { + requiredLength = +getRule('RequiredLength'); + } + + return [validatePassword(passwordRulesArr), minLength(requiredLength), maxLength(128)]; +} + +function getRuleFn(injector: Injector) { + const configState = injector.get(ConfigStateService); + + return (key: string) => { + const passwordRules: ABP.Dictionary = configState.getSettings('Identity.Password'); + + return (passwordRules[`Abp.Identity.Password.${key}`] || '').toLowerCase(); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/widget-utils.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/widget-utils.ts new file mode 100644 index 0000000000..dfe81c973c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/widget-utils.ts @@ -0,0 +1,16 @@ +import { ReplaySubject } from 'rxjs'; + +export function getRandomBackgroundColor(count) { + const colors = []; + + for (let i = 0; i < count; i++) { + const r = ((i + 5) * (i + 5) * 474) % 255; + const g = ((i + 5) * (i + 5) * 1600) % 255; + const b = ((i + 5) * (i + 5) * 84065) % 255; + colors.push('rgba(' + r + ', ' + g + ', ' + b + ', 0.7)'); + } + + return colors; +} + +export const chartJsLoaded$ = new ReplaySubject(1); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/public-api.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/public-api.ts new file mode 100644 index 0000000000..845655402d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/public-api.ts @@ -0,0 +1,17 @@ +/* + * Public API Surface of theme-shared + */ + +export * from './lib/animations'; +export * from './lib/components'; +export { BOOTSTRAP } from './lib/constants/styles'; +export * from './lib/constants/validation'; +export * from './lib/directives'; +export * from './lib/enums'; +export * from './lib/handlers'; +export * from './lib/models'; +export * from './lib/providers'; +export * from './lib/services'; +export * from './lib/theme-shared.module'; +export * from './lib/tokens'; +export * from './lib/utils'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/styles/bootstrap-rtl.min.css b/npm/ng-packs/nx/ng-packs/libs/theme-shared/styles/bootstrap-rtl.min.css new file mode 100644 index 0000000000..710ef6b9e3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/styles/bootstrap-rtl.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.5.2 (https://getbootstrap.com/) + * Copyright 2011-2020 The Bootstrap Authors + * Copyright 2011-2020 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-family-monospace:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::after,*::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0, 0, 0, 0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:0.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:0.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:0.75rem;padding-bottom:0.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:0.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}[type="button"],[type="reset"],[type="submit"],button{-webkit-appearance:button}[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled),button:not(:disabled){cursor:pointer}[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:0.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:0.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0, 0, 0, 0.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:0.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:0.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:0.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:0.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:0.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a > code{color:inherit}kbd{padding:0.2rem 0.4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:0.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width: 576px){.container,.container-sm{max-width:540px}}@media (min-width: 768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width: 992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width: 1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters > .col,.no-gutters > [class*="col-"]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1 > *{flex:0 0 100%;max-width:100%}.row-cols-2 > *{flex:0 0 50%;max-width:50%}.row-cols-3 > *{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4 > *{flex:0 0 25%;max-width:25%}.row-cols-5 > *{flex:0 0 20%;max-width:20%}.row-cols-6 > *{flex:0 0 16.666667%;max-width:16.666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.333333%;max-width:8.333333%}.col-2{flex:0 0 16.666667%;max-width:16.666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.333333%;max-width:33.333333%}.col-5{flex:0 0 41.666667%;max-width:41.666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.333333%;max-width:58.333333%}.col-8{flex:0 0 66.666667%;max-width:66.666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.333333%;max-width:83.333333%}.col-11{flex:0 0 91.666667%;max-width:91.666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width: 576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1 > *{flex:0 0 100%;max-width:100%}.row-cols-sm-2 > *{flex:0 0 50%;max-width:50%}.row-cols-sm-3 > *{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4 > *{flex:0 0 25%;max-width:25%}.row-cols-sm-5 > *{flex:0 0 20%;max-width:20%}.row-cols-sm-6 > *{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width: 768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1 > *{flex:0 0 100%;max-width:100%}.row-cols-md-2 > *{flex:0 0 50%;max-width:50%}.row-cols-md-3 > *{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4 > *{flex:0 0 25%;max-width:25%}.row-cols-md-5 > *{flex:0 0 20%;max-width:20%}.row-cols-md-6 > *{flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width: 992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1 > *{flex:0 0 100%;max-width:100%}.row-cols-lg-2 > *{flex:0 0 50%;max-width:50%}.row-cols-lg-3 > *{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4 > *{flex:0 0 25%;max-width:25%}.row-cols-lg-5 > *{flex:0 0 20%;max-width:20%}.row-cols-lg-6 > *{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width: 1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1 > *{flex:0 0 100%;max-width:100%}.row-cols-xl-2 > *{flex:0 0 50%;max-width:50%}.row-cols-xl-3 > *{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4 > *{flex:0 0 25%;max-width:25%}.row-cols-xl-5 > *{flex:0 0 20%;max-width:20%}.row-cols-xl-6 > *{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:0.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody + tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:0.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody + tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0, 0, 0, 0.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0, 0, 0, 0.075)}.table-primary,.table-primary > td,.table-primary > th{background-color:#b8daff}.table-primary tbody + tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover > td,.table-hover .table-primary:hover > th{background-color:#9fcdff}.table-secondary,.table-secondary > td,.table-secondary > th{background-color:#d6d8db}.table-secondary tbody + tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover > td,.table-hover .table-secondary:hover > th{background-color:#c8cbcf}.table-success,.table-success > td,.table-success > th{background-color:#c3e6cb}.table-success tbody + tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover > td,.table-hover .table-success:hover > th{background-color:#b1dfbb}.table-info,.table-info > td,.table-info > th{background-color:#bee5eb}.table-info tbody + tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover > td,.table-hover .table-info:hover > th{background-color:#abdde5}.table-warning,.table-warning > td,.table-warning > th{background-color:#ffeeba}.table-warning tbody + tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover > td,.table-hover .table-warning:hover > th{background-color:#ffe8a1}.table-danger,.table-danger > td,.table-danger > th{background-color:#f5c6cb}.table-danger tbody + tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover > td,.table-hover .table-danger:hover > th{background-color:#f1b0b7}.table-light,.table-light > td,.table-light > th{background-color:#fdfdfe}.table-light tbody + tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover > td,.table-hover .table-light:hover > th{background-color:#ececf6}.table-dark,.table-dark > td,.table-dark > th{background-color:#c6c8ca}.table-dark tbody + tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover > td,.table-hover .table-dark:hover > th{background-color:#b9bbbe}.table-active,.table-active > td,.table-active > th{background-color:rgba(0, 0, 0, 0.075)}.table-hover .table-active:hover{background-color:rgba(0, 0, 0, 0.075)}.table-hover .table-active:hover > td,.table-hover .table-active:hover > th{background-color:rgba(0, 0, 0, 0.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255, 255, 255, 0.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255, 255, 255, 0.075)}@media (max-width: 575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm > .table-bordered{border:0}}@media (max-width: 767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md > .table-bordered{border:0}}@media (max-width: 991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg > .table-bordered{border:0}}@media (max-width: 1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl > .table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive > .table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + 0.75rem + 2px);padding:0.375rem 0.75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:0.25rem;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 0.2rem rgba(0, 123, 255, 0.25)}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:0.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + 0.5rem + 2px);padding:0.25rem 0.5rem;font-size:0.875rem;line-height:1.5;border-radius:0.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:0.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:0.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:0.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row > .col,.form-row > [class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:0.3rem;margin-left:-1.25rem}.form-check-input:disabled ~ .form-check-label,.form-check-input[disabled] ~ .form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:0.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:0.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:0.1rem;font-size:0.875rem;line-height:1.5;color:#fff;background-color:rgba(40, 167, 69, 0.9);border-radius:0.25rem}.form-row > .col > .valid-tooltip,.form-row > [class*="col-"] > .valid-tooltip{left:5px}.is-valid ~ .valid-feedback,.is-valid ~ .valid-tooltip,.was-validated:valid ~ .valid-feedback,.was-validated:valid ~ .valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 0.2rem rgba(40, 167, 69, 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(0.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 0.2rem rgba(40, 167, 69, 0.25)}.form-check-input.is-valid ~ .form-check-label,.was-validated .form-check-input:valid ~ .form-check-label{color:#28a745}.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip,.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip{display:block}.custom-control-input.is-valid ~ .custom-control-label,.was-validated .custom-control-input:valid ~ .custom-control-label{color:#28a745}.custom-control-input.is-valid ~ .custom-control-label::before,.was-validated .custom-control-input:valid ~ .custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked ~ .custom-control-label::before,.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus ~ .custom-control-label::before,.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before{box-shadow:0 0 0 0.2rem rgba(40, 167, 69, 0.25)}.custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid ~ .custom-file-label,.was-validated .custom-file-input:valid ~ .custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus ~ .custom-file-label,.was-validated .custom-file-input:valid:focus ~ .custom-file-label{border-color:#28a745;box-shadow:0 0 0 0.2rem rgba(40, 167, 69, 0.25)}.invalid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:0.1rem;font-size:0.875rem;line-height:1.5;color:#fff;background-color:rgba(220, 53, 69, 0.9);border-radius:0.25rem}.form-row > .col > .invalid-tooltip,.form-row > [class*="col-"] > .invalid-tooltip{left:5px}.is-invalid ~ .invalid-feedback,.is-invalid ~ .invalid-tooltip,.was-validated:invalid ~ .invalid-feedback,.was-validated:invalid ~ .invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 0.2rem rgba(220, 53, 69, 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(0.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 0.2rem rgba(220, 53, 69, 0.25)}.form-check-input.is-invalid ~ .form-check-label,.was-validated .form-check-input:invalid ~ .form-check-label{color:#dc3545}.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip,.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip{display:block}.custom-control-input.is-invalid ~ .custom-control-label,.was-validated .custom-control-input:invalid ~ .custom-control-label{color:#dc3545}.custom-control-input.is-invalid ~ .custom-control-label::before,.was-validated .custom-control-input:invalid ~ .custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked ~ .custom-control-label::before,.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus ~ .custom-control-label::before,.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before{box-shadow:0 0 0 0.2rem rgba(220, 53, 69, 0.25)}.custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid ~ .custom-file-label,.was-validated .custom-file-input:invalid ~ .custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus ~ .custom-file-label,.was-validated .custom-file-input:invalid:focus ~ .custom-file-label{border-color:#dc3545;box-shadow:0 0 0 0.2rem rgba(220, 53, 69, 0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:0.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:0.375rem 0.75rem;font-size:1rem;line-height:1.5;border-radius:0.25rem;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 0.2rem rgba(0, 123, 255, 0.25)}.btn.disabled,.btn:disabled{opacity:0.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 0.2rem rgba(38, 143, 255, 0.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show > .btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show > .btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(38, 143, 255, 0.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 0.2rem rgba(130, 138, 145, 0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show > .btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show > .btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(130, 138, 145, 0.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 0.2rem rgba(72, 180, 97, 0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show > .btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show > .btn-success.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(72, 180, 97, 0.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 0.2rem rgba(58, 176, 195, 0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show > .btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show > .btn-info.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(58, 176, 195, 0.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 0.2rem rgba(222, 170, 12, 0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show > .btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show > .btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(222, 170, 12, 0.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 0.2rem rgba(225, 83, 97, 0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show > .btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show > .btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(225, 83, 97, 0.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 0.2rem rgba(216, 217, 219, 0.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show > .btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show > .btn-light.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(216, 217, 219, 0.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 0.2rem rgba(82, 88, 93, 0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show > .btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show > .btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(82, 88, 93, 0.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 0.2rem rgba(0, 123, 255, 0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show > .btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show > .btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(0, 123, 255, 0.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 0.2rem rgba(108, 117, 125, 0.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show > .btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show > .btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(108, 117, 125, 0.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 0.2rem rgba(40, 167, 69, 0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show > .btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show > .btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(40, 167, 69, 0.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 0.2rem rgba(23, 162, 184, 0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show > .btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show > .btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(23, 162, 184, 0.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 0.2rem rgba(255, 193, 7, 0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show > .btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show > .btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(255, 193, 7, 0.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 0.2rem rgba(220, 53, 69, 0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show > .btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show > .btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(220, 53, 69, 0.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 0.2rem rgba(248, 249, 250, 0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show > .btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show > .btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(248, 249, 250, 0.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 0.2rem rgba(52, 58, 64, 0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show > .btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show > .btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 0.2rem rgba(52, 58, 64, 0.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg > .btn,.btn-lg{padding:0.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:0.3rem}.btn-group-sm > .btn,.btn-sm{padding:0.25rem 0.5rem;font-size:0.875rem;line-height:1.5;border-radius:0.2rem}.btn-block{display:block;width:100%}.btn-block + .btn-block{margin-top:0.5rem}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid;border-right:0.3em solid transparent;border-bottom:0;border-left:0.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:0.5rem 0;margin:0.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0, 0, 0, 0.15);border-radius:0.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:0.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0;border-right:0.3em solid transparent;border-bottom:0.3em solid;border-left:0.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:0.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid transparent;border-right:0;border-bottom:0.3em solid transparent;border-left:0.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:0.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:0.255em;vertical-align:0.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid transparent;border-right:0.3em solid;border-bottom:0.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^="top"],.dropdown-menu[x-placement^="right"],.dropdown-menu[x-placement^="bottom"],.dropdown-menu[x-placement^="left"]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:0.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:0.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:0.5rem 1.5rem;margin-bottom:0;font-size:0.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:0.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group > .btn,.btn-group-vertical > .btn{position:relative;flex:1 1 auto}.btn-group > .btn:hover,.btn-group-vertical > .btn:hover{z-index:1}.btn-group > .btn.active,.btn-group > .btn:active,.btn-group > .btn:focus,.btn-group-vertical > .btn.active,.btn-group-vertical > .btn:active,.btn-group-vertical > .btn:focus{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group > .btn-group:not(:first-child),.btn-group > .btn:not(:first-child){margin-left:-1px}.btn-group > .btn-group:not(:last-child) > .btn,.btn-group > .btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group > .btn-group:not(:first-child) > .btn,.btn-group > .btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:0.5625rem;padding-left:0.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm > .btn + .dropdown-toggle-split,.btn-sm + .dropdown-toggle-split{padding-right:0.375rem;padding-left:0.375rem}.btn-group-lg > .btn + .dropdown-toggle-split,.btn-lg + .dropdown-toggle-split{padding-right:0.75rem;padding-left:0.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical > .btn,.btn-group-vertical > .btn-group{width:100%}.btn-group-vertical > .btn-group:not(:first-child),.btn-group-vertical > .btn:not(:first-child){margin-top:-1px}.btn-group-vertical > .btn-group:not(:last-child) > .btn,.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical > .btn-group:not(:first-child) > .btn,.btn-group-vertical > .btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle > .btn,.btn-group-toggle > .btn-group > .btn{margin-bottom:0}.btn-group-toggle > .btn input[type="radio"],.btn-group-toggle > .btn input[type="checkbox"],.btn-group-toggle > .btn-group > .btn input[type="radio"],.btn-group-toggle > .btn-group > .btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group > .custom-file,.input-group > .custom-select,.input-group > .form-control,.input-group > .form-control-plaintext{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group > .custom-file + .custom-file,.input-group > .custom-file + .custom-select,.input-group > .custom-file + .form-control,.input-group > .custom-select + .custom-file,.input-group > .custom-select + .custom-select,.input-group > .custom-select + .form-control,.input-group > .form-control + .custom-file,.input-group > .form-control + .custom-select,.input-group > .form-control + .form-control,.input-group > .form-control-plaintext + .custom-file,.input-group > .form-control-plaintext + .custom-select,.input-group > .form-control-plaintext + .form-control{margin-left:-1px}.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label,.input-group > .custom-select:focus,.input-group > .form-control:focus{z-index:3}.input-group > .custom-file .custom-file-input:focus{z-index:4}.input-group > .custom-select:not(:first-child),.input-group > .form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group > .custom-file{display:flex;align-items:center}.input-group > .custom-file:not(:first-child) .custom-file-label,.input-group > .custom-file:not(:last-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label::after,.input-group:not(.has-validation) > .custom-select:not(:last-child),.input-group:not(.has-validation) > .form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation > .custom-file:nth-last-child(n + 3) .custom-file-label::after,.input-group.has-validation > .custom-select:nth-last-child(n + 3),.input-group.has-validation > .form-control:nth-last-child(n + 3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn + .btn,.input-group-append .btn + .input-group-text,.input-group-append .input-group-text + .btn,.input-group-append .input-group-text + .input-group-text,.input-group-prepend .btn + .btn,.input-group-prepend .btn + .input-group-text,.input-group-prepend .input-group-text + .btn,.input-group-prepend .input-group-text + .input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:0.375rem 0.75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:0.25rem}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group-lg > .custom-select,.input-group-lg > .form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg > .custom-select,.input-group-lg > .form-control,.input-group-lg > .input-group-append > .btn,.input-group-lg > .input-group-append > .input-group-text,.input-group-lg > .input-group-prepend > .btn,.input-group-lg > .input-group-prepend > .input-group-text{padding:0.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:0.3rem}.input-group-sm > .custom-select,.input-group-sm > .form-control:not(textarea){height:calc(1.5em + 0.5rem + 2px)}.input-group-sm > .custom-select,.input-group-sm > .form-control,.input-group-sm > .input-group-append > .btn,.input-group-sm > .input-group-append > .input-group-text,.input-group-sm > .input-group-prepend > .btn,.input-group-sm > .input-group-prepend > .input-group-text{padding:0.25rem 0.5rem;font-size:0.875rem;line-height:1.5;border-radius:0.2rem}.input-group-lg > .custom-select,.input-group-sm > .custom-select{padding-right:1.75rem}.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),.input-group > .input-group-append:last-child > .input-group-text:not(:last-child),.input-group > .input-group-prepend > .btn,.input-group > .input-group-prepend > .input-group-text,.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group > .input-group-append > .btn,.input-group > .input-group-append > .input-group-text,.input-group > .input-group-prepend:first-child > .btn:not(:first-child),.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child),.input-group > .input-group-prepend:not(:first-child) > .btn,.input-group > .input-group-prepend:not(:first-child) > .input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus ~ .custom-control-label::before{box-shadow:0 0 0 0.2rem rgba(0, 123, 255, 0.25)}.custom-control-input:focus:not(:checked) ~ .custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active ~ .custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled ~ .custom-control-label,.custom-control-input[disabled] ~ .custom-control-label{color:#6c757d}.custom-control-input:disabled ~ .custom-control-label::before,.custom-control-input[disabled] ~ .custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:0.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:0.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50% / 50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:0.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0, 123, 255, 0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(0, 123, 255, 0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0, 123, 255, 0.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:0.5rem}.custom-switch .custom-control-label::after{top:calc(0.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:0.5rem;transition:transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked ~ .custom-control-label::after{background-color:#fff;transform:translateX(0.75rem)}.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0, 123, 255, 0.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + 0.75rem + 2px);padding:0.375rem 1.75rem 0.375rem 0.75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:0.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 0.2rem rgba(0, 123, 255, 0.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:0.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + 0.5rem + 2px);padding-top:0.25rem;padding-bottom:0.25rem;padding-left:0.5rem;font-size:0.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:0.5rem;padding-bottom:0.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + 0.75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + 0.75rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#80bdff;box-shadow:0 0 0 0.2rem rgba(0, 123, 255, 0.25)}.custom-file-input:disabled ~ .custom-file-label,.custom-file-input[disabled] ~ .custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-input ~ .custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + 0.75rem + 2px);padding:0.375rem 0.75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:0.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + 0.75rem);padding:0.375rem 0.75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 0.25rem 0.25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:0.2rem;margin-left:0.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:0.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:0.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:0.25rem;border-top-right-radius:0.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:0.25rem}.nav-pills .nav-link.active,.nav-pills .show > .nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill > .nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified > .nav-link{flex-basis:0;flex-grow:1;text-align:center}.tab-content > .tab-pane{display:none}.tab-content > .active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:0.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:0.3125rem;padding-bottom:0.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:0.5rem;padding-bottom:0.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:0.25rem 0.75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:0.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50% / 100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width: 575.98px){.navbar-expand-sm > .container,.navbar-expand-sm > .container-fluid,.navbar-expand-sm > .container-lg,.navbar-expand-sm > .container-md,.navbar-expand-sm > .container-sm,.navbar-expand-sm > .container-xl{padding-right:0;padding-left:0}}@media (min-width: 576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-sm > .container,.navbar-expand-sm > .container-fluid,.navbar-expand-sm > .container-lg,.navbar-expand-sm > .container-md,.navbar-expand-sm > .container-sm,.navbar-expand-sm > .container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 767.98px){.navbar-expand-md > .container,.navbar-expand-md > .container-fluid,.navbar-expand-md > .container-lg,.navbar-expand-md > .container-md,.navbar-expand-md > .container-sm,.navbar-expand-md > .container-xl{padding-right:0;padding-left:0}}@media (min-width: 768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-md > .container,.navbar-expand-md > .container-fluid,.navbar-expand-md > .container-lg,.navbar-expand-md > .container-md,.navbar-expand-md > .container-sm,.navbar-expand-md > .container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 991.98px){.navbar-expand-lg > .container,.navbar-expand-lg > .container-fluid,.navbar-expand-lg > .container-lg,.navbar-expand-lg > .container-md,.navbar-expand-lg > .container-sm,.navbar-expand-lg > .container-xl{padding-right:0;padding-left:0}}@media (min-width: 992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-lg > .container,.navbar-expand-lg > .container-fluid,.navbar-expand-lg > .container-lg,.navbar-expand-lg > .container-md,.navbar-expand-lg > .container-sm,.navbar-expand-lg > .container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 1199.98px){.navbar-expand-xl > .container,.navbar-expand-xl > .container-fluid,.navbar-expand-xl > .container-lg,.navbar-expand-xl > .container-md,.navbar-expand-xl > .container-sm,.navbar-expand-xl > .container-xl{padding-right:0;padding-left:0}}@media (min-width: 1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-xl > .container,.navbar-expand-xl > .container-fluid,.navbar-expand-xl > .container-lg,.navbar-expand-xl > .container-md,.navbar-expand-xl > .container-sm,.navbar-expand-xl > .container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand > .container,.navbar-expand > .container-fluid,.navbar-expand > .container-lg,.navbar-expand > .container-md,.navbar-expand > .container-sm,.navbar-expand > .container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand > .container,.navbar-expand > .container-fluid,.navbar-expand > .container-lg,.navbar-expand > .container-md,.navbar-expand > .container-sm,.navbar-expand > .container-xl{flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0, 0, 0, 0.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0, 0, 0, 0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0, 0, 0, 0.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0, 0, 0, 0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0, 0, 0, 0.3)}.navbar-light .navbar-nav .active > .nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show > .nav-link{color:rgba(0, 0, 0, 0.9)}.navbar-light .navbar-toggler{color:rgba(0, 0, 0, 0.5);border-color:rgba(0, 0, 0, 0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0, 0, 0, 0.5)}.navbar-light .navbar-text a{color:rgba(0, 0, 0, 0.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0, 0, 0, 0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255, 255, 255, 0.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255, 255, 255, 0.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255, 255, 255, 0.25)}.navbar-dark .navbar-nav .active > .nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show > .nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255, 255, 255, 0.5);border-color:rgba(255, 255, 255, 0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255, 255, 255, 0.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0, 0, 0, 0.125);border-radius:0.25rem}.card > hr{margin-right:0;margin-left:0}.card > .list-group{border-top:inherit;border-bottom:inherit}.card > .list-group:first-child{border-top-width:0;border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card > .list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card > .card-header + .list-group,.card > .list-group + .card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:0.75rem}.card-subtitle{margin-top:-0.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link + .card-link{margin-left:1.25rem}.card-header{padding:0.75rem 1.25rem;margin-bottom:0;background-color:rgba(0, 0, 0, 0.03);border-bottom:1px solid rgba(0, 0, 0, 0.125)}.card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-footer{padding:0.75rem 1.25rem;background-color:rgba(0, 0, 0, 0.03);border-top:1px solid rgba(0, 0, 0, 0.125)}.card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-right:-0.625rem;margin-bottom:-0.75rem;margin-left:-0.625rem;border-bottom:0}.card-header-pills{margin-right:-0.625rem;margin-left:-0.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(0.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width: 576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{flex:1 0 0;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group > .card{margin-bottom:15px}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group > .card{flex:1 0 0;margin-bottom:0}.card-group > .card + .card{margin-left:0;border-left:0}.card-group > .card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group > .card:not(:last-child) .card-header,.card-group > .card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group > .card:not(:last-child) .card-footer,.card-group > .card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group > .card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group > .card:not(:first-child) .card-header,.card-group > .card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group > .card:not(:first-child) .card-footer,.card-group > .card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:0.75rem}@media (min-width: 576px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion > .card{overflow:hidden}.accordion > .card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion > .card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion > .card > .card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:0.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:0.25rem}.breadcrumb-item + .breadcrumb-item{padding-left:0.5rem}.breadcrumb-item + .breadcrumb-item::before{float:left;padding-right:0.5rem;color:#6c757d;content:"/"}.breadcrumb-item + .breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item + .breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:0.25rem}.page-link{position:relative;display:block;padding:0.5rem 0.75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 0.2rem rgba(0, 123, 255, 0.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:0.25rem;border-bottom-left-radius:0.25rem}.page-item:last-child .page-link{border-top-right-radius:0.25rem;border-bottom-right-radius:0.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:0.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:0.3rem;border-bottom-left-radius:0.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:0.3rem;border-bottom-right-radius:0.3rem}.pagination-sm .page-link{padding:0.25rem 0.5rem;font-size:0.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:0.2rem;border-bottom-left-radius:0.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:0.2rem;border-bottom-right-radius:0.2rem}.badge{display:inline-block;padding:0.25em 0.4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0.25rem;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:0.6em;padding-left:0.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 0.2rem rgba(0, 123, 255, 0.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 0.2rem rgba(108, 117, 125, 0.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 0.2rem rgba(40, 167, 69, 0.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 0.2rem rgba(23, 162, 184, 0.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 0.2rem rgba(255, 193, 7, 0.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 0.2rem rgba(220, 53, 69, 0.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 0.2rem rgba(248, 249, 250, 0.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 0.2rem rgba(52, 58, 64, 0.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:0.3rem}@media (min-width: 576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:0.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:0.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:0.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;line-height:0;font-size:0.75rem;background-color:#e9ecef;border-radius:0.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width 0.6s ease}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:0.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:0.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0, 0, 0, 0.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item + .list-group-item{border-top-width:0}.list-group-item + .list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal > .list-group-item:first-child{border-bottom-left-radius:0.25rem;border-top-right-radius:0}.list-group-horizontal > .list-group-item:last-child{border-top-right-radius:0.25rem;border-bottom-left-radius:0}.list-group-horizontal > .list-group-item.active{margin-top:0}.list-group-horizontal > .list-group-item + .list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal > .list-group-item + .list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm > .list-group-item:first-child{border-bottom-left-radius:0.25rem;border-top-right-radius:0}.list-group-horizontal-sm > .list-group-item:last-child{border-top-right-radius:0.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm > .list-group-item.active{margin-top:0}.list-group-horizontal-sm > .list-group-item + .list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm > .list-group-item + .list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md > .list-group-item:first-child{border-bottom-left-radius:0.25rem;border-top-right-radius:0}.list-group-horizontal-md > .list-group-item:last-child{border-top-right-radius:0.25rem;border-bottom-left-radius:0}.list-group-horizontal-md > .list-group-item.active{margin-top:0}.list-group-horizontal-md > .list-group-item + .list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md > .list-group-item + .list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg > .list-group-item:first-child{border-bottom-left-radius:0.25rem;border-top-right-radius:0}.list-group-horizontal-lg > .list-group-item:last-child{border-top-right-radius:0.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg > .list-group-item.active{margin-top:0}.list-group-horizontal-lg > .list-group-item + .list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg > .list-group-item + .list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl > .list-group-item:first-child{border-bottom-left-radius:0.25rem;border-top-right-radius:0}.list-group-horizontal-xl > .list-group-item:last-child{border-top-right-radius:0.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl > .list-group-item.active{margin-top:0}.list-group-horizontal-xl > .list-group-item + .list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl > .list-group-item + .list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush > .list-group-item{border-width:0 0 1px}.list-group-flush > .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:0.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:0.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{flex-basis:350px;max-width:350px;font-size:0.875rem;background-color:rgba(255, 255, 255, 0.85);background-clip:padding-box;border:1px solid rgba(0, 0, 0, 0.1);box-shadow:0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);opacity:0;border-radius:0.25rem}.toast:not(:last-child){margin-bottom:0.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:0.25rem 0.75rem;color:#6c757d;background-color:rgba(255, 255, 255, 0.85);background-clip:padding-box;border-bottom:1px solid rgba(0, 0, 0, 0.05);border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.toast-body{padding:0.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:0.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0, 0, 0, 0.2);border-radius:0.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:0.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:0.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(0.3rem - 1px);border-bottom-left-radius:calc(0.3rem - 1px)}.modal-footer > *{margin:0.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width: 1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:0.9}.tooltip .arrow{position:absolute;display:block;width:0.8rem;height:0.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^="top"],.bs-tooltip-top{padding:0.4rem 0}.bs-tooltip-auto[x-placement^="top"] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^="top"] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:0.4rem 0.4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^="right"],.bs-tooltip-right{padding:0 0.4rem}.bs-tooltip-auto[x-placement^="right"] .arrow,.bs-tooltip-right .arrow{left:0;width:0.4rem;height:0.8rem}.bs-tooltip-auto[x-placement^="right"] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:0.4rem 0.4rem 0.4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^="bottom"],.bs-tooltip-bottom{padding:0.4rem 0}.bs-tooltip-auto[x-placement^="bottom"] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^="bottom"] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 0.4rem 0.4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^="left"],.bs-tooltip-left{padding:0 0.4rem}.bs-tooltip-auto[x-placement^="left"] .arrow,.bs-tooltip-left .arrow{right:0;width:0.4rem;height:0.8rem}.bs-tooltip-auto[x-placement^="left"] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:0.4rem 0 0.4rem 0.4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:0.25rem 0.5rem;color:#fff;text-align:center;background-color:#000;border-radius:0.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0, 0, 0, 0.2);border-radius:0.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:0.5rem;margin:0 0.3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^="top"],.bs-popover-top{margin-bottom:0.5rem}.bs-popover-auto[x-placement^="top"] > .arrow,.bs-popover-top > .arrow{bottom:calc(-0.5rem - 1px)}.bs-popover-auto[x-placement^="top"] > .arrow::before,.bs-popover-top > .arrow::before{bottom:0;border-width:0.5rem 0.5rem 0;border-top-color:rgba(0, 0, 0, 0.25)}.bs-popover-auto[x-placement^="top"] > .arrow::after,.bs-popover-top > .arrow::after{bottom:1px;border-width:0.5rem 0.5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^="right"],.bs-popover-right{margin-left:0.5rem}.bs-popover-auto[x-placement^="right"] > .arrow,.bs-popover-right > .arrow{left:calc(-0.5rem - 1px);width:0.5rem;height:1rem;margin:0.3rem 0}.bs-popover-auto[x-placement^="right"] > .arrow::before,.bs-popover-right > .arrow::before{left:0;border-width:0.5rem 0.5rem 0.5rem 0;border-right-color:rgba(0, 0, 0, 0.25)}.bs-popover-auto[x-placement^="right"] > .arrow::after,.bs-popover-right > .arrow::after{left:1px;border-width:0.5rem 0.5rem 0.5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^="bottom"],.bs-popover-bottom{margin-top:0.5rem}.bs-popover-auto[x-placement^="bottom"] > .arrow,.bs-popover-bottom > .arrow{top:calc(-0.5rem - 1px)}.bs-popover-auto[x-placement^="bottom"] > .arrow::before,.bs-popover-bottom > .arrow::before{top:0;border-width:0 0.5rem 0.5rem 0.5rem;border-bottom-color:rgba(0, 0, 0, 0.25)}.bs-popover-auto[x-placement^="bottom"] > .arrow::after,.bs-popover-bottom > .arrow::after{top:1px;border-width:0 0.5rem 0.5rem 0.5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^="bottom"] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-0.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^="left"],.bs-popover-left{margin-right:0.5rem}.bs-popover-auto[x-placement^="left"] > .arrow,.bs-popover-left > .arrow{right:calc(-0.5rem - 1px);width:0.5rem;height:1rem;margin:0.3rem 0}.bs-popover-auto[x-placement^="left"] > .arrow::before,.bs-popover-left > .arrow::before{right:0;border-width:0.5rem 0 0.5rem 0.5rem;border-left-color:rgba(0, 0, 0, 0.25)}.bs-popover-auto[x-placement^="left"] > .arrow::after,.bs-popover-left > .arrow::after{right:1px;border-width:0.5rem 0 0.5rem 0.5rem;border-left-color:#fff}.popover-header{padding:0.5rem 0.75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:0.5rem 0.75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform 0.6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s 0.6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:0.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:0.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50% / 100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:0.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:0.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:0.75s linear infinite spinner-border;animation:0.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:0.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:0.75s linear infinite spinner-grow;animation:0.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#007bff !important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc !important}.bg-secondary{background-color:#6c757d !important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62 !important}.bg-success{background-color:#28a745 !important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34 !important}.bg-info{background-color:#17a2b8 !important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b !important}.bg-warning{background-color:#ffc107 !important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00 !important}.bg-danger{background-color:#dc3545 !important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130 !important}.bg-light{background-color:#f8f9fa !important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5 !important}.bg-dark{background-color:#343a40 !important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#007bff !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#28a745 !important}.border-info{border-color:#17a2b8 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#343a40 !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:0.2rem !important}.rounded{border-radius:0.25rem !important}.rounded-top{border-top-left-radius:0.25rem !important;border-top-right-radius:0.25rem !important}.rounded-right{border-top-right-radius:0.25rem !important;border-bottom-right-radius:0.25rem !important}.rounded-bottom{border-bottom-right-radius:0.25rem !important;border-bottom-left-radius:0.25rem !important}.rounded-left{border-top-left-radius:0.25rem !important;border-bottom-left-radius:0.25rem !important}.rounded-lg{border-radius:0.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 576px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 992px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 1200px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 576px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 992px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1200px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;-ms-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;-ms-user-select:none !important;user-select:none !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position: -webkit-sticky) or (position: sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0, 0, 0, 0.175) !important}.shadow-none{box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:0.25rem !important}.mt-1,.my-1{margin-top:0.25rem !important}.mr-1,.mx-1{margin-right:0.25rem !important}.mb-1,.my-1{margin-bottom:0.25rem !important}.ml-1,.mx-1{margin-left:0.25rem !important}.m-2{margin:0.5rem !important}.mt-2,.my-2{margin-top:0.5rem !important}.mr-2,.mx-2{margin-right:0.5rem !important}.mb-2,.my-2{margin-bottom:0.5rem !important}.ml-2,.mx-2{margin-left:0.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:0.25rem !important}.pt-1,.py-1{padding-top:0.25rem !important}.pr-1,.px-1{padding-right:0.25rem !important}.pb-1,.py-1{padding-bottom:0.25rem !important}.pl-1,.px-1{padding-left:0.25rem !important}.p-2{padding:0.5rem !important}.pt-2,.py-2{padding-top:0.5rem !important}.pr-2,.px-2{padding-right:0.5rem !important}.pb-2,.py-2{padding-bottom:0.5rem !important}.pl-2,.px-2{padding-left:0.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-0.25rem !important}.mt-n1,.my-n1{margin-top:-0.25rem !important}.mr-n1,.mx-n1{margin-right:-0.25rem !important}.mb-n1,.my-n1{margin-bottom:-0.25rem !important}.ml-n1,.mx-n1{margin-left:-0.25rem !important}.m-n2{margin:-0.5rem !important}.mt-n2,.my-n2{margin-top:-0.5rem !important}.mr-n2,.mx-n2{margin-right:-0.5rem !important}.mb-n2,.my-n2{margin-bottom:-0.5rem !important}.ml-n2,.mx-n2{margin-left:-0.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:0.25rem !important}.mt-sm-1,.my-sm-1{margin-top:0.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:0.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:0.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:0.25rem !important}.m-sm-2{margin:0.5rem !important}.mt-sm-2,.my-sm-2{margin-top:0.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:0.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:0.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:0.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:0.25rem !important}.pt-sm-1,.py-sm-1{padding-top:0.25rem !important}.pr-sm-1,.px-sm-1{padding-right:0.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:0.25rem !important}.pl-sm-1,.px-sm-1{padding-left:0.25rem !important}.p-sm-2{padding:0.5rem !important}.pt-sm-2,.py-sm-2{padding-top:0.5rem !important}.pr-sm-2,.px-sm-2{padding-right:0.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:0.5rem !important}.pl-sm-2,.px-sm-2{padding-left:0.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-0.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-0.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-0.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-0.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-0.25rem !important}.m-sm-n2{margin:-0.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-0.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-0.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-0.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-0.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:0.25rem !important}.mt-md-1,.my-md-1{margin-top:0.25rem !important}.mr-md-1,.mx-md-1{margin-right:0.25rem !important}.mb-md-1,.my-md-1{margin-bottom:0.25rem !important}.ml-md-1,.mx-md-1{margin-left:0.25rem !important}.m-md-2{margin:0.5rem !important}.mt-md-2,.my-md-2{margin-top:0.5rem !important}.mr-md-2,.mx-md-2{margin-right:0.5rem !important}.mb-md-2,.my-md-2{margin-bottom:0.5rem !important}.ml-md-2,.mx-md-2{margin-left:0.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:0.25rem !important}.pt-md-1,.py-md-1{padding-top:0.25rem !important}.pr-md-1,.px-md-1{padding-right:0.25rem !important}.pb-md-1,.py-md-1{padding-bottom:0.25rem !important}.pl-md-1,.px-md-1{padding-left:0.25rem !important}.p-md-2{padding:0.5rem !important}.pt-md-2,.py-md-2{padding-top:0.5rem !important}.pr-md-2,.px-md-2{padding-right:0.5rem !important}.pb-md-2,.py-md-2{padding-bottom:0.5rem !important}.pl-md-2,.px-md-2{padding-left:0.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-0.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-0.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-0.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-0.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-0.25rem !important}.m-md-n2{margin:-0.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-0.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-0.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-0.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-0.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:0.25rem !important}.mt-lg-1,.my-lg-1{margin-top:0.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:0.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:0.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:0.25rem !important}.m-lg-2{margin:0.5rem !important}.mt-lg-2,.my-lg-2{margin-top:0.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:0.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:0.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:0.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:0.25rem !important}.pt-lg-1,.py-lg-1{padding-top:0.25rem !important}.pr-lg-1,.px-lg-1{padding-right:0.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:0.25rem !important}.pl-lg-1,.px-lg-1{padding-left:0.25rem !important}.p-lg-2{padding:0.5rem !important}.pt-lg-2,.py-lg-2{padding-top:0.5rem !important}.pr-lg-2,.px-lg-2{padding-right:0.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:0.5rem !important}.pl-lg-2,.px-lg-2{padding-left:0.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-0.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-0.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-0.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-0.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-0.25rem !important}.m-lg-n2{margin:-0.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-0.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-0.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-0.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-0.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:0.25rem !important}.mt-xl-1,.my-xl-1{margin-top:0.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:0.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:0.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:0.25rem !important}.m-xl-2{margin:0.5rem !important}.mt-xl-2,.my-xl-2{margin-top:0.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:0.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:0.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:0.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:0.25rem !important}.pt-xl-1,.py-xl-1{padding-top:0.25rem !important}.pr-xl-1,.px-xl-1{padding-right:0.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:0.25rem !important}.pl-xl-1,.px-xl-1{padding-left:0.25rem !important}.p-xl-2{padding:0.5rem !important}.pt-xl-2,.py-xl-2{padding-top:0.5rem !important}.pr-xl-2,.px-xl-2{padding-right:0.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:0.5rem !important}.pl-xl-2,.px-xl-2{padding-left:0.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-0.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-0.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-0.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-0.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-0.25rem !important}.m-xl-n2{margin:-0.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-0.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-0.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-0.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-0.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0, 0, 0, 0)}.text-monospace{font-family:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 576px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#007bff !important}a.text-primary:focus,a.text-primary:hover{color:#0056b3 !important}.text-secondary{color:#6c757d !important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54 !important}.text-success{color:#28a745 !important}a.text-success:focus,a.text-success:hover{color:#19692c !important}.text-info{color:#17a2b8 !important}a.text-info:focus,a.text-info:hover{color:#0f6674 !important}.text-warning{color:#ffc107 !important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00 !important}.text-danger{color:#dc3545 !important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a !important}.text-light{color:#f8f9fa !important}a.text-light:focus,a.text-light:hover{color:#cbd3da !important}.text-dark{color:#343a40 !important}a.text-dark:focus,a.text-dark:hover{color:#121416 !important}.text-body{color:#212529 !important}.text-muted{color:#6c757d !important}.text-black-50{color:rgba(0, 0, 0, 0.5) !important}.text-white-50{color:rgba(255, 255, 255, 0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-break{word-break:break-word !important;word-wrap:break-word !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::after,*::before{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6 !important}.table-dark{color:inherit}.table-dark tbody + tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}.rtl,[dir="rtl"]{text-align:right;direction:rtl}.rtl .nav,[dir="rtl"] .nav{padding-right:0}.rtl .navbar-nav .nav-item,[dir="rtl"] .navbar-nav .nav-item{float:right}.rtl .navbar-nav .nav-item + .nav-item,[dir="rtl"] .navbar-nav .nav-item + .nav-item{margin-right:inherit;margin-left:1rem}.rtl th,[dir="rtl"] th{text-align:right}.rtl .alert-dismissible,[dir="rtl"] .alert-dismissible{padding-right:1.25rem;padding-left:4rem}.rtl .dropdown-menu,[dir="rtl"] .dropdown-menu{right:0;left:inherit;text-align:right}.rtl .checkbox label,[dir="rtl"] .checkbox label{padding-right:1.25rem;padding-left:inherit}.rtl .btn-group > .btn-group:not(:first-child),.rtl .btn-group > .btn:not(:first-child),[dir="rtl"] .btn-group > .btn-group:not(:first-child),[dir="rtl"] .btn-group > .btn:not(:first-child){margin-left:initial;margin-right:-1px}.rtl .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle),[dir="rtl"] .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle){border-radius:0 0.25rem 0.25rem 0}.rtl .btn-group > .btn:last-child:not(:first-child),.rtl .btn-group > .dropdown-toggle:not(:first-child),[dir="rtl"] .btn-group > .btn:last-child:not(:first-child),[dir="rtl"] .btn-group > .dropdown-toggle:not(:first-child){border-radius:0.25rem 0 0 0.25rem}.rtl .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child,[dir="rtl"] .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child{border-radius:0.25rem 0 0 0.25rem}.rtl .custom-control,[dir="rtl"] .custom-control{padding-right:1.5rem;padding-left:inherit;margin-right:inherit;margin-left:1rem}.rtl .custom-control-indicator,[dir="rtl"] .custom-control-indicator{right:0;left:inherit}.rtl .custom-file-label::after,[dir="rtl"] .custom-file-label::after{right:initial;left:-1px;border-radius:0.25rem 0 0 0.25rem}.rtl .custom-control-label::after,.rtl .custom-control-label::before,[dir="rtl"] .custom-control-label::after,[dir="rtl"] .custom-control-label::before{right:-1.5rem;left:inherit}.rtl .custom-select,[dir="rtl"] .custom-select{padding:0.375rem 0.75rem 0.375rem 1.75rem;background:#fff url("data:image/svg+xml,") no-repeat left 0.75rem center;background-size:8px 10px}.rtl .custom-switch,[dir="rtl"] .custom-switch{padding-right:2.25rem;padding-left:inherit}.rtl .custom-switch .custom-control-label::before,[dir="rtl"] .custom-switch .custom-control-label::before{right:-2.25rem}.rtl .custom-switch .custom-control-label::after,[dir="rtl"] .custom-switch .custom-control-label::after{right:calc(-2.25rem + 2px)}.rtl .custom-switch .custom-control-input:checked ~ .custom-control-label::after,[dir="rtl"] .custom-switch .custom-control-input:checked ~ .custom-control-label::after{transform:translateX(-0.75rem)}.rtl .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),.rtl .input-group > .input-group-append:last-child > .input-group-text:not(:last-child),.rtl .input-group > .input-group-append:not(:last-child) > .btn,.rtl .input-group > .input-group-append:not(:last-child) > .input-group-text,.rtl .input-group > .input-group-prepend > .btn,.rtl .input-group > .input-group-prepend > .input-group-text,[dir="rtl"] .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),[dir="rtl"] .input-group > .input-group-append:last-child > .input-group-text:not(:last-child),[dir="rtl"] .input-group > .input-group-append:not(:last-child) > .btn,[dir="rtl"] .input-group > .input-group-append:not(:last-child) > .input-group-text,[dir="rtl"] .input-group > .input-group-prepend > .btn,[dir="rtl"] .input-group > .input-group-prepend > .input-group-text{border-radius:0 0.25rem 0.25rem 0}.rtl .input-group > .input-group-append > .btn,.rtl .input-group > .input-group-append > .input-group-text,.rtl .input-group > .input-group-prepend:first-child > .btn:not(:first-child),.rtl .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child),.rtl .input-group > .input-group-prepend:not(:first-child) > .btn,.rtl .input-group > .input-group-prepend:not(:first-child) > .input-group-text,[dir="rtl"] .input-group > .input-group-append > .btn,[dir="rtl"] .input-group > .input-group-append > .input-group-text,[dir="rtl"] .input-group > .input-group-prepend:first-child > .btn:not(:first-child),[dir="rtl"] .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child),[dir="rtl"] .input-group > .input-group-prepend:not(:first-child) > .btn,[dir="rtl"] .input-group > .input-group-prepend:not(:first-child) > .input-group-text{border-radius:0.25rem 0 0 0.25rem}.rtl .input-group > .custom-select:not(:first-child),.rtl .input-group > .form-control:not(:first-child),[dir="rtl"] .input-group > .custom-select:not(:first-child),[dir="rtl"] .input-group > .form-control:not(:first-child){border-radius:0.25rem 0 0 0.25rem}.rtl .input-group > .custom-select:not(:last-child),.rtl .input-group > .form-control:not(:last-child),[dir="rtl"] .input-group > .custom-select:not(:last-child),[dir="rtl"] .input-group > .form-control:not(:last-child){border-radius:0 0.25rem 0.25rem 0}.rtl .input-group > .custom-select:not(:last-child):not(:first-child),.rtl .input-group > .form-control:not(:last-child):not(:first-child),[dir="rtl"] .input-group > .custom-select:not(:last-child):not(:first-child),[dir="rtl"] .input-group > .form-control:not(:last-child):not(:first-child){border-radius:0}.rtl .checkbox input,.rtl .checkbox-inline input,.rtl .radio input,.rtl .radio-inline,[dir="rtl"] .radio input,[dir="rtl"] .radio-inline,[dir="rtl"] .checkbox input,[dir="rtl"] .checkbox-inline input{margin-right:-1.25rem;margin-left:inherit}.rtl .breadcrumb-item + .breadcrumb-item,[dir="rtl"] .breadcrumb-item + .breadcrumb-item{padding-right:0.5rem;padding-left:0;color:#6c757d;content:"/"}.rtl .breadcrumb-item + .breadcrumb-item::before,[dir="rtl"] .breadcrumb-item + .breadcrumb-item::before{padding-right:0;padding-left:0.5rem}.rtl .list-group,[dir="rtl"] .list-group{padding-right:0;padding-left:40px}.rtl .close,[dir="rtl"] .close{float:left}.rtl .modal-header .close,[dir="rtl"] .modal-header .close{margin:-15px auto -15px -15px}.rtl .modal-footer > :not(:first-child),[dir="rtl"] .modal-footer > :not(:first-child){margin-right:0.25rem}.rtl .modal-footer > :not(:last-child),[dir="rtl"] .modal-footer > :not(:last-child){margin-left:0.25rem}.rtl .modal-footer > :first-child,[dir="rtl"] .modal-footer > :first-child{margin-right:0}.rtl .modal-footer > :last-child,[dir="rtl"] .modal-footer > :last-child{margin-left:0}.rtl .alert-dismissible .close,[dir="rtl"] .alert-dismissible .close{right:inherit;left:0}.rtl .dropdown-toggle::after,[dir="rtl"] .dropdown-toggle::after{margin-right:0.255em;margin-left:0}.rtl .form-check-input,[dir="rtl"] .form-check-input{margin-right:-1.25rem;margin-left:inherit}.rtl .form-check-label,[dir="rtl"] .form-check-label{padding-right:1.25rem;padding-left:inherit}.rtl .list-inline,.rtl .list-unstyled,.rtl .pagination,[dir="rtl"] .pagination,[dir="rtl"] .list-unstyled,[dir="rtl"] .list-inline{padding-right:0;padding-left:inherit}.rtl .pagination .page-item:first-child .page-link,[dir="rtl"] .pagination .page-item:first-child .page-link{border-top-right-radius:0.25rem;border-bottom-right-radius:0.25rem;border-top-left-radius:0;border-bottom-left-radius:0}.rtl .pagination .page-item:last-child .page-link,[dir="rtl"] .pagination .page-item:last-child .page-link{border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:0.25rem;border-bottom-left-radius:0.25rem}.rtl .offset-1,[dir="rtl"] .offset-1{margin-right:8.333333%;margin-left:0}.rtl .offset-2,[dir="rtl"] .offset-2{margin-right:16.666667%;margin-left:0}.rtl .offset-3,[dir="rtl"] .offset-3{margin-right:25%;margin-left:0}.rtl .offset-4,[dir="rtl"] .offset-4{margin-right:33.333333%;margin-left:0}.rtl .offset-5,[dir="rtl"] .offset-5{margin-right:41.666667%;margin-left:0}.rtl .offset-6,[dir="rtl"] .offset-6{margin-right:50%;margin-left:0}.rtl .offset-7,[dir="rtl"] .offset-7{margin-right:58.333333%;margin-left:0}.rtl .offset-8,[dir="rtl"] .offset-8{margin-right:66.666667%;margin-left:0}.rtl .offset-9,[dir="rtl"] .offset-9{margin-right:75%;margin-left:0}.rtl .offset-10,[dir="rtl"] .offset-10{margin-right:83.333333%;margin-left:0}.rtl .offset-11,[dir="rtl"] .offset-11{margin-right:91.666667%;margin-left:0}@media (min-width: 576px){.rtl .offset-sm-0,[dir="rtl"] .offset-sm-0{margin-right:0;margin-left:0}.rtl .offset-sm-1,[dir="rtl"] .offset-sm-1{margin-right:8.333333%;margin-left:0}.rtl .offset-sm-2,[dir="rtl"] .offset-sm-2{margin-right:16.666667%;margin-left:0}.rtl .offset-sm-3,[dir="rtl"] .offset-sm-3{margin-right:25%;margin-left:0}.rtl .offset-sm-4,[dir="rtl"] .offset-sm-4{margin-right:33.333333%;margin-left:0}.rtl .offset-sm-5,[dir="rtl"] .offset-sm-5{margin-right:41.666667%;margin-left:0}.rtl .offset-sm-6,[dir="rtl"] .offset-sm-6{margin-right:50%;margin-left:0}.rtl .offset-sm-7,[dir="rtl"] .offset-sm-7{margin-right:58.333333%;margin-left:0}.rtl .offset-sm-8,[dir="rtl"] .offset-sm-8{margin-right:66.666667%;margin-left:0}.rtl .offset-sm-9,[dir="rtl"] .offset-sm-9{margin-right:75%;margin-left:0}.rtl .offset-sm-10,[dir="rtl"] .offset-sm-10{margin-right:83.333333%;margin-left:0}.rtl .offset-sm-11,[dir="rtl"] .offset-sm-11{margin-right:91.666667%;margin-left:0}}@media (min-width: 768px){.rtl .offset-md-0,[dir="rtl"] .offset-md-0{margin-right:0;margin-left:0}.rtl .offset-md-1,[dir="rtl"] .offset-md-1{margin-right:8.333333%;margin-left:0}.rtl .offset-md-2,[dir="rtl"] .offset-md-2{margin-right:16.666667%;margin-left:0}.rtl .offset-md-3,[dir="rtl"] .offset-md-3{margin-right:25%;margin-left:0}.rtl .offset-md-4,[dir="rtl"] .offset-md-4{margin-right:33.333333%;margin-left:0}.rtl .offset-md-5,[dir="rtl"] .offset-md-5{margin-right:41.666667%;margin-left:0}.rtl .offset-md-6,[dir="rtl"] .offset-md-6{margin-right:50%;margin-left:0}.rtl .offset-md-7,[dir="rtl"] .offset-md-7{margin-right:58.333333%;margin-left:0}.rtl .offset-md-8,[dir="rtl"] .offset-md-8{margin-right:66.666667%;margin-left:0}.rtl .offset-md-9,[dir="rtl"] .offset-md-9{margin-right:75%;margin-left:0}.rtl .offset-md-10,[dir="rtl"] .offset-md-10{margin-right:83.333333%;margin-left:0}.rtl .offset-md-11,[dir="rtl"] .offset-md-11{margin-right:91.666667%;margin-left:0}}@media (min-width: 992px){.rtl .offset-lg-0,[dir="rtl"] .offset-lg-0{margin-right:0;margin-left:0}.rtl .offset-lg-1,[dir="rtl"] .offset-lg-1{margin-right:8.333333%;margin-left:0}.rtl .offset-lg-2,[dir="rtl"] .offset-lg-2{margin-right:16.666667%;margin-left:0}.rtl .offset-lg-3,[dir="rtl"] .offset-lg-3{margin-right:25%;margin-left:0}.rtl .offset-lg-4,[dir="rtl"] .offset-lg-4{margin-right:33.333333%;margin-left:0}.rtl .offset-lg-5,[dir="rtl"] .offset-lg-5{margin-right:41.666667%;margin-left:0}.rtl .offset-lg-6,[dir="rtl"] .offset-lg-6{margin-right:50%;margin-left:0}.rtl .offset-lg-7,[dir="rtl"] .offset-lg-7{margin-right:58.333333%;margin-left:0}.rtl .offset-lg-8,[dir="rtl"] .offset-lg-8{margin-right:66.666667%;margin-left:0}.rtl .offset-lg-9,[dir="rtl"] .offset-lg-9{margin-right:75%;margin-left:0}.rtl .offset-lg-10,[dir="rtl"] .offset-lg-10{margin-right:83.333333%;margin-left:0}.rtl .offset-lg-11,[dir="rtl"] .offset-lg-11{margin-right:91.666667%;margin-left:0}}@media (min-width: 1200px){.rtl .offset-xl-0,[dir="rtl"] .offset-xl-0{margin-right:0;margin-left:0}.rtl .offset-xl-1,[dir="rtl"] .offset-xl-1{margin-right:8.333333%;margin-left:0}.rtl .offset-xl-2,[dir="rtl"] .offset-xl-2{margin-right:16.666667%;margin-left:0}.rtl .offset-xl-3,[dir="rtl"] .offset-xl-3{margin-right:25%;margin-left:0}.rtl .offset-xl-4,[dir="rtl"] .offset-xl-4{margin-right:33.333333%;margin-left:0}.rtl .offset-xl-5,[dir="rtl"] .offset-xl-5{margin-right:41.666667%;margin-left:0}.rtl .offset-xl-6,[dir="rtl"] .offset-xl-6{margin-right:50%;margin-left:0}.rtl .offset-xl-7,[dir="rtl"] .offset-xl-7{margin-right:58.333333%;margin-left:0}.rtl .offset-xl-8,[dir="rtl"] .offset-xl-8{margin-right:66.666667%;margin-left:0}.rtl .offset-xl-9,[dir="rtl"] .offset-xl-9{margin-right:75%;margin-left:0}.rtl .offset-xl-10,[dir="rtl"] .offset-xl-10{margin-right:83.333333%;margin-left:0}.rtl .offset-xl-11,[dir="rtl"] .offset-xl-11{margin-right:91.666667%;margin-left:0}}.rtl .mr-0,[dir="rtl"] .mr-0{margin-right:0 !important;margin-left:0 !important}.rtl .ml-0,[dir="rtl"] .ml-0{margin-left:0 !important;margin-right:0 !important}.rtl mx-0,[dir="rtl"] mx-0{margin-left:0 !important;margin-right:0 !important}.rtl .mr-1,[dir="rtl"] .mr-1{margin-right:0 !important;margin-left:0.25rem !important}.rtl .ml-1,[dir="rtl"] .ml-1{margin-left:0 !important;margin-right:0.25rem !important}.rtl mx-1,[dir="rtl"] mx-1{margin-left:0.25rem !important;margin-right:0.25rem !important}.rtl .mr-2,[dir="rtl"] .mr-2{margin-right:0 !important;margin-left:0.5rem !important}.rtl .ml-2,[dir="rtl"] .ml-2{margin-left:0 !important;margin-right:0.5rem !important}.rtl mx-2,[dir="rtl"] mx-2{margin-left:0.5rem !important;margin-right:0.5rem !important}.rtl .mr-3,[dir="rtl"] .mr-3{margin-right:0 !important;margin-left:1rem !important}.rtl .ml-3,[dir="rtl"] .ml-3{margin-left:0 !important;margin-right:1rem !important}.rtl mx-3,[dir="rtl"] mx-3{margin-left:1rem !important;margin-right:1rem !important}.rtl .mr-4,[dir="rtl"] .mr-4{margin-right:0 !important;margin-left:1.5rem !important}.rtl .ml-4,[dir="rtl"] .ml-4{margin-left:0 !important;margin-right:1.5rem !important}.rtl mx-4,[dir="rtl"] mx-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.rtl .mr-5,[dir="rtl"] .mr-5{margin-right:0 !important;margin-left:3rem !important}.rtl .ml-5,[dir="rtl"] .ml-5{margin-left:0 !important;margin-right:3rem !important}.rtl mx-5,[dir="rtl"] mx-5{margin-left:3rem !important;margin-right:3rem !important}.rtl .pr-0,[dir="rtl"] .pr-0{padding-right:0 !important;padding-left:0 !important}.rtl .pl-0,[dir="rtl"] .pl-0{padding-left:0 !important;padding-right:0 !important}.rtl px-0,[dir="rtl"] px-0{padding-left:0 !important;padding-right:0 !important}.rtl .pr-1,[dir="rtl"] .pr-1{padding-right:0 !important;padding-left:0.25rem !important}.rtl .pl-1,[dir="rtl"] .pl-1{padding-left:0 !important;padding-right:0.25rem !important}.rtl px-1,[dir="rtl"] px-1{padding-left:0.25rem !important;padding-right:0.25rem !important}.rtl .pr-2,[dir="rtl"] .pr-2{padding-right:0 !important;padding-left:0.5rem !important}.rtl .pl-2,[dir="rtl"] .pl-2{padding-left:0 !important;padding-right:0.5rem !important}.rtl px-2,[dir="rtl"] px-2{padding-left:0.5rem !important;padding-right:0.5rem !important}.rtl .pr-3,[dir="rtl"] .pr-3{padding-right:0 !important;padding-left:1rem !important}.rtl .pl-3,[dir="rtl"] .pl-3{padding-left:0 !important;padding-right:1rem !important}.rtl px-3,[dir="rtl"] px-3{padding-left:1rem !important;padding-right:1rem !important}.rtl .pr-4,[dir="rtl"] .pr-4{padding-right:0 !important;padding-left:1.5rem !important}.rtl .pl-4,[dir="rtl"] .pl-4{padding-left:0 !important;padding-right:1.5rem !important}.rtl px-4,[dir="rtl"] px-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.rtl .pr-5,[dir="rtl"] .pr-5{padding-right:0 !important;padding-left:3rem !important}.rtl .pl-5,[dir="rtl"] .pl-5{padding-left:0 !important;padding-right:3rem !important}.rtl px-5,[dir="rtl"] px-5{padding-left:3rem !important;padding-right:3rem !important}.rtl .mr-auto,[dir="rtl"] .mr-auto{margin-right:0 !important;margin-left:auto !important}.rtl .ml-auto,[dir="rtl"] .ml-auto{margin-right:auto !important;margin-left:0 !important}.rtl .mx-auto,[dir="rtl"] .mx-auto{margin-right:auto !important;margin-left:auto !important}@media (min-width: 576px){.rtl .mr-sm-0,[dir="rtl"] .mr-sm-0{margin-right:0 !important;margin-left:0 !important}.rtl .ml-sm-0,[dir="rtl"] .ml-sm-0{margin-left:0 !important;margin-right:0 !important}.rtl mx-sm-0,[dir="rtl"] mx-sm-0{margin-left:0 !important;margin-right:0 !important}.rtl .mr-sm-1,[dir="rtl"] .mr-sm-1{margin-right:0 !important;margin-left:0.25rem !important}.rtl .ml-sm-1,[dir="rtl"] .ml-sm-1{margin-left:0 !important;margin-right:0.25rem !important}.rtl mx-sm-1,[dir="rtl"] mx-sm-1{margin-left:0.25rem !important;margin-right:0.25rem !important}.rtl .mr-sm-2,[dir="rtl"] .mr-sm-2{margin-right:0 !important;margin-left:0.5rem !important}.rtl .ml-sm-2,[dir="rtl"] .ml-sm-2{margin-left:0 !important;margin-right:0.5rem !important}.rtl mx-sm-2,[dir="rtl"] mx-sm-2{margin-left:0.5rem !important;margin-right:0.5rem !important}.rtl .mr-sm-3,[dir="rtl"] .mr-sm-3{margin-right:0 !important;margin-left:1rem !important}.rtl .ml-sm-3,[dir="rtl"] .ml-sm-3{margin-left:0 !important;margin-right:1rem !important}.rtl mx-sm-3,[dir="rtl"] mx-sm-3{margin-left:1rem !important;margin-right:1rem !important}.rtl .mr-sm-4,[dir="rtl"] .mr-sm-4{margin-right:0 !important;margin-left:1.5rem !important}.rtl .ml-sm-4,[dir="rtl"] .ml-sm-4{margin-left:0 !important;margin-right:1.5rem !important}.rtl mx-sm-4,[dir="rtl"] mx-sm-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.rtl .mr-sm-5,[dir="rtl"] .mr-sm-5{margin-right:0 !important;margin-left:3rem !important}.rtl .ml-sm-5,[dir="rtl"] .ml-sm-5{margin-left:0 !important;margin-right:3rem !important}.rtl mx-sm-5,[dir="rtl"] mx-sm-5{margin-left:3rem !important;margin-right:3rem !important}.rtl .pr-sm-0,[dir="rtl"] .pr-sm-0{padding-right:0 !important;padding-left:0 !important}.rtl .pl-sm-0,[dir="rtl"] .pl-sm-0{padding-left:0 !important;padding-right:0 !important}.rtl px-sm-0,[dir="rtl"] px-sm-0{padding-left:0 !important;padding-right:0 !important}.rtl .pr-sm-1,[dir="rtl"] .pr-sm-1{padding-right:0 !important;padding-left:0.25rem !important}.rtl .pl-sm-1,[dir="rtl"] .pl-sm-1{padding-left:0 !important;padding-right:0.25rem !important}.rtl px-sm-1,[dir="rtl"] px-sm-1{padding-left:0.25rem !important;padding-right:0.25rem !important}.rtl .pr-sm-2,[dir="rtl"] .pr-sm-2{padding-right:0 !important;padding-left:0.5rem !important}.rtl .pl-sm-2,[dir="rtl"] .pl-sm-2{padding-left:0 !important;padding-right:0.5rem !important}.rtl px-sm-2,[dir="rtl"] px-sm-2{padding-left:0.5rem !important;padding-right:0.5rem !important}.rtl .pr-sm-3,[dir="rtl"] .pr-sm-3{padding-right:0 !important;padding-left:1rem !important}.rtl .pl-sm-3,[dir="rtl"] .pl-sm-3{padding-left:0 !important;padding-right:1rem !important}.rtl px-sm-3,[dir="rtl"] px-sm-3{padding-left:1rem !important;padding-right:1rem !important}.rtl .pr-sm-4,[dir="rtl"] .pr-sm-4{padding-right:0 !important;padding-left:1.5rem !important}.rtl .pl-sm-4,[dir="rtl"] .pl-sm-4{padding-left:0 !important;padding-right:1.5rem !important}.rtl px-sm-4,[dir="rtl"] px-sm-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.rtl .pr-sm-5,[dir="rtl"] .pr-sm-5{padding-right:0 !important;padding-left:3rem !important}.rtl .pl-sm-5,[dir="rtl"] .pl-sm-5{padding-left:0 !important;padding-right:3rem !important}.rtl px-sm-5,[dir="rtl"] px-sm-5{padding-left:3rem !important;padding-right:3rem !important}.rtl .mr-sm-auto,[dir="rtl"] .mr-sm-auto{margin-right:0 !important;margin-left:auto !important}.rtl .ml-sm-auto,[dir="rtl"] .ml-sm-auto{margin-right:auto !important;margin-left:0 !important}.rtl .mx-sm-auto,[dir="rtl"] .mx-sm-auto{margin-right:auto !important;margin-left:auto !important}}@media (min-width: 768px){.rtl .mr-md-0,[dir="rtl"] .mr-md-0{margin-right:0 !important;margin-left:0 !important}.rtl .ml-md-0,[dir="rtl"] .ml-md-0{margin-left:0 !important;margin-right:0 !important}.rtl mx-md-0,[dir="rtl"] mx-md-0{margin-left:0 !important;margin-right:0 !important}.rtl .mr-md-1,[dir="rtl"] .mr-md-1{margin-right:0 !important;margin-left:0.25rem !important}.rtl .ml-md-1,[dir="rtl"] .ml-md-1{margin-left:0 !important;margin-right:0.25rem !important}.rtl mx-md-1,[dir="rtl"] mx-md-1{margin-left:0.25rem !important;margin-right:0.25rem !important}.rtl .mr-md-2,[dir="rtl"] .mr-md-2{margin-right:0 !important;margin-left:0.5rem !important}.rtl .ml-md-2,[dir="rtl"] .ml-md-2{margin-left:0 !important;margin-right:0.5rem !important}.rtl mx-md-2,[dir="rtl"] mx-md-2{margin-left:0.5rem !important;margin-right:0.5rem !important}.rtl .mr-md-3,[dir="rtl"] .mr-md-3{margin-right:0 !important;margin-left:1rem !important}.rtl .ml-md-3,[dir="rtl"] .ml-md-3{margin-left:0 !important;margin-right:1rem !important}.rtl mx-md-3,[dir="rtl"] mx-md-3{margin-left:1rem !important;margin-right:1rem !important}.rtl .mr-md-4,[dir="rtl"] .mr-md-4{margin-right:0 !important;margin-left:1.5rem !important}.rtl .ml-md-4,[dir="rtl"] .ml-md-4{margin-left:0 !important;margin-right:1.5rem !important}.rtl mx-md-4,[dir="rtl"] mx-md-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.rtl .mr-md-5,[dir="rtl"] .mr-md-5{margin-right:0 !important;margin-left:3rem !important}.rtl .ml-md-5,[dir="rtl"] .ml-md-5{margin-left:0 !important;margin-right:3rem !important}.rtl mx-md-5,[dir="rtl"] mx-md-5{margin-left:3rem !important;margin-right:3rem !important}.rtl .pr-md-0,[dir="rtl"] .pr-md-0{padding-right:0 !important;padding-left:0 !important}.rtl .pl-md-0,[dir="rtl"] .pl-md-0{padding-left:0 !important;padding-right:0 !important}.rtl px-md-0,[dir="rtl"] px-md-0{padding-left:0 !important;padding-right:0 !important}.rtl .pr-md-1,[dir="rtl"] .pr-md-1{padding-right:0 !important;padding-left:0.25rem !important}.rtl .pl-md-1,[dir="rtl"] .pl-md-1{padding-left:0 !important;padding-right:0.25rem !important}.rtl px-md-1,[dir="rtl"] px-md-1{padding-left:0.25rem !important;padding-right:0.25rem !important}.rtl .pr-md-2,[dir="rtl"] .pr-md-2{padding-right:0 !important;padding-left:0.5rem !important}.rtl .pl-md-2,[dir="rtl"] .pl-md-2{padding-left:0 !important;padding-right:0.5rem !important}.rtl px-md-2,[dir="rtl"] px-md-2{padding-left:0.5rem !important;padding-right:0.5rem !important}.rtl .pr-md-3,[dir="rtl"] .pr-md-3{padding-right:0 !important;padding-left:1rem !important}.rtl .pl-md-3,[dir="rtl"] .pl-md-3{padding-left:0 !important;padding-right:1rem !important}.rtl px-md-3,[dir="rtl"] px-md-3{padding-left:1rem !important;padding-right:1rem !important}.rtl .pr-md-4,[dir="rtl"] .pr-md-4{padding-right:0 !important;padding-left:1.5rem !important}.rtl .pl-md-4,[dir="rtl"] .pl-md-4{padding-left:0 !important;padding-right:1.5rem !important}.rtl px-md-4,[dir="rtl"] px-md-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.rtl .pr-md-5,[dir="rtl"] .pr-md-5{padding-right:0 !important;padding-left:3rem !important}.rtl .pl-md-5,[dir="rtl"] .pl-md-5{padding-left:0 !important;padding-right:3rem !important}.rtl px-md-5,[dir="rtl"] px-md-5{padding-left:3rem !important;padding-right:3rem !important}.rtl .mr-md-auto,[dir="rtl"] .mr-md-auto{margin-right:0 !important;margin-left:auto !important}.rtl .ml-md-auto,[dir="rtl"] .ml-md-auto{margin-right:auto !important;margin-left:0 !important}.rtl .mx-md-auto,[dir="rtl"] .mx-md-auto{margin-right:auto !important;margin-left:auto !important}}@media (min-width: 992px){.rtl .mr-lg-0,[dir="rtl"] .mr-lg-0{margin-right:0 !important;margin-left:0 !important}.rtl .ml-lg-0,[dir="rtl"] .ml-lg-0{margin-left:0 !important;margin-right:0 !important}.rtl mx-lg-0,[dir="rtl"] mx-lg-0{margin-left:0 !important;margin-right:0 !important}.rtl .mr-lg-1,[dir="rtl"] .mr-lg-1{margin-right:0 !important;margin-left:0.25rem !important}.rtl .ml-lg-1,[dir="rtl"] .ml-lg-1{margin-left:0 !important;margin-right:0.25rem !important}.rtl mx-lg-1,[dir="rtl"] mx-lg-1{margin-left:0.25rem !important;margin-right:0.25rem !important}.rtl .mr-lg-2,[dir="rtl"] .mr-lg-2{margin-right:0 !important;margin-left:0.5rem !important}.rtl .ml-lg-2,[dir="rtl"] .ml-lg-2{margin-left:0 !important;margin-right:0.5rem !important}.rtl mx-lg-2,[dir="rtl"] mx-lg-2{margin-left:0.5rem !important;margin-right:0.5rem !important}.rtl .mr-lg-3,[dir="rtl"] .mr-lg-3{margin-right:0 !important;margin-left:1rem !important}.rtl .ml-lg-3,[dir="rtl"] .ml-lg-3{margin-left:0 !important;margin-right:1rem !important}.rtl mx-lg-3,[dir="rtl"] mx-lg-3{margin-left:1rem !important;margin-right:1rem !important}.rtl .mr-lg-4,[dir="rtl"] .mr-lg-4{margin-right:0 !important;margin-left:1.5rem !important}.rtl .ml-lg-4,[dir="rtl"] .ml-lg-4{margin-left:0 !important;margin-right:1.5rem !important}.rtl mx-lg-4,[dir="rtl"] mx-lg-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.rtl .mr-lg-5,[dir="rtl"] .mr-lg-5{margin-right:0 !important;margin-left:3rem !important}.rtl .ml-lg-5,[dir="rtl"] .ml-lg-5{margin-left:0 !important;margin-right:3rem !important}.rtl mx-lg-5,[dir="rtl"] mx-lg-5{margin-left:3rem !important;margin-right:3rem !important}.rtl .pr-lg-0,[dir="rtl"] .pr-lg-0{padding-right:0 !important;padding-left:0 !important}.rtl .pl-lg-0,[dir="rtl"] .pl-lg-0{padding-left:0 !important;padding-right:0 !important}.rtl px-lg-0,[dir="rtl"] px-lg-0{padding-left:0 !important;padding-right:0 !important}.rtl .pr-lg-1,[dir="rtl"] .pr-lg-1{padding-right:0 !important;padding-left:0.25rem !important}.rtl .pl-lg-1,[dir="rtl"] .pl-lg-1{padding-left:0 !important;padding-right:0.25rem !important}.rtl px-lg-1,[dir="rtl"] px-lg-1{padding-left:0.25rem !important;padding-right:0.25rem !important}.rtl .pr-lg-2,[dir="rtl"] .pr-lg-2{padding-right:0 !important;padding-left:0.5rem !important}.rtl .pl-lg-2,[dir="rtl"] .pl-lg-2{padding-left:0 !important;padding-right:0.5rem !important}.rtl px-lg-2,[dir="rtl"] px-lg-2{padding-left:0.5rem !important;padding-right:0.5rem !important}.rtl .pr-lg-3,[dir="rtl"] .pr-lg-3{padding-right:0 !important;padding-left:1rem !important}.rtl .pl-lg-3,[dir="rtl"] .pl-lg-3{padding-left:0 !important;padding-right:1rem !important}.rtl px-lg-3,[dir="rtl"] px-lg-3{padding-left:1rem !important;padding-right:1rem !important}.rtl .pr-lg-4,[dir="rtl"] .pr-lg-4{padding-right:0 !important;padding-left:1.5rem !important}.rtl .pl-lg-4,[dir="rtl"] .pl-lg-4{padding-left:0 !important;padding-right:1.5rem !important}.rtl px-lg-4,[dir="rtl"] px-lg-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.rtl .pr-lg-5,[dir="rtl"] .pr-lg-5{padding-right:0 !important;padding-left:3rem !important}.rtl .pl-lg-5,[dir="rtl"] .pl-lg-5{padding-left:0 !important;padding-right:3rem !important}.rtl px-lg-5,[dir="rtl"] px-lg-5{padding-left:3rem !important;padding-right:3rem !important}.rtl .mr-lg-auto,[dir="rtl"] .mr-lg-auto{margin-right:0 !important;margin-left:auto !important}.rtl .ml-lg-auto,[dir="rtl"] .ml-lg-auto{margin-right:auto !important;margin-left:0 !important}.rtl .mx-lg-auto,[dir="rtl"] .mx-lg-auto{margin-right:auto !important;margin-left:auto !important}}@media (min-width: 1200px){.rtl .mr-xl-0,[dir="rtl"] .mr-xl-0{margin-right:0 !important;margin-left:0 !important}.rtl .ml-xl-0,[dir="rtl"] .ml-xl-0{margin-left:0 !important;margin-right:0 !important}.rtl mx-xl-0,[dir="rtl"] mx-xl-0{margin-left:0 !important;margin-right:0 !important}.rtl .mr-xl-1,[dir="rtl"] .mr-xl-1{margin-right:0 !important;margin-left:0.25rem !important}.rtl .ml-xl-1,[dir="rtl"] .ml-xl-1{margin-left:0 !important;margin-right:0.25rem !important}.rtl mx-xl-1,[dir="rtl"] mx-xl-1{margin-left:0.25rem !important;margin-right:0.25rem !important}.rtl .mr-xl-2,[dir="rtl"] .mr-xl-2{margin-right:0 !important;margin-left:0.5rem !important}.rtl .ml-xl-2,[dir="rtl"] .ml-xl-2{margin-left:0 !important;margin-right:0.5rem !important}.rtl mx-xl-2,[dir="rtl"] mx-xl-2{margin-left:0.5rem !important;margin-right:0.5rem !important}.rtl .mr-xl-3,[dir="rtl"] .mr-xl-3{margin-right:0 !important;margin-left:1rem !important}.rtl .ml-xl-3,[dir="rtl"] .ml-xl-3{margin-left:0 !important;margin-right:1rem !important}.rtl mx-xl-3,[dir="rtl"] mx-xl-3{margin-left:1rem !important;margin-right:1rem !important}.rtl .mr-xl-4,[dir="rtl"] .mr-xl-4{margin-right:0 !important;margin-left:1.5rem !important}.rtl .ml-xl-4,[dir="rtl"] .ml-xl-4{margin-left:0 !important;margin-right:1.5rem !important}.rtl mx-xl-4,[dir="rtl"] mx-xl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.rtl .mr-xl-5,[dir="rtl"] .mr-xl-5{margin-right:0 !important;margin-left:3rem !important}.rtl .ml-xl-5,[dir="rtl"] .ml-xl-5{margin-left:0 !important;margin-right:3rem !important}.rtl mx-xl-5,[dir="rtl"] mx-xl-5{margin-left:3rem !important;margin-right:3rem !important}.rtl .pr-xl-0,[dir="rtl"] .pr-xl-0{padding-right:0 !important;padding-left:0 !important}.rtl .pl-xl-0,[dir="rtl"] .pl-xl-0{padding-left:0 !important;padding-right:0 !important}.rtl px-xl-0,[dir="rtl"] px-xl-0{padding-left:0 !important;padding-right:0 !important}.rtl .pr-xl-1,[dir="rtl"] .pr-xl-1{padding-right:0 !important;padding-left:0.25rem !important}.rtl .pl-xl-1,[dir="rtl"] .pl-xl-1{padding-left:0 !important;padding-right:0.25rem !important}.rtl px-xl-1,[dir="rtl"] px-xl-1{padding-left:0.25rem !important;padding-right:0.25rem !important}.rtl .pr-xl-2,[dir="rtl"] .pr-xl-2{padding-right:0 !important;padding-left:0.5rem !important}.rtl .pl-xl-2,[dir="rtl"] .pl-xl-2{padding-left:0 !important;padding-right:0.5rem !important}.rtl px-xl-2,[dir="rtl"] px-xl-2{padding-left:0.5rem !important;padding-right:0.5rem !important}.rtl .pr-xl-3,[dir="rtl"] .pr-xl-3{padding-right:0 !important;padding-left:1rem !important}.rtl .pl-xl-3,[dir="rtl"] .pl-xl-3{padding-left:0 !important;padding-right:1rem !important}.rtl px-xl-3,[dir="rtl"] px-xl-3{padding-left:1rem !important;padding-right:1rem !important}.rtl .pr-xl-4,[dir="rtl"] .pr-xl-4{padding-right:0 !important;padding-left:1.5rem !important}.rtl .pl-xl-4,[dir="rtl"] .pl-xl-4{padding-left:0 !important;padding-right:1.5rem !important}.rtl px-xl-4,[dir="rtl"] px-xl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.rtl .pr-xl-5,[dir="rtl"] .pr-xl-5{padding-right:0 !important;padding-left:3rem !important}.rtl .pl-xl-5,[dir="rtl"] .pl-xl-5{padding-left:0 !important;padding-right:3rem !important}.rtl px-xl-5,[dir="rtl"] px-xl-5{padding-left:3rem !important;padding-right:3rem !important}.rtl .mr-xl-auto,[dir="rtl"] .mr-xl-auto{margin-right:0 !important;margin-left:auto !important}.rtl .ml-xl-auto,[dir="rtl"] .ml-xl-auto{margin-right:auto !important;margin-left:0 !important}.rtl .mx-xl-auto,[dir="rtl"] .mx-xl-auto{margin-right:auto !important;margin-left:auto !important}}.rtl .text-right,[dir="rtl"] .text-right{text-align:left !important}.rtl .text-left,[dir="rtl"] .text-left{text-align:right !important}@media (min-width: 576px){.rtl .text-sm-right,[dir="rtl"] .text-sm-right{text-align:left !important}.rtl .text-sm-left,[dir="rtl"] .text-sm-left{text-align:right !important}}@media (min-width: 768px){.rtl .text-md-right,[dir="rtl"] .text-md-right{text-align:left !important}.rtl .text-md-left,[dir="rtl"] .text-md-left{text-align:right !important}}@media (min-width: 992px){.rtl .text-lg-right,[dir="rtl"] .text-lg-right{text-align:left !important}.rtl .text-lg-left,[dir="rtl"] .text-lg-left{text-align:right !important}}@media (min-width: 1200px){.rtl .text-xl-right,[dir="rtl"] .text-xl-right{text-align:left !important}.rtl .text-xl-left,[dir="rtl"] .text-xl-left{text-align:right !important}} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/ng-package.json new file mode 100644 index 0000000000..962abb2d5f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/libs/theme-shared/testing", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/models/config.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/models/config.ts new file mode 100644 index 0000000000..1b4825cf9f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/models/config.ts @@ -0,0 +1,5 @@ +import { Validation } from '@ngx-validate/core'; + +export interface Config { + validation?: Partial; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/models/index.ts new file mode 100644 index 0000000000..f03c2281a9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/models/index.ts @@ -0,0 +1 @@ +export * from './config'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/theme-shared-testing.module.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/theme-shared-testing.module.ts new file mode 100644 index 0000000000..52abb12ffe --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/theme-shared-testing.module.ts @@ -0,0 +1,52 @@ +import { + BaseThemeSharedModule, + DateParserFormatter, + DEFAULT_VALIDATION_BLUEPRINTS, + THEME_SHARED_ROUTE_PROVIDERS, +} from '@abp/ng.theme.shared'; +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { RouterTestingModule } from '@angular/router/testing'; +import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap'; +import { + defaultMapErrorsFn, + VALIDATION_BLUEPRINTS, + VALIDATION_MAP_ERRORS_FN, + VALIDATION_VALIDATE_ON_SUBMIT, +} from '@ngx-validate/core'; +import { Config } from './models/config'; + +/** + * ThemeSharedTestingModule is the module that will be used in tests + */ +@NgModule({ + exports: [RouterTestingModule, BaseThemeSharedModule], + imports: [RouterTestingModule, BaseThemeSharedModule], +}) +export class ThemeSharedTestingModule { + static withConfig( + { validation = {} } = {} as Config, + ): ModuleWithProviders { + return { + ngModule: ThemeSharedTestingModule, + providers: [ + THEME_SHARED_ROUTE_PROVIDERS, + { provide: NgbDateParserFormatter, useClass: DateParserFormatter }, + { + provide: VALIDATION_BLUEPRINTS, + useValue: { + ...DEFAULT_VALIDATION_BLUEPRINTS, + ...(validation.blueprints || {}), + }, + }, + { + provide: VALIDATION_MAP_ERRORS_FN, + useValue: validation.mapErrorsFn || defaultMapErrorsFn, + }, + { + provide: VALIDATION_VALIDATE_ON_SUBMIT, + useValue: validation.validateOnSubmit, + }, + ], + }; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/public-api.ts b/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/public-api.ts new file mode 100644 index 0000000000..14355a8a28 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/public-api.ts @@ -0,0 +1 @@ +export * from './lib/theme-shared-testing.module'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.json new file mode 100644 index 0000000000..692cc17b32 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "allowSyntheticDefaultImports": true, + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.lib.json new file mode 100644 index 0000000000..bbcc12b1c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.lib.prod.json new file mode 100644 index 0000000000..331d0ecb05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial", + "enableIvy": false + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/nx.json b/npm/ng-packs/nx/ng-packs/nx.json index f0d3529b9c..dbb5e5a85c 100644 --- a/npm/ng-packs/nx/ng-packs/nx.json +++ b/npm/ng-packs/nx/ng-packs/nx.json @@ -36,6 +36,12 @@ "dev-app-e2e": { "tags": [], "implicitDependencies": ["dev-app"] + }, + "theme-basic": { + "tags": [] + }, + "theme-shared": { + "tags": [] } } } diff --git a/npm/ng-packs/nx/ng-packs/package.json b/npm/ng-packs/nx/ng-packs/package.json index 28f5ee18dc..2c7fbd413b 100644 --- a/npm/ng-packs/nx/ng-packs/package.json +++ b/npm/ng-packs/nx/ng-packs/package.json @@ -39,22 +39,23 @@ "@abp/ng.theme.basic": "~4.4.0", "@abp/ng.theme.shared": "~4.4.0", "@abp/utils": "^4.4.0", - "@angular-devkit/build-angular": "~12.1.0", + "@angular-devkit/build-angular": "~12.2.0", + "@angular-devkit/build-ng-packagr": "^0.1002.0", "@angular-devkit/schematics-cli": "~12.2.0", - "@angular-eslint/eslint-plugin-template": "~12.3.0", "@angular-eslint/eslint-plugin": "~12.3.0", + "@angular-eslint/eslint-plugin-template": "~12.3.0", "@angular-eslint/template-parser": "~12.3.0", "@angular/animations": "~12.2.0", - "@angular/cli": "~12.1.0", + "@angular/cli": "~12.2.0", "@angular/common": "~12.2.0", - "@angular/compiler-cli": "^12.1.0", "@angular/compiler": "~12.2.0", + "@angular/compiler-cli": "^12.2.0", "@angular/core": "~12.2.0", "@angular/forms": "~12.2.0", - "@angular/language-service": "^12.1.0", + "@angular/language-service": "^12.2.0", "@angular/localize": "~12.2.0", - "@angular/platform-browser-dynamic": "~12.2.0", "@angular/platform-browser": "~12.2.0", + "@angular/platform-browser-dynamic": "~12.2.0", "@angular/router": "~12.2.0", "@fortawesome/fontawesome-free": "^5.14.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0", @@ -80,17 +81,17 @@ "chart.js": "^2.9.3", "cypress": "^7.3.0", "dotenv": "~10.0.0", + "eslint": "7.22.0", "eslint-config-prettier": "8.1.0", "eslint-plugin-cypress": "^2.10.3", - "eslint": "7.22.0", "got": "^11.5.2", - "jest-preset-angular": "9.0.4", "jest": "27.0.3", + "jest-preset-angular": "9.0.4", "jsonc-parser": "^2.3.0", "just-clone": "^3.1.0", "just-compare": "^1.3.0", "lerna": "^3.19.0", - "ng-packagr": "^12.1.0", + "ng-packagr": "^12.2.0", "ng-zorro-antd": "^11.0.1", "ngxs-schematic": "^1.1.9", "prettier": "^2.3.1", diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index 39234d3ed6..ebd57b3a50 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -15,7 +15,10 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { - "@ng-packs/core": ["libs/core/src/index.ts"] + // "@abp/ng.core": ["libs/core/src/public-api.ts"], + // "@abp/ng.theme.shared": ["libs/theme-shared/src/public-api.ts"] + "@abp/ng.core": ["dist/libs/core"], + "@abp/ng.theme.shared": ["dist/libs/theme-shared"] } }, "exclude": ["node_modules", "tmp"] diff --git a/npm/ng-packs/nx/ng-packs/yarn.lock b/npm/ng-packs/nx/ng-packs/yarn.lock index d0e453948e..d36ec011b8 100644 --- a/npm/ng-packs/nx/ng-packs/yarn.lock +++ b/npm/ng-packs/nx/ng-packs/yarn.lock @@ -117,6 +117,14 @@ dependencies: just-compare "^1.3.0" +"@angular-devkit/architect@0.1002.0": + version "0.1002.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1002.0.tgz#470b78aaf79308a23da6a0d3935f2d1f85dcb212" + integrity sha512-twM8V03ujBIGVpgV1PBlSDodUdxtUb7WakutfWafAvEHUsgwzfvQz2VtKWvjNZ9AiYjnCuwkQaclqVv0VHNo9w== + dependencies: + "@angular-devkit/core" "10.2.0" + rxjs "6.6.2" + "@angular-devkit/architect@0.1201.4": version "0.1201.4" resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1201.4.tgz#bdd4ed088845bc5412ac8ab9dd4355953f09ea70" @@ -200,6 +208,14 @@ webpack-merge "5.8.0" webpack-subresource-integrity "1.5.2" +"@angular-devkit/build-ng-packagr@^0.1002.0": + version "0.1002.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.1002.0.tgz#07fd264f98f0084c2897925e094cb9bd002d34e8" + integrity sha512-JngcuLuPpu2oOhi1qBPzco+ETjDbv90zyWZELO3qXeCelug1z83E0Qi2sLgnNYayzSHfrivrRamL8CbYYT+M9Q== + dependencies: + "@angular-devkit/architect" "0.1002.0" + rxjs "6.6.2" + "@angular-devkit/build-optimizer@0.1201.4": version "0.1201.4" resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1201.4.tgz#79bf972b5905d7d193c838c496febfff6923ec2c" @@ -217,6 +233,17 @@ "@angular-devkit/architect" "0.1201.4" rxjs "6.6.7" +"@angular-devkit/core@10.2.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.2.0.tgz#fcde160afc2786d2da0166526f065c6cf98684c0" + integrity sha512-XAszFhSF3mZw1VjoOsYGbArr5NJLcStjOvcCGjBPl1UBM2AKpuCQXHxI9XJGYKL3B93Vp5G58d8qkHvamT53OA== + dependencies: + ajv "6.12.4" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.2" + source-map "0.7.3" + "@angular-devkit/core@11.0.7", "@angular-devkit/core@~11.0.2": version "11.0.7" resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-11.0.7.tgz#05b82be7e11ddc2a7836c777297ee45eee20ff55" @@ -333,7 +360,7 @@ dependencies: eslint-scope "^5.1.0" -"@angular/animations@~12.2.0": +"@angular/animations@^12.1.0": version "12.2.0" resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-12.2.0.tgz#85e4e738bd72011067836b63bb8fc51a44646a7e" integrity sha512-BCta/HT0VaM0hzsyRyb24UIaV7vlpo2jJjSwnBhO5RosH+bAaA3Faa3ps3AjCDCEXo9z99dvxJFm8WqdunPYyw== @@ -374,7 +401,7 @@ symbol-observable "4.0.0" uuid "8.3.2" -"@angular/common@~12.2.0": +"@angular/common@^12.1.0": version "12.2.0" resolved "https://registry.yarnpkg.com/@angular/common/-/common-12.2.0.tgz#b8bb889f310ae2af359120e110634cf356a6d142" integrity sha512-9OaqH5WhfJ/YpN9b4TmiGHdOar/3NiGjktwG1/5jV4mTO+tOP25yNO4zCd4RuaRURipWUEa8mSaesgUgTb3jmQ== @@ -401,21 +428,21 @@ tslib "^2.2.0" yargs "^17.0.0" -"@angular/compiler@~12.2.0": +"@angular/compiler@^12.1.0": version "12.2.0" resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-12.2.0.tgz#d1585f7b7a67b8393eef2aa4cd3ef47c9d7fc3c0" integrity sha512-24G1joE699gbAHRAIESVQBI797Q506MZ/LWyFHRjfdlfXgltDN63j5dpNJzb/rUK1/uHGGAJaEH+OE60ZK2q9Q== dependencies: tslib "^2.2.0" -"@angular/core@~12.2.0": +"@angular/core@^12.1.0": version "12.2.0" resolved "https://registry.yarnpkg.com/@angular/core/-/core-12.2.0.tgz#29869aec3f624f6d4e1b5eedc25475cd5235a2e8" integrity sha512-zy/gqSlSEmi85HVbpoQ0nhC74xoL+aoofvbkKPgdgyEcnqzBt4IFzH++0EZ+GMeZ2pVoNfiXklUhAy2OBAiR/g== dependencies: tslib "^2.2.0" -"@angular/forms@~12.2.0": +"@angular/forms@^12.1.0": version "12.2.0" resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-12.2.0.tgz#ae43c044404b7cac3595ea2500abb2368889b6ef" integrity sha512-lhKin5IHElH5qk2Su/o0YMF9JYb84grz0WMIHYmt3EASw/EGvzZwUBd76anJWWwFig6GLw/ZdNC9zLW2Leh06Q== @@ -445,21 +472,21 @@ glob "7.1.7" yargs "^17.0.0" -"@angular/platform-browser-dynamic@~12.2.0": +"@angular/platform-browser-dynamic@^12.1.0": version "12.2.0" resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.0.tgz#d6d882129b5a0cf201c50f0839e5b434e822f0b0" integrity sha512-mvUo1WEI8PrJxIer0RLXSW9raYDrKarUQ9T2Q0/R3ZgS6Y1WvoJe+qSZ7K/hCbErH4zd+64TuJHlj+g2WHPLug== dependencies: tslib "^2.2.0" -"@angular/platform-browser@~12.2.0": +"@angular/platform-browser@^12.1.0": version "12.2.0" resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-12.2.0.tgz#d3d01602e331ace3752111e7e64efc9c4a10e561" integrity sha512-MIoWBhhMmPBFfuOPBgEG21uqCZVudTj4YMGxQH4iVlI9GD9ZAht8XgopN9Vw4cytPNfKWsspLoruhIWRNSJlNA== dependencies: tslib "^2.2.0" -"@angular/router@~12.2.0": +"@angular/router@^12.1.0": version "12.2.0" resolved "https://registry.yarnpkg.com/@angular/router/-/router-12.2.0.tgz#b833706e2d935da9dbc828e280f0f566458531bc" integrity sha512-C5S0bU8KtU/2wBQ76AZVFivWbGYJCDwkVg2Lk4ddjqs/pKWb0vg2Baa3DfJrIz3esqfYUJl00HMYQVM9+QtZQA== @@ -770,16 +797,7 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helpers@^7.14.6", "@babel/helpers@^7.14.8": - version "7.14.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.8.tgz#839f88f463025886cff7f85a35297007e2da1b77" - integrity sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw== - dependencies: - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.8" - "@babel/types" "^7.14.8" - -"@babel/helpers@^7.8.3": +"@babel/helpers@^7.14.6", "@babel/helpers@^7.14.8", "@babel/helpers@^7.8.3": version "7.15.3" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.3.tgz#c96838b752b95dcd525b4e741ed40bb1dc2a1357" integrity sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g== @@ -797,12 +815,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.15.0", "@babel/parser@^7.7.2": - version "7.15.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.2.tgz#08d4ffcf90d211bf77e7cc7154c6f02d468d2b1d" - integrity sha512-bMJXql1Ss8lFnvr11TZDH4ArtwlAS5NG9qBmdiFW2UHHm6MVoR+GDc5XE2b9K938cyjc9O6/+vjjcffLDtfuDg== - -"@babel/parser@^7.8.3": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.15.0", "@babel/parser@^7.7.2", "@babel/parser@^7.8.3": version "7.15.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862" integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA== @@ -1096,9 +1109,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-block-scoping@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" - integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf" + integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -1502,9 +1515,9 @@ esutils "^2.0.2" "@babel/runtime-corejs3@^7.10.2": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.9.tgz#fb21b1cf11650dcb8fcf4de2e6b3b8cf411da3f3" - integrity sha512-64RiH2ON4/y8qYtoa8rUiyam/tUVyGqRyNYhe+vCRGmjnV4bUlZvY+mwd0RrmLoCpJpdq3RsrNqKb7SJdw/4kw== + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.15.3.tgz#28754263988198f2a928c09733ade2fb4d28089d" + integrity sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A== dependencies: core-js-pure "^3.16.0" regenerator-runtime "^0.13.4" @@ -1516,14 +1529,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.8.4": - version "7.14.8" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.8.tgz#7119a56f421018852694290b9f9148097391b446" - integrity sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.10.3": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.8.4": version "7.15.3" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b" integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA== @@ -1539,7 +1545,7 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.14.8", "@babel/traverse@^7.15.0", "@babel/traverse@^7.7.2", "@babel/traverse@^7.8.3": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.15.0", "@babel/traverse@^7.7.2", "@babel/traverse@^7.8.3": version "7.15.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98" integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw== @@ -3958,6 +3964,16 @@ ajv@6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@6.12.4: + version "6.12.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" + integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ajv@6.12.6, ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -5297,9 +5313,9 @@ colord@^2.0.1: integrity sha512-8yMrtE20ZxH1YWvvSoeJFtvqY+GIAOfU+mZ3jx7ZSiEMasnAmNqD1BKUP3CuCWcy/XHgcXkLW6YU8C35nhOYVg== colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" + integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== colors@^1.1.2: version "1.4.0" @@ -6466,9 +6482,9 @@ ejs@^3.1.5: jake "^10.6.1" electron-to-chromium@^1.3.793: - version "1.3.801" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.801.tgz#f41c588e408ad1a4f794f91f38aa94a89c492f51" - integrity sha512-xapG8ekC+IAHtJrGBMQSImNuN+dm+zl7UP1YbhvTkwQn8zf/yYuoxfTSAEiJ9VDD+kjvXaAhNDPSxJ+VImtAJA== + version "1.3.802" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.802.tgz#0afa989321de3e904ac653ee79e0d642883731a1" + integrity sha512-dXB0SGSypfm3iEDxrb5n/IVKeX4uuTnFHdve7v+yKJqNpEP0D4mjFJ8e1znmSR+OOVlVC+kDO6f2kAkTFXvJBg== elliptic@^6.5.3: version "6.5.4" @@ -10718,9 +10734,9 @@ node-modules-regexp@^1.0.0: integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-releases@^1.1.73: - version "1.1.73" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" - integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== + version "1.1.74" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.74.tgz#e5866488080ebaa70a93b91144ccde06f3c3463e" + integrity sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw== node-sass-tilde-importer@^1.0.2: version "1.0.2" @@ -13073,6 +13089,13 @@ rxjs@6.4.0: dependencies: tslib "^1.9.0" +rxjs@6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" + integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== + dependencies: + tslib "^1.9.0" + rxjs@6.6.3: version "6.6.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" @@ -15212,9 +15235,9 @@ webpack@5.44.0: webpack-sources "^2.3.0" "webpack@^4.0.0 || ^5.30.0": - version "5.49.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.49.0.tgz#e250362b781a9fb614ba0a97ed67c66b9c5310cd" - integrity sha512-XarsANVf28A7Q3KPxSnX80EkCcuOer5hTOEJWJNvbskOZ+EK3pobHarGHceyUZMxpsTHBHhlV7hiQyLZzGosYw== + version "5.50.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.50.0.tgz#5562d75902a749eb4d75131f5627eac3a3192527" + integrity sha512-hqxI7t/KVygs0WRv/kTgUW8Kl3YC81uyWQSo/7WUs5LsuRw0htH/fCwbVBGCuiX/t4s7qzjXFcf41O8Reiypag== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index 395d999edc..cdcb211672 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -2632,9 +2632,9 @@ universal-user-agent "^6.0.0" "@octokit/openapi-types@^9.5.0": - version "9.6.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-9.6.0.tgz#0260a84f5c61c01755402ab5ac5b1ab46e7c0730" - integrity sha512-L+8x7DpcNtHkMbTxxCxg3cozvHUNP46rOIzFwoMs0piWwQzAGNXqlIQO2GLvnKTWLUh99DkY+UyHVrP4jXlowg== + version "9.7.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-9.7.0.tgz#9897cdefd629cd88af67b8dbe2e5fb19c63426b2" + integrity sha512-TUJ16DJU8mekne6+KVcMV5g6g/rJlrnIKn7aALG9QrNpnEipFc1xjoarh0PKaAWf2Hf+HwthRKYt+9mCm5RsRg== "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" @@ -2680,9 +2680,9 @@ once "^1.4.0" "@octokit/request@^5.2.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.0.tgz#6084861b6e4fa21dc40c8e2a739ec5eff597e672" - integrity sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA== + version "5.6.1" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.1.tgz#f97aff075c37ab1d427c49082fefeef0dba2d8ce" + integrity sha512-Ls2cfs1OfXaOKzkcxnqw5MR6drMA/zWX/LIS/p8Yjdz7QKTPQLMsB3R+OvoxE6XnXeXEE2X7xe4G4l4X0gRiKQ== dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.1.0" @@ -2996,9 +2996,9 @@ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*", "@types/node@>= 8": - version "16.4.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.13.tgz#7dfd9c14661edc65cccd43a29eb454174642370d" - integrity sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg== + version "16.6.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.6.0.tgz#0d5685f85066f94e97f19e8a67fe003c5fadacc4" + integrity sha512-OyiZPohMMjZEYqcVo/UJ04GyAxXOJEZO/FpzyXxcH4r/ArrVoXHf4MbUrkLp0Tz7/p1mMKpo5zJ6ZHl8XBNthQ== "@types/node@^12.11.1": version "12.20.19" @@ -4396,9 +4396,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001243, caniuse-lite@^1.0.30001248: - version "1.0.30001249" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001249.tgz#90a330057f8ff75bfe97a94d047d5e14fabb2ee8" - integrity sha512-vcX4U8lwVXPdqzPWi6cAJ3FnQaqXbBqy/GZseKNQzRj37J7qZdGcBtxq/QLFNLLlfsoXLUdHw8Iwenri86Tagw== + version "1.0.30001251" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85" + integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A== canonical-path@1.0.0: version "1.0.0" @@ -5994,9 +5994,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.793: - version "1.3.802" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.802.tgz#0afa989321de3e904ac653ee79e0d642883731a1" - integrity sha512-dXB0SGSypfm3iEDxrb5n/IVKeX4uuTnFHdve7v+yKJqNpEP0D4mjFJ8e1znmSR+OOVlVC+kDO6f2kAkTFXvJBg== + version "1.3.803" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.803.tgz#78993a991d096500f21a77e91cd2a44295fe3cbe" + integrity sha512-tmRK9qB8Zs8eLMtTBp+w2zVS9MUe62gQQQHjYdAc5Zljam3ZIokNb+vZLPRz9RCREp6EFRwyhOFwbt1fEriQ2Q== elliptic@^6.5.3: version "6.5.4" @@ -6550,9 +6550,9 @@ figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== figlet@^1.2.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.0.tgz#2db4d00a584e5155a96080632db919213c3e003c" - integrity sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww== + version "1.5.2" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.2.tgz#dda34ff233c9a48e36fcff6741aeb5bafe49b634" + integrity sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ== figures@^2.0.0: version "2.0.0" @@ -7820,9 +7820,11 @@ is-arrayish@^0.3.1: integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-bigint@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.3.tgz#fc9d9e364210480675653ddaea0518528d49a581" - integrity sha512-ZU538ajmYJmzysE5yU4Y7uIrPQ2j704u+hXFiIPQExpqzzUbpe5jCPdTfmz7jXRxZdvjY3KZ3ZNenoXQovX+Dg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" is-binary-path@^1.0.0: version "1.0.1" @@ -9833,9 +9835,9 @@ nan@^2.12.1: integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== nanoid@^3.1.20, nanoid@^3.1.23: - version "3.1.23" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" - integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== + version "3.1.24" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.24.tgz#d7ac20215f595c26d314ee5671169a27b609025f" + integrity sha512-WNhqqgD4qH7TQdU9ujXfFa/hQI5rOGGnZq+JRmz4JwMZFCgSZVquTq3ORUSv6IC+Y41ACBYV8a8J1kPkqGIiQg== nanomatch@^1.2.9: version "1.2.13" @@ -13363,9 +13365,9 @@ tapable@^2.2.0: integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: - version "4.4.16" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.16.tgz#4a48b3c025e77d9d0c788f038a09b91c594d326d" - integrity sha512-gOVUT/KWPkGFZQmCRDVFNUWBl7niIo/PRR7lzrIqtZpit+st54lGROuVjc6zEQM9FhH+dJfQIl+9F0k8GNXg5g== + version "4.4.17" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.17.tgz#44be5e3fa8353ee1d11db3b1401561223a5c3985" + integrity sha512-q7OwXq6NTdcYIa+k58nEMV3j1euhDhGCs/VRw9ymx/PbH0jtIM2+VTgDE/BW3rbLkrBUXs5fzEKgic5oUciu7g== dependencies: chownr "^1.1.4" fs-minipass "^1.2.7" @@ -13376,9 +13378,9 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: yallist "^3.1.1" tar@^6.0.2, tar@^6.1.0: - version "6.1.7" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.7.tgz#c566d1107d38b09e92983a68db5534fc7f6cab42" - integrity sha512-PBoRkOJU0X3lejJ8GaRCsobjXTgFofRDSPdSUhRSdlwJfifRlQBwGXitDItdGFu0/h0XDMCkig0RN1iT7DBxhA== + version "6.1.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.8.tgz#4fc50cfe56511c538ce15b71e05eebe66530cbd4" + integrity sha512-sb9b0cp855NbkMJcskdSYA7b11Q8JsX4qe4pyUAfHp+Y6jBjJeek2ZVlwEfWayshEIwlIzXx0Fain3QG9JPm2A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -13736,9 +13738,9 @@ tslib@^1.10.0, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" - integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== tslint@~6.1.0: version "6.1.3" From 453f3a633b213c5c37d341e8dcd3a9db5724a3f4 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 12 Aug 2021 10:59:07 +0300 Subject: [PATCH 04/56] copy theme-basic package to the nx workspace --- npm/ng-packs/nx/ng-packs/libs/core/README.md | 8 +- .../nx/ng-packs/libs/core/package.json | 2 +- .../ng-packs/libs/theme-basic/.eslintrc.json | 36 +++++ .../nx/ng-packs/libs/theme-basic/README.md | 3 + .../ng-packs/libs/theme-basic/jest.config.js | 20 +++ .../ng-packs/libs/theme-basic/ng-package.json | 8 + .../nx/ng-packs/libs/theme-basic/package.json | 17 ++ .../account-layout.component.html | 62 ++++++++ .../account-layout.component.ts | 21 +++ .../auth-wrapper/auth-wrapper.component.html | 27 ++++ .../auth-wrapper.component.spec.ts | 25 +++ .../auth-wrapper/auth-wrapper.component.ts | 13 ++ .../tenant-box/tenant-box.component.html | 63 ++++++++ .../tenant-box/tenant-box.component.spec.ts | 25 +++ .../tenant-box/tenant-box.component.ts | 13 ++ .../application-layout.component.html | 50 ++++++ .../application-layout.component.ts | 21 +++ .../empty-layout/empty-layout.component.ts | 13 ++ .../theme-basic/src/lib/components/index.ts | 12 ++ .../src/lib/components/logo/logo.component.ts | 28 ++++ .../nav-items/current-user.component.html | 41 +++++ .../nav-items/current-user.component.ts | 37 +++++ .../nav-items/languages.component.ts | 84 ++++++++++ .../nav-items/nav-items.component.html | 16 ++ .../nav-items/nav-items.component.ts | 12 ++ .../page-alert-container.component.html | 22 +++ .../page-alert-container.component.ts | 11 ++ .../components/routes/routes.component.html | 104 +++++++++++++ .../lib/components/routes/routes.component.ts | 35 +++++ .../validation-error.component.ts | 34 ++++ .../theme-basic/src/lib/constants/styles.ts | 145 ++++++++++++++++++ .../theme-basic/src/lib/enums/components.ts | 10 ++ .../libs/theme-basic/src/lib/enums/index.ts | 1 + .../libs/theme-basic/src/lib/models/index.ts | 1 + .../libs/theme-basic/src/lib/models/layout.ts | 13 ++ .../theme-basic/src/lib/providers/index.ts | 2 + .../src/lib/providers/nav-item.provider.ts | 31 ++++ .../src/lib/providers/styles.provider.ts | 43 ++++++ .../src/lib/services/layout.service.ts | 39 +++++ .../theme-basic/src/lib/theme-basic.module.ts | 88 +++++++++++ .../libs/theme-basic/src/public-api.ts | 9 ++ .../libs/theme-basic/src/test-setup.ts | 1 + .../libs/theme-basic/testing/ng-package.json | 7 + .../src/lib/theme-basic-testing.module.ts | 40 +++++ .../theme-basic/testing/src/public-api.ts | 1 + .../ng-packs/libs/theme-basic/tsconfig.json | 16 ++ .../libs/theme-basic/tsconfig.lib.json | 14 ++ .../libs/theme-basic/tsconfig.lib.prod.json | 11 ++ .../libs/theme-basic/tsconfig.spec.json | 10 ++ .../nx/ng-packs/libs/theme-shared/README.md | 8 +- .../libs/theme-shared/ng-package.json | 1 + npm/ng-packs/nx/ng-packs/tsconfig.base.json | 3 +- 52 files changed, 1343 insertions(+), 14 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/README.md create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/package.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/logo/logo.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/languages.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.html create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/validation-error/validation-error.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/constants/styles.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/components.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/layout.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/nav-item.provider.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/styles.provider.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/services/layout.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/theme-basic.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/lib/theme-basic-testing.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.prod.json create mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/libs/core/README.md b/npm/ng-packs/nx/ng-packs/libs/core/README.md index c68e5a2c21..9c1a869583 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/README.md +++ b/npm/ng-packs/nx/ng-packs/libs/core/README.md @@ -1,7 +1,3 @@ -# core +

@abp/ng.core

-This library was generated with [Nx](https://nx.dev). - -## Running unit tests - -Run `nx test core` to execute the unit tests. +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/libs/core/package.json b/npm/ng-packs/nx/ng-packs/libs/core/package.json index 954d6b61f6..3d115bc8e1 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/package.json +++ b/npm/ng-packs/nx/ng-packs/libs/core/package.json @@ -7,7 +7,7 @@ "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/utils": "^4.4.0-rc.2", + "@abp/utils": "^4.4.0", "@angular/localize": "~10.0.10", "@ngxs/store": "^3.7.0", "angular-oauth2-oidc": "^10.0.0", diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/.eslintrc.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/README.md b/npm/ng-packs/nx/ng-packs/libs/theme-basic/README.md new file mode 100644 index 0000000000..0dce3c6526 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/README.md @@ -0,0 +1,3 @@ +

@abp/ng.theme.basic

+ +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/jest.config.js b/npm/ng-packs/nx/ng-packs/libs/theme-basic/jest.config.js new file mode 100644 index 0000000000..469366871b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'theme-basic', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/libs/theme-basic', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/ng-package.json new file mode 100644 index 0000000000..9f131981ff --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/ng-package.json @@ -0,0 +1,8 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/libs/theme-basic", + "lib": { + "entryFile": "src/public-api.ts" + }, + "allowedNonPeerDependencies": ["@abp/ng.theme.shared", "@abp/ng.account.core"] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/package.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/package.json new file mode 100644 index 0000000000..2f149834fe --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/package.json @@ -0,0 +1,17 @@ +{ + "name": "@abp/ng.theme.basic", + "version": "4.4.0", + "homepage": "https://abp.io", + "repository": { + "type": "git", + "url": "https://github.com/abpframework/abp.git" + }, + "dependencies": { + "@abp/ng.account.core": "~4.4.0", + "@abp/ng.theme.shared": "~4.4.0", + "tslib": "^2.0.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.html new file mode 100644 index 0000000000..076cf83c7f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.html @@ -0,0 +1,62 @@ + + + +
+ + + + +
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.ts new file mode 100644 index 0000000000..510e2a8f72 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.ts @@ -0,0 +1,21 @@ +import { AfterViewInit, Component } from '@angular/core'; +import { eLayoutType, SubscriptionService } from '@abp/ng.core'; +import { LayoutService } from '../../services/layout.service'; + +@Component({ + selector: 'abp-layout-account', + templateUrl: './account-layout.component.html', + providers: [LayoutService, SubscriptionService], +}) +export class AccountLayoutComponent implements AfterViewInit { + // required for dynamic component + static type = eLayoutType.account; + + authWrapperKey = 'Account.AuthWrapperComponent'; + + constructor(public service: LayoutService) {} + + ngAfterViewInit() { + this.service.subscribeWindowSize(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.html new file mode 100644 index 0000000000..5a4e2e6039 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.html @@ -0,0 +1,27 @@ +
+
+ + + + + +
+
+ + +
+ {{ 'AbpAccount::InvalidLoginRequest' | abpLocalization }} + {{ 'AbpAccount::ThereAreNoLoginSchemesConfiguredForThisClient' | abpLocalization }} +
+
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts new file mode 100644 index 0000000000..a5c69d2301 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AuthWrapperComponent } from './auth-wrapper.component'; + +describe('AuthWrapperComponent', () => { + let component: AuthWrapperComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AuthWrapperComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AuthWrapperComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts new file mode 100644 index 0000000000..0023c74e78 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts @@ -0,0 +1,13 @@ +import { Component, OnInit } from '@angular/core'; +import { AuthWrapperService } from '@abp/ng.account.core'; + +@Component({ + selector: 'abp-auth-wrapper', + templateUrl: './auth-wrapper.component.html', + providers: [AuthWrapperService], +}) +export class AuthWrapperComponent implements OnInit { + constructor(public service: AuthWrapperService) {} + + ngOnInit(): void {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html new file mode 100644 index 0000000000..e4381b7b05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html @@ -0,0 +1,63 @@ + +
+
+
+
+ {{ + 'AbpUiMultiTenancy::Tenant' | abpLocalization + }}
+
+ {{ currentTenant.name || ('AbpUiMultiTenancy::NotSelected' | abpLocalization) }} +
+
+ +
+
+
+ + + +
Switch Tenant
+
+ +
+
+
+ + +
+

{{ 'AbpUiMultiTenancy::SwitchTenantHint' | abpLocalization }}

+
+
+
+ + + + {{ 'AbpTenantManagement::Save' | abpLocalization }} + + +
+
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts new file mode 100644 index 0000000000..86dd8a0cf5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TenantBoxComponent } from './tenant-box.component'; + +describe('TenantBoxComponent', () => { + let component: TenantBoxComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ TenantBoxComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(TenantBoxComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts new file mode 100644 index 0000000000..1aba2fbc6c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts @@ -0,0 +1,13 @@ +import { Component, OnInit } from '@angular/core'; +import { TenantBoxService } from '@abp/ng.account.core'; + +@Component({ + selector: 'abp-tenant-box', + templateUrl: './tenant-box.component.html', + providers: [TenantBoxService], +}) +export class TenantBoxComponent implements OnInit { + constructor(public service: TenantBoxService) {} + + ngOnInit(): void {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.html new file mode 100644 index 0000000000..c41cfb3d31 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.html @@ -0,0 +1,50 @@ + + + +
+ + + +
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.ts new file mode 100644 index 0000000000..42da273fbb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.ts @@ -0,0 +1,21 @@ +import { eLayoutType, SubscriptionService } from '@abp/ng.core'; +import { collapseWithMargin, slideFromBottom } from '@abp/ng.theme.shared'; +import { AfterViewInit, Component } from '@angular/core'; +import { LayoutService } from '../../services/layout.service'; + +@Component({ + selector: 'abp-layout-application', + templateUrl: './application-layout.component.html', + animations: [slideFromBottom, collapseWithMargin], + providers: [LayoutService, SubscriptionService], +}) +export class ApplicationLayoutComponent implements AfterViewInit { + // required for dynamic component + static type = eLayoutType.application; + + constructor(public service: LayoutService) {} + + ngAfterViewInit() { + this.service.subscribeWindowSize(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts new file mode 100644 index 0000000000..f961ecc321 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { eLayoutType } from '@abp/ng.core'; + +@Component({ + selector: 'abp-layout-empty', + template: ` + + + `, +}) +export class EmptyLayoutComponent { + static type = eLayoutType.empty; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/index.ts new file mode 100644 index 0000000000..7daf7f2c1a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/index.ts @@ -0,0 +1,12 @@ +export * from './account-layout/account-layout.component'; +export * from './account-layout/auth-wrapper/auth-wrapper.component'; +export * from './account-layout/tenant-box/tenant-box.component'; +export * from './application-layout/application-layout.component'; +export * from './empty-layout/empty-layout.component'; +export * from './logo/logo.component'; +export * from './nav-items/current-user.component'; +export * from './nav-items/languages.component'; +export * from './nav-items/nav-items.component'; +export * from './routes/routes.component'; +export * from './validation-error/validation-error.component'; +export * from './page-alert-container/page-alert-container.component'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/logo/logo.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/logo/logo.component.ts new file mode 100644 index 0000000000..95a532435b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/logo/logo.component.ts @@ -0,0 +1,28 @@ +import { ApplicationInfo, EnvironmentService } from '@abp/ng.core'; +import { Component } from '@angular/core'; + +@Component({ + selector: 'abp-logo', + template: ` + + + + + + {{ appInfo.name }} + + `, +}) +export class LogoComponent { + get appInfo(): ApplicationInfo { + return this.environment.getEnvironment().application; + } + + constructor(private environment: EnvironmentService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.html new file mode 100644 index 0000000000..307bc961c1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.html @@ -0,0 +1,41 @@ + + {{ + 'AbpAccount::Login' | abpLocalization + }} + + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.ts new file mode 100644 index 0000000000..aa2a144be6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.ts @@ -0,0 +1,37 @@ +import { + AuthService, + ConfigStateService, + CurrentUserDto, + NAVIGATE_TO_MANAGE_PROFILE, + SessionStateService, +} from '@abp/ng.core'; +import { Component, Inject } from '@angular/core'; +import { Observable } from 'rxjs'; + +@Component({ + selector: 'abp-current-user', + templateUrl: './current-user.component.html', +}) +export class CurrentUserComponent { + currentUser$: Observable = this.configState.getOne$('currentUser'); + selectedTenant$ = this.sessionState.getTenant$(); + + get smallScreen(): boolean { + return window.innerWidth < 992; + } + + constructor( + @Inject(NAVIGATE_TO_MANAGE_PROFILE) public navigateToManageProfile, + private authService: AuthService, + private configState: ConfigStateService, + private sessionState: SessionStateService, + ) {} + + navigateToLogin() { + this.authService.navigateToLogin(); + } + + logout() { + this.authService.logout().subscribe(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/languages.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/languages.component.ts new file mode 100644 index 0000000000..7f73e312cf --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/languages.component.ts @@ -0,0 +1,84 @@ +import { ConfigStateService, LanguageInfo, SessionStateService } from '@abp/ng.core'; +import { Component } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import snq from 'snq'; + +@Component({ + selector: 'abp-languages', + // tslint:disable-next-line: component-max-inline-declarations + template: ` + + `, +}) +export class LanguagesComponent { + get smallScreen(): boolean { + return window.innerWidth < 992; + } + + languages$: Observable = this.configState.getDeep$('localization.languages'); + + get defaultLanguage$(): Observable { + return this.languages$.pipe( + map( + languages => + snq( + () => languages.find(lang => lang.cultureName === this.selectedLangCulture).displayName, + ), + '', + ), + ); + } + + get dropdownLanguages$(): Observable { + return this.languages$.pipe( + map( + languages => + snq(() => languages.filter(lang => lang.cultureName !== this.selectedLangCulture)), + [], + ), + ); + } + + get selectedLangCulture(): string { + return this.sessionState.getLanguage(); + } + + constructor(private sessionState: SessionStateService, private configState: ConfigStateService) {} + + onChangeLang(cultureName: string) { + this.sessionState.setLanguage(cultureName); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.html new file mode 100644 index 0000000000..d781ad90b2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.html @@ -0,0 +1,16 @@ + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.ts new file mode 100644 index 0000000000..7a5ee9b37a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.ts @@ -0,0 +1,12 @@ +import { NavItem, NavItemsService } from '@abp/ng.theme.shared'; +import { Component, Input, TrackByFunction } from '@angular/core'; + +@Component({ + selector: 'abp-nav-items', + templateUrl: 'nav-items.component.html', +}) +export class NavItemsComponent { + trackByFn: TrackByFunction = (_, element) => element.id; + + constructor(public readonly navItems: NavItemsService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html new file mode 100644 index 0000000000..6f2c62bf11 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html @@ -0,0 +1,22 @@ + + + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts new file mode 100644 index 0000000000..9dc1966337 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts @@ -0,0 +1,11 @@ +import { Component, ViewEncapsulation } from '@angular/core'; +import { PageAlertService } from '@abp/ng.theme.shared'; + +@Component({ + selector: 'abp-page-alert-container', + templateUrl: './page-alert-container.component.html', + encapsulation: ViewEncapsulation.None, +}) +export class PageAlertContainerComponent { + constructor(public service: PageAlertService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.html new file mode 100644 index 0000000000..aae02df783 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.html @@ -0,0 +1,104 @@ + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.ts new file mode 100644 index 0000000000..273d9c71fb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.ts @@ -0,0 +1,35 @@ +import { ABP, RoutesService, TreeNode } from '@abp/ng.core'; +import { + Component, + ElementRef, + Input, + QueryList, + Renderer2, + TrackByFunction, + ViewChildren, +} from '@angular/core'; + +@Component({ + selector: 'abp-routes', + templateUrl: 'routes.component.html', +}) +export class RoutesComponent { + @Input() smallScreen: boolean; + + @ViewChildren('childrenContainer') childrenContainers: QueryList>; + + trackByFn: TrackByFunction> = (_, item) => item.name; + + constructor(public readonly routesService: RoutesService, protected renderer: Renderer2) {} + + isDropdown(node: TreeNode) { + return !node?.isLeaf || this.routesService.hasChildren(node.name); + } + + closeDropdown() { + this.childrenContainers.forEach(({ nativeElement }) => { + this.renderer.addClass(nativeElement, 'd-none'); + setTimeout(() => this.renderer.removeClass(nativeElement, 'd-none'), 0); + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/validation-error/validation-error.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/validation-error/validation-error.component.ts new file mode 100644 index 0000000000..97724c0786 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/validation-error/validation-error.component.ts @@ -0,0 +1,34 @@ +import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; +import { Validation, ValidationErrorComponent as ErrorComponent } from '@ngx-validate/core'; + +@Component({ + selector: 'abp-validation-error', + template: ` +
+ {{ error.message | abpLocalization: error.interpoliteParams }} +
+ `, + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, +}) +export class ValidationErrorComponent extends ErrorComponent { + get abpErrors(): Validation.Error[] & { interpoliteParams?: string[] } { + if (!this.errors || !this.errors.length) return []; + + return this.errors.map(error => { + if (!error.message) return error; + + const index = error.message.indexOf('['); + + if (index > -1) { + return { + ...error, + message: error.message.slice(0, index), + interpoliteParams: error.message.slice(index + 1, error.message.length - 1).split(','), + }; + } + + return error; + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/constants/styles.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/constants/styles.ts new file mode 100644 index 0000000000..5b82f0ba85 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/constants/styles.ts @@ -0,0 +1,145 @@ +export default ` +.content-header-title { + font-size: 24px; +} +.entry-row { + margin-bottom: 15px; +} +#main-navbar-tools a.dropdown-toggle { + text-decoration: none; + color: #fff; +} +.navbar .dropdown-submenu { + position: relative; +} +.navbar .dropdown-menu { + margin: 0; + padding: 0; +} +.navbar .dropdown-menu a { + font-size: .9em; + padding: 10px 15px; + display: block; + min-width: 210px; + text-align: left; + border-radius: 0.25rem; + min-height: 44px; +} +[dir=rtl] .navbar .dropdown-menu a { + text-align: right!important; +} +.navbar .dropdown-submenu a::after { + transform: rotate(-90deg); + position: absolute; + right: 16px; + top: 18px; +} +[dir=rtl] .navbar .dropdown-submenu a::after { + transform: rotate(90deg); + left: 16px; + right: auto; + top: 20px; +} +.navbar .dropdown-submenu .dropdown-menu { + top: 0; + left: 100%; +} +.card-header .btn { + padding: 2px 6px; +} +.card-header h5 { + margin: 0; +} +.container > .card { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} +@media screen and (min-width: 992px) { + .navbar .dropdown:hover > .dropdown-menu { + display: block; + } + + .navbar .dropdown-submenu:hover > .dropdown-menu { + display: block; + } +} +.input-validation-error { + border-color: #dc3545; +} +.field-validation-error { + font-size: 0.8em; +} +.ui-table .ui-table-tbody > tr.empty-row > div.empty-row-content { + border: 1px solid #c8c8c8; + } +.abp-loading { + background: rgba(0, 0, 0, 0.05); +} +.modal-backdrop { +background-color: rgba(0, 0, 0, 0.6); +} + +.confirmation .confirmation-backdrop { + background: rgba(0, 0, 0, 0.7) !important; +} + .confirmation .confirmation-dialog { + border: none; + border-radius: 10px; + background-color: #fff; + box-shadow: 0 0 10px -5px rgba(0, 0, 0, 0.5); +} + .confirmation .confirmation-dialog .icon-container .icon { + stroke: #fff; + color: #fff; +} + .confirmation .confirmation-dialog .icon-container.info .icon { + stroke: #2f96b4; + color: #2f96b4; +} + .confirmation .confirmation-dialog .icon-container.success .icon { + stroke: #51a351; + color: #51a351; +} + .confirmation .confirmation-dialog .icon-container.warning .icon { + stroke: #f89406; + color: #f89406; +} + .confirmation .confirmation-dialog .icon-container.error .icon { + stroke: #bd362f; + color: #bd362f; +} + .confirmation .confirmation-dialog .content .title { + color: #222; +} + .confirmation .confirmation-dialog .content .message { + color: #777; +} + .confirmation .confirmation-dialog .footer { + background: transparent; +} + .confirmation .confirmation-dialog .footer .confirmation-button { + background-color: #eee; + color: #777; +} + .confirmation .confirmation-dialog .footer .confirmation-button:hover, .confirmation .confirmation-dialog .footer .confirmation-button:focus, .confirmation .confirmation-dialog .footer .confirmation-button:active { + background-color: #bbb; +} + .confirmation .confirmation-dialog .footer .confirmation-button--confirm { + background-color: #2f96b4; + color: #fff; +} + .confirmation .confirmation-dialog .footer .confirmation-button--confirm:hover { + background-color: #2e819b; +} +.ui-table .pagination-wrapper { + background-color: #f4f4f4; + border: 1px solid #c8c8c8; +} +.bordered .datatable-body-row { + border-top: 1px solid #eee; + margin-top: -1px; +} +.breadcrumb { + background-color: transparent; + padding: 0.27rem; +} +`; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/components.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/components.ts new file mode 100644 index 0000000000..e62f551851 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/components.ts @@ -0,0 +1,10 @@ +export const enum eThemeBasicComponents { + ApplicationLayout = 'Theme.ApplicationLayoutComponent', + AccountLayout = 'Theme.AccountLayoutComponent', + EmptyLayout = 'Theme.EmptyLayoutComponent', + Logo = 'Theme.LogoComponent', + Routes = 'Theme.RoutesComponent', + NavItems = 'Theme.NavItemsComponent', + CurrentUser = 'Theme.CurrentUserComponent', + Languages = 'Theme.LanguagesComponent', +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/index.ts new file mode 100644 index 0000000000..07635cbbc8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/index.ts @@ -0,0 +1 @@ +export * from './components'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/index.ts new file mode 100644 index 0000000000..5d15fe1b3c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/index.ts @@ -0,0 +1 @@ +export * from './layout'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/layout.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/layout.ts new file mode 100644 index 0000000000..e2636e4f53 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/layout.ts @@ -0,0 +1,13 @@ +import { TemplateRef } from '@angular/core'; + +export namespace Layout { + export interface State { + navigationElements: NavigationElement[]; + } + + export interface NavigationElement { + name: string; + element: TemplateRef; + order?: number; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/index.ts new file mode 100644 index 0000000000..8102d94f62 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/index.ts @@ -0,0 +1,2 @@ +export * from './nav-item.provider'; +export * from './styles.provider'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/nav-item.provider.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/nav-item.provider.ts new file mode 100644 index 0000000000..7ade066f47 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/nav-item.provider.ts @@ -0,0 +1,31 @@ +import { NavItemsService } from '@abp/ng.theme.shared'; +import { APP_INITIALIZER } from '@angular/core'; +import { CurrentUserComponent } from '../components/nav-items/current-user.component'; +import { LanguagesComponent } from '../components/nav-items/languages.component'; +import { eThemeBasicComponents } from '../enums/components'; + +export const BASIC_THEME_NAV_ITEM_PROVIDERS = [ + { + provide: APP_INITIALIZER, + useFactory: configureNavItems, + deps: [NavItemsService], + multi: true, + }, +]; + +export function configureNavItems(navItems: NavItemsService) { + return () => { + navItems.addItems([ + { + id: eThemeBasicComponents.Languages, + order: 100, + component: LanguagesComponent, + }, + { + id: eThemeBasicComponents.CurrentUser, + order: 100, + component: CurrentUserComponent, + }, + ]); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/styles.provider.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/styles.provider.ts new file mode 100644 index 0000000000..b823503912 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/styles.provider.ts @@ -0,0 +1,43 @@ +import { ReplaceableComponentsService, CONTENT_STRATEGY, DomInsertionService } from '@abp/ng.core'; +import { APP_INITIALIZER } from '@angular/core'; +import { Store } from '@ngxs/store'; +import { AccountLayoutComponent } from '../components/account-layout/account-layout.component'; +import { ApplicationLayoutComponent } from '../components/application-layout/application-layout.component'; +import { EmptyLayoutComponent } from '../components/empty-layout/empty-layout.component'; +import styles from '../constants/styles'; +import { eThemeBasicComponents } from '../enums/components'; + +export const BASIC_THEME_STYLES_PROVIDERS = [ + { + provide: APP_INITIALIZER, + useFactory: configureStyles, + deps: [DomInsertionService, ReplaceableComponentsService], + multi: true, + }, +]; + +export function configureStyles( + domInsertion: DomInsertionService, + replaceableComponents: ReplaceableComponentsService, +) { + return () => { + domInsertion.insertContent(CONTENT_STRATEGY.AppendStyleToHead(styles)); + + initLayouts(replaceableComponents); + }; +} + +function initLayouts(replaceableComponents: ReplaceableComponentsService) { + replaceableComponents.add({ + key: eThemeBasicComponents.ApplicationLayout, + component: ApplicationLayoutComponent, + }); + replaceableComponents.add({ + key: eThemeBasicComponents.AccountLayout, + component: AccountLayoutComponent, + }); + replaceableComponents.add({ + key: eThemeBasicComponents.EmptyLayout, + component: EmptyLayoutComponent, + }); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/services/layout.service.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/services/layout.service.ts new file mode 100644 index 0000000000..aaf1fcf036 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/services/layout.service.ts @@ -0,0 +1,39 @@ +import { ChangeDetectorRef, Injectable } from '@angular/core'; +import { eThemeBasicComponents } from '../enums'; +import { SubscriptionService } from '@abp/ng.core'; +import { fromEvent } from 'rxjs'; +import { debounceTime } from 'rxjs/operators'; + +@Injectable() +export class LayoutService { + isCollapsed = true; + + smallScreen: boolean; // do not set true or false + + logoComponentKey = eThemeBasicComponents.Logo; + + routesComponentKey = eThemeBasicComponents.Routes; + + navItemsComponentKey = eThemeBasicComponents.NavItems; + + constructor(private subscription: SubscriptionService, private cdRef: ChangeDetectorRef) {} + + private checkWindowWidth() { + const isSmallScreen = window.innerWidth < 992; + if (isSmallScreen && this.smallScreen === false) { + this.isCollapsed = false; + setTimeout(() => { + this.isCollapsed = true; + }, 100); + } + this.smallScreen = isSmallScreen; + this.cdRef.detectChanges(); + } + + subscribeWindowSize() { + this.checkWindowWidth(); + + const resize$ = fromEvent(window, 'resize').pipe(debounceTime(150)); + this.subscription.addOne(resize$, () => this.checkWindowWidth()); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/theme-basic.module.ts new file mode 100644 index 0000000000..99a493c85a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/theme-basic.module.ts @@ -0,0 +1,88 @@ +import { CoreModule } from '@abp/ng.core'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { NgbCollapseModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { + NgxValidateCoreModule, + VALIDATION_ERROR_TEMPLATE, + VALIDATION_INVALID_CLASSES, + VALIDATION_TARGET_SELECTOR, +} from '@ngx-validate/core'; +import { AccountLayoutComponent } from './components/account-layout/account-layout.component'; +import { ApplicationLayoutComponent } from './components/application-layout/application-layout.component'; +import { EmptyLayoutComponent } from './components/empty-layout/empty-layout.component'; +import { LogoComponent } from './components/logo/logo.component'; +import { CurrentUserComponent } from './components/nav-items/current-user.component'; +import { LanguagesComponent } from './components/nav-items/languages.component'; +import { NavItemsComponent } from './components/nav-items/nav-items.component'; +import { RoutesComponent } from './components/routes/routes.component'; +import { ValidationErrorComponent } from './components/validation-error/validation-error.component'; +import { BASIC_THEME_NAV_ITEM_PROVIDERS } from './providers/nav-item.provider'; +import { BASIC_THEME_STYLES_PROVIDERS } from './providers/styles.provider'; +import { PageAlertContainerComponent } from './components/page-alert-container/page-alert-container.component'; +import { TenantBoxComponent } from './components/account-layout/tenant-box/tenant-box.component'; +import { AuthWrapperComponent } from './components/account-layout/auth-wrapper/auth-wrapper.component'; + +export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, EmptyLayoutComponent]; + +@NgModule({ + declarations: [ + ...LAYOUTS, + ValidationErrorComponent, + LogoComponent, + NavItemsComponent, + RoutesComponent, + CurrentUserComponent, + LanguagesComponent, + PageAlertContainerComponent, + TenantBoxComponent, + AuthWrapperComponent, + ], + exports: [ + ...LAYOUTS, + ValidationErrorComponent, + LogoComponent, + NavItemsComponent, + RoutesComponent, + CurrentUserComponent, + LanguagesComponent, + PageAlertContainerComponent, + ], + imports: [ + CoreModule, + ThemeSharedModule, + NgbCollapseModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], + entryComponents: [...LAYOUTS, ValidationErrorComponent, CurrentUserComponent, LanguagesComponent], +}) +export class BaseThemeBasicModule {} + +@NgModule({ + exports: [BaseThemeBasicModule], + imports: [BaseThemeBasicModule], +}) +export class ThemeBasicModule { + static forRoot(): ModuleWithProviders { + return { + ngModule: ThemeBasicModule, + providers: [ + BASIC_THEME_NAV_ITEM_PROVIDERS, + BASIC_THEME_STYLES_PROVIDERS, + { + provide: VALIDATION_ERROR_TEMPLATE, + useValue: ValidationErrorComponent, + }, + { + provide: VALIDATION_TARGET_SELECTOR, + useValue: '.form-group', + }, + { + provide: VALIDATION_INVALID_CLASSES, + useValue: 'is-invalid', + }, + ], + }; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/public-api.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/public-api.ts new file mode 100644 index 0000000000..9b5870914b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/public-api.ts @@ -0,0 +1,9 @@ +/* + * Public API Surface of theme-basic + */ + +export * from './lib/components'; +export * from './lib/enums'; +export * from './lib/models'; +export * from './lib/providers'; +export * from './lib/theme-basic.module'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/ng-package.json new file mode 100644 index 0000000000..466bcc3756 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/libs/theme-basic/testing", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/lib/theme-basic-testing.module.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/lib/theme-basic-testing.module.ts new file mode 100644 index 0000000000..282e5a2da7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/lib/theme-basic-testing.module.ts @@ -0,0 +1,40 @@ +import { + BaseThemeBasicModule, + BASIC_THEME_NAV_ITEM_PROVIDERS, + BASIC_THEME_STYLES_PROVIDERS, + ValidationErrorComponent, +} from '@abp/ng.theme.basic'; +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { + VALIDATION_ERROR_TEMPLATE, + VALIDATION_INVALID_CLASSES, + VALIDATION_TARGET_SELECTOR, +} from '@ngx-validate/core'; + +@NgModule({ + exports: [BaseThemeBasicModule], + imports: [BaseThemeBasicModule], +}) +export class ThemeBasicTestingModule { + static withConfig(): ModuleWithProviders { + return { + ngModule: ThemeBasicTestingModule, + providers: [ + BASIC_THEME_NAV_ITEM_PROVIDERS, + BASIC_THEME_STYLES_PROVIDERS, + { + provide: VALIDATION_ERROR_TEMPLATE, + useValue: ValidationErrorComponent, + }, + { + provide: VALIDATION_TARGET_SELECTOR, + useValue: '.form-group', + }, + { + provide: VALIDATION_INVALID_CLASSES, + useValue: 'is-invalid', + }, + ], + }; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/public-api.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/public-api.ts new file mode 100644 index 0000000000..24a3ac7586 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/public-api.ts @@ -0,0 +1 @@ +export * from './lib/theme-basic-testing.module'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.json new file mode 100644 index 0000000000..692cc17b32 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "allowSyntheticDefaultImports": true, + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.json new file mode 100644 index 0000000000..bbcc12b1c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.prod.json new file mode 100644 index 0000000000..331d0ecb05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial", + "enableIvy": false + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md b/npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md index 0578cf669d..e1b21f241d 100644 --- a/npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md @@ -1,7 +1,3 @@ -# theme-shared +

@abp/ng.theme.shared

-This library was generated with [Nx](https://nx.dev). - -## Running unit tests - -Run `nx test theme-shared` to execute the unit tests. +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json index 69a7ee91b9..ca09e6b35d 100644 --- a/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json @@ -1,6 +1,7 @@ { "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", "dest": "../../dist/libs/theme-shared", + "assets": ["./styles/**/*"], "lib": { "entryFile": "src/public-api.ts" }, diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index ebd57b3a50..eab015bf6d 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -18,7 +18,8 @@ // "@abp/ng.core": ["libs/core/src/public-api.ts"], // "@abp/ng.theme.shared": ["libs/theme-shared/src/public-api.ts"] "@abp/ng.core": ["dist/libs/core"], - "@abp/ng.theme.shared": ["dist/libs/theme-shared"] + "@abp/ng.theme.shared": ["dist/libs/theme-shared"], + "@abp/ng.theme.basic": ["dist/libs/theme-basic"] } }, "exclude": ["node_modules", "tmp"] From 3ce5c0163c1b3b88be77da2eb974574b7dda8ccf Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 12 Aug 2021 10:59:18 +0300 Subject: [PATCH 05/56] update ng package versions --- npm/ng-packs/lerna.version.json | 6 ++---- npm/ng-packs/packages/account-core/package.json | 2 +- npm/ng-packs/packages/account/package.json | 2 +- npm/ng-packs/packages/components/package.json | 2 +- npm/ng-packs/packages/core/package.json | 2 +- npm/ng-packs/packages/feature-management/package.json | 2 +- npm/ng-packs/packages/identity/package.json | 2 +- npm/ng-packs/packages/permission-management/package.json | 2 +- npm/ng-packs/packages/schematics/package.json | 2 +- npm/ng-packs/packages/setting-management/package.json | 2 +- npm/ng-packs/packages/tenant-management/package.json | 2 +- npm/ng-packs/packages/theme-basic/package.json | 2 +- npm/ng-packs/packages/theme-shared/package.json | 2 +- 13 files changed, 14 insertions(+), 16 deletions(-) diff --git a/npm/ng-packs/lerna.version.json b/npm/ng-packs/lerna.version.json index 4e6fe10dc5..7cbcec9b95 100644 --- a/npm/ng-packs/lerna.version.json +++ b/npm/ng-packs/lerna.version.json @@ -1,7 +1,5 @@ { - "version": "4.4.0-rc.2", - "packages": [ - "packages/*" - ], + "version": "4.4.0", + "packages": ["packages/*"], "npmClient": "yarn" } diff --git a/npm/ng-packs/packages/account-core/package.json b/npm/ng-packs/packages/account-core/package.json index c2c6681ed3..6f5ab3b7a0 100644 --- a/npm/ng-packs/packages/account-core/package.json +++ b/npm/ng-packs/packages/account-core/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.account.core", - "version": "4.4.0-rc.2", + "version": "4.4.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index 1cb90c9b14..4bc94e6246 100644 --- a/npm/ng-packs/packages/account/package.json +++ b/npm/ng-packs/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.account", - "version": "4.4.0-rc.2", + "version": "4.4.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/components/package.json b/npm/ng-packs/packages/components/package.json index 2056b457f9..767261b15a 100644 --- a/npm/ng-packs/packages/components/package.json +++ b/npm/ng-packs/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.components", - "version": "4.4.0-rc.2", + "version": "4.4.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index 1e4903cfc1..3d115bc8e1 100644 --- a/npm/ng-packs/packages/core/package.json +++ b/npm/ng-packs/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.core", - "version": "4.4.0-rc.2", + "version": "4.4.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index 60690ef01b..85b5956f98 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.feature-management", - "version": "4.4.0-rc.2", + "version": "4.4.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/identity/package.json b/npm/ng-packs/packages/identity/package.json index 56369843f3..37da33811e 100644 --- a/npm/ng-packs/packages/identity/package.json +++ b/npm/ng-packs/packages/identity/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.identity", - "version": "4.4.0-rc.2", + "version": "4.4.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index 8638efcbc7..f71fa44287 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.permission-management", - "version": "4.4.0-rc.2", + "version": "4.4.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/schematics/package.json b/npm/ng-packs/packages/schematics/package.json index d77fbf19c1..d8b7cb50d2 100644 --- a/npm/ng-packs/packages/schematics/package.json +++ b/npm/ng-packs/packages/schematics/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.schematics", - "version": "4.4.0-rc.2", + "version": "4.4.0", "description": "Schematics that works with ABP Backend", "keywords": [ "schematics" diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index be8380d756..55fe65c71a 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.setting-management", - "version": "4.4.0-rc.2", + "version": "4.4.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index 4586f6a8c1..77c031e5a1 100644 --- a/npm/ng-packs/packages/tenant-management/package.json +++ b/npm/ng-packs/packages/tenant-management/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.tenant-management", - "version": "4.4.0-rc.2", + "version": "4.4.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index 5a9144c8b7..2f149834fe 100644 --- a/npm/ng-packs/packages/theme-basic/package.json +++ b/npm/ng-packs/packages/theme-basic/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.theme.basic", - "version": "4.4.0-rc.2", + "version": "4.4.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index 7f06b96fac..557782119a 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.theme.shared", - "version": "4.4.0-rc.2", + "version": "4.4.0", "homepage": "https://abp.io", "repository": { "type": "git", From 40ed517088254becb9b78369c3575668ca700fb2 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 12 Aug 2021 16:53:52 +0300 Subject: [PATCH 06/56] rename libs folder as packages --- npm/ng-packs/nx/ng-packs/angular.json | 60 +++++++++---------- .../libs/theme-shared/testing/ng-package.json | 7 --- .../nx/ng-packs/{libs => packages}/.gitkeep | 0 .../{libs => packages}/core/.eslintrc.json | 0 .../{libs => packages}/core/README.md | 0 .../{libs => packages}/core/jest.config.js | 2 +- .../core/locale/ng-package.json | 2 +- .../core/locale/src/public-api.ts | 0 .../core/locale/src/utils/register-locale.ts | 0 .../{libs => packages}/core/ng-package.json | 2 +- .../{libs => packages}/core/package.json | 0 .../core/src/lib/abstracts/index.ts | 0 .../src/lib/abstracts/ng-model.component.ts | 0 .../core/src/lib/actions/config.actions.ts | 0 .../core/src/lib/actions/index.ts | 0 .../core/src/lib/actions/loader.actions.ts | 0 .../core/src/lib/actions/profile.actions.ts | 0 .../core/src/lib/actions/rest.actions.ts | 0 .../components/dynamic-layout.component.ts | 0 .../core/src/lib/components/index.ts | 0 .../replaceable-route-container.component.ts | 0 .../lib/components/router-outlet.component.ts | 0 .../src/lib/constants/different-locales.ts | 0 .../core/src/lib/constants/index.ts | 0 .../core/src/lib/core.module.ts | 0 .../src/lib/directives/autofocus.directive.ts | 0 .../src/lib/directives/debounce.directive.ts | 0 .../src/lib/directives/ellipsis.directive.ts | 0 .../core/src/lib/directives/for.directive.ts | 0 .../lib/directives/form-submit.directive.ts | 0 .../core/src/lib/directives/index.ts | 0 .../core/src/lib/directives/init.directive.ts | 0 .../lib/directives/permission.directive.ts | 0 .../replaceable-template.directive.ts | 0 .../directives/stop-propagation.directive.ts | 0 .../lib/directives/visibility.directive.ts | 0 .../core/src/lib/enums/common.ts | 0 .../core/src/lib/enums/index.ts | 0 .../core/src/lib/guards/auth.guard.ts | 0 .../core/src/lib/guards/index.ts | 0 .../core/src/lib/guards/permission.guard.ts | 0 .../core/src/lib/handlers/index.ts | 0 .../handlers/oauth-configuration.handler.ts | 0 .../core/src/lib/handlers/routes.handler.ts | 0 .../src/lib/interceptors/api.interceptor.ts | 0 .../core/src/lib/interceptors/index.ts | 0 .../core/src/lib/localization.module.ts | 0 .../lib/models/application-configuration.ts | 0 .../core/src/lib/models/auth.ts | 0 .../core/src/lib/models/common.ts | 0 .../core/src/lib/models/config.ts | 0 .../core/src/lib/models/dtos.ts | 0 .../core/src/lib/models/environment.ts | 0 .../core/src/lib/models/index.ts | 0 .../core/src/lib/models/localization.ts | 0 .../core/src/lib/models/profile.ts | 0 .../src/lib/models/replaceable-components.ts | 0 .../core/src/lib/models/rest.ts | 0 .../core/src/lib/models/session.ts | 0 .../core/src/lib/models/utility.ts | 0 .../core/src/lib/pipes/index.ts | 0 .../core/src/lib/pipes/localization.pipe.ts | 0 .../core/src/lib/pipes/sort.pipe.ts | 0 .../core/src/lib/providers/index.ts | 0 .../core/src/lib/providers/locale.provider.ts | 0 .../core/src/lib/proxy/README.md | 0 .../core/src/lib/proxy/generate-proxy.json | 0 .../core/src/lib/proxy/index.ts | 0 .../core/src/lib/proxy/pages/abp/index.ts | 0 .../abp/multi-tenancy/abp-tenant.service.ts | 0 .../proxy/pages/abp/multi-tenancy/index.ts | 0 .../core/src/lib/proxy/pages/index.ts | 0 .../lib/proxy/volo/abp/asp-net-core/index.ts | 0 .../abp-api-definition.service.ts | 0 .../asp-net-core/mvc/api-exploring/index.ts | 0 .../abp-application-configuration.service.ts | 0 .../mvc/application-configurations/index.ts | 0 .../mvc/application-configurations/models.ts | 0 .../object-extending/index.ts | 0 .../object-extending/models.ts | 0 .../proxy/volo/abp/asp-net-core/mvc/index.ts | 0 .../asp-net-core/mvc/multi-tenancy/index.ts | 0 .../asp-net-core/mvc/multi-tenancy/models.ts | 0 .../core/src/lib/proxy/volo/abp/http/index.ts | 0 .../lib/proxy/volo/abp/http/modeling/index.ts | 0 .../proxy/volo/abp/http/modeling/models.ts | 0 .../core/src/lib/proxy/volo/abp/index.ts | 0 .../lib/proxy/volo/abp/localization/index.ts | 0 .../lib/proxy/volo/abp/localization/models.ts | 0 .../core/src/lib/proxy/volo/abp/models.ts | 0 .../core/src/lib/proxy/volo/index.ts | 0 .../application-configuration.service.ts | 0 .../core/src/lib/services/auth.service.ts | 0 .../src/lib/services/config-state.service.ts | 0 .../services/content-projection.service.ts | 0 .../src/lib/services/dom-insertion.service.ts | 0 .../src/lib/services/environment.service.ts | 0 .../src/lib/services/http-wait.service.ts | 0 .../core/src/lib/services/index.ts | 0 .../src/lib/services/lazy-load.service.ts | 0 .../core/src/lib/services/list.service.ts | 0 .../src/lib/services/localization.service.ts | 0 .../src/lib/services/multi-tenancy.service.ts | 0 .../src/lib/services/permission.service.ts | 0 .../src/lib/services/profile-state.service.ts | 0 .../core/src/lib/services/profile.service.ts | 0 .../replaceable-components.service.ts | 0 .../src/lib/services/resource-wait.service.ts | 0 .../core/src/lib/services/rest.service.ts | 0 .../src/lib/services/router-events.service.ts | 0 .../src/lib/services/router-wait.service.ts | 0 .../core/src/lib/services/routes.service.ts | 0 .../src/lib/services/session-state.service.ts | 0 .../src/lib/services/subscription.service.ts | 0 .../core/src/lib/services/track-by.service.ts | 0 .../core/src/lib/states/config.state.ts | 0 .../core/src/lib/states/index.ts | 0 .../core/src/lib/states/profile.state.ts | 0 .../src/lib/strategies/auth-flow.strategy.ts | 0 .../src/lib/strategies/container.strategy.ts | 0 .../strategies/content-security.strategy.ts | 0 .../src/lib/strategies/content.strategy.ts | 0 .../src/lib/strategies/context.strategy.ts | 0 .../lib/strategies/cross-origin.strategy.ts | 0 .../core/src/lib/strategies/dom.strategy.ts | 0 .../core/src/lib/strategies/index.ts | 0 .../src/lib/strategies/loading.strategy.ts | 0 .../src/lib/strategies/projection.strategy.ts | 0 .../src/lib/tests/api.interceptor.spec.ts | 0 .../application-configuration.service.spec.ts | 0 .../core/src/lib/tests/array-utils.spec.ts | 0 .../core/src/lib/tests/auth.guard.spec.ts | 0 .../src/lib/tests/autofocus.directive.spec.ts | 0 .../core/src/lib/tests/common-utils.spec.ts | 0 .../lib/tests/config-state.service.spec.ts | 0 .../src/lib/tests/container.strategy.spec.ts | 0 .../tests/content-projection.service.spec.ts | 0 .../tests/content-security.strategy.spec.ts | 0 .../src/lib/tests/content.strategy.spec.ts | 0 .../src/lib/tests/context.strategy.spec.ts | 0 .../lib/tests/cross-origin.strategy.spec.ts | 0 .../src/lib/tests/date-extensions.spec.ts | 0 .../core/src/lib/tests/date-utils.spec.ts | 0 .../src/lib/tests/debounce.directive.spec.ts | 0 .../lib/tests/dom-insertion.service.spec.ts | 0 .../core/src/lib/tests/dom.strategy.spec.ts | 0 .../tests/dynamic-layout.component.spec.ts | 0 .../src/lib/tests/environment-utils.spec.ts | 0 .../src/lib/tests/environment.service.spec.ts | 0 .../core/src/lib/tests/factory-utils.spec.ts | 0 .../core/src/lib/tests/for.directive.spec.ts | 0 .../lib/tests/form-submit.directive.spec.ts | 0 .../core/src/lib/tests/form-utils.spec.ts | 0 .../src/lib/tests/generator-utils.spec.ts | 0 .../core/src/lib/tests/initial-utils.spec.ts | 0 .../core/src/lib/tests/internal-store.spec.ts | 0 .../src/lib/tests/lazy-load-utils.spec.ts | 0 .../src/lib/tests/lazy-load.service.spec.ts | 0 .../core/src/lib/tests/list.service.spec.ts | 0 .../src/lib/tests/loading.strategy.spec.ts | 0 .../src/lib/tests/locale.provider.spec.ts | 0 .../src/lib/tests/localization-utils.spec.ts | 0 .../src/lib/tests/localization.pipe.spec.ts | 0 .../lib/tests/localization.service.spec.ts | 0 .../src/lib/tests/multi-tenancy-utils.spec.ts | 0 .../src/lib/tests/ng-model.component.spec.ts | 0 .../core/src/lib/tests/number-utils.spec.ts | 0 .../core/src/lib/tests/object-utils.spec.ts | 0 .../lib/tests/permission.directive.spec.ts | 0 .../src/lib/tests/permission.guard.spec.ts | 0 .../lib/tests/profile-state.service.spec.ts | 0 .../src/lib/tests/profile.service.spec.ts | 0 .../core/src/lib/tests/profile.state.spec.ts | 0 .../src/lib/tests/projection.strategy.spec.ts | 0 ...laceable-route-container.component.spec.ts | 0 .../replaceable-template.directive.spec.ts | 0 .../core/src/lib/tests/rest.service.spec.ts | 0 .../core/src/lib/tests/route-utils.spec.ts | 0 .../lib/tests/router-events.service.spec.ts | 0 .../lib/tests/router-outlet.component.spec.ts | 0 .../core/src/lib/tests/routes.handler.spec.ts | 0 .../core/src/lib/tests/routes.service.spec.ts | 0 .../core/src/lib/tests/sort.pipe.spec.ts | 0 .../tests/stop-propagation.directive.spec.ts | 0 .../core/src/lib/tests/string-utils.spec.ts | 0 .../lib/tests/subscription.service.spec.ts | 0 .../src/lib/tests/track-by.service.spec.ts | 0 .../core/src/lib/tests/tree-utils.spec.ts | 0 .../core/src/lib/tests/utils/common.utils.ts | 0 .../utils/permission-service.spec.utils.ts | 0 .../core/src/lib/tests/validators.spec.ts | 0 .../lib/tests/visibility.directive.spec.ts | 0 .../core/src/lib/tokens/app-config.token.ts | 0 .../core/src/lib/tokens/index.ts | 0 .../core/src/lib/tokens/list.token.ts | 0 .../core/src/lib/tokens/lodaer-delay.token.ts | 0 .../src/lib/tokens/manage-profile.token.ts | 0 .../core/src/lib/tokens/options.token.ts | 0 .../core/src/lib/tokens/tenant-key.token.ts | 0 .../core/src/lib/utils/array-utils.ts | 0 .../core/src/lib/utils/auth-utils.ts | 0 .../core/src/lib/utils/common-utils.ts | 0 .../core/src/lib/utils/date-extensions.ts | 0 .../core/src/lib/utils/date-utils.ts | 0 .../core/src/lib/utils/environment-utils.ts | 0 .../core/src/lib/utils/factory-utils.ts | 0 .../core/src/lib/utils/file-utils.ts | 0 .../core/src/lib/utils/form-utils.ts | 0 .../core/src/lib/utils/generator-utils.ts | 0 .../core/src/lib/utils/http-utils.ts | 0 .../core/src/lib/utils/index.ts | 0 .../core/src/lib/utils/initial-utils.ts | 0 .../src/lib/utils/internal-store-utils.ts | 0 .../core/src/lib/utils/lazy-load-utils.ts | 0 .../core/src/lib/utils/localization-utils.ts | 0 .../core/src/lib/utils/multi-tenancy-utils.ts | 0 .../core/src/lib/utils/number-utils.ts | 0 .../core/src/lib/utils/object-utils.ts | 0 .../core/src/lib/utils/route-utils.ts | 0 .../core/src/lib/utils/rxjs-utils.ts | 0 .../core/src/lib/utils/string-utils.ts | 0 .../core/src/lib/utils/tree-utils.ts | 0 .../core/src/lib/validators/age.validator.ts | 0 .../lib/validators/credit-card.validator.ts | 0 .../core/src/lib/validators/index.ts | 0 .../src/lib/validators/range.validator.ts | 0 .../src/lib/validators/required.validator.ts | 0 .../lib/validators/string-length.validator.ts | 0 .../core/src/lib/validators/url.validator.ts | 0 .../{libs => packages}/core/src/public-api.ts | 0 .../{libs => packages}/core/src/test-setup.ts | 0 .../core/testing/ng-package.json | 2 +- .../testing/src/lib/core-testing.module.ts | 0 .../core/testing/src/lib/services/index.ts | 0 .../lib/services/mock-permission.service.ts | 0 .../src/lib/services/mock-rest.service.ts | 0 .../testing/src/lib/utils/clear-page.util.ts | 0 .../core/testing/src/lib/utils/index.ts | 0 .../core/testing/src/lib/utils/wait.util.ts | 0 .../core/testing/src/public-api.ts | 0 .../{libs => packages}/core/tsconfig.json | 0 .../{libs => packages}/core/tsconfig.lib.json | 0 .../core/tsconfig.lib.prod.json | 0 .../core/tsconfig.spec.json | 0 .../theme-basic/.eslintrc.json | 0 .../{libs => packages}/theme-basic/README.md | 0 .../theme-basic/jest.config.js | 2 +- .../theme-basic/ng-package.json | 2 +- .../theme-basic/package.json | 0 .../account-layout.component.html | 0 .../account-layout.component.ts | 0 .../auth-wrapper/auth-wrapper.component.html | 0 .../auth-wrapper.component.spec.ts | 0 .../auth-wrapper/auth-wrapper.component.ts | 0 .../tenant-box/tenant-box.component.html | 0 .../tenant-box/tenant-box.component.spec.ts | 0 .../tenant-box/tenant-box.component.ts | 0 .../application-layout.component.html | 0 .../application-layout.component.ts | 0 .../empty-layout/empty-layout.component.ts | 0 .../theme-basic/src/lib/components/index.ts | 0 .../src/lib/components/logo/logo.component.ts | 0 .../nav-items/current-user.component.html | 0 .../nav-items/current-user.component.ts | 0 .../nav-items/languages.component.ts | 0 .../nav-items/nav-items.component.html | 0 .../nav-items/nav-items.component.ts | 0 .../page-alert-container.component.html | 0 .../page-alert-container.component.ts | 0 .../components/routes/routes.component.html | 0 .../lib/components/routes/routes.component.ts | 0 .../validation-error.component.ts | 0 .../theme-basic/src/lib/constants/styles.ts | 0 .../theme-basic/src/lib/enums/components.ts | 0 .../theme-basic/src/lib/enums/index.ts | 0 .../theme-basic/src/lib/models/index.ts | 0 .../theme-basic/src/lib/models/layout.ts | 0 .../theme-basic/src/lib/providers/index.ts | 0 .../src/lib/providers/nav-item.provider.ts | 0 .../src/lib/providers/styles.provider.ts | 0 .../src/lib/services/layout.service.ts | 0 .../theme-basic/src/lib/theme-basic.module.ts | 0 .../theme-basic/src/public-api.ts | 0 .../theme-basic/src/test-setup.ts | 0 .../theme-basic/testing/ng-package.json | 2 +- .../src/lib/theme-basic-testing.module.ts | 0 .../theme-basic/testing/src/public-api.ts | 0 .../theme-basic/tsconfig.json | 0 .../theme-basic/tsconfig.lib.json | 0 .../theme-basic/tsconfig.lib.prod.json | 0 .../theme-basic/tsconfig.spec.json | 0 .../theme-shared/.eslintrc.json | 0 .../{libs => packages}/theme-shared/README.md | 0 .../theme-shared/extensions/ng-package.json | 7 +++ .../src/lib/adapters/date-time.adapter.ts | 0 .../src/lib/adapters/date.adapter.ts | 0 .../src/lib/adapters/time.adapter.ts | 0 .../abstract-actions.component.ts | 0 .../date-time-picker.component.ts | 0 .../extensible-form-prop.component.html | 0 .../extensible-form-prop.component.ts | 0 .../extensible-form.component.html | 0 .../extensible-form.component.ts | 0 .../extensible-table.component.html | 0 .../extensible-table.component.ts | 0 .../grid-actions/grid-actions.component.html | 0 .../grid-actions/grid-actions.component.ts | 0 .../page-toolbar/page-toolbar.component.html | 0 .../page-toolbar/page-toolbar.component.ts | 0 .../src/lib/constants/extra-properties.ts | 0 .../src/lib/directives/disabled.directive.ts | 0 .../src/lib/directives/prop-data.directive.ts | 0 .../extensions/src/lib/enums/props.enum.ts | 0 .../extensions/src/lib/models/actions.ts | 0 .../src/lib/models/entity-actions.ts | 0 .../extensions/src/lib/models/entity-props.ts | 0 .../extensions/src/lib/models/form-props.ts | 0 .../lib/models/internal/object-extensions.ts | 0 .../src/lib/models/object-extensions.ts | 0 .../extensions/src/lib/models/props.ts | 0 .../src/lib/models/toolbar-actions.ts | 0 .../src/lib/services/extensions.service.ts | 0 .../src/lib/tokens/extensions.token.ts | 0 .../src/lib/ui-extensions.module.ts | 0 .../extensions/src/lib/utils/actions.util.ts | 0 .../extensions/src/lib/utils/enum.util.ts | 0 .../extensions/src/lib/utils/factory.util.ts | 0 .../src/lib/utils/form-props.util.ts | 0 .../src/lib/utils/localization.util.ts | 0 .../extensions/src/lib/utils/props.util.ts | 0 .../extensions/src/lib/utils/state.util.ts | 0 .../src/lib/utils/typeahead.util.ts | 0 .../src/lib/utils/validation.util.ts | 0 .../theme-shared/extensions/src/public-api.ts | 0 .../extensions/src/tests/actions.spec.ts | 0 .../extensions/src/tests/actions.util.spec.ts | 0 .../src/tests/date-time.adapter.spec.ts | 0 .../extensions/src/tests/date.adapter.spec.ts | 0 .../src/tests/entity-actions.spec.ts | 0 .../extensions/src/tests/entity-props.spec.ts | 0 .../extensions/src/tests/enum.util.spec.ts | 0 .../src/tests/extensions.service.spec.ts | 0 .../extensions/src/tests/factory.util.spec.ts | 0 .../extensions/src/tests/form-props.spec.ts | 0 .../src/tests/form-props.util.spec.ts | 0 .../src/tests/localization.util.spec.ts | 0 .../extensions/src/tests/props.spec.ts | 0 .../extensions/src/tests/props.util.spec.ts | 0 .../extensions/src/tests/state.util.spec.ts | 0 .../extensions/src/tests/time.adapter.spec.ts | 0 .../src/tests/toolbar-actions.spec.ts | 0 .../src/tests/typeahead.util.spec.ts | 0 .../src/tests/validation.util.spec.ts | 0 .../src/lib/ui-extensions-testing.module.ts | 0 .../extensions/testing/src/public-api.ts | 0 .../extensions/testing/ssng-package.json | 0 .../theme-shared/jest.config.js | 2 +- .../theme-shared/ng-package.json | 2 +- .../theme-shared/package.json | 0 .../src/lib/animations/bounce.animations.ts | 0 .../src/lib/animations/collapse.animations.ts | 0 .../src/lib/animations/fade.animations.ts | 0 .../theme-shared/src/lib/animations/index.ts | 0 .../src/lib/animations/modal.animations.ts | 0 .../src/lib/animations/slide.animations.ts | 0 .../src/lib/animations/toast.animations.ts | 0 .../breadcrumb/breadcrumb.component.html | 0 .../breadcrumb/breadcrumb.component.ts | 0 .../lib/components/button/button.component.ts | 0 .../lib/components/chart/chart.component.html | 0 .../lib/components/chart/chart.component.ts | 0 .../confirmation/confirmation.component.html | 0 .../confirmation/confirmation.component.scss | 0 .../confirmation/confirmation.component.ts | 0 .../http-error-wrapper.component.html | 0 .../http-error-wrapper.component.scss | 0 .../http-error-wrapper.component.ts | 0 .../theme-shared/src/lib/components/index.ts | 0 .../loader-bar/loader-bar.component.scss | 0 .../loader-bar/loader-bar.component.ts | 0 .../components/loading/loading.component.ts | 0 .../components/modal/modal-close.directive.ts | 0 .../modal/modal-container.component.ts | 0 .../lib/components/modal/modal-ref.service.ts | 0 .../lib/components/modal/modal.component.html | 0 .../lib/components/modal/modal.component.scss | 0 .../lib/components/modal/modal.component.ts | 0 .../sort-order-icon.component.html | 0 .../sort-order-icon.component.ts | 0 .../table-empty-message.component.ts | 0 .../lib/components/table/table.component.html | 0 .../lib/components/table/table.component.scss | 0 .../lib/components/table/table.component.ts | 0 .../toast-container.component.html | 0 .../toast-container.component.scss | 0 .../toast-container.component.ts | 0 .../lib/components/toast/toast.component.html | 0 .../lib/components/toast/toast.component.scss | 0 .../lib/components/toast/toast.component.ts | 0 .../theme-shared/src/lib/constants/scripts.ts | 0 .../theme-shared/src/lib/constants/styles.ts | 0 .../src/lib/constants/validation.ts | 0 .../src/lib/directives/ellipsis.directive.ts | 0 .../theme-shared/src/lib/directives/index.ts | 0 .../src/lib/directives/loading.directive.ts | 0 .../ngx-datatable-default.directive.ts | 0 .../ngx-datatable-list.directive.ts | 0 .../lib/directives/table-sort.directive.ts | 0 .../theme-shared/src/lib/enums/index.ts | 0 .../theme-shared/src/lib/enums/route-names.ts | 0 .../src/lib/handlers/error.handler.ts | 0 .../theme-shared/src/lib/handlers/index.ts | 0 .../src/lib/handlers/lazy-style.handler.ts | 0 .../theme-shared/src/lib/models/common.ts | 0 .../src/lib/models/confirmation.ts | 0 .../theme-shared/src/lib/models/index.ts | 0 .../theme-shared/src/lib/models/nav-item.ts | 0 .../theme-shared/src/lib/models/statistics.ts | 0 .../theme-shared/src/lib/models/toaster.ts | 0 .../theme-shared/src/lib/providers/index.ts | 0 .../providers/ng-bootstrap-config.provider.ts | 0 .../src/lib/providers/route.provider.ts | 0 .../src/lib/services/confirmation.service.ts | 0 .../theme-shared/src/lib/services/index.ts | 0 .../src/lib/services/modal.service.ts | 0 .../src/lib/services/nav-items.service.ts | 0 .../src/lib/services/page-alert.service.ts | 0 .../src/lib/services/toaster.service.ts | 0 .../lib/tests/append-content.token.spec.ts | 0 .../lib/tests/breadcrumb.component.spec.ts | 0 .../src/lib/tests/button.component.spec.ts | 0 .../src/lib/tests/chart.component.spec.ts | 0 .../lib/tests/confirmation.service.spec.ts | 0 .../src/lib/tests/ellipsis.directive.spec.ts | 0 .../src/lib/tests/error.component.spec.ts | 0 .../src/lib/tests/error.handler.spec.ts | 0 .../src/lib/tests/lazy-style.handler.spec.ts | 0 .../lib/tests/loader-bar.component.spec.ts | 0 .../src/lib/tests/loading.directive.spec.ts | 0 .../tests/modal-container.component.spec.ts | 0 .../src/lib/tests/modal.component.spec.ts | 0 .../src/lib/tests/modal.service.spec.ts | 0 .../tests/sort-order-icon.component.spec.ts | 0 .../lib/tests/table-sort.directive.spec.ts | 0 .../src/lib/tests/table.component.spec.ts | 0 .../src/lib/tests/toaster.service.spec.ts | 0 .../src/lib/tests/validation-utils.spec.ts | 0 .../src/lib/theme-shared.module.ts | 0 .../src/lib/tokens/append-content.token.ts | 0 .../src/lib/tokens/http-error.token.ts | 0 .../theme-shared/src/lib/tokens/index.ts | 0 .../src/lib/tokens/lazy-styles.token.ts | 0 .../tokens/ngx-datatable-messages.token.ts | 0 .../suppress-unsaved-changes-warning.token.ts | 0 .../src/lib/utils/date-parser-formatter.ts | 0 .../theme-shared/src/lib/utils/index.ts | 0 .../src/lib/utils/validation-utils.ts | 0 .../src/lib/utils/widget-utils.ts | 0 .../theme-shared/src/public-api.ts | 0 .../theme-shared/src/test-setup.ts | 0 .../theme-shared/styles/bootstrap-rtl.min.css | 0 .../theme-shared/testing}/ng-package.json | 2 +- .../testing/src/lib/models/config.ts | 0 .../testing/src/lib/models/index.ts | 0 .../src/lib/theme-shared-testing.module.ts | 0 .../theme-shared/testing/src/public-api.ts | 0 .../theme-shared/tsconfig.json | 0 .../theme-shared/tsconfig.lib.json | 0 .../theme-shared/tsconfig.lib.prod.json | 0 .../theme-shared/tsconfig.spec.json | 0 npm/ng-packs/nx/ng-packs/tsconfig.base.json | 10 ++-- 471 files changed, 52 insertions(+), 52 deletions(-) delete mode 100644 npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/ng-package.json rename npm/ng-packs/nx/ng-packs/{libs => packages}/.gitkeep (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/.eslintrc.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/README.md (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/jest.config.js (91%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/locale/ng-package.json (72%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/locale/src/public-api.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/locale/src/utils/register-locale.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/ng-package.json (89%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/package.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/abstracts/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/abstracts/ng-model.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/actions/config.actions.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/actions/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/actions/loader.actions.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/actions/profile.actions.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/actions/rest.actions.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/components/dynamic-layout.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/components/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/components/replaceable-route-container.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/components/router-outlet.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/constants/different-locales.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/constants/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/core.module.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/directives/autofocus.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/directives/debounce.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/directives/ellipsis.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/directives/for.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/directives/form-submit.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/directives/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/directives/init.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/directives/permission.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/directives/replaceable-template.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/directives/stop-propagation.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/directives/visibility.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/enums/common.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/enums/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/guards/auth.guard.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/guards/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/guards/permission.guard.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/handlers/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/handlers/oauth-configuration.handler.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/handlers/routes.handler.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/interceptors/api.interceptor.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/interceptors/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/localization.module.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/application-configuration.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/auth.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/common.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/config.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/dtos.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/environment.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/localization.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/profile.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/replaceable-components.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/rest.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/session.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/models/utility.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/pipes/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/pipes/localization.pipe.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/pipes/sort.pipe.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/providers/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/providers/locale.provider.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/README.md (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/generate-proxy.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/pages/abp/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/pages/abp/multi-tenancy/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/pages/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/asp-net-core/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/asp-net-core/mvc/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/http/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/http/modeling/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/http/modeling/models.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/localization/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/localization/models.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/abp/models.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/proxy/volo/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/application-configuration.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/auth.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/config-state.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/content-projection.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/dom-insertion.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/environment.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/http-wait.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/lazy-load.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/list.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/localization.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/multi-tenancy.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/permission.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/profile-state.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/profile.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/replaceable-components.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/resource-wait.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/rest.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/router-events.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/router-wait.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/routes.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/session-state.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/subscription.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/services/track-by.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/states/config.state.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/states/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/states/profile.state.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/strategies/auth-flow.strategy.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/strategies/container.strategy.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/strategies/content-security.strategy.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/strategies/content.strategy.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/strategies/context.strategy.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/strategies/cross-origin.strategy.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/strategies/dom.strategy.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/strategies/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/strategies/loading.strategy.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/strategies/projection.strategy.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/api.interceptor.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/application-configuration.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/array-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/auth.guard.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/autofocus.directive.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/common-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/config-state.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/container.strategy.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/content-projection.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/content-security.strategy.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/content.strategy.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/context.strategy.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/cross-origin.strategy.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/date-extensions.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/date-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/debounce.directive.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/dom-insertion.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/dom.strategy.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/dynamic-layout.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/environment-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/environment.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/factory-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/for.directive.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/form-submit.directive.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/form-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/generator-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/initial-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/internal-store.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/lazy-load-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/lazy-load.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/list.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/loading.strategy.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/locale.provider.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/localization-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/localization.pipe.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/localization.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/multi-tenancy-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/ng-model.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/number-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/object-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/permission.directive.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/permission.guard.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/profile-state.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/profile.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/profile.state.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/projection.strategy.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/replaceable-route-container.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/replaceable-template.directive.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/rest.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/route-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/router-events.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/router-outlet.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/routes.handler.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/routes.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/sort.pipe.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/stop-propagation.directive.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/string-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/subscription.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/track-by.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/tree-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/utils/common.utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/utils/permission-service.spec.utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/validators.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tests/visibility.directive.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tokens/app-config.token.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tokens/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tokens/list.token.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tokens/lodaer-delay.token.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tokens/manage-profile.token.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tokens/options.token.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/tokens/tenant-key.token.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/array-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/auth-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/common-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/date-extensions.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/date-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/environment-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/factory-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/file-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/form-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/generator-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/http-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/initial-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/internal-store-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/lazy-load-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/localization-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/multi-tenancy-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/number-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/object-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/route-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/rxjs-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/string-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/utils/tree-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/validators/age.validator.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/validators/credit-card.validator.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/validators/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/validators/range.validator.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/validators/required.validator.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/validators/string-length.validator.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/lib/validators/url.validator.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/public-api.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/src/test-setup.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/testing/ng-package.json (72%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/testing/src/lib/core-testing.module.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/testing/src/lib/services/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/testing/src/lib/services/mock-permission.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/testing/src/lib/services/mock-rest.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/testing/src/lib/utils/clear-page.util.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/testing/src/lib/utils/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/testing/src/lib/utils/wait.util.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/testing/src/public-api.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/tsconfig.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/tsconfig.lib.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/tsconfig.lib.prod.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/core/tsconfig.spec.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/.eslintrc.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/README.md (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/jest.config.js (90%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/ng-package.json (82%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/package.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/account-layout/account-layout.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/account-layout/account-layout.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/application-layout/application-layout.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/application-layout/application-layout.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/logo/logo.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/nav-items/current-user.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/nav-items/current-user.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/nav-items/languages.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/nav-items/nav-items.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/nav-items/nav-items.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/routes/routes.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/routes/routes.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/components/validation-error/validation-error.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/constants/styles.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/enums/components.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/enums/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/models/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/models/layout.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/providers/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/providers/nav-item.provider.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/providers/styles.provider.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/services/layout.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/lib/theme-basic.module.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/public-api.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/src/test-setup.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/testing/ng-package.json (69%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/testing/src/lib/theme-basic-testing.module.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/testing/src/public-api.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/tsconfig.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/tsconfig.lib.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/tsconfig.lib.prod.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-basic/tsconfig.spec.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/.eslintrc.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/README.md (100%) create mode 100644 npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/ng-package.json rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/adapters/date.adapter.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/adapters/time.adapter.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/components/date-time-picker/date-time-picker.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/constants/extra-properties.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/directives/disabled.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/directives/prop-data.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/enums/props.enum.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/models/actions.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/models/entity-actions.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/models/entity-props.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/models/form-props.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/models/internal/object-extensions.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/models/object-extensions.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/models/props.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/models/toolbar-actions.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/services/extensions.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/tokens/extensions.token.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/ui-extensions.module.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/utils/actions.util.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/utils/enum.util.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/utils/factory.util.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/utils/form-props.util.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/utils/localization.util.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/utils/props.util.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/utils/state.util.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/utils/typeahead.util.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/lib/utils/validation.util.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/public-api.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/actions.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/actions.util.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/date-time.adapter.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/date.adapter.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/entity-actions.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/entity-props.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/enum.util.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/extensions.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/factory.util.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/form-props.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/form-props.util.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/localization.util.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/props.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/props.util.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/state.util.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/time.adapter.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/toolbar-actions.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/typeahead.util.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/src/tests/validation.util.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/testing/src/lib/ui-extensions-testing.module.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/testing/src/public-api.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/extensions/testing/ssng-package.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/jest.config.js (90%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/ng-package.json (89%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/package.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/animations/bounce.animations.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/animations/collapse.animations.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/animations/fade.animations.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/animations/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/animations/modal.animations.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/animations/slide.animations.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/animations/toast.animations.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/button/button.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/chart/chart.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/chart/chart.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/confirmation/confirmation.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/confirmation/confirmation.component.scss (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/confirmation/confirmation.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.scss (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/loader-bar/loader-bar.component.scss (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/loading/loading.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/modal/modal-close.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/modal/modal-container.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/modal/modal-ref.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/modal/modal.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/modal/modal.component.scss (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/modal/modal.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/table/table.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/table/table.component.scss (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/table/table.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/toast-container/toast-container.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/toast-container/toast-container.component.scss (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/toast-container/toast-container.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/toast/toast.component.html (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/toast/toast.component.scss (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/components/toast/toast.component.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/constants/scripts.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/constants/styles.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/constants/validation.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/directives/ellipsis.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/directives/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/directives/loading.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/directives/table-sort.directive.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/enums/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/enums/route-names.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/handlers/error.handler.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/handlers/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/handlers/lazy-style.handler.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/models/common.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/models/confirmation.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/models/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/models/nav-item.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/models/statistics.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/models/toaster.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/providers/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/providers/ng-bootstrap-config.provider.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/providers/route.provider.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/services/confirmation.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/services/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/services/modal.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/services/nav-items.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/services/page-alert.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/services/toaster.service.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/append-content.token.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/breadcrumb.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/button.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/chart.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/confirmation.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/ellipsis.directive.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/error.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/error.handler.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/lazy-style.handler.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/loader-bar.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/loading.directive.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/modal-container.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/modal.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/modal.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/table-sort.directive.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/table.component.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/toaster.service.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tests/validation-utils.spec.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/theme-shared.module.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tokens/append-content.token.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tokens/http-error.token.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tokens/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tokens/lazy-styles.token.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tokens/ngx-datatable-messages.token.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/utils/date-parser-formatter.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/utils/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/utils/validation-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/lib/utils/widget-utils.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/public-api.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/src/test-setup.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/styles/bootstrap-rtl.min.css (100%) rename npm/ng-packs/nx/ng-packs/{libs/theme-shared/extensions => packages/theme-shared/testing}/ng-package.json (69%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/testing/src/lib/models/config.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/testing/src/lib/models/index.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/testing/src/lib/theme-shared-testing.module.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/testing/src/public-api.ts (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/tsconfig.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/tsconfig.lib.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/tsconfig.lib.prod.json (100%) rename npm/ng-packs/nx/ng-packs/{libs => packages}/theme-shared/tsconfig.spec.json (100%) diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index bee1d52477..b0ddc3ba29 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -3,31 +3,31 @@ "projects": { "core": { "projectType": "library", - "root": "libs/core", - "sourceRoot": "libs/core/src", + "root": "packages/core", + "sourceRoot": "packages/core/src", "prefix": "abp", "architect": { "build": { "builder": "@angular-devkit/build-ng-packagr:build", "options": { - "tsConfig": "libs/core/tsconfig.lib.json", - "project": "libs/core/ng-package.json" + "tsConfig": "packages/core/tsconfig.lib.json", + "project": "packages/core/ng-package.json" }, "configurations": { "production": { - "tsConfig": "libs/core/tsconfig.lib.prod.json" + "tsConfig": "packages/core/tsconfig.lib.prod.json" }, "development": { - "tsConfig": "libs/core/tsconfig.lib.json" + "tsConfig": "packages/core/tsconfig.lib.json" } }, "defaultConfiguration": "production" }, "test": { "builder": "@nrwl/jest:jest", - "outputs": ["coverage/libs/core"], + "outputs": ["coverage/packages/core"], "options": { - "jestConfig": "libs/core/jest.config.js", + "jestConfig": "packages/core/jest.config.js", "passWithNoTests": true } }, @@ -35,8 +35,8 @@ "builder": "@nrwl/linter:eslint", "options": { "lintFilePatterns": [ - "libs/core/src/**/*.ts", - "libs/core/src/**/*.html" + "packages/core/src/**/*.ts", + "packages/core/src/**/*.html" ] } } @@ -163,31 +163,31 @@ }, "theme-basic": { "projectType": "library", - "root": "libs/theme-basic", - "sourceRoot": "libs/theme-basic/src", + "root": "packages/theme-basic", + "sourceRoot": "packages/theme-basic/src", "prefix": "abp", "architect": { "build": { "builder": "@angular-devkit/build-ng-packagr:build", "options": { - "tsConfig": "libs/theme-basic/tsconfig.lib.json", - "project": "libs/theme-basic/ng-package.json" + "tsConfig": "packages/theme-basic/tsconfig.lib.json", + "project": "packages/theme-basic/ng-package.json" }, "configurations": { "production": { - "tsConfig": "libs/theme-basic/tsconfig.lib.prod.json" + "tsConfig": "packages/theme-basic/tsconfig.lib.prod.json" }, "development": { - "tsConfig": "libs/theme-basic/tsconfig.lib.json" + "tsConfig": "packages/theme-basic/tsconfig.lib.json" } }, "defaultConfiguration": "production" }, "test": { "builder": "@nrwl/jest:jest", - "outputs": ["coverage/libs/theme-basic"], + "outputs": ["coverage/packages/theme-basic"], "options": { - "jestConfig": "libs/theme-basic/jest.config.js", + "jestConfig": "packages/theme-basic/jest.config.js", "passWithNoTests": true } }, @@ -195,8 +195,8 @@ "builder": "@nrwl/linter:eslint", "options": { "lintFilePatterns": [ - "libs/theme-basic/src/**/*.ts", - "libs/theme-basic/src/**/*.html" + "packages/theme-basic/src/**/*.ts", + "packages/theme-basic/src/**/*.html" ] } } @@ -204,31 +204,31 @@ }, "theme-shared": { "projectType": "library", - "root": "libs/theme-shared", - "sourceRoot": "libs/theme-shared/src", + "root": "packages/theme-shared", + "sourceRoot": "packages/theme-shared/src", "prefix": "abp", "architect": { "build": { "builder": "@angular-devkit/build-ng-packagr:build", "options": { - "tsConfig": "libs/theme-shared/tsconfig.lib.json", - "project": "libs/theme-shared/ng-package.json" + "tsConfig": "packages/theme-shared/tsconfig.lib.json", + "project": "packages/theme-shared/ng-package.json" }, "configurations": { "production": { - "tsConfig": "libs/theme-shared/tsconfig.lib.prod.json" + "tsConfig": "packages/theme-shared/tsconfig.lib.prod.json" }, "development": { - "tsConfig": "libs/theme-shared/tsconfig.lib.json" + "tsConfig": "packages/theme-shared/tsconfig.lib.json" } }, "defaultConfiguration": "production" }, "test": { "builder": "@nrwl/jest:jest", - "outputs": ["coverage/libs/theme-shared"], + "outputs": ["coverage/packages/theme-shared"], "options": { - "jestConfig": "libs/theme-shared/jest.config.js", + "jestConfig": "packages/theme-shared/jest.config.js", "passWithNoTests": true } }, @@ -236,8 +236,8 @@ "builder": "@nrwl/linter:eslint", "options": { "lintFilePatterns": [ - "libs/theme-shared/src/**/*.ts", - "libs/theme-shared/src/**/*.html" + "packages/theme-shared/src/**/*.ts", + "packages/theme-shared/src/**/*.html" ] } } diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/ng-package.json deleted file mode 100644 index 962abb2d5f..0000000000 --- a/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/ng-package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../../dist/libs/theme-shared/testing", - "lib": { - "entryFile": "src/public-api.ts" - } -} diff --git a/npm/ng-packs/nx/ng-packs/libs/.gitkeep b/npm/ng-packs/nx/ng-packs/packages/.gitkeep similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/.gitkeep rename to npm/ng-packs/nx/ng-packs/packages/.gitkeep diff --git a/npm/ng-packs/nx/ng-packs/libs/core/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/core/.eslintrc.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/.eslintrc.json rename to npm/ng-packs/nx/ng-packs/packages/core/.eslintrc.json diff --git a/npm/ng-packs/nx/ng-packs/libs/core/README.md b/npm/ng-packs/nx/ng-packs/packages/core/README.md similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/README.md rename to npm/ng-packs/nx/ng-packs/packages/core/README.md diff --git a/npm/ng-packs/nx/ng-packs/libs/core/jest.config.js b/npm/ng-packs/nx/ng-packs/packages/core/jest.config.js similarity index 91% rename from npm/ng-packs/nx/ng-packs/libs/core/jest.config.js rename to npm/ng-packs/nx/ng-packs/packages/core/jest.config.js index 4efbc9ed82..5b27da11ff 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/jest.config.js +++ b/npm/ng-packs/nx/ng-packs/packages/core/jest.config.js @@ -8,7 +8,7 @@ module.exports = { stringifyContentPathRegex: '\\.(html|svg)$', }, }, - coverageDirectory: '../../coverage/libs/core', + coverageDirectory: '../../coverage/packages/core', transform: { '^.+\\.(ts|js|html)$': 'jest-preset-angular', }, diff --git a/npm/ng-packs/nx/ng-packs/libs/core/locale/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/core/locale/ng-package.json similarity index 72% rename from npm/ng-packs/nx/ng-packs/libs/core/locale/ng-package.json rename to npm/ng-packs/nx/ng-packs/packages/core/locale/ng-package.json index 2ebc715ba0..fae7a02024 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/locale/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/packages/core/locale/ng-package.json @@ -1,6 +1,6 @@ { "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../../dist/libs/core/locale", + "dest": "../../../dist/packages/core/locale", "lib": { "entryFile": "src/public-api.ts" } diff --git a/npm/ng-packs/nx/ng-packs/libs/core/locale/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/core/locale/src/public-api.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/locale/src/public-api.ts rename to npm/ng-packs/nx/ng-packs/packages/core/locale/src/public-api.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/locale/src/utils/register-locale.ts b/npm/ng-packs/nx/ng-packs/packages/core/locale/src/utils/register-locale.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/locale/src/utils/register-locale.ts rename to npm/ng-packs/nx/ng-packs/packages/core/locale/src/utils/register-locale.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/core/ng-package.json similarity index 89% rename from npm/ng-packs/nx/ng-packs/libs/core/ng-package.json rename to npm/ng-packs/nx/ng-packs/packages/core/ng-package.json index 670a0ac99d..2faa7507f1 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/packages/core/ng-package.json @@ -1,6 +1,6 @@ { "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../dist/libs/core", + "dest": "../../dist/packages/core", "lib": { "entryFile": "src/public-api.ts" }, diff --git a/npm/ng-packs/nx/ng-packs/libs/core/package.json b/npm/ng-packs/nx/ng-packs/packages/core/package.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/package.json rename to npm/ng-packs/nx/ng-packs/packages/core/package.json diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/abstracts/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/abstracts/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/abstracts/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/abstracts/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/abstracts/ng-model.component.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/abstracts/ng-model.component.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/config.actions.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/actions/config.actions.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/config.actions.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/actions/config.actions.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/actions/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/actions/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/loader.actions.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/actions/loader.actions.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/loader.actions.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/actions/loader.actions.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/profile.actions.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/actions/profile.actions.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/profile.actions.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/actions/profile.actions.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/rest.actions.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/actions/rest.actions.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/actions/rest.actions.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/actions/rest.actions.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/dynamic-layout.component.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/dynamic-layout.component.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/replaceable-route-container.component.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/replaceable-route-container.component.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/router-outlet.component.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/router-outlet.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/components/router-outlet.component.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/router-outlet.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/constants/different-locales.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/constants/different-locales.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/constants/different-locales.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/constants/different-locales.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/constants/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/constants/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/constants/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/constants/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/core.module.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/core.module.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/core.module.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/core.module.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/autofocus.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/autofocus.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/autofocus.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/autofocus.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/debounce.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/debounce.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/debounce.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/debounce.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/ellipsis.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/ellipsis.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/ellipsis.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/ellipsis.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/for.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/for.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/for.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/for.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/form-submit.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/form-submit.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/init.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/init.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/init.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/init.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/permission.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/permission.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/permission.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/permission.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/replaceable-template.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/replaceable-template.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/replaceable-template.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/replaceable-template.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/stop-propagation.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/stop-propagation.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/visibility.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/visibility.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/directives/visibility.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/visibility.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/enums/common.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/enums/common.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/enums/common.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/enums/common.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/enums/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/enums/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/enums/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/enums/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/auth.guard.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/guards/auth.guard.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/auth.guard.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/guards/auth.guard.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/guards/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/guards/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/permission.guard.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/guards/permission.guard.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/guards/permission.guard.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/guards/permission.guard.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/handlers/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/handlers/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/oauth-configuration.handler.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/handlers/oauth-configuration.handler.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/oauth-configuration.handler.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/handlers/oauth-configuration.handler.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/routes.handler.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/handlers/routes.handler.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/handlers/routes.handler.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/handlers/routes.handler.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/interceptors/api.interceptor.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/interceptors/api.interceptor.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/interceptors/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/interceptors/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/interceptors/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/interceptors/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/localization.module.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/localization.module.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/localization.module.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/localization.module.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/application-configuration.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/application-configuration.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/application-configuration.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/application-configuration.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/auth.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/auth.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/auth.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/auth.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/common.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/common.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/common.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/common.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/config.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/config.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/config.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/config.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/dtos.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/dtos.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/dtos.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/dtos.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/environment.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/environment.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/environment.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/environment.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/localization.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/localization.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/localization.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/localization.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/profile.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/profile.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/profile.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/profile.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/replaceable-components.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/replaceable-components.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/replaceable-components.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/replaceable-components.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/rest.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/rest.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/rest.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/rest.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/session.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/session.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/session.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/session.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/utility.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/utility.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/models/utility.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/utility.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/pipes/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/pipes/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/localization.pipe.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/pipes/localization.pipe.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/localization.pipe.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/pipes/localization.pipe.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/sort.pipe.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/pipes/sort.pipe.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/providers/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/providers/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/providers/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/providers/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/providers/locale.provider.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/providers/locale.provider.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/providers/locale.provider.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/providers/locale.provider.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/README.md b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/README.md similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/README.md rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/README.md diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/generate-proxy.json b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/generate-proxy.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/generate-proxy.json rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/generate-proxy.json diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/pages/abp/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/pages/abp/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/multi-tenancy/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/pages/abp/multi-tenancy/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/abp/multi-tenancy/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/pages/abp/multi-tenancy/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/pages/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/pages/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/pages/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/http/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/http/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/modeling/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/http/modeling/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/modeling/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/http/modeling/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/modeling/models.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/http/modeling/models.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/http/modeling/models.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/http/modeling/models.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/localization/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/localization/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/localization/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/localization/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/localization/models.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/localization/models.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/localization/models.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/localization/models.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/models.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/models.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/abp/models.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/models.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/proxy/volo/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/application-configuration.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/application-configuration.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/application-configuration.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/application-configuration.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/auth.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/auth.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/auth.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/auth.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/config-state.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/config-state.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/config-state.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/config-state.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/content-projection.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/content-projection.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/content-projection.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/content-projection.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/dom-insertion.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/dom-insertion.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/dom-insertion.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/dom-insertion.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/environment.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/environment.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/environment.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/environment.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/http-wait.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/http-wait.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/http-wait.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/http-wait.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/lazy-load.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/lazy-load.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/lazy-load.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/lazy-load.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/list.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/list.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/list.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/list.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/localization.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/localization.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/localization.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/localization.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/multi-tenancy.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/multi-tenancy.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/permission.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/permission.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/permission.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/permission.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/profile-state.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/profile-state.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/profile-state.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/profile-state.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/profile.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/profile.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/profile.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/profile.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/replaceable-components.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/replaceable-components.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/replaceable-components.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/replaceable-components.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/resource-wait.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/resource-wait.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/resource-wait.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/resource-wait.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/rest.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/rest.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/rest.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/rest.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/router-events.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/router-events.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/router-events.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/router-events.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/router-wait.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/router-wait.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/router-wait.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/router-wait.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/routes.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/routes.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/routes.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/routes.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/session-state.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/session-state.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/session-state.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/session-state.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/subscription.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/subscription.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/subscription.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/subscription.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/track-by.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/track-by.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/services/track-by.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/track-by.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/config.state.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/states/config.state.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/config.state.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/states/config.state.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/states/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/states/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/profile.state.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/states/profile.state.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/states/profile.state.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/states/profile.state.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/auth-flow.strategy.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/auth-flow.strategy.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/auth-flow.strategy.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/auth-flow.strategy.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/container.strategy.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/container.strategy.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/container.strategy.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/container.strategy.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/content-security.strategy.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/content-security.strategy.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/content-security.strategy.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/content-security.strategy.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/content.strategy.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/content.strategy.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/content.strategy.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/content.strategy.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/context.strategy.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/context.strategy.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/context.strategy.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/context.strategy.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/cross-origin.strategy.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/cross-origin.strategy.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/cross-origin.strategy.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/cross-origin.strategy.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/dom.strategy.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/dom.strategy.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/dom.strategy.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/dom.strategy.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/loading.strategy.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/loading.strategy.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/projection.strategy.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/projection.strategy.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/strategies/projection.strategy.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/projection.strategy.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/api.interceptor.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/api.interceptor.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/api.interceptor.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/api.interceptor.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/application-configuration.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/application-configuration.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/application-configuration.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/application-configuration.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/array-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/array-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/array-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/array-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/auth.guard.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/auth.guard.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/auth.guard.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/auth.guard.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/autofocus.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/autofocus.directive.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/autofocus.directive.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/autofocus.directive.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/common-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/common-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/common-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/common-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/config-state.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/config-state.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/container.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/container.strategy.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/container.strategy.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/container.strategy.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content-projection.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/content-projection.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content-projection.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/content-projection.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content-security.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/content-security.strategy.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content-security.strategy.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/content-security.strategy.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/content.strategy.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/content.strategy.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/content.strategy.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/context.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/context.strategy.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/context.strategy.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/context.strategy.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/cross-origin.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/cross-origin.strategy.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/cross-origin.strategy.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/cross-origin.strategy.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/date-extensions.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/date-extensions.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/date-extensions.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/date-extensions.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/date-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/date-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/date-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/date-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/debounce.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/debounce.directive.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/debounce.directive.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/debounce.directive.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dom-insertion.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/dom-insertion.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dom-insertion.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/dom-insertion.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dom.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/dom.strategy.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dom.strategy.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/dom.strategy.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dynamic-layout.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/dynamic-layout.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/dynamic-layout.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/dynamic-layout.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/environment-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/environment-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/environment-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/environment-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/environment.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/environment.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/environment.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/environment.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/factory-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/factory-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/factory-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/factory-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/for.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/for.directive.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/for.directive.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/for.directive.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/form-submit.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/form-submit.directive.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/form-submit.directive.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/form-submit.directive.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/form-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/form-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/form-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/form-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/generator-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/generator-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/generator-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/generator-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/initial-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/initial-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/initial-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/initial-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/internal-store.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/internal-store.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/internal-store.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/internal-store.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/lazy-load-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/lazy-load-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/lazy-load.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/lazy-load.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/lazy-load.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/lazy-load.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/list.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/list.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/list.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/list.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/loading.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/loading.strategy.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/locale.provider.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/locale.provider.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/locale.provider.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/locale.provider.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/localization-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/localization-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization.pipe.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/localization.pipe.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization.pipe.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/localization.pipe.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/localization.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/localization.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/localization.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/multi-tenancy-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/multi-tenancy-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/multi-tenancy-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/multi-tenancy-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/ng-model.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/ng-model.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/ng-model.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/ng-model.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/number-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/number-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/number-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/number-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/object-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/object-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/object-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/object-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/permission.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/permission.directive.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/permission.directive.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/permission.directive.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/permission.guard.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/permission.guard.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile-state.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile-state.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile-state.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile-state.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile.state.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile.state.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/profile.state.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile.state.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/projection.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/projection.strategy.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/replaceable-route-container.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/replaceable-route-container.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/replaceable-route-container.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/replaceable-route-container.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/replaceable-template.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/replaceable-template.directive.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/replaceable-template.directive.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/replaceable-template.directive.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/rest.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/rest.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/route-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/route-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/route-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/route-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/router-events.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/router-events.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/router-events.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/router-events.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/router-outlet.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/router-outlet.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/router-outlet.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/router-outlet.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/routes.handler.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/routes.handler.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/routes.handler.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/routes.handler.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/routes.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/routes.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/routes.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/routes.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/sort.pipe.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/sort.pipe.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/sort.pipe.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/sort.pipe.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/stop-propagation.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/stop-propagation.directive.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/stop-propagation.directive.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/stop-propagation.directive.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/string-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/string-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/string-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/string-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/subscription.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/subscription.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/subscription.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/subscription.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/track-by.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/track-by.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/track-by.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/track-by.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/tree-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/tree-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/tree-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/tree-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/utils/common.utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/utils/common.utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/utils/common.utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/utils/common.utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/utils/permission-service.spec.utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/utils/permission-service.spec.utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/utils/permission-service.spec.utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/utils/permission-service.spec.utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/validators.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/validators.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/validators.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/validators.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/visibility.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/visibility.directive.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tests/visibility.directive.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/visibility.directive.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/app-config.token.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/app-config.token.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/app-config.token.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/app-config.token.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/list.token.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/list.token.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/list.token.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/list.token.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/lodaer-delay.token.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/lodaer-delay.token.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/lodaer-delay.token.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/lodaer-delay.token.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/manage-profile.token.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/manage-profile.token.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/manage-profile.token.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/manage-profile.token.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/options.token.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/options.token.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/options.token.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/options.token.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/tenant-key.token.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/tenant-key.token.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/tokens/tenant-key.token.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/tokens/tenant-key.token.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/array-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/array-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/array-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/array-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/auth-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/auth-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/auth-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/auth-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/common-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/common-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/common-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/common-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/date-extensions.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/date-extensions.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/date-extensions.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/date-extensions.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/date-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/date-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/date-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/date-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/environment-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/environment-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/environment-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/environment-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/factory-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/factory-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/factory-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/factory-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/file-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/file-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/file-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/file-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/form-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/form-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/form-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/form-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/generator-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/generator-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/generator-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/generator-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/http-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/http-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/http-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/http-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/initial-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/initial-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/initial-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/initial-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/internal-store-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/internal-store-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/lazy-load-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/lazy-load-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/localization-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/localization-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/localization-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/localization-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/multi-tenancy-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/multi-tenancy-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/number-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/number-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/number-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/number-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/object-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/object-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/object-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/object-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/route-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/route-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/route-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/route-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/rxjs-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/rxjs-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/string-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/string-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/string-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/string-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/tree-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/tree-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/utils/tree-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/tree-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/age.validator.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/age.validator.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/age.validator.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/age.validator.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/credit-card.validator.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/credit-card.validator.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/credit-card.validator.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/credit-card.validator.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/range.validator.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/range.validator.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/range.validator.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/range.validator.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/required.validator.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/required.validator.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/required.validator.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/required.validator.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/string-length.validator.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/string-length.validator.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/string-length.validator.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/string-length.validator.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/url.validator.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/url.validator.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/lib/validators/url.validator.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/lib/validators/url.validator.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/public-api.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/public-api.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/public-api.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/test-setup.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/src/test-setup.ts rename to npm/ng-packs/nx/ng-packs/packages/core/src/test-setup.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/core/testing/ng-package.json similarity index 72% rename from npm/ng-packs/nx/ng-packs/libs/core/testing/ng-package.json rename to npm/ng-packs/nx/ng-packs/packages/core/testing/ng-package.json index 45fdf674ea..c2afe62d54 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/testing/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/packages/core/testing/ng-package.json @@ -1,6 +1,6 @@ { "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../../dist/libs/core/testing", + "dest": "../../../dist/packages/core/testing", "lib": { "entryFile": "src/public-api.ts" } diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/core-testing.module.ts b/npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/core-testing.module.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/core-testing.module.ts rename to npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/core-testing.module.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/services/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/services/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/mock-permission.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/mock-permission.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/mock-rest.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/services/mock-rest.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/services/mock-rest.service.ts rename to npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/services/mock-rest.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/clear-page.util.ts b/npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/utils/clear-page.util.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/clear-page.util.ts rename to npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/utils/clear-page.util.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/index.ts b/npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/utils/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/index.ts rename to npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/utils/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/wait.util.ts b/npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/utils/wait.util.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/testing/src/lib/utils/wait.util.ts rename to npm/ng-packs/nx/ng-packs/packages/core/testing/src/lib/utils/wait.util.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/testing/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/core/testing/src/public-api.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/testing/src/public-api.ts rename to npm/ng-packs/nx/ng-packs/packages/core/testing/src/public-api.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/core/tsconfig.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/tsconfig.json rename to npm/ng-packs/nx/ng-packs/packages/core/tsconfig.json diff --git a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/packages/core/tsconfig.lib.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.json rename to npm/ng-packs/nx/ng-packs/packages/core/tsconfig.lib.json diff --git a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/packages/core/tsconfig.lib.prod.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/tsconfig.lib.prod.json rename to npm/ng-packs/nx/ng-packs/packages/core/tsconfig.lib.prod.json diff --git a/npm/ng-packs/nx/ng-packs/libs/core/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/core/tsconfig.spec.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/core/tsconfig.spec.json rename to npm/ng-packs/nx/ng-packs/packages/core/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/theme-basic/.eslintrc.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/.eslintrc.json rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/.eslintrc.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/README.md b/npm/ng-packs/nx/ng-packs/packages/theme-basic/README.md similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/README.md rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/README.md diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/jest.config.js b/npm/ng-packs/nx/ng-packs/packages/theme-basic/jest.config.js similarity index 90% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/jest.config.js rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/jest.config.js index 469366871b..c08e5ecdd4 100644 --- a/npm/ng-packs/nx/ng-packs/libs/theme-basic/jest.config.js +++ b/npm/ng-packs/nx/ng-packs/packages/theme-basic/jest.config.js @@ -8,7 +8,7 @@ module.exports = { stringifyContentPathRegex: '\\.(html|svg)$', }, }, - coverageDirectory: '../../coverage/libs/theme-basic', + coverageDirectory: '../../coverage/packages/theme-basic', transform: { '^.+\\.(ts|js|html)$': 'jest-preset-angular', }, diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/theme-basic/ng-package.json similarity index 82% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/ng-package.json rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/ng-package.json index 9f131981ff..a5d3991891 100644 --- a/npm/ng-packs/nx/ng-packs/libs/theme-basic/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/packages/theme-basic/ng-package.json @@ -1,6 +1,6 @@ { "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../dist/libs/theme-basic", + "dest": "../../dist/packages/theme-basic", "lib": { "entryFile": "src/public-api.ts" }, diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/package.json b/npm/ng-packs/nx/ng-packs/packages/theme-basic/package.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/package.json rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/package.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/logo/logo.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/logo/logo.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/logo/logo.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/logo/logo.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/languages.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/nav-items/languages.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/languages.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/nav-items/languages.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/validation-error/validation-error.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/validation-error/validation-error.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/validation-error/validation-error.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/validation-error/validation-error.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/constants/styles.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/constants/styles.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/constants/styles.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/constants/styles.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/components.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/enums/components.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/components.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/enums/components.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/enums/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/enums/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/models/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/models/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/layout.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/models/layout.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/layout.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/models/layout.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/providers/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/providers/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/nav-item.provider.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/providers/nav-item.provider.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/nav-item.provider.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/providers/nav-item.provider.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/styles.provider.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/providers/styles.provider.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/styles.provider.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/providers/styles.provider.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/services/layout.service.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/services/layout.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/services/layout.service.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/services/layout.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/theme-basic.module.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/public-api.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/public-api.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/public-api.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/test-setup.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/src/test-setup.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/src/test-setup.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/theme-basic/testing/ng-package.json similarity index 69% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/ng-package.json rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/testing/ng-package.json index 466bcc3756..42a7338d3b 100644 --- a/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/packages/theme-basic/testing/ng-package.json @@ -1,6 +1,6 @@ { "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../../dist/libs/theme-basic/testing", + "dest": "../../../dist/packages/theme-basic/testing", "lib": { "entryFile": "src/public-api.ts" } diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/lib/theme-basic-testing.module.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/testing/src/lib/theme-basic-testing.module.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/lib/theme-basic-testing.module.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/testing/src/lib/theme-basic-testing.module.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/testing/src/public-api.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/public-api.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/testing/src/public-api.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.json rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.lib.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.json rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.lib.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.lib.prod.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.prod.json rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.lib.prod.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.spec.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.spec.json rename to npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/theme-shared/.eslintrc.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/.eslintrc.json rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/.eslintrc.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md b/npm/ng-packs/nx/ng-packs/packages/theme-shared/README.md similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/README.md diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/ng-package.json new file mode 100644 index 0000000000..3244b2e39b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/packages/theme-shared/extensions", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/date.adapter.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date.adapter.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/date.adapter.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date.adapter.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/time.adapter.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/time.adapter.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/adapters/time.adapter.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/time.adapter.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/date-time-picker/date-time-picker.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/date-time-picker/date-time-picker.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/date-time-picker/date-time-picker.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/date-time-picker/date-time-picker.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/grid-actions/grid-actions.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/constants/extra-properties.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/constants/extra-properties.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/constants/extra-properties.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/constants/extra-properties.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/directives/disabled.directive.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/directives/disabled.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/directives/disabled.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/directives/disabled.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/directives/prop-data.directive.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/directives/prop-data.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/directives/prop-data.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/directives/prop-data.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/enums/props.enum.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/enums/props.enum.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/enums/props.enum.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/enums/props.enum.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/actions.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/actions.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/actions.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/actions.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/entity-actions.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/entity-actions.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/entity-actions.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/entity-actions.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/entity-props.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/entity-props.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/entity-props.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/entity-props.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/form-props.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/form-props.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/form-props.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/form-props.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/internal/object-extensions.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/internal/object-extensions.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/internal/object-extensions.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/internal/object-extensions.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/object-extensions.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/object-extensions.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/object-extensions.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/object-extensions.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/props.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/props.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/props.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/props.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/toolbar-actions.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/toolbar-actions.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/models/toolbar-actions.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/models/toolbar-actions.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/services/extensions.service.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/services/extensions.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/services/extensions.service.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/services/extensions.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/tokens/extensions.token.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensions.token.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/tokens/extensions.token.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensions.token.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/ui-extensions.module.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/ui-extensions.module.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/ui-extensions.module.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/ui-extensions.module.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/actions.util.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/actions.util.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/actions.util.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/actions.util.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/enum.util.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/enum.util.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/enum.util.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/enum.util.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/factory.util.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/factory.util.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/factory.util.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/factory.util.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/form-props.util.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/form-props.util.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/form-props.util.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/form-props.util.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/localization.util.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/localization.util.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/localization.util.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/localization.util.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/props.util.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/props.util.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/props.util.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/props.util.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/state.util.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/state.util.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/state.util.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/state.util.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/typeahead.util.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/typeahead.util.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/validation.util.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/validation.util.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/lib/utils/validation.util.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/validation.util.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/public-api.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/public-api.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/public-api.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/actions.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/actions.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/actions.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/actions.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/actions.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/actions.util.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/actions.util.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/actions.util.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/date-time.adapter.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/date-time.adapter.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/date-time.adapter.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/date-time.adapter.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/date.adapter.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/date.adapter.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/date.adapter.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/date.adapter.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/entity-actions.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/entity-actions.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/entity-actions.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/entity-actions.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/entity-props.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/entity-props.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/entity-props.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/entity-props.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/enum.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/enum.util.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/extensions.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/extensions.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/extensions.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/extensions.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/factory.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/factory.util.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/factory.util.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/factory.util.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/form-props.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/form-props.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/form-props.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/form-props.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/form-props.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/form-props.util.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/form-props.util.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/form-props.util.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/localization.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/localization.util.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/localization.util.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/localization.util.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/props.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/props.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/props.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/props.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/props.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/props.util.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/props.util.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/props.util.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/state.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/state.util.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/time.adapter.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/time.adapter.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/time.adapter.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/time.adapter.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/toolbar-actions.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/toolbar-actions.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/toolbar-actions.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/toolbar-actions.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/typeahead.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/typeahead.util.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/typeahead.util.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/typeahead.util.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/validation.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/validation.util.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/src/tests/validation.util.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/validation.util.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/src/lib/ui-extensions-testing.module.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/testing/src/lib/ui-extensions-testing.module.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/src/lib/ui-extensions-testing.module.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/testing/src/lib/ui-extensions-testing.module.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/testing/src/public-api.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/src/public-api.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/testing/src/public-api.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/ssng-package.json b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/testing/ssng-package.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/testing/ssng-package.json rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/testing/ssng-package.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/jest.config.js b/npm/ng-packs/nx/ng-packs/packages/theme-shared/jest.config.js similarity index 90% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/jest.config.js rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/jest.config.js index 04cdf90d4a..d056658ce6 100644 --- a/npm/ng-packs/nx/ng-packs/libs/theme-shared/jest.config.js +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/jest.config.js @@ -8,7 +8,7 @@ module.exports = { stringifyContentPathRegex: '\\.(html|svg)$', }, }, - coverageDirectory: '../../coverage/libs/theme-shared', + coverageDirectory: '../../coverage/packages/theme-shared', transform: { '^.+\\.(ts|js|html)$': 'jest-preset-angular', }, diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/theme-shared/ng-package.json similarity index 89% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/ng-package.json index ca09e6b35d..b9a2dcad73 100644 --- a/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/ng-package.json @@ -1,6 +1,6 @@ { "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../dist/libs/theme-shared", + "dest": "../../dist/packages/theme-shared", "assets": ["./styles/**/*"], "lib": { "entryFile": "src/public-api.ts" diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/package.json b/npm/ng-packs/nx/ng-packs/packages/theme-shared/package.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/package.json rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/package.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/bounce.animations.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/bounce.animations.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/bounce.animations.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/bounce.animations.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/collapse.animations.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/collapse.animations.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/collapse.animations.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/collapse.animations.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/fade.animations.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/fade.animations.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/fade.animations.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/fade.animations.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/modal.animations.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/modal.animations.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/modal.animations.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/modal.animations.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/slide.animations.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/slide.animations.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/slide.animations.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/slide.animations.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/toast.animations.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/toast.animations.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/animations/toast.animations.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/toast.animations.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/button/button.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/button/button.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/chart/chart.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/chart/chart.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/chart/chart.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/chart/chart.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/chart/chart.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/chart/chart.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/chart/chart.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/chart/chart.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.scss b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.scss rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/confirmation/confirmation.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.scss b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.scss similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.scss rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.scss diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loader-bar/loader-bar.component.scss b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.scss similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loader-bar/loader-bar.component.scss rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.scss diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loading/loading.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/loading/loading.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-close.directive.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal-close.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-close.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal-close.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-container.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal-container.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-container.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal-container.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-ref.service.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal-ref.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal-ref.service.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal-ref.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.scss b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.scss similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.scss rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.scss diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/modal/modal.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.scss b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.scss rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/table/table.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.scss b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.scss rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast-container/toast-container.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.html b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.html rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.scss b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.scss rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/components/toast/toast.component.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/scripts.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/constants/scripts.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/scripts.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/constants/scripts.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/styles.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/constants/styles.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/styles.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/constants/styles.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/validation.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/constants/validation.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/constants/validation.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/constants/validation.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ellipsis.directive.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ellipsis.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ellipsis.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ellipsis.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/loading.directive.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/loading.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/table-sort.directive.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/table-sort.directive.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/directives/table-sort.directive.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/table-sort.directive.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/enums/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/enums/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/enums/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/enums/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/enums/route-names.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/enums/route-names.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/enums/route-names.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/enums/route-names.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/error.handler.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/error.handler.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/lazy-style.handler.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/lazy-style.handler.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/handlers/lazy-style.handler.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/lazy-style.handler.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/common.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/models/common.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/common.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/models/common.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/confirmation.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/confirmation.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/models/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/models/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/nav-item.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/models/nav-item.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/nav-item.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/models/nav-item.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/statistics.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/models/statistics.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/statistics.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/models/statistics.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/toaster.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/models/toaster.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/models/toaster.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/models/toaster.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/providers/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/providers/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/ng-bootstrap-config.provider.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/providers/ng-bootstrap-config.provider.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/ng-bootstrap-config.provider.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/providers/ng-bootstrap-config.provider.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/route.provider.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/providers/route.provider.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/providers/route.provider.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/providers/route.provider.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/confirmation.service.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/confirmation.service.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/modal.service.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/modal.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/modal.service.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/modal.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/nav-items.service.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/nav-items.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/nav-items.service.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/nav-items.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/page-alert.service.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/page-alert.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/page-alert.service.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/page-alert.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/toaster.service.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/services/toaster.service.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/append-content.token.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/append-content.token.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/append-content.token.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/append-content.token.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/breadcrumb.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/breadcrumb.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/breadcrumb.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/breadcrumb.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/button.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/button.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/button.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/button.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/chart.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/chart.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/chart.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/chart.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/confirmation.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/confirmation.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/ellipsis.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/ellipsis.directive.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/ellipsis.directive.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/ellipsis.directive.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/error.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/error.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/error.handler.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/error.handler.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/lazy-style.handler.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/lazy-style.handler.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/lazy-style.handler.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/lazy-style.handler.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/loader-bar.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/loader-bar.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/loading.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/loading.directive.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal-container.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal-container.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal-container.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal-container.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/modal.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/table-sort.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/table-sort.directive.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/table-sort.directive.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/table-sort.directive.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/table.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/table.component.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/table.component.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/table.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/toaster.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/toaster.service.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/validation-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/validation-utils.spec.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tests/validation-utils.spec.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/validation-utils.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/theme-shared.module.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/append-content.token.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tokens/append-content.token.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/append-content.token.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tokens/append-content.token.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/http-error.token.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tokens/http-error.token.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/http-error.token.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tokens/http-error.token.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tokens/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tokens/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/lazy-styles.token.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tokens/lazy-styles.token.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/lazy-styles.token.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tokens/lazy-styles.token.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/ngx-datatable-messages.token.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tokens/ngx-datatable-messages.token.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/ngx-datatable-messages.token.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tokens/ngx-datatable-messages.token.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/date-parser-formatter.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/date-parser-formatter.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/utils/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/utils/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/validation-utils.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/utils/validation-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/validation-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/utils/validation-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/widget-utils.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/utils/widget-utils.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/lib/utils/widget-utils.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/utils/widget-utils.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/public-api.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/public-api.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/public-api.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/test-setup.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/src/test-setup.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/src/test-setup.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/styles/bootstrap-rtl.min.css b/npm/ng-packs/nx/ng-packs/packages/theme-shared/styles/bootstrap-rtl.min.css similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/styles/bootstrap-rtl.min.css rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/styles/bootstrap-rtl.min.css diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/ng-package.json similarity index 69% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/ng-package.json rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/ng-package.json index 345e5ff42e..b0c754ed72 100644 --- a/npm/ng-packs/nx/ng-packs/libs/theme-shared/extensions/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/ng-package.json @@ -1,6 +1,6 @@ { "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../dist/libs/theme-shared/extensions", + "dest": "../../../dist/packages/theme-shared/testing", "lib": { "entryFile": "src/public-api.ts" } diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/models/config.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/src/lib/models/config.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/models/config.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/src/lib/models/config.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/src/lib/models/index.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/models/index.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/src/lib/models/index.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/theme-shared-testing.module.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/lib/theme-shared-testing.module.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/src/public-api.ts similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/testing/src/public-api.ts rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/src/public-api.ts diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.json rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.lib.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.lib.json rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.lib.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.lib.prod.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.lib.prod.json rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.lib.prod.json diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.spec.json similarity index 100% rename from npm/ng-packs/nx/ng-packs/libs/theme-shared/tsconfig.spec.json rename to npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index eab015bf6d..60571041dc 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -15,11 +15,11 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { - // "@abp/ng.core": ["libs/core/src/public-api.ts"], - // "@abp/ng.theme.shared": ["libs/theme-shared/src/public-api.ts"] - "@abp/ng.core": ["dist/libs/core"], - "@abp/ng.theme.shared": ["dist/libs/theme-shared"], - "@abp/ng.theme.basic": ["dist/libs/theme-basic"] + // "@abp/ng.core": ["packages/core/src/public-api.ts"], + // "@abp/ng.theme.shared": ["packages/theme-shared/src/public-api.ts"] + "@abp/ng.core": ["dist/packages/core"], + "@abp/ng.theme.shared": ["dist/packages/theme-shared"], + "@abp/ng.theme.basic": ["dist/packages/theme-basic"] } }, "exclude": ["node_modules", "tmp"] From 37b7d321e304bac0d745d85f374f4315c803aa2d Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 13 Aug 2021 10:19:23 +0300 Subject: [PATCH 07/56] add account-core package to nx workspace --- npm/ng-packs/nx/ng-packs/angular.json | 43 +- .../nx/ng-packs/apps/dev-app/.eslintrc.json | 2 +- .../apps/dev-app/src/app/app.component.ts | 2 +- .../nx/ng-packs/apps/dev-app/src/index.html | 2 +- npm/ng-packs/nx/ng-packs/nx.json | 18 +- npm/ng-packs/nx/ng-packs/package.json | 17 +- .../packages/account-core/.eslintrc.json | 36 ++ .../ng-packs/packages/account-core/README.md | 3 + .../packages/account-core/jest.config.js | 20 + .../packages/account-core/ng-package.json | 7 + .../packages/account-core/package.json | 21 + .../src/lib/auth-wrapper.service.spec.ts | 16 + .../src/lib/auth-wrapper.service.ts | 46 ++ .../src/lib/tenant-box.service.spec.ts | 16 + .../src/lib/tenant-box.service.ts | 68 ++ .../packages/account-core/src/public-api.ts | 6 + .../packages/account-core/src/test-setup.ts | 1 + .../packages/account-core/tsconfig.json | 13 + .../packages/account-core/tsconfig.lib.json | 14 + .../account-core/tsconfig.lib.prod.json | 11 + .../packages/account-core/tsconfig.spec.json | 10 + npm/ng-packs/nx/ng-packs/tsconfig.base.json | 3 +- npm/ng-packs/nx/ng-packs/yarn.lock | 602 ++++++++---------- 23 files changed, 647 insertions(+), 330 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/auth-wrapper.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/auth-wrapper.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/tenant-box.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/tenant-box.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.lib.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.lib.prod.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index b0ddc3ba29..c5e3310001 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -1,6 +1,47 @@ { "version": 1, "projects": { + "account-core": { + "projectType": "library", + "root": "packages/account-core", + "sourceRoot": "packages/account-core/src", + "prefix": "abp", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "packages/account-core/tsconfig.lib.json", + "project": "packages/account-core/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "packages/account-core/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "packages/account-core/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/packages/account-core"], + "options": { + "jestConfig": "packages/account-core/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "packages/account-core/src/**/*.ts", + "packages/account-core/src/**/*.html" + ] + } + } + } + }, "core": { "projectType": "library", "root": "packages/core", @@ -46,7 +87,7 @@ "projectType": "application", "root": "apps/dev-app", "sourceRoot": "apps/dev-app/src", - "prefix": "ng-packs", + "prefix": "abp", "architect": { "build": { "builder": "@angular-devkit/build-angular:browser", diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/.eslintrc.json b/npm/ng-packs/nx/ng-packs/apps/dev-app/.eslintrc.json index c0fe044e83..dc85568938 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/.eslintrc.json +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/.eslintrc.json @@ -21,7 +21,7 @@ "error", { "type": "element", - "prefix": "ng-packs", + "prefix": "abp", "style": "kebab-case" } ] diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.ts index e2593f977e..b785115d47 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.ts +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; @Component({ - selector: 'ng-packs-root', + selector: 'abp-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], }) diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/index.html b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/index.html index 1cb7a0bdde..7c745dcba6 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/index.html +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/index.html @@ -8,6 +8,6 @@ - + diff --git a/npm/ng-packs/nx/ng-packs/nx.json b/npm/ng-packs/nx/ng-packs/nx.json index dbb5e5a85c..63c85f8a6d 100644 --- a/npm/ng-packs/nx/ng-packs/nx.json +++ b/npm/ng-packs/nx/ng-packs/nx.json @@ -1,7 +1,7 @@ { - "npmScope": "ng-packs", + "npmScope": "abp", "affected": { - "defaultBase": "master" + "defaultBase": "dev" }, "implicitDependencies": { "package.json": { @@ -26,7 +26,15 @@ } ] }, + "workspaceLayout": { + "libsDir": "packages", + "appsDir": "" + }, "projects": { + "account-core": { + "tags": [], + "implicitDependencies": ["core", "theme-shared"] + }, "core": { "tags": [] }, @@ -38,10 +46,12 @@ "implicitDependencies": ["dev-app"] }, "theme-basic": { - "tags": [] + "tags": [], + "implicitDependencies": ["core", "theme-shared", "account-core"] }, "theme-shared": { - "tags": [] + "tags": [], + "implicitDependencies": ["core"] } } } diff --git a/npm/ng-packs/nx/ng-packs/package.json b/npm/ng-packs/nx/ng-packs/package.json index 2c7fbd413b..de4e93dbd9 100644 --- a/npm/ng-packs/nx/ng-packs/package.json +++ b/npm/ng-packs/nx/ng-packs/package.json @@ -1,5 +1,5 @@ { - "name": "ng-packs", + "name": "abp-ng-packs", "version": "0.0.0", "license": "MIT", "scripts": { @@ -30,6 +30,8 @@ "private": true, "devDependencies": { "@abp/ng.core": "~4.4.0", + "@abp/ng.account": "~4.4.0", + "@abp/ng.account.core": "~4.4.0", "@abp/ng.feature-management": "~4.4.0", "@abp/ng.identity": "~4.4.0", "@abp/ng.permission-management": "~4.4.0", @@ -108,5 +110,18 @@ "tslint": "~6.1.0", "typescript": "~4.3.5", "zone.js": "~0.11.4" + }, + "dependencies": { + "@angular/animations": "^12.1.0", + "@angular/common": "^12.1.0", + "@angular/compiler": "^12.1.0", + "@angular/core": "^12.1.0", + "@angular/forms": "^12.1.0", + "@angular/platform-browser": "^12.1.0", + "@angular/platform-browser-dynamic": "^12.1.0", + "@angular/router": "^12.1.0", + "rxjs": "~6.6.0", + "tslib": "^2.0.0", + "zone.js": "~0.11.4" } } diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/account-core/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/README.md b/npm/ng-packs/nx/ng-packs/packages/account-core/README.md new file mode 100644 index 0000000000..43d7f7e1dc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/README.md @@ -0,0 +1,3 @@ +# @abp/ng.account.core + +Visit the [ABP documentation](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/jest.config.js b/npm/ng-packs/nx/ng-packs/packages/account-core/jest.config.js new file mode 100644 index 0000000000..f48d35fc9f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'account-core', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/packages/account-core', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/account-core/ng-package.json new file mode 100644 index 0000000000..eb13bc988b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/packages/account-core", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/package.json b/npm/ng-packs/nx/ng-packs/packages/account-core/package.json new file mode 100644 index 0000000000..c12766839c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/package.json @@ -0,0 +1,21 @@ +{ + "name": "@abp/ng.account.core", + "version": "4.4.0", + "homepage": "https://abp.io", + "repository": { + "type": "git", + "url": "https://github.com/abpframework/abp.git" + }, + "peerDependencies": { + "@abp/ng.core": "~4.4.0", + "@abp/ng.theme.shared": "~4.4.0", + "@angular/common": ">=12.0.0", + "@angular/core": ">=12.0.0" + }, + "dependencies": { + "tslib": "^2.0.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/auth-wrapper.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/auth-wrapper.service.spec.ts new file mode 100644 index 0000000000..c09dfff769 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/auth-wrapper.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { AuthWrapperService } from './auth-wrapper.service'; + +describe('AuthWrapperService', () => { + let service: AuthWrapperService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(AuthWrapperService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/auth-wrapper.service.ts b/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/auth-wrapper.service.ts new file mode 100644 index 0000000000..7bad8ef96a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/auth-wrapper.service.ts @@ -0,0 +1,46 @@ +import { Injectable, Injector } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { ActivatedRoute } from '@angular/router'; +import { ConfigStateService, MultiTenancyService } from '@abp/ng.core'; + +@Injectable() +export class AuthWrapperService { + isMultiTenancyEnabled$ = this.configState.getDeep$('multiTenancy.isEnabled'); + + get enableLocalLogin$(): Observable { + return this.configState + .getSetting$('Abp.Account.EnableLocalLogin') + .pipe(map(value => value?.toLowerCase() !== 'false')); + } + + tenantBoxKey = 'Account.TenantBoxComponent'; + route: ActivatedRoute; + + get isTenantBoxVisibleForCurrentRoute() { + return this.getMostInnerChild().data.tenantBoxVisible ?? true; + } + + get isTenantBoxVisible() { + return this.isTenantBoxVisibleForCurrentRoute && this.multiTenancy.isTenantBoxVisible; + } + + constructor( + public readonly multiTenancy: MultiTenancyService, + private configState: ConfigStateService, + injector: Injector, + ) { + this.route = injector.get(ActivatedRoute); + } + + private getMostInnerChild() { + let child = this.route.snapshot; + let depth = 0; + const depthLimit = 10; + while (child.firstChild && depth < depthLimit) { + child = child.firstChild; + depth++; + } + return child; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/tenant-box.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/tenant-box.service.spec.ts new file mode 100644 index 0000000000..521623f116 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/tenant-box.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { TenantBoxService } from './tenant-box.service'; + +describe('TenantBoxService', () => { + let service: TenantBoxService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(TenantBoxService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/tenant-box.service.ts b/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/tenant-box.service.ts new file mode 100644 index 0000000000..ef0a71a245 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/tenant-box.service.ts @@ -0,0 +1,68 @@ +import { Injectable } from '@angular/core'; +import { ToasterService } from '@abp/ng.theme.shared'; +import { + AbpApplicationConfigurationService, + AbpTenantService, + ConfigStateService, + CurrentTenantDto, + SessionStateService, +} from '@abp/ng.core'; +import { finalize } from 'rxjs/operators'; + +@Injectable() +export class TenantBoxService { + currentTenant$ = this.sessionState.getTenant$(); + + name: string; + + isModalVisible: boolean; + + modalBusy: boolean; + + constructor( + private toasterService: ToasterService, + private tenantService: AbpTenantService, + private sessionState: SessionStateService, + private configState: ConfigStateService, + private appConfigService: AbpApplicationConfigurationService, + ) {} + + onSwitch() { + const tenant = this.sessionState.getTenant(); + this.name = tenant?.name; + this.isModalVisible = true; + } + + save() { + if (!this.name) { + this.setTenant(null); + this.isModalVisible = false; + return; + } + + this.modalBusy = true; + this.tenantService + .findTenantByName(this.name, {}) + .pipe(finalize(() => (this.modalBusy = false))) + .subscribe(({ success, tenantId: id, ...tenant }) => { + if (!success) { + this.showError(); + return; + } + + this.setTenant({ ...tenant, id, isAvailable: true }); + this.isModalVisible = false; + }); + } + + private setTenant(tenant: CurrentTenantDto) { + this.sessionState.setTenant(tenant); + this.appConfigService.get().subscribe(res => this.configState.setState(res)); + } + + private showError() { + this.toasterService.error('AbpUiMultiTenancy::GivenTenantIsNotAvailable', 'AbpUi::Error', { + messageLocalizationParams: [this.name], + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/account-core/src/public-api.ts new file mode 100644 index 0000000000..b9aacd8a89 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/src/public-api.ts @@ -0,0 +1,6 @@ +/* + * Public API Surface of account-core + */ + +export * from './lib/auth-wrapper.service'; +export * from './lib/tenant-box.service'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/account-core/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.json new file mode 100644 index 0000000000..62ebbd9464 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.lib.json new file mode 100644 index 0000000000..bbcc12b1c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.lib.prod.json new file mode 100644 index 0000000000..331d0ecb05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial", + "enableIvy": false + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index 60571041dc..3b7724759e 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -15,10 +15,9 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { - // "@abp/ng.core": ["packages/core/src/public-api.ts"], - // "@abp/ng.theme.shared": ["packages/theme-shared/src/public-api.ts"] "@abp/ng.core": ["dist/packages/core"], "@abp/ng.theme.shared": ["dist/packages/theme-shared"], + "@abp/ng.account.core": ["dist/packages/account-core"], "@abp/ng.theme.basic": ["dist/packages/theme-basic"] } }, diff --git a/npm/ng-packs/nx/ng-packs/yarn.lock b/npm/ng-packs/nx/ng-packs/yarn.lock index d36ec011b8..2f001786f8 100644 --- a/npm/ng-packs/nx/ng-packs/yarn.lock +++ b/npm/ng-packs/nx/ng-packs/yarn.lock @@ -117,6 +117,14 @@ dependencies: just-compare "^1.3.0" +"@ampproject/remapping@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-1.0.1.tgz#1398e73e567c2a7992df6554c15bb94a89b68ba2" + integrity sha512-Ta9bMA3EtUHDaZJXqUoT5cn/EecwOp+SXpKJqxDbDuMbLvEMu6YTyDDuvTWeStODfdmXyfMo7LymQyPkN3BicA== + dependencies: + "@jridgewell/resolve-uri" "1.0.0" + sourcemap-codec "1.4.8" + "@angular-devkit/architect@0.1002.0": version "0.1002.0" resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1002.0.tgz#470b78aaf79308a23da6a0d3935f2d1f85dcb212" @@ -125,84 +133,84 @@ "@angular-devkit/core" "10.2.0" rxjs "6.6.2" -"@angular-devkit/architect@0.1201.4": - version "0.1201.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1201.4.tgz#bdd4ed088845bc5412ac8ab9dd4355953f09ea70" - integrity sha512-hGO5NrZxV8Z7sILwokt7H+1sMf+5tJS9PJszvYlIBSzG0LBkOwwLQDb4MD42ATXFru57SXNqMZDVKoi1kTgxAw== +"@angular-devkit/architect@0.1202.1": + version "0.1202.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1202.1.tgz#13d92b45fcb8897fc49e74ef80452ec5186715ca" + integrity sha512-sH2jzzfvXxVvlT7ZE175pHdZ4KW50hFfvF10U8Nry83dpfE54eeCntGfkT40geGwJXG+ibP/T9SG7PsbTssvKQ== dependencies: - "@angular-devkit/core" "12.1.4" + "@angular-devkit/core" "12.2.1" rxjs "6.6.7" -"@angular-devkit/build-angular@~12.1.0": - version "12.1.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-12.1.4.tgz#3af88acb0a7e2fadd418103f6b5bb0b40c60b670" - integrity sha512-9kMdnaU2dr8o7gJpuBsEHLUpa6huF8uZQEd1+jhKfByEY/xTQo8qztvmbhFhrSfDvdYRygNHItpt3pYEoCEOig== - dependencies: - "@angular-devkit/architect" "0.1201.4" - "@angular-devkit/build-optimizer" "0.1201.4" - "@angular-devkit/build-webpack" "0.1201.4" - "@angular-devkit/core" "12.1.4" - "@babel/core" "7.14.6" - "@babel/generator" "7.14.5" +"@angular-devkit/build-angular@~12.2.0": + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-12.2.1.tgz#ba3033fb50d9a81b4db26adf4fa4a8e467bf40c0" + integrity sha512-zsVgj5zbkl5Vw4mihqqFEjnoAmnxCJXxMAUdrPNsqQj6z4JiqchJgMyyCFe+6283TV5E0ZFZ3QODpsOxKILRJw== + dependencies: + "@ampproject/remapping" "1.0.1" + "@angular-devkit/architect" "0.1202.1" + "@angular-devkit/build-optimizer" "0.1202.1" + "@angular-devkit/build-webpack" "0.1202.1" + "@angular-devkit/core" "12.2.1" + "@babel/core" "7.14.8" + "@babel/generator" "7.14.8" "@babel/helper-annotate-as-pure" "7.14.5" "@babel/plugin-proposal-async-generator-functions" "7.14.7" "@babel/plugin-transform-async-to-generator" "7.14.5" "@babel/plugin-transform-runtime" "7.14.5" - "@babel/preset-env" "7.14.7" - "@babel/runtime" "7.14.6" + "@babel/preset-env" "7.14.8" + "@babel/runtime" "7.14.8" "@babel/template" "7.14.5" "@discoveryjs/json-ext" "0.5.3" "@jsdevtools/coverage-istanbul-loader" "3.0.5" - "@ngtools/webpack" "12.1.4" + "@ngtools/webpack" "12.2.1" ansi-colors "4.1.1" babel-loader "8.2.2" browserslist "^4.9.1" cacache "15.2.0" caniuse-lite "^1.0.30001032" circular-dependency-plugin "5.2.2" - copy-webpack-plugin "9.0.0" - core-js "3.15.1" + copy-webpack-plugin "9.0.1" + core-js "3.16.0" critters "0.0.10" - css-loader "5.2.6" - css-minimizer-webpack-plugin "3.0.1" + css-loader "6.2.0" + css-minimizer-webpack-plugin "3.0.2" + esbuild "0.12.17" find-cache-dir "3.3.1" glob "7.1.7" https-proxy-agent "5.0.0" - inquirer "8.1.1" - jest-worker "27.0.2" + inquirer "8.1.2" karma-source-map-support "1.4.0" less "4.1.1" - less-loader "10.0.0" + less-loader "10.0.1" license-webpack-plugin "2.3.20" loader-utils "2.0.0" - mini-css-extract-plugin "1.6.2" + mini-css-extract-plugin "2.1.0" minimatch "3.0.4" open "8.2.1" ora "5.4.1" parse5-html-rewriting-stream "6.0.1" - postcss "8.3.5" + piscina "3.1.0" + postcss "8.3.6" postcss-import "14.0.2" - postcss-loader "6.1.0" + postcss-loader "6.1.1" postcss-preset-env "6.7.0" - raw-loader "4.0.2" - regenerator-runtime "0.13.7" + regenerator-runtime "0.13.9" resolve-url-loader "4.0.0" rxjs "6.6.7" - sass "1.35.1" + sass "1.36.0" sass-loader "12.1.0" semver "7.3.5" - source-map "0.7.3" source-map-loader "3.0.0" source-map-support "0.5.19" - style-loader "2.0.0" + style-loader "3.2.1" stylus "0.54.8" stylus-loader "6.1.0" - terser "5.7.0" - terser-webpack-plugin "5.1.3" + terser "5.7.1" + terser-webpack-plugin "5.1.4" text-table "0.2.0" tree-kill "1.2.2" tslib "2.3.0" - webpack "5.44.0" + webpack "5.50.0" webpack-dev-middleware "5.0.0" webpack-dev-server "3.11.2" webpack-merge "5.8.0" @@ -216,21 +224,21 @@ "@angular-devkit/architect" "0.1002.0" rxjs "6.6.2" -"@angular-devkit/build-optimizer@0.1201.4": - version "0.1201.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1201.4.tgz#79bf972b5905d7d193c838c496febfff6923ec2c" - integrity sha512-Hq+mDUe4xIyq4939JZaUkptsM89WnZOk8Qel6mS0T/bxMX/qs+nuGD5o+xDKkuayogbiTrLmyZBib0/90eSXEA== +"@angular-devkit/build-optimizer@0.1202.1": + version "0.1202.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1202.1.tgz#96ce0d33d438f724866c1f171ac3886a95422dde" + integrity sha512-eMyPdfudKek4buv5b2lBRKrv8r2P/soPOsLVcyt2pgrA6V1I8UaJKEDmBwxQ//RwwrvMdD/OWfRxxJm7YvD8kQ== dependencies: source-map "0.7.3" tslib "2.3.0" - typescript "4.3.4" + typescript "4.3.5" -"@angular-devkit/build-webpack@0.1201.4": - version "0.1201.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1201.4.tgz#a05ca7ee84d6bdd4a9227fd8a826f73a5bec0a4e" - integrity sha512-eMmbyHyWJZMQ1tfwVdja/iAk/eXJFYrF8b27gDV9gGI7MGB3KJ93AhkbPbcvlw4Hhx4+6M11GfeXzbwH0q9pnQ== +"@angular-devkit/build-webpack@0.1202.1": + version "0.1202.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1202.1.tgz#b38188aadf98b0c92ecd2533d4075edd42395060" + integrity sha512-G4eNmf5Mx0ORuBqpXFn6PCYteqnW9cQQPWxETjLwRLdw0cb/1Ybf9EKcxD+lAGG7x0S4Pd6f2+7xmzEmxyKXvw== dependencies: - "@angular-devkit/architect" "0.1201.4" + "@angular-devkit/architect" "0.1202.1" rxjs "6.6.7" "@angular-devkit/core@10.2.0": @@ -279,6 +287,18 @@ rxjs "6.6.7" source-map "0.7.3" +"@angular-devkit/core@12.2.1": + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-12.2.1.tgz#4c987ea2a55ce201a15313336e2c9d7e56762f10" + integrity sha512-To/2a5+PRroaCNEvqm5GluXhUwkThIBgF7I0HsmYkN32OauuLYPvwZYAKuPHMDNEFx9JKkG5RZonslXXycv1kw== + dependencies: + ajv "8.6.2" + ajv-formats "2.1.0" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.7" + 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" @@ -320,6 +340,15 @@ ora "5.4.1" rxjs "6.6.7" +"@angular-devkit/schematics@12.2.1": + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-12.2.1.tgz#83beedd6de4535e4566e651d02ba2b6fda7c7399" + integrity sha512-lzW3HuoF0rCbYVqqnZp/68WWD09mjLd8N0WAhiod0vlFwMTq16L5D9zKCbC0unjjsIAJsIiT2ERHQICrOP1OKQ== + dependencies: + "@angular-devkit/core" "12.2.1" + ora "5.4.1" + rxjs "6.6.7" + "@angular-devkit/schematics@^8.0.6": version "8.3.29" resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-8.3.29.tgz#b3ba658b90fb3226a80ff12977be7dd583e99c49" @@ -376,26 +405,26 @@ optionalDependencies: parse5 "^5.0.0" -"@angular/cli@~12.1.0": - version "12.1.4" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-12.1.4.tgz#58e50bc2907ecc415224162af51626fcbba917d6" - integrity sha512-LpyhyqWe3bFcuH3MrXeYoIPI1htjwG1b5ehETfq4qsMvNmuFON6QI+F7EWEpX7lItVQc2bES+ogasTZsZue/uw== +"@angular/cli@~12.2.0": + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-12.2.1.tgz#76f336aed624f86a3ece6447ae58a51411e7613f" + integrity sha512-D0SMVRLEYOEJYaxWm4a5TjQzfQt4BI8R9Dz/Dk/FNFtiuFyaRgbrFgicLF8ePyHWzmHi+KN9i5bgBcWMEtY5SQ== dependencies: - "@angular-devkit/architect" "0.1201.4" - "@angular-devkit/core" "12.1.4" - "@angular-devkit/schematics" "12.1.4" - "@schematics/angular" "12.1.4" + "@angular-devkit/architect" "0.1202.1" + "@angular-devkit/core" "12.2.1" + "@angular-devkit/schematics" "12.2.1" + "@schematics/angular" "12.2.1" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.1" - debug "4.3.1" + debug "4.3.2" ini "2.0.0" - inquirer "8.1.1" + inquirer "8.1.2" jsonc-parser "3.0.0" npm-package-arg "8.1.5" npm-pick-manifest "6.1.1" open "8.2.1" ora "5.4.1" - pacote "11.3.4" + pacote "11.3.5" resolve "1.20.0" semver "7.3.5" symbol-observable "4.0.0" @@ -408,10 +437,10 @@ dependencies: tslib "^2.2.0" -"@angular/compiler-cli@^12.1.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-12.2.0.tgz#af6c653ed7ae3f0555eb8c8062faa6523ac67f12" - integrity sha512-VjGb4gty8JSkmcBvdc4QzQx6mPT7cXs42Hu8IDK7dQma3nTRmwbX0BF1m7i+kbrjWHK8I85FbsYbSzfzZid2NA== +"@angular/compiler-cli@^12.2.0": + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-12.2.1.tgz#0912466b0870e8124629a47e820d32c143fca1a2" + integrity sha512-lkrUAf96WwPhIhQZPtH277MX00cbSQx+T+jFWTXXlLoCydN3MZ+x0I4nBxmVvVJHahwk1qxWdEzCcc/Y0QZuOg== dependencies: "@babel/core" "^7.8.6" "@babel/types" "^7.8.6" @@ -449,10 +478,10 @@ dependencies: tslib "^2.2.0" -"@angular/language-service@^12.1.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-12.2.0.tgz#f863fa6f586e28b8fcb3024fff70ddae534d3ab2" - integrity sha512-oWZ3E+640iRxkf+tStNpDbJT4mc7zNdOCg4L0YjpBuDOiStJ0YDgtJfNdYE+Ap7fsb0QvUuXpU0QGnDVazQ1PQ== +"@angular/language-service@^12.2.0": + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-12.2.1.tgz#cc8d0e12cbac5438f8cda7923922bab83c973d09" + integrity sha512-QdLiE4OOGmDQTT+GdAitUE2D/jvhglilxJytbvRWuMzphEtUHYpbWtV8frcsTB7KmWqgjGurS62P0DTzNEb2UQ== "@angular/localize@~10.0.10": version "10.0.14" @@ -508,6 +537,11 @@ "@ant-design/colors" "^5.0.0" tslib "^2.0.0" +"@assemblyscript/loader@^0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.10.1.tgz#70e45678f06c72fa2e350e8553ec4a4d72b92e06" + integrity sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg== + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -527,20 +561,20 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== -"@babel/core@7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" - integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== +"@babel/core@7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.8.tgz#20cdf7c84b5d86d83fac8710a8bc605a7ba3f010" + integrity sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q== dependencies: "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" + "@babel/generator" "^7.14.8" "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.6" - "@babel/parser" "^7.14.6" + "@babel/helper-module-transforms" "^7.14.8" + "@babel/helpers" "^7.14.8" + "@babel/parser" "^7.14.8" "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/traverse" "^7.14.8" + "@babel/types" "^7.14.8" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -590,16 +624,16 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" - integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== +"@babel/generator@7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.8.tgz#bf86fd6af96cf3b74395a8ca409515f89423e070" + integrity sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.14.8" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.14.5", "@babel/generator@^7.15.0", "@babel/generator@^7.7.2", "@babel/generator@^7.8.3": +"@babel/generator@^7.14.8", "@babel/generator@^7.15.0", "@babel/generator@^7.7.2", "@babel/generator@^7.8.3": version "7.15.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15" integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ== @@ -711,7 +745,7 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.0": +"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.14.8", "@babel/helper-module-transforms@^7.15.0": version "7.15.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz#679275581ea056373eddbe360e1419ef23783b08" integrity sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg== @@ -797,7 +831,7 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helpers@^7.14.6", "@babel/helpers@^7.14.8", "@babel/helpers@^7.8.3": +"@babel/helpers@^7.14.8", "@babel/helpers@^7.8.3": version "7.15.3" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.3.tgz#c96838b752b95dcd525b4e741ed40bb1dc2a1357" integrity sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g== @@ -815,7 +849,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.15.0", "@babel/parser@^7.7.2", "@babel/parser@^7.8.3": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.8", "@babel/parser@^7.15.0", "@babel/parser@^7.7.2", "@babel/parser@^7.8.3": version "7.15.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862" integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA== @@ -1345,10 +1379,10 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/preset-env@7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.7.tgz#5c70b22d4c2d893b03d8c886a5c17422502b932a" - integrity sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA== +"@babel/preset-env@7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.8.tgz#254942f5ca80ccabcfbb2a9f524c74bca574005b" + integrity sha512-a9aOppDU93oArQ51H+B8M1vH+tayZbuBqzjOhntGetZVa+4tTu5jp+XTwqHGG2lxslqomPYVSjIxQkFwXzgnxg== dependencies: "@babel/compat-data" "^7.14.7" "@babel/helper-compilation-targets" "^7.14.5" @@ -1417,7 +1451,7 @@ "@babel/plugin-transform-unicode-escapes" "^7.14.5" "@babel/plugin-transform-unicode-regex" "^7.14.5" "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.5" + "@babel/types" "^7.14.8" babel-plugin-polyfill-corejs2 "^0.2.2" babel-plugin-polyfill-corejs3 "^0.2.2" babel-plugin-polyfill-regenerator "^0.2.2" @@ -1522,10 +1556,10 @@ core-js-pure "^3.16.0" regenerator-runtime "^0.13.4" -"@babel/runtime@7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" - integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== +"@babel/runtime@7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.8.tgz#7119a56f421018852694290b9f9148097391b446" + integrity sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg== dependencies: regenerator-runtime "^0.13.4" @@ -1545,7 +1579,7 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.15.0", "@babel/traverse@^7.7.2", "@babel/traverse@^7.8.3": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.14.8", "@babel/traverse@^7.15.0", "@babel/traverse@^7.7.2", "@babel/traverse@^7.8.3": version "7.15.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98" integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw== @@ -1924,6 +1958,11 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jridgewell/resolve-uri@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz#3fdf5798f0b49e90155896f6291df186eac06c83" + integrity sha512-9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA== + "@jsdevtools/coverage-istanbul-loader@3.0.5": version "3.0.5" resolved "https://registry.yarnpkg.com/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz#2a4bc65d0271df8d4435982db4af35d81754ee26" @@ -2645,12 +2684,10 @@ replace-in-file "6.2.0" tslib "^2.1.0" -"@ngtools/webpack@12.1.4": - version "12.1.4" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-12.1.4.tgz#9f7ac5e26b366831b50558bf71dd6e1689743def" - integrity sha512-hXc8dTnRfDB7o1Pd7a07aw0rjGmVLXU28+cTHQJliosgD3obcjfZ4QPA0k97vlQMtqVJawuShRfyiUKrpsJf8Q== - dependencies: - enhanced-resolve "5.8.2" +"@ngtools/webpack@12.2.1": + version "12.2.1" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-12.2.1.tgz#9133b47662dfa88ef9494f3eae008053d5e999eb" + integrity sha512-ks2hfZ5/Ow7luUPetwtlnUuRdSsB7NX56OuTzMhQe6VFoqfvbW8k88Mm5YFcE57wXYNc8Giky28peLO+IQKfpQ== "@ngx-validate/core@^0.0.13": version "0.0.13" @@ -2699,7 +2736,7 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/git@^2.0.1": +"@npmcli/git@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.1.0.tgz#2fbd77e147530247d37f325930d457b3ebe894f6" integrity sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw== @@ -3068,7 +3105,16 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@schematics/angular@12.1.4", "@schematics/angular@~12.1.0": +"@schematics/angular@12.2.1": + version "12.2.1" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-12.2.1.tgz#fe5118672c3be1515ee6ed1428b34b3cd7850002" + integrity sha512-v6+LWx688PBmp+XWLtwu+UL1AAZsd0RsBrLmruSul70vFQ0xBB3MIuYlF5NHUukaBP/GMn426UkiTUgYUUM8ww== + dependencies: + "@angular-devkit/core" "12.2.1" + "@angular-devkit/schematics" "12.2.1" + jsonc-parser "3.0.0" + +"@schematics/angular@~12.1.0": version "12.1.4" resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-12.1.4.tgz#13035db487c850ea53029a17b1de49062aa4888b" integrity sha512-xGqgGI6GWk4EFdKis8FmSESxoLgjnLQbaRE1t1KZCkSKJzqkOj0R9wiDrtZfcrbPxIkLL+3fAk2ThwwPznT6yw== @@ -4452,7 +4498,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2, base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.2.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -5594,10 +5640,10 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-webpack-plugin@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-9.0.0.tgz#2bf592785d2fcdde9342dfed3676490fe0aa7ce8" - integrity sha512-k8UB2jLIb1Jip2nZbCz83T/XfhfjX6mB1yLJNYKrpYi7FQimfOoFv/0//iT6HV1K8FwUB5yUbCcnpLebJXJTug== +copy-webpack-plugin@9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz#b71d21991599f61a4ee00ba79087b8ba279bbb59" + integrity sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw== dependencies: fast-glob "^3.2.5" glob-parent "^6.0.0" @@ -5605,7 +5651,7 @@ copy-webpack-plugin@9.0.0: normalize-path "^3.0.0" p-limit "^3.1.0" schema-utils "^3.0.0" - serialize-javascript "^5.0.1" + serialize-javascript "^6.0.0" core-js-compat@^3.14.0, core-js-compat@^3.15.0, core-js-compat@^3.16.0: version "3.16.1" @@ -5620,10 +5666,10 @@ core-js-pure@^3.16.0: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.16.1.tgz#b997df2669c957a5b29f06e95813a171f993592e" integrity sha512-TyofCdMzx0KMhi84mVRS8rL1XsRk2SPUNz2azmth53iRN0/08Uim9fdhQTaZTG1LqaXHYVci4RDHka6WrXfnvg== -core-js@3.15.1: - version "3.15.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.1.tgz#6c08ab88abdf56545045ccf5fd81f47f407e7f1a" - integrity sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg== +core-js@3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.16.0.tgz#1d46fb33720bc1fa7f90d20431f36a5540858986" + integrity sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g== core-js@^3.6.5: version "3.16.1" @@ -5793,33 +5839,31 @@ css-has-pseudo@^0.10.0: postcss "^7.0.6" postcss-selector-parser "^5.0.0-rc.4" -css-loader@5.2.6: - version "5.2.6" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.6.tgz#c3c82ab77fea1f360e587d871a6811f4450cc8d1" - integrity sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w== +css-loader@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.2.0.tgz#9663d9443841de957a3cb9bcea2eda65b3377071" + integrity sha512-/rvHfYRjIpymZblf49w8jYcRo2y9gj6rV8UroHGmBxKrIyGLokpycyKzp9OkitvqT29ZSpzJ0Ic7SpnJX3sC8g== dependencies: icss-utils "^5.1.0" - loader-utils "^2.0.0" postcss "^8.2.15" postcss-modules-extract-imports "^3.0.0" postcss-modules-local-by-default "^4.0.0" postcss-modules-scope "^3.0.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" semver "^7.3.5" -css-minimizer-webpack-plugin@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.1.tgz#2f866079411d42309a485512642c0cb08b5468ae" - integrity sha512-RGFIv6iZWUPO2T1vE5+5pNCSs2H2xtHYRdfZPiiNH8Of6QOn9BeFnZSoHiQMkmsxOO/JkPe4BpKfs7slFIWcTA== +css-minimizer-webpack-plugin@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz#8fadbdf10128cb40227bff275a4bb47412534245" + integrity sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ== dependencies: - cssnano "^5.0.0" + cssnano "^5.0.6" jest-worker "^27.0.2" p-limit "^3.0.2" - postcss "^8.2.9" + postcss "^8.3.5" schema-utils "^3.0.0" - serialize-javascript "^5.0.1" + serialize-javascript "^6.0.0" source-map "^0.6.1" css-parse@~2.0.0: @@ -5934,7 +5978,7 @@ cssnano-utils@^2.0.1: resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-2.0.1.tgz#8660aa2b37ed869d2e2f22918196a9a8b6498ce2" integrity sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ== -cssnano@^5.0.0: +cssnano@^5.0.6: version "5.0.7" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.0.7.tgz#e81894bdf31aa01a0ca3d1d0eee47be18f7f3012" integrity sha512-7C0tbb298hef3rq+TtBbMuezBQ9VrFtrQEsPNuBKNVgWny/67vdRsnq8EoNu7TRjAHURgYvWlRIpCUmcMZkRzw== @@ -6084,7 +6128,7 @@ debug@3.1.0, debug@~3.1.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: +debug@4, debug@4.3.2, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== @@ -6098,13 +6142,6 @@ debug@4.1.1: dependencies: ms "^2.1.1" -debug@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -6538,14 +6575,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@5.8.2, enhanced-resolve@^5.7.0, enhanced-resolve@^5.8.0: - version "5.8.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" - integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - enhanced-resolve@^4.0.0, enhanced-resolve@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" @@ -6555,6 +6584,14 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.5.0: memory-fs "^0.5.0" tapable "^1.0.0" +enhanced-resolve@^5.7.0, enhanced-resolve@^5.8.0: + version "5.8.2" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" + integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + enquirer@^2.3.5, enquirer@^2.3.6, enquirer@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -6650,6 +6687,11 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +esbuild@0.12.17: + version "0.12.17" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.17.tgz#5816f905c2905de0ebbc658860df7b5b48afbcd3" + integrity sha512-GshKJyVYUnlSXIZj/NheC2O0Kblh42CS7P1wJyTbbIHevTG4jYMS9NNw8EOd8dDWD0dzydYHS01MpZoUcQXB4g== + esbuild@^0.12.15: version "0.12.19" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.19.tgz#ab849766705a5093df5acd8ec2f6ba2159a38a6c" @@ -6845,6 +6887,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +eventemitter-asyncresource@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz#734ff2e44bf448e627f7748f905d6bdd57bdb65b" + integrity sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ== + eventemitter2@^6.4.3: version "6.4.4" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.4.tgz#aa96e8275c4dbeb017a5d0e03780c65612a1202b" @@ -7889,6 +7936,20 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hdr-histogram-js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz#ecb1ff2bcb6181c3e93ff4af9472c28c7e97284e" + integrity sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q== + dependencies: + "@assemblyscript/loader" "^0.10.1" + base64-js "^1.2.0" + pako "^1.0.3" + +hdr-histogram-percentiles-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz#9409f4de0c2dda78e61de2d9d78b1e9f3cba283c" + integrity sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw== + hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" @@ -8287,26 +8348,6 @@ inquirer-file-tree-selection-prompt@^1.0.2: lodash "^4.17.11" rxjs "^6.5.2" -inquirer@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.1.tgz#7c53d94c6d03011c7bb2a947f0dca3b98246c26a" - integrity sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.3.0" - run-async "^2.4.0" - rxjs "^6.6.6" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - inquirer@8.1.2: version "8.1.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.2.tgz#65b204d2cd7fb63400edd925dfe428bafd422e3d" @@ -9338,15 +9379,6 @@ jest-watcher@^27.0.6: jest-util "^27.0.6" string-length "^4.0.1" -jest-worker@27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05" - integrity sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - jest-worker@^27.0.2, jest-worker@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.6.tgz#a5fdb1e14ad34eb228cfe162d9f729cdbfa28aed" @@ -9633,10 +9665,10 @@ lerna@^3.19.0: import-local "^2.0.0" npmlog "^4.1.2" -less-loader@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-10.0.0.tgz#2c21a204a29a46cba7de4e7d3659efa1e303c7d1" - integrity sha512-JjioAkw9qyavL0BzMPUOHJa0a20fh+ipq/MNZH4OkU8qERsCMeZIWRE0FDBIx2O+cFguvY01vHh/lmBA9LyWDg== +less-loader@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-10.0.1.tgz#c05aaba68d00400820275f21c2ad87cb9fa9923f" + integrity sha512-Crln//HpW9M5CbtdfWm3IO66Cvx1WhZQvNybXgfB2dD/6Sav9ppw+IWqs/FQKPBFO4B6X0X28Z0WNznshgwUzA== dependencies: klona "^2.0.4" @@ -10279,14 +10311,12 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz#83172b4fd812f8fc4a09d6f6d16f924f53990ca8" - integrity sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q== +mini-css-extract-plugin@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.1.0.tgz#4aa6558b527ad4c168fee4a20b6092ebe9f98309" + integrity sha512-SV1GgjMcfqy6hW07rAniUbQE4qS3inh3v4rZEUySkPRWy3vMbS3jUCjMOvNI4lUnDlQYJEmuUqKktTCNY5koFQ== dependencies: - loader-utils "^2.0.0" schema-utils "^3.0.0" - webpack-sources "^1.1.0" minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" @@ -10582,7 +10612,7 @@ neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -ng-packagr@^12.1.0: +ng-packagr@^12.2.0: version "12.2.0" resolved "https://registry.yarnpkg.com/ng-packagr/-/ng-packagr-12.2.0.tgz#53fe47391b5ddaf5f2c24eaecb23d8a10235d887" integrity sha512-M/qq78Gb4q13t6SFX70W2DrPxyooSkLwXzhWozjD8yWGihx4q+54a72ODGx7jIrB4fQgrGDcMUTM7t1zGYir8Q== @@ -10637,11 +10667,24 @@ ngxs-schematic@^1.1.9: jasmine "^3.3.1" typescript "^3.5.2" +nice-napi@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nice-napi/-/nice-napi-1.0.2.tgz#dc0ab5a1eac20ce548802fc5686eaa6bc654927b" + integrity sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA== + dependencies: + node-addon-api "^3.0.0" + node-gyp-build "^4.2.2" + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-addon-api@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + node-fetch-npm@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" @@ -10661,6 +10704,11 @@ node-forge@^0.10.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-gyp-build@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" + integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== + node-gyp@^5.0.2: version "5.1.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" @@ -11332,12 +11380,12 @@ p-waterfall@^1.0.0: dependencies: p-reduce "^1.0.0" -pacote@11.3.4: - version "11.3.4" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.4.tgz#c290b790a5cee3082bb8fa223f3f3e2fdf3d0bfc" - integrity sha512-RfahPCunM9GI7ryJV/zY0bWQiokZyLqaSNHXtbNSoLb7bwTvBbJBEyCJ01KWs4j1Gj7GmX8crYXQ1sNX6P2VKA== +pacote@11.3.5: + version "11.3.5" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.5.tgz#73cf1fc3772b533f575e39efa96c50be8c3dc9d2" + integrity sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg== dependencies: - "@npmcli/git" "^2.0.1" + "@npmcli/git" "^2.1.0" "@npmcli/installed-package-contents" "^1.0.6" "@npmcli/promise-spawn" "^1.2.0" "@npmcli/run-script" "^1.8.2" @@ -11357,7 +11405,7 @@ pacote@11.3.4: ssri "^8.0.1" tar "^6.1.0" -pako@~1.0.2, pako@~1.0.5: +pako@^1.0.3, pako@~1.0.2, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== @@ -11629,6 +11677,17 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" +piscina@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/piscina/-/piscina-3.1.0.tgz#2333636865b6cb69c5a370bbc499a98cabcf3e04" + integrity sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg== + dependencies: + eventemitter-asyncresource "^1.0.0" + hdr-histogram-js "^2.0.1" + hdr-histogram-percentiles-obj "^3.0.0" + optionalDependencies: + nice-napi "^1.0.2" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -11860,10 +11919,10 @@ postcss-lab-function@^2.0.1: postcss "^7.0.2" postcss-values-parser "^2.0.0" -postcss-loader@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.1.0.tgz#13c800a00b3c7d434a1319a73d85e2df0714cdde" - integrity sha512-yA/cXBfACkthZNA2hQxOnaReVfQ6uLmvbEDQzNafpbK40URZJvP/28dL1DG174Gvz3ptkkHbbwDBCh+gXR94CA== +postcss-loader@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.1.1.tgz#58dd0a3accd9bc87cc52eff75244db578d11301a" + integrity sha512-lBmJMvRh1D40dqpWKr9Rpygwxn8M74U9uaCSeYGNKLGInbk9mXBt1ultHf2dH9Ghk6Ue4UXlXWwGMH9QdUJ5ug== dependencies: cosmiconfig "^7.0.0" klona "^2.0.4" @@ -12218,10 +12277,10 @@ postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: indexes-of "^1.0.1" uniq "^1.0.1" -postcss@8.3.5: - version "8.3.5" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.5.tgz#982216b113412bc20a86289e91eb994952a5b709" - integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA== +postcss@8.3.6, postcss@^8.2.15, postcss@^8.2.4, postcss@^8.3.5: + version "8.3.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" + integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== dependencies: colorette "^1.2.2" nanoid "^3.1.23" @@ -12236,15 +12295,6 @@ postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.32, postcss@^7.0. source-map "^0.6.1" supports-color "^6.1.0" -postcss@^8.2.15, postcss@^8.2.4, postcss@^8.2.9: - version "8.3.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" - integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== - dependencies: - colorette "^1.2.2" - nanoid "^3.1.23" - source-map-js "^0.6.2" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -12551,14 +12601,6 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -raw-loader@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" - integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - react-is@^17.0.1: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" @@ -12754,12 +12796,7 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@0.13.7: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -regenerator-runtime@^0.13.4: +regenerator-runtime@0.13.9, regenerator-runtime@^0.13.4: version "0.13.9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== @@ -13103,7 +13140,7 @@ rxjs@6.6.3: dependencies: tslib "^1.9.0" -rxjs@6.6.7, rxjs@^6.4.0, rxjs@^6.5.0, rxjs@^6.5.2, rxjs@^6.5.4, rxjs@^6.6.6, rxjs@^6.6.7, rxjs@~6.6.0: +rxjs@6.6.7, rxjs@^6.4.0, rxjs@^6.5.0, rxjs@^6.5.2, rxjs@^6.5.4, rxjs@^6.6.7, rxjs@~6.6.0: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -13147,10 +13184,10 @@ sass-loader@12.1.0: klona "^2.0.4" neo-async "^2.6.2" -sass@1.35.1: - version "1.35.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.35.1.tgz#90ecf774dfe68f07b6193077e3b42fb154b9e1cd" - integrity sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ== +sass@1.36.0: + version "1.36.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.36.0.tgz#5912ef9d5d16714171ba11cb17edb274c4bbc07e" + integrity sha512-fQzEjipfOv5kh930nu3Imzq3ie/sGDc/4KtQMJlt7RRdrkQSfe37Bwi/Rf/gfuYHsIuE1fIlDMvpyMcEwjnPvg== dependencies: chokidar ">=3.0.0 <4.0.0" @@ -13293,13 +13330,6 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== - dependencies: - randombytes "^2.1.0" - serialize-javascript@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -13567,7 +13597,7 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -source-list-map@^2.0.0, source-list-map@^2.0.1: +source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== @@ -13640,7 +13670,7 @@ source-map@^0.5.0, source-map@^0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: +sourcemap-codec@1.4.8, sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== @@ -13993,13 +14023,10 @@ strong-log-transformer@^2.0.0: minimist "^1.2.0" through "^2.3.4" -style-loader@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" - integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" +style-loader@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.2.1.tgz#63cb920ec145c8669e9a50e92961452a1ef5dcde" + integrity sha512-1k9ZosJCRFaRbY6hH49JFlRB0fVSbmnyq1iTPjNxUmGVjBNEmwrrHPenhlp+Lgo51BojHSf6pl2FcqYaN3PfVg== stylehacks@^5.0.1: version "5.0.1" @@ -14187,15 +14214,15 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz#30033e955ca28b55664f1e4b30a1347e61aa23af" - integrity sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A== +terser-webpack-plugin@5.1.4, terser-webpack-plugin@^5.1.3: + version "5.1.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz#c369cf8a47aa9922bd0d8a94fe3d3da11a7678a1" + integrity sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA== dependencies: jest-worker "^27.0.2" p-limit "^3.1.0" schema-utils "^3.0.0" - serialize-javascript "^5.0.1" + serialize-javascript "^6.0.0" source-map "^0.6.1" terser "^5.7.0" @@ -14214,22 +14241,10 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser-webpack-plugin@^5.1.3: - version "5.1.4" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz#c369cf8a47aa9922bd0d8a94fe3d3da11a7678a1" - integrity sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA== - dependencies: - jest-worker "^27.0.2" - p-limit "^3.1.0" - schema-utils "^3.0.0" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - terser "^5.7.0" - -terser@5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" - integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== +terser@5.7.1, terser@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.1.tgz#2dc7a61009b66bb638305cb2a824763b116bf784" + integrity sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg== dependencies: commander "^2.20.0" source-map "~0.7.2" @@ -14244,15 +14259,6 @@ terser@^4.1.2: source-map "~0.6.1" source-map-support "~0.5.12" -terser@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.1.tgz#2dc7a61009b66bb638305cb2a824763b116bf784" - integrity sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.19" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -14687,21 +14693,16 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" - integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== +typescript@4.3.5, typescript@~4.3.5: + version "4.3.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" + integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== typescript@^3.5.2, typescript@~3.9.2: version "3.9.10" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== -typescript@~4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== - uglify-js@^3.1.4: version "3.14.1" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.1.tgz#e2cb9fe34db9cb4cf7e35d1d26dfea28e09a7d06" @@ -15148,7 +15149,7 @@ webpack-node-externals@1.7.2: resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz#6e1ee79ac67c070402ba700ef033a9b8d52ac4e3" integrity sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg== -webpack-sources@^1.1.0, webpack-sources@^1.2.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: +webpack-sources@^1.2.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -15156,14 +15157,6 @@ webpack-sources@^1.1.0, webpack-sources@^1.2.0, webpack-sources@^1.3.0, webpack- source-list-map "^2.0.0" source-map "~0.6.1" -webpack-sources@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" - integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== - dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" - webpack-sources@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.0.tgz#b16973bcf844ebcdb3afde32eda1c04d0b90f89d" @@ -15205,36 +15198,7 @@ webpack@4.46.0: watchpack "^1.7.4" webpack-sources "^1.4.1" -webpack@5.44.0: - version "5.44.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.44.0.tgz#97b13a02bd79fb71ac6301ce697920660fa214a1" - integrity sha512-I1S1w4QLoKmH19pX6YhYN0NiSXaWY8Ou00oA+aMcr9IUGeF5azns+IKBkfoAAG9Bu5zOIzZt/mN35OffBya8AQ== - dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.50" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.4.1" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.8.0" - es-module-lexer "^0.7.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" - json-parse-better-errors "^1.0.2" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.0.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.2.0" - webpack-sources "^2.3.0" - -"webpack@^4.0.0 || ^5.30.0": +webpack@5.50.0, "webpack@^4.0.0 || ^5.30.0": version "5.50.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.50.0.tgz#5562d75902a749eb4d75131f5627eac3a3192527" integrity sha512-hqxI7t/KVygs0WRv/kTgUW8Kl3YC81uyWQSo/7WUs5LsuRw0htH/fCwbVBGCuiX/t4s7qzjXFcf41O8Reiypag== From 325b442f8e57e52e0f72e8e802c0d9fe93fc5387 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 13 Aug 2021 11:01:36 +0300 Subject: [PATCH 08/56] add components package to nx workspace --- npm/ng-packs/nx/ng-packs/angular.json | 41 +++++++ npm/ng-packs/nx/ng-packs/nx.json | 4 + .../packages/components/.eslintrc.json | 36 ++++++ .../nx/ng-packs/packages/components/README.md | 3 + .../packages/components/jest.config.js | 20 ++++ .../packages/components/ng-package.json | 8 ++ .../ng-packs/packages/components/package.json | 21 ++++ .../packages/components/page/ng-package.json | 7 ++ .../page/src/page-part.directive.ts | 95 +++++++++++++++ .../page/src/page-parts.component.ts | 34 ++++++ .../components/page/src/page.component.html | 41 +++++++ .../components/page/src/page.component.ts | 51 ++++++++ .../components/page/src/page.module.ts | 27 +++++ .../components/page/src/public-api.ts | 4 + .../packages/components/src/public-api.ts | 5 + .../packages/components/src/test-setup.ts | 1 + .../packages/components/tree/ng-package.json | 7 ++ .../src/lib/components/tree.component.html | 96 +++++++++++++++ .../src/lib/components/tree.component.scss | 38 ++++++ .../tree/src/lib/components/tree.component.ts | 79 ++++++++++++ .../expanded-icon-template.directive.ts | 8 ++ .../templates/tree-node-template.directive.ts | 8 ++ .../components/tree/src/lib/tree.module.ts | 19 +++ .../tree/src/lib/utils/nz-tree-adapter.ts | 112 ++++++++++++++++++ .../components/tree/src/public-api.ts | 5 + .../packages/components/tsconfig.json | 13 ++ .../packages/components/tsconfig.lib.json | 14 +++ .../components/tsconfig.lib.prod.json | 11 ++ .../packages/components/tsconfig.spec.json | 10 ++ .../theme-shared/testing/src/public-api.ts | 2 + npm/ng-packs/nx/ng-packs/tsconfig.base.json | 10 +- 31 files changed, 829 insertions(+), 1 deletion(-) create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/page/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/page/src/page-part.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/page/src/page-parts.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/page/src/page.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/page/src/page.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/page/src/page.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/page/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tree/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/components/tree.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/components/tree.component.scss create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/components/tree.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/templates/expanded-icon-template.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/templates/tree-node-template.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/tree.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/utils/nz-tree-adapter.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tree/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tsconfig.lib.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tsconfig.lib.prod.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/components/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index c5e3310001..30bbb732d2 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -42,6 +42,47 @@ } } }, + "components": { + "projectType": "library", + "root": "packages/components", + "sourceRoot": "packages/components/src", + "prefix": "abp", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "packages/components/tsconfig.lib.json", + "project": "packages/components/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "packages/components/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "packages/components/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/packages/components"], + "options": { + "jestConfig": "packages/components/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "packages/components/src/**/*.ts", + "packages/components/src/**/*.html" + ] + } + } + } + }, "core": { "projectType": "library", "root": "packages/core", diff --git a/npm/ng-packs/nx/ng-packs/nx.json b/npm/ng-packs/nx/ng-packs/nx.json index 63c85f8a6d..db5d09d7be 100644 --- a/npm/ng-packs/nx/ng-packs/nx.json +++ b/npm/ng-packs/nx/ng-packs/nx.json @@ -35,6 +35,10 @@ "tags": [], "implicitDependencies": ["core", "theme-shared"] }, + "components": { + "tags": [], + "implicitDependencies": ["core", "theme-shared"] + }, "core": { "tags": [] }, diff --git a/npm/ng-packs/nx/ng-packs/packages/components/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/components/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/README.md b/npm/ng-packs/nx/ng-packs/packages/components/README.md new file mode 100644 index 0000000000..283812b9e0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/README.md @@ -0,0 +1,3 @@ +

@abp/ng.components

+ +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/packages/components/jest.config.js b/npm/ng-packs/nx/ng-packs/packages/components/jest.config.js new file mode 100644 index 0000000000..82ce530095 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'components', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/packages/components', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/packages/components/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/components/ng-package.json new file mode 100644 index 0000000000..a5343f978a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/ng-package.json @@ -0,0 +1,8 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/packages/components", + "lib": { + "entryFile": "src/public-api.ts" + }, + "allowedNonPeerDependencies": ["ng-zorro-antd"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/package.json b/npm/ng-packs/nx/ng-packs/packages/components/package.json new file mode 100644 index 0000000000..767261b15a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/package.json @@ -0,0 +1,21 @@ +{ + "name": "@abp/ng.components", + "version": "4.4.0", + "homepage": "https://abp.io", + "repository": { + "type": "git", + "url": "https://github.com/abpframework/abp.git" + }, + "peerDependencies": { + "@abp/ng.core": ">=4.4.0", + "@abp/ng.theme.shared": ">=4.4.0", + "@ng-bootstrap/ng-bootstrap": ">=6.0.0" + }, + "dependencies": { + "ng-zorro-antd": "^11.0.0", + "tslib": "^2.0.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/page/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/components/page/ng-package.json new file mode 100644 index 0000000000..530fd56dca --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/page/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/packages/components/page", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/page/src/page-part.directive.ts b/npm/ng-packs/nx/ng-packs/packages/components/page/src/page-part.directive.ts new file mode 100644 index 0000000000..c228189e0f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/page/src/page-part.directive.ts @@ -0,0 +1,95 @@ +import { + Directive, + TemplateRef, + ViewContainerRef, + Input, + InjectionToken, + Optional, + Inject, + OnInit, + OnDestroy, + Injector, + OnChanges, + SimpleChanges, + SimpleChange, +} from '@angular/core'; +import { Observable, Subscription, of } from 'rxjs'; + +export interface PageRenderStrategy { + shouldRender(type?: string): boolean | Observable; + onInit?(type?: string, injector?: Injector, context?: any): void; + onDestroy?(type?: string, injector?: Injector, context?: any): void; + onContextUpdate?(change?: SimpleChange): void; +} + +export const PAGE_RENDER_STRATEGY = new InjectionToken('PAGE_RENDER_STRATEGY'); + +@Directive({ selector: '[abpPagePart]' }) +export class PagePartDirective implements OnInit, OnDestroy, OnChanges { + hasRendered = false; + type: string; + subscription: Subscription; + + @Input('abpPagePartContext') context: any; + @Input() set abpPagePart(type: string) { + this.type = type; + this.createRenderStream(type); + } + + render = (shouldRender: boolean) => { + if (shouldRender && !this.hasRendered) { + this.viewContainer.createEmbeddedView(this.templateRef); + this.hasRendered = true; + } else if (!shouldRender && this.hasRendered) { + this.viewContainer.clear(); + this.hasRendered = false; + } + }; + + constructor( + private templateRef: TemplateRef, + private viewContainer: ViewContainerRef, + @Optional() @Inject(PAGE_RENDER_STRATEGY) private renderLogic: PageRenderStrategy, + private injector: Injector, + ) {} + + ngOnChanges({ context }: SimpleChanges): void { + if (this.renderLogic?.onContextUpdate) { + this.renderLogic.onContextUpdate(context); + } + } + + ngOnInit() { + if (this.renderLogic?.onInit) { + this.renderLogic.onInit(this.type, this.injector, this.context); + } + } + + ngOnDestroy() { + this.clearSubscription(); + + if (this.renderLogic?.onDestroy) { + this.renderLogic.onDestroy(this.type, this.injector, this.context); + } + } + + shouldRender(type: string) { + if (this.renderLogic) { + const willRender = this.renderLogic.shouldRender(type); + return willRender instanceof Observable ? willRender : of(willRender); + } + return of(true); + } + + protected createRenderStream(type: string) { + this.clearSubscription(); + + this.subscription = this.shouldRender(type).subscribe(this.render); + } + + protected clearSubscription() { + if (this.subscription) { + this.subscription.unsubscribe(); + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/page/src/page-parts.component.ts b/npm/ng-packs/nx/ng-packs/packages/components/page/src/page-parts.component.ts new file mode 100644 index 0000000000..8438593268 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/page/src/page-parts.component.ts @@ -0,0 +1,34 @@ +import { Component, ViewEncapsulation } from '@angular/core'; + +export enum PageParts { + title = 'PageTitleContainerComponent', + breadcrumb = 'PageBreadcrumbContainerComponent', + toolbar = 'PageToolbarContainerComponent', +} + +@Component({ + selector: 'abp-page-title-container', + template: ` + + `, + encapsulation: ViewEncapsulation.None, +}) +export class PageTitleContainerComponent {} + +@Component({ + selector: 'abp-page-breadcrumb-container', + template: ` + + `, + encapsulation: ViewEncapsulation.None, +}) +export class PageBreadcrumbContainerComponent {} + +@Component({ + selector: 'abp-page-toolbar-container', + template: ` + + `, + encapsulation: ViewEncapsulation.None, +}) +export class PageToolbarContainerComponent {} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/page/src/page.component.html b/npm/ng-packs/nx/ng-packs/packages/components/page/src/page.component.html new file mode 100644 index 0000000000..fe5aff2e58 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/page/src/page.component.html @@ -0,0 +1,41 @@ +
+ + + + + + + + + + + +
+ + + + + +
+

+ {{ title }} +

+
+
+
+ + + +
+ +
+
+
+ + + +
+ +
+
+
diff --git a/npm/ng-packs/nx/ng-packs/packages/components/page/src/page.component.ts b/npm/ng-packs/nx/ng-packs/packages/components/page/src/page.component.ts new file mode 100644 index 0000000000..24b6d18ccf --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/page/src/page.component.ts @@ -0,0 +1,51 @@ +import { Component, Input, ViewEncapsulation, ContentChild } from '@angular/core'; +import { + PageTitleContainerComponent, + PageBreadcrumbContainerComponent, + PageToolbarContainerComponent, + PageParts, +} from './page-parts.component'; + +@Component({ + selector: 'abp-page', + templateUrl: './page.component.html', + encapsulation: ViewEncapsulation.None, +}) +export class PageComponent { + @Input() title: string; + + toolbarVisible = false; + _toolbarData: any; + @Input('toolbar') set toolbarData(val: any) { + this._toolbarData = val; + this.toolbarVisible = true; + } + + get toolbarData() { + return this._toolbarData; + } + + @Input('breadcrumb') breadcrumbVisible = true; + + pageParts = { + title: PageParts.title, + breadcrumb: PageParts.breadcrumb, + toolbar: PageParts.toolbar, + }; + + @ContentChild(PageTitleContainerComponent) customTitle: PageTitleContainerComponent; + @ContentChild(PageBreadcrumbContainerComponent) + customBreadcrumb: PageBreadcrumbContainerComponent; + @ContentChild(PageToolbarContainerComponent) customToolbar: PageToolbarContainerComponent; + + get shouldRenderRow() { + return !!( + this.title || + this.toolbarVisible || + this.breadcrumbVisible || + this.customTitle || + this.customBreadcrumb || + this.customToolbar + ); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/page/src/page.module.ts b/npm/ng-packs/nx/ng-packs/packages/components/page/src/page.module.ts new file mode 100644 index 0000000000..3f12543be7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/page/src/page.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { UiExtensionsModule } from '@abp/ng.theme.shared/extensions'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { CoreModule } from '@abp/ng.core'; +import { PageComponent } from './page.component'; +import { + PageTitleContainerComponent, + PageBreadcrumbContainerComponent, + PageToolbarContainerComponent, +} from './page-parts.component'; +import { PagePartDirective } from './page-part.directive'; + +const exportedDeclarations = [ + PageComponent, + PageTitleContainerComponent, + PageBreadcrumbContainerComponent, + PageToolbarContainerComponent, + PagePartDirective, +]; + +@NgModule({ + declarations: [...exportedDeclarations], + imports: [CommonModule, UiExtensionsModule, CoreModule, ThemeSharedModule], + exports: [...exportedDeclarations], +}) +export class PageModule {} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/page/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/components/page/src/public-api.ts new file mode 100644 index 0000000000..980f8de374 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/page/src/public-api.ts @@ -0,0 +1,4 @@ +export * from './page.module'; +export * from './page-part.directive'; +export * from './page-parts.component'; +export * from './page.component'; diff --git a/npm/ng-packs/nx/ng-packs/packages/components/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/components/src/public-api.ts new file mode 100644 index 0000000000..2302a05a8c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/src/public-api.ts @@ -0,0 +1,5 @@ +/* + * Public API Surface of components + */ + +export {}; diff --git a/npm/ng-packs/nx/ng-packs/packages/components/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/components/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tree/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/components/tree/ng-package.json new file mode 100644 index 0000000000..0a2a39f416 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tree/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/packages/components/tree", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/components/tree.component.html b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/components/tree.component.html new file mode 100644 index 0000000000..4f4aaf472d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/components/tree.component.html @@ -0,0 +1,96 @@ + + +
+ + + +
+ +
+ +
+ +
+ +
+
+
+ + + {{ node.title }} + +
+
+ + + + + + + + + + + + + + + + diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/components/tree.component.scss b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/components/tree.component.scss new file mode 100644 index 0000000000..07ca018f0d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/components/tree.component.scss @@ -0,0 +1,38 @@ +.ant-tree { + color: inherit; + + .ant-tree-node-content-wrapper.ant-tree-node-selected { + background-color: transparent; + } + + .ant-tree-switcher { + line-height: 17px; + } + + .ant-tree-node-content-wrapper { + width: 100%; + padding: 0; + } + + .node-wrapper { + width: 100%; + position: relative; + display: inline-block; + margin: 0; + padding: 0 5px; + line-height: 24px; + text-decoration: none; + vertical-align: top; + border-radius: 2px; + cursor: pointer; + padding-left: 8px; + border: 1px solid transparent; + } + + .ellipsis { + position: absolute; + right: 8px; + top: 1px; + cursor: pointer; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/components/tree.component.ts b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/components/tree.component.ts new file mode 100644 index 0000000000..3f6179a5b2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/components/tree.component.ts @@ -0,0 +1,79 @@ +import { + Component, + ContentChild, + EventEmitter, + Input, + Output, + TemplateRef, + ViewEncapsulation, +} from '@angular/core'; +import { NzFormatEmitEvent, NzFormatBeforeDropEvent } from 'ng-zorro-antd/tree'; +import { of } from 'rxjs'; +import { TreeNodeTemplateDirective } from '../templates/tree-node-template.directive'; +import { ExpandedIconTemplateDirective } from '../templates/expanded-icon-template.directive'; +import { NgbDropdown } from '@ng-bootstrap/ng-bootstrap'; + +export type DropEvent = NzFormatEmitEvent & { pos: number }; + +@Component({ + selector: 'abp-tree', + templateUrl: 'tree.component.html', + styleUrls: [ + '../../../../../../node_modules/ng-zorro-antd/tree/style/index.min.css', + 'tree.component.scss', + ], + encapsulation: ViewEncapsulation.None, +}) +export class TreeComponent { + dropPosition: number; + + dropdowns = {} as { [key: string]: NgbDropdown }; + + @ContentChild('menu') menu: TemplateRef; + @ContentChild(TreeNodeTemplateDirective) customNodeTemplate: TreeNodeTemplateDirective; + @ContentChild(ExpandedIconTemplateDirective) expandedIconTemplate: ExpandedIconTemplateDirective; + @Output() readonly checkedKeysChange = new EventEmitter(); + @Output() readonly expandedKeysChange = new EventEmitter(); + @Output() readonly selectedNodeChange = new EventEmitter(); + @Output() readonly dropOver = new EventEmitter(); + @Input() noAnimation = true; + @Input() draggable: boolean; + @Input() checkable: boolean; + @Input() checkStrictly: boolean; + @Input() checkedKeys = []; + @Input() nodes = []; + @Input() expandedKeys: string[] = []; + @Input() selectedNode: any; + @Input() isNodeSelected = node => this.selectedNode?.id === node.key; + @Input() beforeDrop = (event: NzFormatBeforeDropEvent) => { + this.dropPosition = event.pos; + return of(false); + }; + + onSelectedNodeChange(node) { + this.selectedNode = node.origin.entity; + this.selectedNodeChange.emit(node.origin.entity); + } + + onCheckboxChange(event) { + this.checkedKeys = [...event.keys]; + this.checkedKeysChange.emit(event.keys); + } + + onExpandedKeysChange(event) { + this.expandedKeys = [...event.keys]; + this.expandedKeysChange.emit(event.keys); + } + + onDrop(event: DropEvent) { + event.event.stopPropagation(); + event.event.preventDefault(); + event.pos = this.dropPosition; + + this.dropOver.emit(event); + } + + initDropdown(key: string, dropdown: NgbDropdown) { + this.dropdowns[key] = dropdown; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/templates/expanded-icon-template.directive.ts b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/templates/expanded-icon-template.directive.ts new file mode 100644 index 0000000000..35706bd25f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/templates/expanded-icon-template.directive.ts @@ -0,0 +1,8 @@ +import { Directive, TemplateRef } from '@angular/core'; + +@Directive({ + selector: '[abpTreeExpandedIconTemplate],[abp-tree-expanded-icon-template]', +}) +export class ExpandedIconTemplateDirective { + constructor(public template: TemplateRef) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/templates/tree-node-template.directive.ts b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/templates/tree-node-template.directive.ts new file mode 100644 index 0000000000..56c66af04b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/templates/tree-node-template.directive.ts @@ -0,0 +1,8 @@ +import { Directive, TemplateRef } from '@angular/core'; + +@Directive({ + selector: '[abpTreeNodeTemplate],[abp-tree-node-template]', +}) +export class TreeNodeTemplateDirective { + constructor(public template: TemplateRef) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/tree.module.ts b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/tree.module.ts new file mode 100644 index 0000000000..2013c37588 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/tree.module.ts @@ -0,0 +1,19 @@ +import { CoreModule } from '@abp/ng.core'; +import { NgModule } from '@angular/core'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { NzNoAnimationModule } from 'ng-zorro-antd/core/no-animation'; +import { NzTreeModule } from 'ng-zorro-antd/tree'; +import { TreeComponent } from './components/tree.component'; +import { ExpandedIconTemplateDirective } from './templates/expanded-icon-template.directive'; +import { TreeNodeTemplateDirective } from './templates/tree-node-template.directive'; + +const templates = [TreeNodeTemplateDirective, ExpandedIconTemplateDirective]; + +const exported = [...templates, TreeComponent]; + +@NgModule({ + imports: [CoreModule, NzTreeModule, NgbDropdownModule, NzNoAnimationModule], + exports: [...exported], + declarations: [...exported], +}) +export class TreeModule {} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/utils/nz-tree-adapter.ts b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/utils/nz-tree-adapter.ts new file mode 100644 index 0000000000..d5d32f0146 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/lib/utils/nz-tree-adapter.ts @@ -0,0 +1,112 @@ +export abstract class BaseNode { + name?: string; + displayName?: string; + + constructor(public id: string, public parentId: string | null) {} +} + +class TreeNode extends BaseNode { + title: string | undefined; + key: string; + icon: string | null = null; + children: TreeNode[] = []; + isLeaf = true; + checked = false; + selected = false; + expanded = false; + selectable = true; + disabled = false; + disableCheckbox = false; + parentNode?: TreeNode | null; + + constructor(public entity: T, private nameResolver = ent => ent.displayName || ent.name) { + super(entity.id, entity.parentId); + this.key = entity.id; + this.title = nameResolver(entity); + } +} + +export class TreeAdapter { + private tree: TreeNode[]; + + constructor(private list: T[] = []) { + this.tree = createTreeFromList(this.list); + } + + getList() { + return this.list; + } + + getTree() { + return this.tree; + } + + handleDrop({ key, parentNode }: TreeNode) { + const index = this.list.findIndex(({ id }) => id === key); + this.list[index].parentId = parentNode ? parentNode.key : null; + this.tree = createTreeFromList(this.list); + } + + handleRemove({ key }: TreeNode) { + this.updateTreeFromList(this.list.filter(item => item.id !== key)); + } + + handleUpdate({ key, children }: { key: string; children: T[] }) { + /** + * When we need to update a node with new children, first we need to remove any descendant nodes. + * If we remove immediate children and create a new tree, any other descendant nodes will be removed + * and we won't need to recursively remove sub children. + * Then, you simply add back the new children and create a new tree. + */ + const listWithDescendantNodesRemoved = this.updateTreeFromList( + this.list.filter(item => item.parentId !== key), + ); + this.updateTreeFromList(listWithDescendantNodesRemoved.concat(children)); + } + + updateTreeFromList(list: T[]) { + this.tree = createTreeFromList(list); + this.list = createListFromTree(this.tree); + return this.list; + } +} + +// UTILITY FUNCTIONS + +function createTreeFromList(list: T[]): TreeNode[] { + const map = createMapFromList(list); + const tree: TreeNode[] = []; + + list.forEach(row => { + const parentId = row.parentId; + const node = map.get(row.id); + if (parentId) { + const parent = map.get(parentId); + if (!parent) return; + parent.children.push(node); + parent.isLeaf = false; + } else { + tree.push(node); + } + }); + + return tree; +} + +function createListFromTree(tree: TreeNode[], list: T[] = []): T[] { + tree.forEach(node => { + list.push({ ...node.entity, parentId: node.parentId }); + if (node.children) createListFromTree(node.children, list); + }); + + return list; +} + +function createMapFromList( + list: T[], + map = new Map>(), +): Map> { + list.forEach(row => map.set(row.id, new TreeNode(row))); + + return map; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tree/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/public-api.ts new file mode 100644 index 0000000000..1f3dd48e00 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tree/src/public-api.ts @@ -0,0 +1,5 @@ +export * from './lib/tree.module'; +export * from './lib/components/tree.component'; +export * from './lib/utils/nz-tree-adapter'; +export * from './lib/templates/tree-node-template.directive'; +export * from './lib/templates/expanded-icon-template.directive'; diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.json new file mode 100644 index 0000000000..62ebbd9464 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.lib.json new file mode 100644 index 0000000000..bbcc12b1c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.lib.prod.json new file mode 100644 index 0000000000..331d0ecb05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial", + "enableIvy": false + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/src/public-api.ts index 14355a8a28..dc639b1462 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/src/public-api.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/testing/src/public-api.ts @@ -1 +1,3 @@ +import * as ThemeSharedTesting from './lib/models'; export * from './lib/theme-shared-testing.module'; +export { ThemeSharedTesting }; diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index 3b7724759e..cee7a51cd2 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -16,9 +16,17 @@ "baseUrl": ".", "paths": { "@abp/ng.core": ["dist/packages/core"], + "@abp/ng.core/locale": ["dist/packages/core/locale"], + "@abp/ng.core/testing": ["dist/packages/core/testing"], "@abp/ng.theme.shared": ["dist/packages/theme-shared"], + "@abp/ng.theme.shared/extensions": ["dist/packages/theme-shared/extensions"], + "@abp/ng.theme.shared/testing": ["dist/packages/theme-shared/testing"], + "@abp/ng.components": ["dist/packages/components"], + "@abp/ng.components/page": ["dist/packages/components/page"], + "@abp/ng.components/tree": ["dist/packages/components/tree"], "@abp/ng.account.core": ["dist/packages/account-core"], - "@abp/ng.theme.basic": ["dist/packages/theme-basic"] + "@abp/ng.theme.basic": ["dist/packages/theme-basic"], + "@abp/ng.theme.basic/testing": ["dist/packages/theme-basic/testing"] } }, "exclude": ["node_modules", "tmp"] From 2a66bb41e107402f612cdcf649c77293d7d14656 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 13 Aug 2021 11:30:58 +0300 Subject: [PATCH 09/56] add feature-management to nx workspace --- npm/ng-packs/nx/ng-packs/angular.json | 41 + npm/ng-packs/nx/ng-packs/nx.json | 4 + .../feature-management/.eslintrc.json | 36 + .../packages/feature-management/README.md | 3 + .../feature-management/jest.config.js | 20 + .../feature-management/ng-package.json | 8 + .../packages/feature-management/package.json | 16 + .../feature-management.component.html | 126 + .../feature-management.component.ts | 214 + .../src/lib/components/index.ts | 1 + .../directives/free-text-input.directive.ts | 38 + .../src/lib/directives/index.ts | 1 + .../src/lib/enums/components.ts | 3 + .../src/lib/feature-management.module.ts | 16 + .../src/lib/models/feature-management.ts | 13 + .../src/lib/models/index.ts | 1 + .../src/lib/proxy/README.md | 13 + .../feature-management/features.service.ts | 29 + .../src/lib/proxy/feature-management/index.ts | 2 + .../lib/proxy/feature-management/models.ts | 36 + .../src/lib/proxy/generate-proxy.json | 12547 ++++++++++++++++ .../feature-management/src/lib/proxy/index.ts | 2 + .../src/lib/proxy/validation/index.ts | 1 + .../proxy/validation/string-values/index.ts | 1 + .../proxy/validation/string-values/models.ts | 13 + .../feature-management/src/public-api.ts | 5 + .../feature-management/src/test-setup.ts | 1 + .../packages/feature-management/tsconfig.json | 13 + .../feature-management/tsconfig.lib.json | 14 + .../feature-management/tsconfig.lib.prod.json | 11 + .../feature-management/tsconfig.spec.json | 10 + npm/ng-packs/nx/ng-packs/tsconfig.base.json | 17 +- 32 files changed, 13249 insertions(+), 7 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/directives/free-text-input.directive.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/directives/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/enums/components.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/feature-management.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/models/feature-management.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/models/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/features.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/generate-proxy.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/string-values/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/string-values/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.lib.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.lib.prod.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index 30bbb732d2..153f4e47e5 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -243,6 +243,47 @@ } } }, + "feature-management": { + "projectType": "library", + "root": "packages/feature-management", + "sourceRoot": "packages/feature-management/src", + "prefix": "abp", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "packages/feature-management/tsconfig.lib.json", + "project": "packages/feature-management/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "packages/feature-management/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "packages/feature-management/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/packages/feature-management"], + "options": { + "jestConfig": "packages/feature-management/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "packages/feature-management/src/**/*.ts", + "packages/feature-management/src/**/*.html" + ] + } + } + } + }, "theme-basic": { "projectType": "library", "root": "packages/theme-basic", diff --git a/npm/ng-packs/nx/ng-packs/nx.json b/npm/ng-packs/nx/ng-packs/nx.json index db5d09d7be..79c789ebe5 100644 --- a/npm/ng-packs/nx/ng-packs/nx.json +++ b/npm/ng-packs/nx/ng-packs/nx.json @@ -49,6 +49,10 @@ "tags": [], "implicitDependencies": ["dev-app"] }, + "feature-management": { + "tags": [], + "implicitDependencies": ["core", "theme-shared"] + }, "theme-basic": { "tags": [], "implicitDependencies": ["core", "theme-shared", "account-core"] diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/feature-management/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/README.md b/npm/ng-packs/nx/ng-packs/packages/feature-management/README.md new file mode 100644 index 0000000000..e37720641c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/README.md @@ -0,0 +1,3 @@ +

 @abp/ng.feature-management

+ +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/jest.config.js b/npm/ng-packs/nx/ng-packs/packages/feature-management/jest.config.js new file mode 100644 index 0000000000..3e548f35eb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'feature-management', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/packages/feature-management', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/feature-management/ng-package.json new file mode 100644 index 0000000000..fd7341bd25 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/ng-package.json @@ -0,0 +1,8 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/packages/feature-management", + "lib": { + "entryFile": "src/public-api.ts" + }, + "allowedNonPeerDependencies": ["@abp/ng.theme.shared"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/package.json b/npm/ng-packs/nx/ng-packs/packages/feature-management/package.json new file mode 100644 index 0000000000..85b5956f98 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/package.json @@ -0,0 +1,16 @@ +{ + "name": "@abp/ng.feature-management", + "version": "4.4.0", + "homepage": "https://abp.io", + "repository": { + "type": "git", + "url": "https://github.com/abpframework/abp.git" + }, + "dependencies": { + "@abp/ng.theme.shared": "~4.4.0", + "tslib": "^2.0.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html new file mode 100644 index 0000000000..126fb9638c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html @@ -0,0 +1,126 @@ + + +

{{ 'AbpFeatureManagement::Features' | abpLocalization }}

+
+ + +
+
+ +
+ + + {{ description }} + + +
+ +
+ {{ 'AbpFeatureManagement::NoFeatureFoundMessage' | abpLocalization }} +
+
+
+ + + + + {{ 'AbpFeatureManagement::Save' | abpLocalization }} + + +
diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts new file mode 100644 index 0000000000..4bda77b4fb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts @@ -0,0 +1,214 @@ +import { + AbpApplicationConfigurationService, + ConfigStateService, + TrackByService, +} from '@abp/ng.core'; +import { LocaleDirection } from '@abp/ng.theme.shared'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { Store } from '@ngxs/store'; +import { finalize, tap } from 'rxjs/operators'; +import { FeatureManagement } from '../../models/feature-management'; +import { FeaturesService } from '../../proxy/feature-management/features.service'; +import { + FeatureDto, + FeatureGroupDto, + UpdateFeatureDto, +} from '../../proxy/feature-management/models'; + +enum ValueTypes { + ToggleStringValueType = 'ToggleStringValueType', + FreeTextStringValueType = 'FreeTextStringValueType', + SelectionStringValueType = 'SelectionStringValueType', +} + +@Component({ + selector: 'abp-feature-management', + templateUrl: './feature-management.component.html', + exportAs: 'abpFeatureManagement', +}) +export class FeatureManagementComponent + implements + FeatureManagement.FeatureManagementComponentInputs, + FeatureManagement.FeatureManagementComponentOutputs { + @Input() + providerKey: string; + + @Input() + providerName: string; + + selectedGroupDisplayName: string; + + groups: Pick[] = []; + + features: { + [group: string]: Array; + }; + + valueTypes = ValueTypes; + + protected _visible; + + @Input() + get visible(): boolean { + return this._visible; + } + + set visible(value: boolean) { + if (this._visible === value) return; + + this._visible = value; + this.visibleChange.emit(value); + if (value) this.openModal(); + } + + @Output() readonly visibleChange = new EventEmitter(); + + modalBusy = false; + + constructor( + public readonly track: TrackByService, + protected service: FeaturesService, + protected store: Store, + protected configState: ConfigStateService, + protected appConfigService: AbpApplicationConfigurationService, + ) {} + + openModal() { + if (!this.providerName) { + throw new Error('providerName is required.'); + } + + this.getFeatures(); + } + + getFeatures() { + this.service.get(this.providerName, this.providerKey).subscribe(res => { + if (!res.groups?.length) return; + this.groups = res.groups.map(({ name, displayName }) => ({ name, displayName })); + this.selectedGroupDisplayName = this.groups[0].displayName; + this.features = res.groups.reduce( + (acc, val) => ({ + ...acc, + [val.name]: mapFeatures(val.features, document.body.dir as LocaleDirection), + }), + {}, + ); + }); + } + + save() { + if (this.modalBusy) return; + + const changedFeatures = [] as UpdateFeatureDto[]; + + Object.keys(this.features).forEach(key => { + this.features[key].forEach(feature => { + if (feature.value !== feature.initialValue) + changedFeatures.push({ name: feature.name, value: `${feature.value}` }); + }); + }); + + if (!changedFeatures.length) { + this.visible = false; + return; + } + + this.modalBusy = true; + this.service + .update(this.providerName, this.providerKey, { features: changedFeatures }) + .pipe(finalize(() => (this.modalBusy = false))) + .subscribe(() => { + this.visible = false; + + if (!this.providerKey) { + // to refresh host's features + this.appConfigService + .get() + .pipe(tap(res => this.configState.setState(res))) + .subscribe(); + } + }); + } + + onCheckboxClick(val: boolean, feature: FeatureDto) { + if (val) { + this.checkToggleAncestors(feature); + } else { + this.uncheckToggleDescendants(feature); + } + } + + private uncheckToggleDescendants(feature: FeatureDto) { + this.findAllDescendantsOfByType(feature, ValueTypes.ToggleStringValueType).forEach(node => + this.setFeatureValue(node, false), + ); + } + + private checkToggleAncestors(feature: FeatureDto) { + this.findAllAncestorsOfByType(feature, ValueTypes.ToggleStringValueType).forEach(node => + this.setFeatureValue(node, true), + ); + } + + private findAllAncestorsOfByType(feature: FeatureDto, type: ValueTypes) { + let parent = this.findParentByType(feature, type); + const ancestors = []; + while (parent) { + ancestors.push(parent); + parent = this.findParentByType(parent, type); + } + return ancestors; + } + + private findAllDescendantsOfByType(feature: FeatureDto, type: ValueTypes) { + const descendants = []; + const queue = [feature]; + + while (queue.length) { + const node = queue.pop(); + const newDescendants = this.findChildrenByType(node, type); + descendants.push(...newDescendants); + queue.push(...newDescendants); + } + + return descendants; + } + + private findParentByType(feature: FeatureDto, type: ValueTypes) { + return this.getCurrentGroup().find( + f => f.valueType.name === type && f.name === feature.parentName, + ); + } + + private findChildrenByType(feature: FeatureDto, type: ValueTypes) { + return this.getCurrentGroup().filter( + f => f.valueType.name === type && f.parentName === feature.name, + ); + } + + private getCurrentGroup() { + return this.features[this.selectedGroupDisplayName] ?? []; + } + + private setFeatureValue(feature: FeatureDto, val: boolean) { + feature.value = val as any; + } +} + +function mapFeatures(features: FeatureDto[], dir: LocaleDirection) { + const margin = `margin-${dir === 'rtl' ? 'right' : 'left'}.px`; + + return features.map(feature => { + const value = + feature.valueType?.name === ValueTypes.ToggleStringValueType + ? (feature.value || '').toLowerCase() === 'true' + : feature.value; + + return { + ...feature, + value, + initialValue: value, + style: { [margin]: feature.depth * 20 }, + }; + }); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/index.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/index.ts new file mode 100644 index 0000000000..64f8bd0fc5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/index.ts @@ -0,0 +1 @@ +export * from './feature-management/feature-management.component'; diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/directives/free-text-input.directive.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/directives/free-text-input.directive.ts new file mode 100644 index 0000000000..f72729375a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/directives/free-text-input.directive.ts @@ -0,0 +1,38 @@ +import { Directive, Input, HostBinding } from '@angular/core'; + +// TODO: improve this type +export interface FreeTextType { + valueType: { + validator: { + name: string; + }; + }; +} + +export const INPUT_TYPES = { + numeric: 'number', + default: 'text', +}; + +@Directive({ + selector: 'input[abpFeatureManagementFreeText]', + exportAs: 'inputAbpFeatureManagementFreeText', +}) +export class FreeTextInputDirective { + _feature: FreeTextType; + @Input('abpFeatureManagementFreeText') set feature(val: FreeTextType) { + this._feature = val; + this.setInputType(); + } + + get feature() { + return this._feature; + } + + @HostBinding('type') type: string; + + private setInputType() { + const validatorType = this.feature?.valueType?.validator?.name.toLowerCase(); + this.type = INPUT_TYPES[validatorType] ?? INPUT_TYPES.default; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/directives/index.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/directives/index.ts new file mode 100644 index 0000000000..ec7eef1ded --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/directives/index.ts @@ -0,0 +1 @@ +export * from './free-text-input.directive'; diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/enums/components.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/enums/components.ts new file mode 100644 index 0000000000..10d0b564a0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/enums/components.ts @@ -0,0 +1,3 @@ +export const enum eFeatureManagementComponents { + FeatureManagement = 'FeatureManagement.FeatureManagementComponent', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/feature-management.module.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/feature-management.module.ts new file mode 100644 index 0000000000..84ab3d6984 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/feature-management.module.ts @@ -0,0 +1,16 @@ +import { CoreModule } from '@abp/ng.core'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { NgModule } from '@angular/core'; +import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgxsModule } from '@ngxs/store'; +import { FeatureManagementComponent } from './components/feature-management/feature-management.component'; +import { FreeTextInputDirective } from './directives/free-text-input.directive'; + +const exported = [FeatureManagementComponent, FreeTextInputDirective]; + +@NgModule({ + declarations: [...exported], + imports: [CoreModule, ThemeSharedModule, NgbNavModule, NgxsModule.forFeature([])], + exports: [...exported], +}) +export class FeatureManagementModule {} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/models/feature-management.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/models/feature-management.ts new file mode 100644 index 0000000000..c04d917515 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/models/feature-management.ts @@ -0,0 +1,13 @@ +import { EventEmitter } from '@angular/core'; + +export namespace FeatureManagement { + export interface FeatureManagementComponentInputs { + visible: boolean; + readonly providerName: string; + readonly providerKey: string; + } + + export interface FeatureManagementComponentOutputs { + readonly visibleChange: EventEmitter; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/models/index.ts new file mode 100644 index 0000000000..d6ed522ae0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/models/index.ts @@ -0,0 +1 @@ +export * from './feature-management'; diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/README.md b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/README.md new file mode 100644 index 0000000000..09967f7e3a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/README.md @@ -0,0 +1,13 @@ +# Proxy Generation Output + +This directory includes the output of the latest proxy generation. +The files and folders in it will be overwritten when proxy generation is run again. +Therefore, please do not place your own content in this folder. + +In addition, `generate-proxy.json` works like a lock file. +It includes information used by the proxy generator, so please do not delete or modify it. + +Finally, the name of the files and folders should not be changed for two reasons: +- Proxy generator will keep creating them at those paths and you will have multiple copies of the same content. +- ABP Suite generates files which include imports from this folder. + diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/features.service.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/features.service.ts new file mode 100644 index 0000000000..c1ff025b1b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/features.service.ts @@ -0,0 +1,29 @@ +import type { GetFeatureListResultDto, UpdateFeaturesDto } from './models'; +import { RestService } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class FeaturesService { + apiName = 'AbpFeatureManagement'; + + get = (providerName: string, providerKey: string) => + this.restService.request({ + method: 'GET', + url: '/api/feature-management/features', + params: { providerName, providerKey }, + }, + { apiName: this.apiName }); + + update = (providerName: string, providerKey: string, input: UpdateFeaturesDto) => + this.restService.request({ + method: 'PUT', + url: '/api/feature-management/features', + params: { providerName, providerKey }, + body: input, + }, + { apiName: this.apiName }); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/index.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/index.ts new file mode 100644 index 0000000000..8c604f9964 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/index.ts @@ -0,0 +1,2 @@ +export * from './features.service'; +export * from './models'; diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/models.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/models.ts new file mode 100644 index 0000000000..8ea2d73164 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/models.ts @@ -0,0 +1,36 @@ +import type { IStringValueType } from '../validation/string-values/models'; + +export interface FeatureDto { + name: string; + displayName: string; + value: string; + provider: FeatureProviderDto; + description: string; + valueType: IStringValueType; + depth: number; + parentName: string; +} + +export interface FeatureGroupDto { + name: string; + displayName: string; + features: FeatureDto[]; +} + +export interface FeatureProviderDto { + name: string; + key: string; +} + +export interface GetFeatureListResultDto { + groups: FeatureGroupDto[]; +} + +export interface UpdateFeatureDto { + name: string; + value: string; +} + +export interface UpdateFeaturesDto { + features: UpdateFeatureDto[]; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/generate-proxy.json b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/generate-proxy.json new file mode 100644 index 0000000000..e022e5ea1f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/generate-proxy.json @@ -0,0 +1,12547 @@ +{ + "generated": [ + "featureManagement" + ], + "modules": { + "accountAdmin": { + "rootPath": "accountAdmin", + "remoteServiceName": "AbpAccountAdmin", + "controllers": { + "Volo.Abp.Account.AccountSettingsController": { + "controllerName": "AccountSettings", + "type": "Volo.Abp.Account.AccountSettingsController", + "interfaces": [ + { + "type": "Volo.Abp.Account.IAccountSettingsAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/account-admin/settings", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Account.AccountSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountSettingsDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/account-admin/settings", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.AccountSettingsDto, Volo.Abp.Account.Pro.Admin.Application.Contracts", + "type": "Volo.Abp.Account.AccountSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.AccountSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetLdapAsync": { + "uniqueName": "GetLdapAsync", + "name": "GetLdapAsync", + "httpMethod": "GET", + "url": "api/account-admin/settings/ldap", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Account.AccountLdapSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountLdapSettingsDto" + } + }, + "UpdateLdapAsyncByInput": { + "uniqueName": "UpdateLdapAsyncByInput", + "name": "UpdateLdapAsync", + "httpMethod": "PUT", + "url": "api/account-admin/settings/ldap", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.AccountLdapSettingsDto, Volo.Abp.Account.Pro.Admin.Application.Contracts", + "type": "Volo.Abp.Account.AccountLdapSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountLdapSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.AccountLdapSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountLdapSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetTwoFactorAsync": { + "uniqueName": "GetTwoFactorAsync", + "name": "GetTwoFactorAsync", + "httpMethod": "GET", + "url": "api/account-admin/settings/two-factor", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountTwoFactorSettingsDto" + } + }, + "UpdateTwoFactorAsyncByInput": { + "uniqueName": "UpdateTwoFactorAsyncByInput", + "name": "UpdateTwoFactorAsync", + "httpMethod": "PUT", + "url": "api/account-admin/settings/two-factor", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.AccountTwoFactorSettingsDto, Volo.Abp.Account.Pro.Admin.Application.Contracts", + "type": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "leptonThemeManagement": { + "rootPath": "leptonThemeManagement", + "remoteServiceName": "LeptonThemeManagement", + "controllers": { + "Volo.Abp.LeptonTheme.LeptonThemeSettingsController": { + "controllerName": "LeptonThemeSettings", + "type": "Volo.Abp.LeptonTheme.LeptonThemeSettingsController", + "interfaces": [ + { + "type": "Volo.Abp.LeptonTheme.Management.ILeptonThemeSettingsAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/lepton-theme-management/settings", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.LeptonTheme.Management.LeptonThemeSettingsDto", + "typeSimple": "Volo.Abp.LeptonTheme.Management.LeptonThemeSettingsDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/lepton-theme-management/settings", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto, Volo.Abp.LeptonTheme.Management.Application.Contracts", + "type": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", + "typeSimple": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", + "typeSimple": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "identityServer": { + "rootPath": "identityServer", + "remoteServiceName": "AbpIdentityServer", + "controllers": { + "Volo.Abp.IdentityServer.ApiResourcesController": { + "controllerName": "ApiResources", + "type": "Volo.Abp.IdentityServer.ApiResourcesController", + "interfaces": [ + { + "type": "Volo.Abp.IdentityServer.ApiResource.IApiResourceAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity-server/api-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity-server/api-resources/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto]" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity-server/api-resources/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity-server/api-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity-server/api-resources/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity-server/api-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.IdentityServer.ClientsController": { + "controllerName": "Clients", + "type": "Volo.Abp.IdentityServer.ClientsController", + "interfaces": [ + { + "type": "Volo.Abp.IdentityServer.Client.IClientAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity-server/clients", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity-server/clients/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity-server/clients", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity-server/clients/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity-server/clients", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.IdentityServer.IdentityResourcesController": { + "controllerName": "IdentityResources", + "type": "Volo.Abp.IdentityServer.IdentityResourcesController", + "interfaces": [ + { + "type": "Volo.Abp.IdentityServer.IdentityResource.IIdentityResourceAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity-server/identity-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity-server/identity-resources/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto]" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity-server/identity-resources/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity-server/identity-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity-server/identity-resources/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity-server/identity-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "CreateStandardResourcesAsync": { + "uniqueName": "CreateStandardResourcesAsync", + "name": "CreateStandardResourcesAsync", + "httpMethod": "POST", + "url": "api/identity-server/identity-resources/create-standard-resources", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.IdentityServer.IdentityServerClaimTypesController": { + "controllerName": "IdentityServerClaimTypes", + "type": "Volo.Abp.IdentityServer.IdentityServerClaimTypesController", + "interfaces": [ + { + "type": "Volo.Abp.IdentityServer.ClaimType.IIdentityServerClaimTypeAppService" + } + ], + "actions": { + "GetListAsync": { + "uniqueName": "GetListAsync", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity-server/claim-types", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.IdentityServer.ClaimType.Dtos.IdentityClaimTypeDto]" + } + } + } + } + } + }, + "featureManagement": { + "rootPath": "featureManagement", + "remoteServiceName": "AbpFeatureManagement", + "controllers": { + "Volo.Abp.FeatureManagement.FeaturesController": { + "controllerName": "Features", + "type": "Volo.Abp.FeatureManagement.FeaturesController", + "interfaces": [ + { + "type": "Volo.Abp.FeatureManagement.IFeatureAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", + "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "textTemplateManagement": { + "rootPath": "textTemplateManagement", + "remoteServiceName": "TextTemplateManagement", + "controllers": { + "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateContentController": { + "controllerName": "TemplateContent", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateContentController", + "interfaces": [ + { + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.ITemplateContentAppService" + } + ], + "actions": { + "GetAsyncByInput": { + "uniqueName": "GetAsyncByInput", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/text-template-management/template-contents", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput, Volo.Abp.TextTemplateManagement.Application.Contracts", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "TemplateName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CultureName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto" + } + }, + "RestoreToDefaultAsyncByInput": { + "uniqueName": "RestoreToDefaultAsyncByInput", + "name": "RestoreToDefaultAsync", + "httpMethod": "PUT", + "url": "api/text-template-management/template-contents/restore-to-default", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput, Volo.Abp.TextTemplateManagement.Application.Contracts", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/text-template-management/template-contents", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput, Volo.Abp.TextTemplateManagement.Application.Contracts", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto" + } + } + } + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionController": { + "controllerName": "TemplateDefinition", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionController", + "interfaces": [ + { + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.ITemplateDefinitionAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/text-template-management/template-definitions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput, Volo.Abp.TextTemplateManagement.Application.Contracts", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "FilterText", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncByName": { + "uniqueName": "GetAsyncByName", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/text-template-management/template-definitions/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "name", + "name": "name", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionDto", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionDto" + } + } + } + } + } + }, + "permissionManagement": { + "rootPath": "permissionManagement", + "remoteServiceName": "AbpPermissionManagement", + "controllers": { + "Volo.Abp.PermissionManagement.PermissionsController": { + "controllerName": "Permissions", + "type": "Volo.Abp.PermissionManagement.PermissionsController", + "interfaces": [ + { + "type": "Volo.Abp.PermissionManagement.IPermissionAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", + "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "languageManagement": { + "rootPath": "languageManagement", + "remoteServiceName": "LanguageManagement", + "controllers": { + "Volo.Abp.LanguageManagement.LanguageController": { + "controllerName": "Language", + "type": "Volo.Abp.LanguageManagement.LanguageController", + "interfaces": [ + { + "type": "Volo.Abp.LanguageManagement.ILanguageAppService" + } + ], + "actions": { + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/language-management/languages/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/language-management/languages", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput, Volo.Abp.LanguageManagement.Application.Contracts", + "type": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ResourceName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "BaseCultureName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "TargetCultureName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "GetOnlyEmptyValues", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/language-management/languages/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.LanguageManagement.Dto.LanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/language-management/languages", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto, Volo.Abp.LanguageManagement.Application.Contracts", + "type": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.LanguageManagement.Dto.LanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/language-management/languages/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto, Volo.Abp.LanguageManagement.Application.Contracts", + "type": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.LanguageManagement.Dto.LanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/language-management/languages/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "SetAsDefaultAsyncById": { + "uniqueName": "SetAsDefaultAsyncById", + "name": "SetAsDefaultAsync", + "httpMethod": "PUT", + "url": "api/language-management/languages/{id}/set-as-default", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetResourcesAsync": { + "uniqueName": "GetResourcesAsync", + "name": "GetResourcesAsync", + "httpMethod": "GET", + "url": "api/language-management/languages/resources", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.LanguageManagement.Dto.LanguageResourceDto]" + } + }, + "GetCulturelistAsync": { + "uniqueName": "GetCulturelistAsync", + "name": "GetCulturelistAsync", + "httpMethod": "GET", + "url": "api/language-management/languages/culture-list", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.LanguageManagement.Dto.CultureInfoDto]" + } + } + } + }, + "Volo.Abp.LanguageManagement.LanguageTextController": { + "controllerName": "LanguageText", + "type": "Volo.Abp.LanguageManagement.LanguageTextController", + "interfaces": [ + { + "type": "Volo.Abp.LanguageManagement.ILanguageTextAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/language-management/language-texts", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput, Volo.Abp.LanguageManagement.Application.Contracts", + "type": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ResourceName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "BaseCultureName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "TargetCultureName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "GetOnlyEmptyValues", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncByResourceNameAndCultureNameAndNameAndBaseCultureName": { + "uniqueName": "GetAsyncByResourceNameAndCultureNameAndNameAndBaseCultureName", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/language-management/language-texts/{resourceName}/{cultureName}/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "resourceName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "cultureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "baseCultureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "resourceName", + "name": "resourceName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "cultureName", + "name": "cultureName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "name", + "name": "name", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "baseCultureName", + "name": "baseCultureName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.LanguageManagement.Dto.LanguageTextDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageTextDto" + } + }, + "UpdateAsyncByResourceNameAndCultureNameAndNameAndValue": { + "uniqueName": "UpdateAsyncByResourceNameAndCultureNameAndNameAndValue", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/language-management/language-texts/{resourceName}/{cultureName}/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "resourceName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "cultureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "value", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "resourceName", + "name": "resourceName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "cultureName", + "name": "cultureName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "name", + "name": "name", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "value", + "name": "value", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "RestoreToDefaultAsyncByResourceNameAndCultureNameAndName": { + "uniqueName": "RestoreToDefaultAsyncByResourceNameAndCultureNameAndName", + "name": "RestoreToDefaultAsync", + "httpMethod": "PUT", + "url": "api/language-management/language-texts/{resourceName}/{cultureName}/{name}/restore", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "resourceName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "cultureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "resourceName", + "name": "resourceName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "cultureName", + "name": "cultureName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "name", + "name": "name", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "auditLogging": { + "rootPath": "auditLogging", + "remoteServiceName": "AbpAuditLogging", + "controllers": { + "Volo.Abp.AuditLogging.AuditLogsController": { + "controllerName": "AuditLogs", + "type": "Volo.Abp.AuditLogging.AuditLogsController", + "interfaces": [ + { + "type": "Volo.Abp.AuditLogging.IAuditLogsAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.AuditLogging.GetAuditLogListDto, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.GetAuditLogListDto", + "typeSimple": "Volo.Abp.AuditLogging.GetAuditLogListDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Url", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "UserName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ApplicationName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CorrelationId", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "HttpMethod", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "HttpStatusCode", + "type": "System.Net.HttpStatusCode?", + "typeSimple": "System.Net.HttpStatusCode?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxExecutionDuration", + "type": "System.Int32?", + "typeSimple": "number?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MinExecutionDuration", + "type": "System.Int32?", + "typeSimple": "number?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "HasException", + "type": "System.Boolean?", + "typeSimple": "boolean?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AuditLogging.AuditLogDto", + "typeSimple": "Volo.Abp.AuditLogging.AuditLogDto" + } + }, + "GetErrorRateAsyncByFilter": { + "uniqueName": "GetErrorRateAsyncByFilter", + "name": "GetErrorRateAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/statistics/error-rate", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "filter", + "typeAsString": "Volo.Abp.AuditLogging.GetErrorRateFilter, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.GetErrorRateFilter", + "typeSimple": "Volo.Abp.AuditLogging.GetErrorRateFilter", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "filter", + "name": "StartDate", + "type": "System.DateTime", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "filter" + }, + { + "nameOnMethod": "filter", + "name": "EndDate", + "type": "System.DateTime", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "filter" + } + ], + "returnValue": { + "type": "Volo.Abp.AuditLogging.GetErrorRateOutput", + "typeSimple": "Volo.Abp.AuditLogging.GetErrorRateOutput" + } + }, + "GetAverageExecutionDurationPerDayAsyncByFilter": { + "uniqueName": "GetAverageExecutionDurationPerDayAsyncByFilter", + "name": "GetAverageExecutionDurationPerDayAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/statistics/average-execution-duration-per-day", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "filter", + "typeAsString": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput", + "typeSimple": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "filter", + "name": "StartDate", + "type": "System.DateTime", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "filter" + }, + { + "nameOnMethod": "filter", + "name": "EndDate", + "type": "System.DateTime", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "filter" + } + ], + "returnValue": { + "type": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayOutput", + "typeSimple": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayOutput" + } + }, + "GetEntityChangesAsyncByInput": { + "uniqueName": "GetEntityChangesAsyncByInput", + "name": "GetEntityChangesAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/entity-changes", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.AuditLogging.GetEntityChangesDto, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.GetEntityChangesDto", + "typeSimple": "Volo.Abp.AuditLogging.GetEntityChangesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "AuditLogId", + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EntityChangeType", + "type": "Volo.Abp.Auditing.EntityChangeType?", + "typeSimple": "Volo.Abp.Auditing.EntityChangeType?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EntityId", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EntityTypeFullName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "StartDate", + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EndDate", + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetEntityChangesWithUsernameAsyncByInput": { + "uniqueName": "GetEntityChangesWithUsernameAsyncByInput", + "name": "GetEntityChangesWithUsernameAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/entity-changes-with-username", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.AuditLogging.EntityChangeFilter, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.EntityChangeFilter", + "typeSimple": "Volo.Abp.AuditLogging.EntityChangeFilter", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "EntityId", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EntityTypeFullName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.AuditLogging.EntityChangeWithUsernameDto]" + } + }, + "GetEntityChangeWithUsernameAsyncByEntityChangeId": { + "uniqueName": "GetEntityChangeWithUsernameAsyncByEntityChangeId", + "name": "GetEntityChangeWithUsernameAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/entity-change-with-username/{entityChangeId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityChangeId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityChangeId", + "name": "entityChangeId", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AuditLogging.EntityChangeWithUsernameDto", + "typeSimple": "Volo.Abp.AuditLogging.EntityChangeWithUsernameDto" + } + }, + "GetEntityChangeAsyncByEntityChangeId": { + "uniqueName": "GetEntityChangeAsyncByEntityChangeId", + "name": "GetEntityChangeAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/entity-changes/{entityChangeId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "entityChangeId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityChangeId", + "name": "entityChangeId", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AuditLogging.EntityChangeDto", + "typeSimple": "Volo.Abp.AuditLogging.EntityChangeDto" + } + } + } + } + } + }, + "saas": { + "rootPath": "saas", + "remoteServiceName": "SaasHost", + "controllers": { + "Volo.Saas.Host.EditionController": { + "controllerName": "Edition", + "type": "Volo.Saas.Host.EditionController", + "interfaces": [ + { + "type": "Volo.Saas.Host.IEditionAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/saas/editions/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.EditionDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/saas/editions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.GetEditionsInput, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.GetEditionsInput", + "typeSimple": "Volo.Saas.Host.Dtos.GetEditionsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/saas/editions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.EditionCreateDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.EditionCreateDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Saas.Host.Dtos.EditionCreateDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.EditionDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/saas/editions/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.EditionUpdateDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.EditionUpdateDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Saas.Host.Dtos.EditionUpdateDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.EditionDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/saas/editions/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetUsageStatistics": { + "uniqueName": "GetUsageStatistics", + "name": "GetUsageStatistics", + "httpMethod": "GET", + "url": "api/saas/editions/statistics/usage-statistic", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Saas.Host.GetEditionUsageStatisticsResult", + "typeSimple": "Volo.Saas.Host.GetEditionUsageStatisticsResult" + } + } + } + }, + "Volo.Saas.Host.TenantController": { + "controllerName": "Tenant", + "type": "Volo.Saas.Host.TenantController", + "interfaces": [ + { + "type": "Volo.Saas.Host.ITenantAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/saas/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.SaasTenantDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/saas/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.GetTenantsInput, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.GetTenantsInput", + "typeSimple": "Volo.Saas.Host.Dtos.GetTenantsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "GetEditionNames", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/saas/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.SaasTenantCreateDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.SaasTenantDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/saas/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.SaasTenantDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/saas/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetDefaultConnectionStringAsyncById": { + "uniqueName": "GetDefaultConnectionStringAsyncById", + "name": "GetDefaultConnectionStringAsync", + "httpMethod": "GET", + "url": "api/saas/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.String", + "typeSimple": "string" + } + }, + "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString": { + "uniqueName": "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString", + "name": "UpdateDefaultConnectionStringAsync", + "httpMethod": "PUT", + "url": "api/saas/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "defaultConnectionString", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "defaultConnectionString", + "name": "defaultConnectionString", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "DeleteDefaultConnectionStringAsyncById": { + "uniqueName": "DeleteDefaultConnectionStringAsyncById", + "name": "DeleteDefaultConnectionStringAsync", + "httpMethod": "DELETE", + "url": "api/saas/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "identity": { + "rootPath": "identity", + "remoteServiceName": "AbpIdentity", + "controllers": { + "Volo.Abp.Identity.IdentityClaimTypeController": { + "controllerName": "IdentityClaimType", + "type": "Volo.Abp.Identity.IdentityClaimTypeController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityClaimTypeAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/claim-types", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityClaimTypesInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityClaimTypesInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityClaimTypesInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/claim-types/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.ClaimTypeDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/claim-types", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.CreateClaimTypeDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.CreateClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.CreateClaimTypeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.CreateClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.CreateClaimTypeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.ClaimTypeDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/claim-types/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UpdateClaimTypeDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UpdateClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.UpdateClaimTypeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.UpdateClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.UpdateClaimTypeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.ClaimTypeDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/claim-types/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.IdentityRoleController": { + "controllerName": "IdentityRole", + "type": "Volo.Abp.Identity.IdentityRoleController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityRoleAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleCreateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleUpdateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity/roles/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityRoleListInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityRoleListInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityRoleListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "UpdateClaimsAsyncByIdAndInput": { + "uniqueName": "UpdateClaimsAsyncByIdAndInput", + "name": "UpdateClaimsAsync", + "httpMethod": "PUT", + "url": "api/identity/roles/{id}/claims", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.Identity.IdentityRoleClaimDto, Volo.Abp.Identity.Pro.Application.Contracts, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityRoleClaimDto]", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityRoleClaimDto]", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetClaimsAsyncById": { + "uniqueName": "GetClaimsAsyncById", + "name": "GetClaimsAsync", + "httpMethod": "GET", + "url": "api/identity/roles/{id}/claims", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityRoleClaimDto]" + } + }, + "GetAllClaimTypesAsync": { + "uniqueName": "GetAllClaimTypesAsync", + "name": "GetAllClaimTypesAsync", + "httpMethod": "GET", + "url": "api/identity/roles/all-claim-types", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.ClaimTypeDto]" + } + } + } + }, + "Volo.Abp.Identity.IdentitySecurityLogController": { + "controllerName": "IdentitySecurityLog", + "type": "Volo.Abp.Identity.IdentitySecurityLogController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentitySecurityLogAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/security-logs", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentitySecurityLogListInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", + "typeSimple": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "StartTime", + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EndTime", + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ApplicationName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Identity", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Action", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "UserName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ClientId", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CorrelationId", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/security-logs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentitySecurityLogDto", + "typeSimple": "Volo.Abp.Identity.IdentitySecurityLogDto" + } + }, + "GetMyListAsyncByInput": { + "uniqueName": "GetMyListAsyncByInput", + "name": "GetMyListAsync", + "httpMethod": "GET", + "url": "api/identity/security-logs/my", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentitySecurityLogListInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", + "typeSimple": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "StartTime", + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EndTime", + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ApplicationName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Identity", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Action", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "UserName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ClientId", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CorrelationId", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetMyAsyncById": { + "uniqueName": "GetMyAsyncById", + "name": "GetMyAsync", + "httpMethod": "GET", + "url": "api/identity/security-logs/my/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentitySecurityLogDto", + "typeSimple": "Volo.Abp.Identity.IdentitySecurityLogDto" + } + } + } + }, + "Volo.Abp.Identity.IdentitySettingsController": { + "controllerName": "IdentitySettings", + "type": "Volo.Abp.Identity.IdentitySettingsController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentitySettingsAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/settings", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Identity.IdentitySettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentitySettingsDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/settings", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentitySettingsDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentitySettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentitySettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentitySettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentitySettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserController": { + "controllerName": "IdentityUser", + "type": "Volo.Abp.Identity.IdentityUserController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityUsersInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserCreateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetRolesAsyncById": { + "uniqueName": "GetRolesAsyncById", + "name": "GetRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAssignableRolesAsync": { + "uniqueName": "GetAssignableRolesAsync", + "name": "GetAssignableRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/assignable-roles", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAvailableOrganizationUnitsAsync": { + "uniqueName": "GetAvailableOrganizationUnitsAsync", + "name": "GetAvailableOrganizationUnitsAsync", + "httpMethod": "GET", + "url": "api/identity/users/available-organization-units", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAllClaimTypesAsync": { + "uniqueName": "GetAllClaimTypesAsync", + "name": "GetAllClaimTypesAsync", + "httpMethod": "GET", + "url": "api/identity/users/all-claim-types", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.ClaimTypeDto]" + } + }, + "GetClaimsAsyncById": { + "uniqueName": "GetClaimsAsyncById", + "name": "GetClaimsAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/claims", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityUserClaimDto]" + } + }, + "GetOrganizationUnitsAsyncById": { + "uniqueName": "GetOrganizationUnitsAsyncById", + "name": "GetOrganizationUnitsAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/organization-units", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.OrganizationUnitDto]" + } + }, + "UpdateRolesAsyncByIdAndInput": { + "uniqueName": "UpdateRolesAsyncByIdAndInput", + "name": "UpdateRolesAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateRolesDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "UpdateClaimsAsyncByIdAndInput": { + "uniqueName": "UpdateClaimsAsyncByIdAndInput", + "name": "UpdateClaimsAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/claims", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.Identity.IdentityUserClaimDto, Volo.Abp.Identity.Pro.Application.Contracts, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityUserClaimDto]", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityUserClaimDto]", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "LockAsyncByIdAndLockoutDuration": { + "uniqueName": "LockAsyncByIdAndLockoutDuration", + "name": "LockAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/lock/{lockoutDuration}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "lockoutDuration", + "typeAsString": "System.Int32, System.Private.CoreLib", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "lockoutDuration", + "name": "lockoutDuration", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "UnlockAsyncById": { + "uniqueName": "UnlockAsyncById", + "name": "UnlockAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/unlock", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "FindByUsernameAsyncByUsername": { + "uniqueName": "FindByUsernameAsyncByUsername", + "name": "FindByUsernameAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-username/{username}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "username", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "username", + "name": "username", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "FindByEmailAsyncByEmail": { + "uniqueName": "FindByEmailAsyncByEmail", + "name": "FindByEmailAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-email/{email}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "email", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "email", + "name": "email", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "GetTwoFactorEnabledAsyncById": { + "uniqueName": "GetTwoFactorEnabledAsyncById", + "name": "GetTwoFactorEnabledAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/two-factor-enabled", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Boolean", + "typeSimple": "boolean" + } + }, + "SetTwoFactorEnabledAsyncByIdAndEnabled": { + "uniqueName": "SetTwoFactorEnabledAsyncByIdAndEnabled", + "name": "SetTwoFactorEnabledAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/two-factor/{enabled}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "enabled", + "typeAsString": "System.Boolean, System.Private.CoreLib", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "enabled", + "name": "enabled", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "UpdatePasswordAsyncByIdAndInput": { + "uniqueName": "UpdatePasswordAsyncByIdAndInput", + "name": "UpdatePasswordAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/change-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserLookupController": { + "controllerName": "IdentityUserLookup", + "type": "Volo.Abp.Identity.IdentityUserLookupController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserLookupAppService" + } + ], + "actions": { + "FindByIdAsyncById": { + "uniqueName": "FindByIdAsyncById", + "name": "FindByIdAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "FindByUserNameAsyncByUserName": { + "uniqueName": "FindByUserNameAsyncByUserName", + "name": "FindByUserNameAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "userName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "userName", + "name": "userName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "SearchAsyncByInput": { + "uniqueName": "SearchAsyncByInput", + "name": "SearchAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/search", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupSearchInputDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupSearchInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupSearchInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetCountAsyncByInput": { + "uniqueName": "GetCountAsyncByInput", + "name": "GetCountAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/count", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupCountInputDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupCountInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupCountInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Int64", + "typeSimple": "number" + } + } + } + }, + "Volo.Abp.Identity.OrganizationUnitController": { + "controllerName": "OrganizationUnit", + "type": "Volo.Abp.Identity.OrganizationUnitController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IOrganizationUnitAppService" + } + ], + "actions": { + "AddRolesAsyncByIdAndInput": { + "uniqueName": "AddRolesAsyncByIdAndInput", + "name": "AddRolesAsync", + "httpMethod": "PUT", + "url": "api/identity/organization-units/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitRoleInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitRoleInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitRoleInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.OrganizationUnitRoleInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitRoleInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "AddMembersAsyncByIdAndInput": { + "uniqueName": "AddMembersAsyncByIdAndInput", + "name": "AddMembersAsync", + "httpMethod": "PUT", + "url": "api/identity/organization-units/{id}/members", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitUserInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitUserInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitUserInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.OrganizationUnitUserInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitUserInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/organization-units", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitCreateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitCreateDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.OrganizationUnitCreateDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/organization-units", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetOrganizationUnitInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetOrganizationUnitInput", + "typeSimple": "Volo.Abp.Identity.GetOrganizationUnitInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetListAllAsync": { + "uniqueName": "GetListAllAsync", + "name": "GetListAllAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetRolesAsyncByIdAndInput": { + "uniqueName": "GetRolesAsyncByIdAndInput", + "name": "GetRolesAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto, Volo.Abp.Ddd.Application.Contracts", + "type": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetMembersAsyncByIdAndInput": { + "uniqueName": "GetMembersAsyncByIdAndInput", + "name": "GetMembersAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/{id}/members", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityUsersInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "MoveAsyncByIdAndInput": { + "uniqueName": "MoveAsyncByIdAndInput", + "name": "MoveAsync", + "httpMethod": "PUT", + "url": "api/identity/organization-units/{id}/move", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitMoveInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitMoveInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitMoveInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.OrganizationUnitMoveInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitMoveInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetAvailableUsersAsyncByInput": { + "uniqueName": "GetAvailableUsersAsyncByInput", + "name": "GetAvailableUsersAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/available-users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetAvailableUsersInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetAvailableUsersInput", + "typeSimple": "Volo.Abp.Identity.GetAvailableUsersInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAvailableRolesAsyncByInput": { + "uniqueName": "GetAvailableRolesAsyncByInput", + "name": "GetAvailableRolesAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/available-roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetAvailableRolesInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetAvailableRolesInput", + "typeSimple": "Volo.Abp.Identity.GetAvailableRolesInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/organization-units/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitUpdateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitUpdateDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.OrganizationUnitUpdateDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto" + } + }, + "RemoveMemberAsyncByIdAndMemberId": { + "uniqueName": "RemoveMemberAsyncByIdAndMemberId", + "name": "RemoveMemberAsync", + "httpMethod": "DELETE", + "url": "api/identity/organization-units/{id}/members/{memberId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "memberId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "memberId", + "name": "memberId", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "RemoveRoleAsyncByIdAndRoleId": { + "uniqueName": "RemoveRoleAsyncByIdAndRoleId", + "name": "RemoveRoleAsync", + "httpMethod": "DELETE", + "url": "api/identity/organization-units/{id}/roles/{roleId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "roleId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "roleId", + "name": "roleId", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.ProfileController": { + "controllerName": "Profile", + "type": "Volo.Abp.Identity.ProfileController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IProfileAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UpdateProfileDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "ChangePasswordAsyncByInput": { + "uniqueName": "ChangePasswordAsyncByInput", + "name": "ChangePasswordAsync", + "httpMethod": "POST", + "url": "api/identity/my-profile/change-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.ChangePasswordInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetTwoFactorEnabledAsync": { + "uniqueName": "GetTwoFactorEnabledAsync", + "name": "GetTwoFactorEnabledAsync", + "httpMethod": "GET", + "url": "api/identity/my-profile/two-factor-enabled", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Boolean", + "typeSimple": "boolean" + } + }, + "SetTwoFactorEnabledAsyncByEnabled": { + "uniqueName": "SetTwoFactorEnabledAsyncByEnabled", + "name": "SetTwoFactorEnabledAsync", + "httpMethod": "POST", + "url": "api/identity/my-profile/set-two-factor-enabled", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "enabled", + "typeAsString": "System.Boolean, System.Private.CoreLib", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "enabled", + "name": "enabled", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "account": { + "rootPath": "account", + "remoteServiceName": "AbpAccountPublic", + "controllers": { + "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.AccountController", + "interfaces": [], + "actions": { + "LoginByLogin": { + "uniqueName": "LoginByLogin", + "name": "Login", + "httpMethod": "POST", + "url": "api/account/login", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Pro.Public.Web", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + }, + "Logout": { + "uniqueName": "Logout", + "name": "Logout", + "httpMethod": "GET", + "url": "api/account/logout", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "CheckPasswordByLogin": { + "uniqueName": "CheckPasswordByLogin", + "name": "CheckPassword", + "httpMethod": "POST", + "url": "api/account/checkPassword", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Pro.Public.Web", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + } + } + }, + "Volo.Abp.Account.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.AccountController", + "interfaces": [ + { + "type": "Volo.Abp.Account.IAccountAppService" + } + ], + "actions": { + "RegisterAsyncByInput": { + "uniqueName": "RegisterAsyncByInput", + "name": "RegisterAsync", + "httpMethod": "POST", + "url": "api/account/register", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.RegisterDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "SendPasswordResetCodeAsyncByInput": { + "uniqueName": "SendPasswordResetCodeAsyncByInput", + "name": "SendPasswordResetCodeAsync", + "httpMethod": "POST", + "url": "api/account/send-password-reset-code", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendPasswordResetCodeDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "ResetPasswordAsyncByInput": { + "uniqueName": "ResetPasswordAsyncByInput", + "name": "ResetPasswordAsync", + "httpMethod": "POST", + "url": "api/account/reset-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ResetPasswordDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "SendPhoneNumberConfirmationTokenAsync": { + "uniqueName": "SendPhoneNumberConfirmationTokenAsync", + "name": "SendPhoneNumberConfirmationTokenAsync", + "httpMethod": "POST", + "url": "api/account/send-phone-number-confirmation-token", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "SendEmailConfirmationTokenAsyncByInput": { + "uniqueName": "SendEmailConfirmationTokenAsyncByInput", + "name": "SendEmailConfirmationTokenAsync", + "httpMethod": "POST", + "url": "api/account/send-email-confirmation-token", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendEmailConfirmationTokenDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.SendEmailConfirmationTokenDto", + "typeSimple": "Volo.Abp.Account.SendEmailConfirmationTokenDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.SendEmailConfirmationTokenDto", + "typeSimple": "Volo.Abp.Account.SendEmailConfirmationTokenDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "ConfirmPhoneNumberAsyncByInput": { + "uniqueName": "ConfirmPhoneNumberAsyncByInput", + "name": "ConfirmPhoneNumberAsync", + "httpMethod": "POST", + "url": "api/account/confirm-phone-number", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ConfirmPhoneNumberInput, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ConfirmPhoneNumberInput", + "typeSimple": "Volo.Abp.Account.ConfirmPhoneNumberInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.ConfirmPhoneNumberInput", + "typeSimple": "Volo.Abp.Account.ConfirmPhoneNumberInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "ConfirmEmailAsyncByInput": { + "uniqueName": "ConfirmEmailAsyncByInput", + "name": "ConfirmEmailAsync", + "httpMethod": "POST", + "url": "api/account/confirm-email", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ConfirmEmailInput, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ConfirmEmailInput", + "typeSimple": "Volo.Abp.Account.ConfirmEmailInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.ConfirmEmailInput", + "typeSimple": "Volo.Abp.Account.ConfirmEmailInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "SetProfilePictureAsyncByInput": { + "uniqueName": "SetProfilePictureAsyncByInput", + "name": "SetProfilePictureAsync", + "httpMethod": "POST", + "url": "api/account/profile-picture", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ProfilePictureInput, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ProfilePictureInput", + "typeSimple": "Volo.Abp.Account.ProfilePictureInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.ProfilePictureInput", + "typeSimple": "Volo.Abp.Account.ProfilePictureInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetProfilePictureAsyncById": { + "uniqueName": "GetProfilePictureAsyncById", + "name": "GetProfilePictureAsync", + "httpMethod": "GET", + "url": "api/account/profile-picture/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.ProfilePictureSourceDto", + "typeSimple": "Volo.Abp.Account.ProfilePictureSourceDto" + } + }, + "UploadProfilePictureFileAsyncByImage": { + "uniqueName": "UploadProfilePictureFileAsyncByImage", + "name": "UploadProfilePictureFileAsync", + "httpMethod": "POST", + "url": "api/account/profile-picture-file", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "image", + "typeAsString": "Microsoft.AspNetCore.Http.IFormFile, Microsoft.AspNetCore.Http.Features", + "type": "Microsoft.AspNetCore.Http.IFormFile", + "typeSimple": "Microsoft.AspNetCore.Http.IFormFile", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "image", + "name": "image", + "type": "Microsoft.AspNetCore.Http.IFormFile", + "typeSimple": "Microsoft.AspNetCore.Http.IFormFile", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "FormFile", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Microsoft.AspNetCore.Mvc.IActionResult", + "typeSimple": "Microsoft.AspNetCore.Mvc.IActionResult" + } + }, + "GetProfilePictureFileAsyncById": { + "uniqueName": "GetProfilePictureFileAsyncById", + "name": "GetProfilePictureFileAsync", + "httpMethod": "GET", + "url": "api/account/profile-picture-file/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Microsoft.AspNetCore.Mvc.IActionResult", + "typeSimple": "Microsoft.AspNetCore.Mvc.IActionResult" + } + } + } + } + } + }, + "abp": { + "rootPath": "abp", + "remoteServiceName": "abp", + "controllers": { + "Pages.Abp.MultiTenancy.AbpTenantController": { + "controllerName": "AbpTenant", + "type": "Pages.Abp.MultiTenancy.AbpTenantController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" + } + ], + "actions": { + "FindTenantByNameAsyncByName": { + "uniqueName": "FindTenantByNameAsyncByName", + "name": "FindTenantByNameAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-name/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "name", + "name": "name", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + }, + "FindTenantByIdAsyncById": { + "uniqueName": "FindTenantByIdAsyncById", + "name": "FindTenantByIdAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-id/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { + "controllerName": "AbpApplicationConfiguration", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/abp/application-configuration", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { + "controllerName": "AbpApiDefinition", + "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", + "interfaces": [], + "actions": { + "GetByModel": { + "uniqueName": "GetByModel", + "name": "Get", + "httpMethod": "GET", + "url": "api/abp/api-definition", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "model", + "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "model", + "name": "IncludeTypes", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "model" + } + ], + "returnValue": { + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" + } + } + } + } + } + } + }, + "types": { + "Volo.Abp.Account.AccountSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsSelfRegistrationEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "EnableLocalLogin", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Account.AccountLdapSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EnableLdapLogin", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "LdapServerHost", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LdapServerPort", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LdapBaseDc", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LdapUserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LdapPassword", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.AccountTwoFactorSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TwoFactorBehaviour", + "type": "Volo.Abp.Identity.Features.IdentityTwoFactorBehaviour", + "typeSimple": "Volo.Abp.Identity.Features.IdentityTwoFactorBehaviour" + }, + { + "name": "IsRememberBrowserEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "UsersCanChange", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.Features.IdentityTwoFactorBehaviour": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Optional", + "Disabled", + "Forced" + ], + "enumValues": [ + 0, + 1, + 2 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserNameOrEmailAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RememberMe", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "TenanId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Result", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.LoginResultType", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.LoginResultType" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.LoginResultType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Success", + "InvalidUserNameOrPassword", + "NotAllowed", + "LockedOut", + "RequiresTwoFactor" + ], + "enumValues": [ + 1, + 2, + 3, + 4, + 5 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Account.RegisterDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "AppName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ReturnUrl", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ReturnUrlHash", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "SupportTwoFactor", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "LockoutEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsLockedOut", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleEntityDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TKey" + ], + "properties": [ + { + "name": "Id", + "type": "TKey", + "typeSimple": "TKey" + } + ] + }, + "Volo.Abp.ObjectExtending.ExtensibleObject": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ExtraProperties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.Account.SendPasswordResetCodeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "AppName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ReturnUrl", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ReturnUrlHash", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.ResetPasswordDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "ResetToken", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.SendEmailConfirmationTokenDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AppName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ReturnUrl", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ReturnUrlHash", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.ConfirmPhoneNumberInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Token", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.ConfirmEmailInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "Token", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.ProfilePictureInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "Volo.Abp.Account.ProfilePictureType", + "typeSimple": "Volo.Abp.Account.ProfilePictureType" + }, + { + "name": "ImageContent", + "type": "[System.Byte]", + "typeSimple": "[number]" + } + ] + }, + "Volo.Abp.Account.ProfilePictureType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "None", + "Gravatar", + "Image" + ], + "enumValues": [ + 0, + 1, + 2 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Account.ProfilePictureSourceDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "Volo.Abp.Account.ProfilePictureType", + "typeSimple": "Volo.Abp.Account.ProfilePictureType" + }, + { + "name": "Source", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FileContent", + "type": "[System.Byte]", + "typeSimple": "[number]" + } + ] + }, + "Microsoft.AspNetCore.Http.IFormFile": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ContentType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ContentDisposition", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Headers", + "type": "{System.String:[System.String]}", + "typeSimple": "{string:[string]}" + }, + { + "name": "Length", + "type": "System.Int64", + "typeSimple": "number" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FileName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Microsoft.AspNetCore.Mvc.IActionResult": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Success", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AuditLogging.GetAuditLogListDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Url", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ApplicationName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "CorrelationId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "HttpMethod", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "HttpStatusCode", + "type": "System.Net.HttpStatusCode?", + "typeSimple": "System.Net.HttpStatusCode?" + }, + { + "name": "MaxExecutionDuration", + "type": "System.Int32?", + "typeSimple": "number?" + }, + { + "name": "MinExecutionDuration", + "type": "System.Int32?", + "typeSimple": "number?" + }, + { + "name": "HasException", + "type": "System.Boolean?", + "typeSimple": "boolean?" + } + ] + }, + "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Sorting", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.LimitedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.Application.Dtos.LimitedResultRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DefaultMaxResultCount", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "MaxMaxResultCount", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number" + } + ] + }, + "System.Nullable": { + "baseType": "System.ValueType", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "HasValue", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Value", + "type": "T", + "typeSimple": "T" + } + ] + }, + "System.Net.HttpStatusCode": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Continue", + "SwitchingProtocols", + "Processing", + "EarlyHints", + "OK", + "Created", + "Accepted", + "NonAuthoritativeInformation", + "NoContent", + "ResetContent", + "PartialContent", + "MultiStatus", + "AlreadyReported", + "IMUsed", + "MultipleChoices", + "Ambiguous", + "MovedPermanently", + "Moved", + "Found", + "Redirect", + "SeeOther", + "RedirectMethod", + "NotModified", + "UseProxy", + "Unused", + "TemporaryRedirect", + "RedirectKeepVerb", + "PermanentRedirect", + "BadRequest", + "Unauthorized", + "PaymentRequired", + "Forbidden", + "NotFound", + "MethodNotAllowed", + "NotAcceptable", + "ProxyAuthenticationRequired", + "RequestTimeout", + "Conflict", + "Gone", + "LengthRequired", + "PreconditionFailed", + "RequestEntityTooLarge", + "RequestUriTooLong", + "UnsupportedMediaType", + "RequestedRangeNotSatisfiable", + "ExpectationFailed", + "MisdirectedRequest", + "UnprocessableEntity", + "Locked", + "FailedDependency", + "UpgradeRequired", + "PreconditionRequired", + "TooManyRequests", + "RequestHeaderFieldsTooLarge", + "UnavailableForLegalReasons", + "InternalServerError", + "NotImplemented", + "BadGateway", + "ServiceUnavailable", + "GatewayTimeout", + "HttpVersionNotSupported", + "VariantAlsoNegotiates", + "InsufficientStorage", + "LoopDetected", + "NotExtended", + "NetworkAuthenticationRequired" + ], + "enumValues": [ + 100, + 101, + 102, + 103, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 226, + 300, + 300, + 301, + 301, + 302, + 302, + 303, + 303, + 304, + 305, + 306, + 307, + 307, + 308, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 421, + 422, + 423, + 424, + 426, + 428, + 429, + 431, + 451, + 500, + 501, + 502, + 503, + 504, + 505, + 506, + 507, + 508, + 510, + 511 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Application.Dtos.PagedResultDto": { + "baseType": "Volo.Abp.Application.Dtos.ListResultDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "TotalCount", + "type": "System.Int64", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.Application.Dtos.ListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Items", + "type": "[T]", + "typeSimple": "[T]" + } + ] + }, + "Volo.Abp.AuditLogging.AuditLogDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "ImpersonatorUserId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "ImpersonatorTenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "ExecutionTime", + "type": "System.DateTime", + "typeSimple": "string" + }, + { + "name": "ExecutionDuration", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "ClientIpAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ClientName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "BrowserInfo", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "HttpMethod", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Url", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Exceptions", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Comments", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "HttpStatusCode", + "type": "System.Int32?", + "typeSimple": "number?" + }, + { + "name": "ApplicationName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "CorrelationId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EntityChanges", + "type": "[Volo.Abp.AuditLogging.EntityChangeDto]", + "typeSimple": "[Volo.Abp.AuditLogging.EntityChangeDto]" + }, + { + "name": "Actions", + "type": "[Volo.Abp.AuditLogging.AuditLogActionDto]", + "typeSimple": "[Volo.Abp.AuditLogging.AuditLogActionDto]" + } + ] + }, + "Volo.Abp.AuditLogging.EntityChangeDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AuditLogId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "ChangeTime", + "type": "System.DateTime", + "typeSimple": "string" + }, + { + "name": "ChangeType", + "type": "Volo.Abp.Auditing.EntityChangeType", + "typeSimple": "Volo.Abp.Auditing.EntityChangeType" + }, + { + "name": "EntityId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EntityTypeFullName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PropertyChanges", + "type": "[Volo.Abp.AuditLogging.EntityPropertyChangeDto]", + "typeSimple": "[Volo.Abp.AuditLogging.EntityPropertyChangeDto]" + } + ] + }, + "Volo.Abp.Auditing.EntityChangeType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Created", + "Updated", + "Deleted" + ], + "enumValues": [ + 0, + 1, + 2 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.AuditLogging.EntityPropertyChangeDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "EntityChangeId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "NewValue", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "OriginalValue", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PropertyName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PropertyTypeFullName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.EntityDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TKey" + ], + "properties": [ + { + "name": "Id", + "type": "TKey", + "typeSimple": "TKey" + } + ] + }, + "Volo.Abp.Application.Dtos.EntityDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.AuditLogging.AuditLogActionDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "AuditLogId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "ServiceName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "MethodName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Parameters", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ExecutionTime", + "type": "System.DateTime", + "typeSimple": "string" + }, + { + "name": "ExecutionDuration", + "type": "System.Int32", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.AuditLogging.GetErrorRateFilter": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "StartDate", + "type": "System.DateTime", + "typeSimple": "string" + }, + { + "name": "EndDate", + "type": "System.DateTime", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AuditLogging.GetErrorRateOutput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Data", + "type": "{System.String:System.Int64}", + "typeSimple": "{string:number}" + } + ] + }, + "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "StartDate", + "type": "System.DateTime", + "typeSimple": "string" + }, + { + "name": "EndDate", + "type": "System.DateTime", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayOutput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Data", + "type": "{System.String:System.Double}", + "typeSimple": "{string:number}" + } + ] + }, + "Volo.Abp.AuditLogging.GetEntityChangesDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AuditLogId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "EntityChangeType", + "type": "Volo.Abp.Auditing.EntityChangeType?", + "typeSimple": "Volo.Abp.Auditing.EntityChangeType?" + }, + { + "name": "EntityId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EntityTypeFullName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "StartDate", + "type": "System.DateTime?", + "typeSimple": "string?" + }, + { + "name": "EndDate", + "type": "System.DateTime?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.AuditLogging.EntityChangeFilter": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EntityTypeFullName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AuditLogging.EntityChangeWithUsernameDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityChange", + "type": "Volo.Abp.AuditLogging.EntityChangeDto", + "typeSimple": "Volo.Abp.AuditLogging.EntityChangeDto" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.GetIdentityClaimTypesInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.ClaimTypeDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Required", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsStatic", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Regex", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RegexDescription", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ValueType", + "type": "Volo.Abp.Identity.IdentityClaimValueType", + "typeSimple": "Volo.Abp.Identity.IdentityClaimValueType" + }, + { + "name": "ValueTypeAsString", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityClaimValueType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "String", + "Int", + "Boolean", + "DateTime" + ], + "enumValues": [ + 0, + 1, + 2, + 3 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Identity.CreateClaimTypeDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Required", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Regex", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RegexDescription", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ValueType", + "type": "Volo.Abp.Identity.IdentityClaimValueType", + "typeSimple": "Volo.Abp.Identity.IdentityClaimValueType" + } + ] + }, + "Volo.Abp.Identity.UpdateClaimTypeDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Required", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Regex", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RegexDescription", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ValueType", + "type": "Volo.Abp.Identity.IdentityClaimValueType", + "typeSimple": "Volo.Abp.Identity.IdentityClaimValueType" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsDefault", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsStatic", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsPublic", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsDefault", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsPublic", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.GetIdentityRoleListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleClaimDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "ClaimType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ClaimValue", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.GetIdentitySecurityLogListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "StartTime", + "type": "System.DateTime?", + "typeSimple": "string?" + }, + { + "name": "EndTime", + "type": "System.DateTime?", + "typeSimple": "string?" + }, + { + "name": "ApplicationName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Identity", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Action", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ClientId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "CorrelationId", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentitySecurityLogDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "ApplicationName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Identity", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Action", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "UserId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TenantName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ClientId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "CorrelationId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ClientIpAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "BrowserInfo", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "CreationTime", + "type": "System.DateTime", + "typeSimple": "string" + }, + { + "name": "ExtraProperties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.Identity.IdentitySettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "type": "Volo.Abp.Identity.IdentityPasswordSettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentityPasswordSettingsDto" + }, + { + "name": "Lockout", + "type": "Volo.Abp.Identity.IdentityLockoutSettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentityLockoutSettingsDto" + }, + { + "name": "SignIn", + "type": "Volo.Abp.Identity.IdentitySignInSettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentitySignInSettingsDto" + }, + { + "name": "User", + "type": "Volo.Abp.Identity.IdentityUserSettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserSettingsDto" + } + ] + }, + "Volo.Abp.Identity.IdentityPasswordSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RequiredLength", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "RequiredUniqueChars", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "RequireNonAlphanumeric", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RequireLowercase", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RequireUppercase", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RequireDigit", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.IdentityLockoutSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AllowedForNewUsers", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "LockoutDuration", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "MaxFailedAccessAttempts", + "type": "System.Int32", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.Identity.IdentitySignInSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RequireConfirmedEmail", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "EnablePhoneNumberConfirmation", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RequireConfirmedPhoneNumber", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.IdentityUserSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsUserNameUpdateEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsEmailUpdateEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.GetIdentityUsersInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LockoutEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RoleNames", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "OrganizationUnitIds", + "type": "[System.Guid]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitWithDetailsDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ParentId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "Code", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Roles", + "type": "[Volo.Abp.Identity.IdentityRoleDto]", + "typeSimple": "[Volo.Abp.Identity.IdentityRoleDto]" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "IsDeleted", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DeleterId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "DeletionTime", + "type": "System.DateTime?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "LastModificationTime", + "type": "System.DateTime?", + "typeSimple": "string?" + }, + { + "name": "LastModifierId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "CreationTime", + "type": "System.DateTime", + "typeSimple": "string" + }, + { + "name": "CreatorId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Identity.IdentityUserClaimDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "ClaimType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ClaimValue", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ParentId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "Code", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Roles", + "type": "[Volo.Abp.Identity.OrganizationUnitRoleDto]", + "typeSimple": "[Volo.Abp.Identity.OrganizationUnitRoleDto]" + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitRoleDto": { + "baseType": "Volo.Abp.Application.Dtos.CreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OrganizationUnitId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "RoleId", + "type": "System.Guid", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.CreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CreationTime", + "type": "System.DateTime", + "typeSimple": "string" + }, + { + "name": "CreatorId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateRolesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleNames", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdatePasswordInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NewPassword", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Users.UserData": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.UserLookupSearchInputDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Sorting", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.UserLookupCountInputDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitRoleInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleIds", + "type": "[System.Guid]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitUserInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserIds", + "type": "[System.Guid]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitCreateDto": { + "baseType": "Volo.Abp.Identity.OrganizationUnitCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ParentId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.GetOrganizationUnitInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitMoveInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NewParentId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Identity.GetAvailableUsersInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Id", + "type": "System.Guid", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.GetAvailableRolesInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Id", + "type": "System.Guid", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.OrganizationUnitUpdateDto": { + "baseType": "Volo.Abp.Identity.OrganizationUnitCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.Identity.ProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsExternal", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "HasPassword", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.UpdateProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.ChangePasswordInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CurrentPassword", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "NewPassword", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Enabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "UserClaims", + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceClaimClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceClaimClaimDto]" + }, + { + "name": "Properties", + "type": "{System.String:System.String}", + "typeSimple": "{string:string}" + }, + { + "name": "Scopes", + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiScopeDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiScopeDto]" + }, + { + "name": "Secrets", + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiSecretDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiSecretDto]" + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceClaimClaimDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ApiResourceId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiScopeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ApiResourceId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Required", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Emphasize", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "ShowInDiscoveryDocument", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "UserClaims", + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiScopeClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiScopeClaimDto]" + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiScopeClaimDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ApiResourceId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiSecretDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ApiResourceId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Expiration", + "type": "System.DateTime?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Claims", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Enabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Claims", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "Scopes", + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiScopeDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiScopeDto]" + }, + { + "name": "Secrets", + "type": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiSecretDto]", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiSecretDto]" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ClientName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ClientUri", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LogoUri", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Enabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "ProtocolType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RequireClientSecret", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RequireConsent", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AllowRememberConsent", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AlwaysIncludeUserClaimsInIdToken", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RequirePkce", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AllowPlainTextPkce", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AllowAccessTokensViaBrowser", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "FrontChannelLogoutUri", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FrontChannelLogoutSessionRequired", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "BackChannelLogoutUri", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "BackChannelLogoutSessionRequired", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AllowOfflineAccess", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IdentityTokenLifetime", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "AccessTokenLifetime", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "AuthorizationCodeLifetime", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "ConsentLifetime", + "type": "System.Int32?", + "typeSimple": "number?" + }, + { + "name": "AbsoluteRefreshTokenLifetime", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "SlidingRefreshTokenLifetime", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "RefreshTokenUsage", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "UpdateAccessTokenClaimsOnRefresh", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RefreshTokenExpiration", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "AccessTokenType", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "EnableLocalLogin", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IncludeJwtId", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AlwaysSendClientClaims", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "ClientClaimsPrefix", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PairWiseSubjectSalt", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "UserSsoLifetime", + "type": "System.Int32?", + "typeSimple": "number?" + }, + { + "name": "UserCodeType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DeviceCodeLifetime", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "ClientSecrets", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto]" + }, + { + "name": "AllowedScopes", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientScopeDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientScopeDto]" + }, + { + "name": "Claims", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientClaimDto]" + }, + { + "name": "AllowedGrantTypes", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientGrantTypeDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientGrantTypeDto]" + }, + { + "name": "IdentityProviderRestrictions", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientIdentityProviderRestrictionDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientIdentityProviderRestrictionDto]" + }, + { + "name": "Properties", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientPropertyDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientPropertyDto]" + }, + { + "name": "AllowedCorsOrigins", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientCorsOriginDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientCorsOriginDto]" + }, + { + "name": "RedirectUris", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientRedirectUriDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientRedirectUriDto]" + }, + { + "name": "PostLogoutRedirectUris", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientPostLogoutRedirectUriDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientPostLogoutRedirectUriDto]" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Expiration", + "type": "System.DateTime?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientScopeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "Scope", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientClaimDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientGrantTypeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "GrantType", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientIdentityProviderRestrictionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "Provider", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientPropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "Key", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientCorsOriginDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "Origin", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientRedirectUriDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "RedirectUri", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.ClientPostLogoutRedirectUriDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "PostLogoutRedirectUri", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ClientName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ClientUri", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LogoUri", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RequireConsent", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "CallbackUrl", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LogoutUrl", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Secrets", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto]" + }, + { + "name": "Scopes", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ClientName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ClientUri", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LogoUri", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Enabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RequireConsent", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AllowOfflineAccess", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AllowRememberConsent", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RequirePkce", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RequireClientSecret", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AccessTokenLifetime", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "ConsentLifetime", + "type": "System.Int32?", + "typeSimple": "number?" + }, + { + "name": "AccessTokenType", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "EnableLocalLogin", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "FrontChannelLogoutUri", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FrontChannelLogoutSessionRequired", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "BackChannelLogoutUri", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "BackChannelLogoutSessionRequired", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IncludeJwtId", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AlwaysSendClientClaims", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PairWiseSubjectSalt", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "UserSsoLifetime", + "type": "System.Int32?", + "typeSimple": "number?" + }, + { + "name": "UserCodeType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DeviceCodeLifetime", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "ClientSecrets", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientSecretDto]" + }, + { + "name": "Claims", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientClaimDto]" + }, + { + "name": "Properties", + "type": "[Volo.Abp.IdentityServer.Client.Dtos.ClientPropertyDto]", + "typeSimple": "[Volo.Abp.IdentityServer.Client.Dtos.ClientPropertyDto]" + }, + { + "name": "AllowedGrantTypes", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "IdentityProviderRestrictions", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "Scopes", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "AllowedCorsOrigins", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "RedirectUris", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "PostLogoutRedirectUris", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Enabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Required", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Emphasize", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "ShowInDiscoveryDocument", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "UserClaims", + "type": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityClaimDto]", + "typeSimple": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityClaimDto]" + }, + { + "name": "Properties", + "type": "{System.String:System.String}", + "typeSimple": "{string:string}" + } + ] + }, + "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityClaimDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IdentityResourceId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Enabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Required", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Emphasize", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "ShowInDiscoveryDocument", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Claims", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Enabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Required", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Emphasize", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "ShowInDiscoveryDocument", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Claims", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.IdentityServer.ClaimType.Dtos.IdentityClaimTypeDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.LanguageDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "UiCultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FlagIcon", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsDefaultLanguage", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ResourceName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "BaseCultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TargetCultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "GetOnlyEmptyValues", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "UiCultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FlagIcon", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FlagIcon", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.LanguageResourceDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.CultureInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.LanguageManagement.Dto.LanguageTextDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ResourceName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "BaseCultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "BaseValue", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.LeptonTheme.Management.LeptonThemeSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BoxedLayout", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "MenuPlacement", + "type": "Volo.Abp.LeptonTheme.Management.MenuPlacement", + "typeSimple": "Volo.Abp.LeptonTheme.Management.MenuPlacement" + }, + { + "name": "MenuStatus", + "type": "Volo.Abp.LeptonTheme.Management.MenuStatus", + "typeSimple": "Volo.Abp.LeptonTheme.Management.MenuStatus" + }, + { + "name": "Style", + "type": "Volo.Abp.LeptonTheme.Management.LeptonStyle", + "typeSimple": "Volo.Abp.LeptonTheme.Management.LeptonStyle" + } + ] + }, + "Volo.Abp.LeptonTheme.Management.MenuPlacement": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Left", + "Top" + ], + "enumValues": [ + 0, + 1 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.LeptonTheme.Management.MenuStatus": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "AlwaysOpened", + "OpenOnHover" + ], + "enumValues": [ + 0, + 1 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.LeptonTheme.Management.LeptonStyle": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Style1", + "Style2", + "Style3", + "Style4", + "Style5", + "Style6" + ], + "enumValues": [ + 0, + 1, + 2, + 3, + 4, + 5 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BoxedLayout", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "MenuPlacement", + "type": "Volo.Abp.LeptonTheme.Management.MenuPlacement", + "typeSimple": "Volo.Abp.LeptonTheme.Management.MenuPlacement" + }, + { + "name": "MenuStatus", + "type": "Volo.Abp.LeptonTheme.Management.MenuStatus", + "typeSimple": "Volo.Abp.LeptonTheme.Management.MenuStatus" + }, + { + "name": "Style", + "type": "Volo.Abp.LeptonTheme.Management.LeptonStyle", + "typeSimple": "Volo.Abp.LeptonTheme.Management.LeptonStyle" + } + ] + }, + "Volo.Abp.PermissionManagement.GetPermissionListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityDisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Groups", + "type": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGroupDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Permissions", + "type": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGrantInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ParentName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsGranted", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AllowedProviders", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "GrantedProviders", + "type": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.ProviderInfoDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.ProviderInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ProviderName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ProviderKey", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Permissions", + "type": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsGranted", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TemplateName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Content", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TemplateName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TemplateName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Content", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "FilterText", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsLayout", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Layout", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsInlineLocalized", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DefaultCultureName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Saas.Host.Dtos.EditionDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Saas.Host.Dtos.GetEditionsInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Saas.Host.Dtos.EditionCreateDto": { + "baseType": "Volo.Saas.Host.Dtos.EditionCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Saas.Host.Dtos.EditionCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Saas.Host.Dtos.EditionUpdateDto": { + "baseType": "Volo.Saas.Host.Dtos.EditionCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Saas.Host.GetEditionUsageStatisticsResult": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Data", + "type": "{System.String:System.Int32}", + "typeSimple": "{string:number}" + } + ] + }, + "Volo.Saas.Host.Dtos.SaasTenantDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EditionId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "EditionName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Saas.Host.Dtos.GetTenantsInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "GetEditionNames", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Saas.Host.Dtos.SaasTenantCreateDto": { + "baseType": "Volo.Saas.Host.Dtos.SaasTenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AdminEmailAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "AdminPassword", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Saas.Host.Dtos.SaasTenantCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EditionId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Saas.Host.Dtos.SaasTenantUpdateDto": { + "baseType": "Volo.Saas.Host.Dtos.SaasTenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.FeatureManagement.GetFeatureListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Groups", + "type": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureGroupDto]" + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Features", + "type": "[Volo.Abp.FeatureManagement.FeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureDto]" + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Provider", + "type": "Volo.Abp.FeatureManagement.FeatureProviderDto", + "typeSimple": "Volo.Abp.FeatureManagement.FeatureProviderDto" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ValueType", + "type": "Volo.Abp.Validation.StringValues.IStringValueType", + "typeSimple": "Volo.Abp.Validation.StringValues.IStringValueType" + }, + { + "name": "Depth", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "ParentName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureProviderDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Key", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Validation.StringValues.IStringValueType": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Item", + "type": "System.Object", + "typeSimple": "object" + }, + { + "name": "Properties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + }, + { + "name": "Validator", + "type": "Volo.Abp.Validation.StringValues.IValueValidator", + "typeSimple": "Volo.Abp.Validation.StringValues.IValueValidator" + } + ] + }, + "Volo.Abp.Validation.StringValues.IValueValidator": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Item", + "type": "System.Object", + "typeSimple": "object" + }, + { + "name": "Properties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeaturesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Features", + "type": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]" + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Localization", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto" + }, + { + "name": "Auth", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto" + }, + { + "name": "Setting", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto" + }, + { + "name": "CurrentUser", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto" + }, + { + "name": "Features", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto" + }, + { + "name": "MultiTenancy", + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto" + }, + { + "name": "CurrentTenant", + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto" + }, + { + "name": "Timing", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto" + }, + { + "name": "Clock", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto" + }, + { + "name": "ObjectExtensions", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:{System.String:System.String}}", + "typeSimple": "{string:{string:string}}" + }, + { + "name": "Languages", + "type": "[Volo.Abp.Localization.LanguageInfo]", + "typeSimple": "[Volo.Abp.Localization.LanguageInfo]" + }, + { + "name": "CurrentCulture", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto" + }, + { + "name": "DefaultResourceName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LanguagesMap", + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}" + }, + { + "name": "LanguageFilesMap", + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}" + } + ] + }, + "Volo.Abp.Localization.LanguageInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "UiCultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FlagIcon", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EnglishName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ThreeLetterIsoLanguageName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TwoLetterIsoLanguageName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsRightToLeft", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "NativeName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DateTimeFormat", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CalendarAlgorithmType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DateTimeFormatLong", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ShortDatePattern", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FullDateTimePattern", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DateSeparator", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ShortTimePattern", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LongTimePattern", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.NameValue": { + "baseType": "Volo.Abp.NameValue", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.NameValue": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "T", + "typeSimple": "T" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Policies", + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}" + }, + { + "name": "GrantedPolicies", + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:System.String}", + "typeSimple": "{string:string}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAuthenticated", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Id", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "SurName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailVerified", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberVerified", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Roles", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:System.String}", + "typeSimple": "{string:string}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZone", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Iana", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone" + }, + { + "name": "Windows", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneId", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Kind", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}" + }, + { + "name": "Enums", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Entities", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}" + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Properties", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}" + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto" + }, + { + "name": "Api", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto" + }, + { + "name": "Ui", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto" + }, + { + "name": "Attributes", + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]" + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Resource", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnGet", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto" + }, + { + "name": "OnCreate", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto" + }, + { + "name": "OnUpdate", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnTable", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto" + }, + { + "name": "OnCreateForm", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto" + }, + { + "name": "OnEditForm", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Config", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Fields", + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]" + }, + { + "name": "LocalizationResource", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.Object", + "typeSimple": "object" + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IncludeTypes", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "type": "{System.String:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}" + }, + { + "name": "Types", + "type": "{System.String:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}" + } + ] + }, + "Volo.Abp.Http.Modeling.ModuleApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RootPath", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RemoteServiceName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Controllers", + "type": "{System.String:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}" + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ControllerName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Interfaces", + "type": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]" + }, + { + "name": "Actions", + "type": "{System.String:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}" + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Http.Modeling.ActionApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UniqueName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "HttpMethod", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Url", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "SupportedVersions", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "ParametersOnMethod", + "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]" + }, + { + "name": "Parameters", + "type": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]" + }, + { + "name": "ReturnValue", + "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel" + } + ] + }, + "Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeAsString", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsOptional", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object" + } + ] + }, + "Volo.Abp.Http.Modeling.ParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NameOnMethod", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsOptional", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object" + }, + { + "name": "ConstraintTypes", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "BindingSourceId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DescriptorName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Http.Modeling.TypeApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BaseType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsEnum", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "EnumNames", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "EnumValues", + "type": "[System.Object]", + "typeSimple": "[object]" + }, + { + "name": "GenericArguments", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "Properties", + "type": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]" + } + ] + }, + "Volo.Abp.Http.Modeling.PropertyApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + } + ] + } + } +} \ No newline at end of file diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/index.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/index.ts new file mode 100644 index 0000000000..68eb7e2964 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/index.ts @@ -0,0 +1,2 @@ +export * as FeatureManagement from './feature-management'; +export * as Validation from './validation'; diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/index.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/index.ts new file mode 100644 index 0000000000..bcd4535b81 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/index.ts @@ -0,0 +1 @@ +export * as StringValues from './string-values'; diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/string-values/index.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/string-values/index.ts new file mode 100644 index 0000000000..e9644dae47 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/string-values/index.ts @@ -0,0 +1 @@ +export * from './models'; diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/string-values/models.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/string-values/models.ts new file mode 100644 index 0000000000..f4f9381611 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/string-values/models.ts @@ -0,0 +1,13 @@ + +export interface IStringValueType { + name: string; + item: object; + properties: Record; + validator: IValueValidator; +} + +export interface IValueValidator { + name: string; + item: object; + properties: Record; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/public-api.ts new file mode 100644 index 0000000000..1d9ef938b8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/public-api.ts @@ -0,0 +1,5 @@ +export * from './lib/feature-management.module'; +export * from './lib/components'; +export * from './lib/enums/components'; +export * from './lib/proxy/feature-management'; +export * from './lib/proxy/validation/string-values'; diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.json new file mode 100644 index 0000000000..62ebbd9464 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.lib.json new file mode 100644 index 0000000000..bbcc12b1c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.lib.prod.json new file mode 100644 index 0000000000..331d0ecb05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial", + "enableIvy": false + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index cee7a51cd2..444defbfe0 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -15,18 +15,21 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { + "@abp/ng.account.core": ["dist/packages/account-core"], + "@abp/ng.components": ["dist/packages/components"], + "@abp/ng.components/page": ["dist/packages/components/page"], + "@abp/ng.components/tree": ["dist/packages/components/tree"], "@abp/ng.core": ["dist/packages/core"], "@abp/ng.core/locale": ["dist/packages/core/locale"], "@abp/ng.core/testing": ["dist/packages/core/testing"], + "@abp/ng.theme.basic": ["dist/packages/theme-basic"], + "@abp/ng.theme.basic/testing": ["dist/packages/theme-basic/testing"], "@abp/ng.theme.shared": ["dist/packages/theme-shared"], - "@abp/ng.theme.shared/extensions": ["dist/packages/theme-shared/extensions"], + "@abp/ng.theme.shared/extensions": [ + "dist/packages/theme-shared/extensions" + ], "@abp/ng.theme.shared/testing": ["dist/packages/theme-shared/testing"], - "@abp/ng.components": ["dist/packages/components"], - "@abp/ng.components/page": ["dist/packages/components/page"], - "@abp/ng.components/tree": ["dist/packages/components/tree"], - "@abp/ng.account.core": ["dist/packages/account-core"], - "@abp/ng.theme.basic": ["dist/packages/theme-basic"], - "@abp/ng.theme.basic/testing": ["dist/packages/theme-basic/testing"] + "@abp/feature-management": ["dist/packages/feature-management"] } }, "exclude": ["node_modules", "tmp"] From da9c1547796e9c3580c6aa6c21ca51840929d7dd Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 13 Aug 2021 11:38:04 +0300 Subject: [PATCH 10/56] add permission-management to nx workspace --- npm/ng-packs/nx/ng-packs/angular.json | 41 + npm/ng-packs/nx/ng-packs/nx.json | 4 + .../permission-management/.eslintrc.json | 36 + .../packages/permission-management/README.md | 3 + .../permission-management/jest.config.js | 20 + .../permission-management/ng-package.json | 8 + .../permission-management/package.json | 16 + .../src/lib/actions/index.ts | 1 + .../actions/permission-management.actions.ts | 11 + .../src/lib/components/index.ts | 1 + .../permission-management.component.html | 105 + .../permission-management.component.ts | 324 ++ .../src/lib/enums/components.ts | 3 + .../src/lib/models/index.ts | 1 + .../src/lib/models/permission-management.ts | 19 + .../src/lib/permission-management.module.ts | 13 + .../src/lib/proxy/README.md | 17 + .../src/lib/proxy/generate-proxy.json | 4210 +++++++++++++++++ .../src/lib/proxy/index.ts | 2 + .../src/lib/proxy/models.ts | 34 + .../src/lib/proxy/permissions.service.ts | 29 + .../src/lib/services/index.ts | 1 + .../permission-management-state.service.ts | 27 + .../src/lib/states/index.ts | 1 + .../lib/states/permission-management.state.ts | 47 + ...ermission-management-state.service.spec.ts | 60 + .../permission-management/src/public-api.ts | 12 + .../permission-management/src/test-setup.ts | 1 + .../permission-management/tsconfig.json | 13 + .../permission-management/tsconfig.lib.json | 14 + .../tsconfig.lib.prod.json | 11 + .../permission-management/tsconfig.spec.json | 10 + npm/ng-packs/nx/ng-packs/tsconfig.base.json | 5 +- 33 files changed, 5099 insertions(+), 1 deletion(-) create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/actions/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/actions/permission-management.actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/enums/components.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/models/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/models/permission-management.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/permission-management.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/generate-proxy.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/permissions.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/services/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/services/permission-management-state.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/states/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/states/permission-management.state.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/tests/permission-management-state.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.lib.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.lib.prod.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index 153f4e47e5..32a27da6a3 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -284,6 +284,47 @@ } } }, + "permission-management": { + "projectType": "library", + "root": "packages/permission-management", + "sourceRoot": "packages/permission-management/src", + "prefix": "abp", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "packages/permission-management/tsconfig.lib.json", + "project": "packages/permission-management/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "packages/permission-management/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "packages/permission-management/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/packages/permission-management"], + "options": { + "jestConfig": "packages/permission-management/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "packages/permission-management/src/**/*.ts", + "packages/permission-management/src/**/*.html" + ] + } + } + } + }, "theme-basic": { "projectType": "library", "root": "packages/theme-basic", diff --git a/npm/ng-packs/nx/ng-packs/nx.json b/npm/ng-packs/nx/ng-packs/nx.json index 79c789ebe5..56db299750 100644 --- a/npm/ng-packs/nx/ng-packs/nx.json +++ b/npm/ng-packs/nx/ng-packs/nx.json @@ -53,6 +53,10 @@ "tags": [], "implicitDependencies": ["core", "theme-shared"] }, + "permission-management": { + "tags": [], + "implicitDependencies": ["core", "theme-shared"] + }, "theme-basic": { "tags": [], "implicitDependencies": ["core", "theme-shared", "account-core"] diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/permission-management/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/README.md b/npm/ng-packs/nx/ng-packs/packages/permission-management/README.md new file mode 100644 index 0000000000..db523171a3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/README.md @@ -0,0 +1,3 @@ +

@abp/ng.permission-management

+ +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/jest.config.js b/npm/ng-packs/nx/ng-packs/packages/permission-management/jest.config.js new file mode 100644 index 0000000000..b8ec7fc53c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'permission-management', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/packages/permission-management', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/permission-management/ng-package.json new file mode 100644 index 0000000000..2f75a5f745 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/ng-package.json @@ -0,0 +1,8 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/packages/permission-management", + "lib": { + "entryFile": "src/public-api.ts" + }, + "allowedNonPeerDependencies": ["@abp/ng.theme.shared"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/package.json b/npm/ng-packs/nx/ng-packs/packages/permission-management/package.json new file mode 100644 index 0000000000..f71fa44287 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/package.json @@ -0,0 +1,16 @@ +{ + "name": "@abp/ng.permission-management", + "version": "4.4.0", + "homepage": "https://abp.io", + "repository": { + "type": "git", + "url": "https://github.com/abpframework/abp.git" + }, + "dependencies": { + "@abp/ng.theme.shared": "~4.4.0", + "tslib": "^2.0.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/actions/index.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/actions/index.ts new file mode 100644 index 0000000000..5fb2c9e8e4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/actions/index.ts @@ -0,0 +1 @@ +export * from './permission-management.actions'; diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/actions/permission-management.actions.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/actions/permission-management.actions.ts new file mode 100644 index 0000000000..c522ab4c6e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/actions/permission-management.actions.ts @@ -0,0 +1,11 @@ +import { ProviderInfoDto, UpdatePermissionsDto } from '../proxy/models'; + +export class GetPermissions { + static readonly type = '[PermissionManagement] Get Permissions'; + constructor(public payload: ProviderInfoDto) {} +} + +export class UpdatePermissions { + static readonly type = '[PermissionManagement] Update Permissions'; + constructor(public payload: ProviderInfoDto & UpdatePermissionsDto) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/index.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/index.ts new file mode 100644 index 0000000000..efa91b45a2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/index.ts @@ -0,0 +1 @@ +export * from './permission-management.component'; diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html new file mode 100644 index 0000000000..06ab7ff9f1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html @@ -0,0 +1,105 @@ + + + +

+ {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} - {{ data.entityName }} +

+
+ +
+ + +
+ +
+
+ +
+

{{ selectedGroup?.displayName }}

+
+
+
+ + +
+
+
+ + +
+
+
+
+
+ + + {{ + 'AbpIdentity::Save' | abpLocalization + }} + +
+
diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts new file mode 100644 index 0000000000..67a48cb507 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts @@ -0,0 +1,324 @@ +import { + AbpApplicationConfigurationService, + ConfigStateService, + CurrentUserDto, +} from '@abp/ng.core'; +import { LocaleDirection } from '@abp/ng.theme.shared'; +import { Component, EventEmitter, Input, Output, TrackByFunction } from '@angular/core'; +import { Select, Store } from '@ngxs/store'; +import { Observable, of } from 'rxjs'; +import { finalize, map, pluck, switchMap, take, tap } from 'rxjs/operators'; +import { GetPermissions, UpdatePermissions } from '../actions/permission-management.actions'; +import { PermissionManagement } from '../models/permission-management'; +import { + GetPermissionListResultDto, + PermissionGrantInfoDto, + PermissionGroupDto, + ProviderInfoDto, + UpdatePermissionDto, +} from '../proxy/models'; +import { PermissionManagementState } from '../states/permission-management.state'; + +type PermissionWithStyle = PermissionGrantInfoDto & { + style: string; +}; + +@Component({ + selector: 'abp-permission-management', + templateUrl: './permission-management.component.html', + exportAs: 'abpPermissionManagement', + styles: [ + ` + .overflow-scroll { + max-height: 70vh; + overflow-y: scroll; + } + `, + ], +}) +export class PermissionManagementComponent + implements + PermissionManagement.PermissionManagementComponentInputs, + PermissionManagement.PermissionManagementComponentOutputs { + @Input() + readonly providerName: string; + + @Input() + readonly providerKey: string; + + @Input() + readonly hideBadges = false; + + protected _visible = false; + + @Input() + get visible(): boolean { + return this._visible; + } + + set visible(value: boolean) { + if (value === this._visible) return; + + if (value) { + this.openModal().subscribe(() => { + this._visible = true; + this.visibleChange.emit(true); + }); + } else { + this.selectedGroup = null; + this._visible = false; + this.visibleChange.emit(false); + } + } + + @Output() readonly visibleChange = new EventEmitter(); + + @Select(PermissionManagementState.getPermissionGroups) + groups$: Observable; + + @Select(PermissionManagementState.getEntityDisplayName) + entityName$: Observable; + + selectedGroup: PermissionGroupDto; + + permissions: PermissionGrantInfoDto[] = []; + + selectThisTab = false; + + selectAllTab = false; + + modalBusy = false; + + trackByFn: TrackByFunction = (_, item) => item.name; + + get selectedGroupPermissions$(): Observable { + const margin = `margin-${ + (document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left' + }.px`; + + return this.groups$.pipe( + map(groups => + this.selectedGroup + ? groups.find(group => group.name === this.selectedGroup.name).permissions + : [], + ), + map(permissions => + permissions.map( + permission => + (({ + ...permission, + style: { [margin]: findMargin(permissions, permission) }, + isGranted: this.permissions.find(per => per.name === permission.name).isGranted, + } as any) as PermissionWithStyle), + ), + ), + ); + } + + constructor( + protected store: Store, + protected configState: ConfigStateService, + protected appConfigService: AbpApplicationConfigurationService, + ) {} + + getChecked(name: string) { + return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted; + } + + isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean { + if (grantedProviders.length) { + return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1; + } + return false; + } + + onClickCheckbox(clickedPermission: PermissionGrantInfoDto, value) { + if ( + clickedPermission.isGranted && + this.isGrantedByOtherProviderName(clickedPermission.grantedProviders) + ) + return; + + setTimeout(() => { + this.permissions = this.permissions.map(per => { + if (clickedPermission.name === per.name) { + return { ...per, isGranted: !per.isGranted }; + } else if (clickedPermission.name === per.parentName && clickedPermission.isGranted) { + return { ...per, isGranted: false }; + } else if (clickedPermission.parentName === per.name && !clickedPermission.isGranted) { + return { ...per, isGranted: true }; + } + + return per; + }); + + this.setTabCheckboxState(); + this.setGrantCheckboxState(); + }, 0); + } + + setTabCheckboxState() { + this.selectedGroupPermissions$.pipe(take(1)).subscribe(permissions => { + const selectedPermissions = permissions.filter(per => per.isGranted); + const element = document.querySelector('#select-all-in-this-tabs') as any; + + if (selectedPermissions.length === permissions.length) { + element.indeterminate = false; + this.selectThisTab = true; + } else if (selectedPermissions.length === 0) { + element.indeterminate = false; + this.selectThisTab = false; + } else { + element.indeterminate = true; + } + }); + } + + setGrantCheckboxState() { + const selectedAllPermissions = this.permissions.filter(per => per.isGranted); + const checkboxElement = document.querySelector('#select-all-in-all-tabs') as any; + + if (selectedAllPermissions.length === this.permissions.length) { + checkboxElement.indeterminate = false; + this.selectAllTab = true; + } else if (selectedAllPermissions.length === 0) { + checkboxElement.indeterminate = false; + this.selectAllTab = false; + } else { + checkboxElement.indeterminate = true; + } + } + + onClickSelectThisTab() { + this.selectedGroupPermissions$.pipe(take(1)).subscribe(permissions => { + permissions.forEach(permission => { + if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders)) + return; + + const index = this.permissions.findIndex(per => per.name === permission.name); + + this.permissions = [ + ...this.permissions.slice(0, index), + { ...this.permissions[index], isGranted: !this.selectThisTab }, + ...this.permissions.slice(index + 1), + ]; + }); + }); + + this.setGrantCheckboxState(); + } + + onClickSelectAll() { + this.permissions = this.permissions.map(permission => ({ + ...permission, + isGranted: + this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab, + })); + + this.selectThisTab = !this.selectAllTab; + } + + onChangeGroup(group: PermissionGroupDto) { + this.selectedGroup = group; + this.setTabCheckboxState(); + } + + submit() { + const unchangedPermissions = getPermissions( + this.store.selectSnapshot(PermissionManagementState.getPermissionGroups), + ); + + const changedPermissions: UpdatePermissionDto[] = this.permissions + .filter(per => + unchangedPermissions.find(unchanged => unchanged.name === per.name).isGranted === + per.isGranted + ? false + : true, + ) + .map(({ name, isGranted }) => ({ name, isGranted })); + + if (!changedPermissions.length) { + this.visible = false; + return; + } + + this.modalBusy = true; + this.store + .dispatch( + new UpdatePermissions({ + providerKey: this.providerKey, + providerName: this.providerName, + permissions: changedPermissions, + }), + ) + .pipe( + switchMap(() => + this.shouldFetchAppConfig() + ? this.appConfigService.get().pipe(tap(res => this.configState.setState(res))) + : of(null), + ), + finalize(() => (this.modalBusy = false)), + ) + .subscribe(() => { + this.visible = false; + }); + } + + openModal() { + if (!this.providerKey || !this.providerName) { + throw new Error('Provider Key and Provider Name are required.'); + } + + return this.store + .dispatch( + new GetPermissions({ + providerKey: this.providerKey, + providerName: this.providerName, + }), + ) + .pipe( + pluck('PermissionManagementState', 'permissionRes'), + tap((permissionRes: GetPermissionListResultDto) => { + this.selectedGroup = permissionRes.groups[0]; + this.permissions = getPermissions(permissionRes.groups); + }), + ); + } + + initModal() { + this.setTabCheckboxState(); + this.setGrantCheckboxState(); + } + + getAssignedCount(groupName: string) { + return this.permissions.reduce( + (acc, val) => (val.name.split('.')[0] === groupName && val.isGranted ? acc + 1 : acc), + 0, + ); + } + + shouldFetchAppConfig() { + const currentUser = this.configState.getOne('currentUser') as CurrentUserDto; + + if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey); + + if (this.providerName === 'U') return currentUser.id === this.providerKey; + + return false; + } +} + +function findMargin(permissions: PermissionGrantInfoDto[], permission: PermissionGrantInfoDto) { + const parentPermission = permissions.find(per => per.name === permission.parentName); + + if (parentPermission && parentPermission.parentName) { + let margin = 20; + return (margin += findMargin(permissions, parentPermission)); + } + + return parentPermission ? 20 : 0; +} + +function getPermissions(groups: PermissionGroupDto[]): PermissionGrantInfoDto[] { + return groups.reduce((acc, val) => [...acc, ...val.permissions], []); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/enums/components.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/enums/components.ts new file mode 100644 index 0000000000..175d39c999 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/enums/components.ts @@ -0,0 +1,3 @@ +export const enum ePermissionManagementComponents { + PermissionManagement = 'PermissionManagement.PermissionManagementComponent', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/models/index.ts new file mode 100644 index 0000000000..6a06f3adab --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/models/index.ts @@ -0,0 +1 @@ +export * from './permission-management'; diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/models/permission-management.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/models/permission-management.ts new file mode 100644 index 0000000000..2202d14b48 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/models/permission-management.ts @@ -0,0 +1,19 @@ +import { EventEmitter } from '@angular/core'; +import { GetPermissionListResultDto } from '../proxy/models'; + +export namespace PermissionManagement { + export interface State { + permissionRes: GetPermissionListResultDto; + } + + export interface PermissionManagementComponentInputs { + visible: boolean; + readonly providerName: string; + readonly providerKey: string; + readonly hideBadges: boolean; + } + + export interface PermissionManagementComponentOutputs { + readonly visibleChange: EventEmitter; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/permission-management.module.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/permission-management.module.ts new file mode 100644 index 0000000000..73c3455828 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/permission-management.module.ts @@ -0,0 +1,13 @@ +import { CoreModule } from '@abp/ng.core'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { NgModule } from '@angular/core'; +import { NgxsModule } from '@ngxs/store'; +import { PermissionManagementComponent } from './components/permission-management.component'; +import { PermissionManagementState } from './states/permission-management.state'; + +@NgModule({ + declarations: [PermissionManagementComponent], + imports: [CoreModule, ThemeSharedModule, NgxsModule.forFeature([PermissionManagementState])], + exports: [PermissionManagementComponent], +}) +export class PermissionManagementModule {} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/README.md b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/README.md new file mode 100644 index 0000000000..767dfd0f7c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/README.md @@ -0,0 +1,17 @@ +# Proxy Generation Output + +This directory includes the output of the latest proxy generation. +The files and folders in it will be overwritten when proxy generation is run again. +Therefore, please do not place your own content in this folder. + +In addition, `generate-proxy.json` works like a lock file. +It includes information used by the proxy generator, so please do not delete or modify it. + +Finally, the name of the files and folders should not be changed for two reasons: +- Proxy generator will keep creating them at those paths and you will have multiple copies of the same content. +- ABP Suite generates files which include imports from this folder. + +> **Important Notice:** If you are building a module and are planning to publish to npm, +> some of the generated proxies are likely to be exported from public-api.ts file. In such a case, +> please make sure you export files directly and not from barrel exports. In other words, +> do not include index.ts exports in your public-api.ts exports. diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/generate-proxy.json b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/generate-proxy.json new file mode 100644 index 0000000000..09a73e5c3c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/generate-proxy.json @@ -0,0 +1,4210 @@ +{ + "generated": [ + "permissionManagement" + ], + "modules": { + "identity": { + "rootPath": "identity", + "remoteServiceName": "AbpIdentity", + "controllers": { + "Volo.Abp.Identity.IdentityRoleController": { + "controllerName": "IdentityRole", + "type": "Volo.Abp.Identity.IdentityRoleController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityRoleAppService" + } + ], + "actions": { + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity/roles/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto, Volo.Abp.Ddd.Application.Contracts", + "type": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleCreateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleUpdateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserController": { + "controllerName": "IdentityUser", + "type": "Volo.Abp.Identity.IdentityUserController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityUsersInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserCreateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetRolesAsyncById": { + "uniqueName": "GetRolesAsyncById", + "name": "GetRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAssignableRolesAsync": { + "uniqueName": "GetAssignableRolesAsync", + "name": "GetAssignableRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/assignable-roles", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "UpdateRolesAsyncByIdAndInput": { + "uniqueName": "UpdateRolesAsyncByIdAndInput", + "name": "UpdateRolesAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateRolesDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "FindByUsernameAsyncByUsername": { + "uniqueName": "FindByUsernameAsyncByUsername", + "name": "FindByUsernameAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "username", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "username", + "name": "username", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "FindByEmailAsyncByEmail": { + "uniqueName": "FindByEmailAsyncByEmail", + "name": "FindByEmailAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-email/{email}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "email", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "email", + "name": "email", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserLookupController": { + "controllerName": "IdentityUserLookup", + "type": "Volo.Abp.Identity.IdentityUserLookupController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserLookupAppService" + } + ], + "actions": { + "FindByIdAsyncById": { + "uniqueName": "FindByIdAsyncById", + "name": "FindByIdAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "FindByUserNameAsyncByUserName": { + "uniqueName": "FindByUserNameAsyncByUserName", + "name": "FindByUserNameAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "userName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "userName", + "name": "userName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "SearchAsyncByInput": { + "uniqueName": "SearchAsyncByInput", + "name": "SearchAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/search", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupSearchInputDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupSearchInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupSearchInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetCountAsyncByInput": { + "uniqueName": "GetCountAsyncByInput", + "name": "GetCountAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/count", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupCountInputDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupCountInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupCountInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Int64", + "typeSimple": "number" + } + } + } + }, + "Volo.Abp.Identity.ProfileController": { + "controllerName": "Profile", + "type": "Volo.Abp.Identity.ProfileController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IProfileAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UpdateProfileDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "ChangePasswordAsyncByInput": { + "uniqueName": "ChangePasswordAsyncByInput", + "name": "ChangePasswordAsync", + "httpMethod": "POST", + "url": "api/identity/my-profile/change-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.ChangePasswordInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "featureManagement": { + "rootPath": "featureManagement", + "remoteServiceName": "AbpFeatureManagement", + "controllers": { + "Volo.Abp.FeatureManagement.FeaturesController": { + "controllerName": "Features", + "type": "Volo.Abp.FeatureManagement.FeaturesController", + "interfaces": [ + { + "type": "Volo.Abp.FeatureManagement.IFeatureAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", + "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "account": { + "rootPath": "account", + "remoteServiceName": "AbpAccount", + "controllers": { + "Volo.Abp.Account.Web.Areas.Account.Controllers.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.AccountController", + "interfaces": [], + "actions": { + "LoginByLogin": { + "uniqueName": "LoginByLogin", + "name": "Login", + "httpMethod": "POST", + "url": "api/account/login", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Web", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + }, + "Logout": { + "uniqueName": "Logout", + "name": "Logout", + "httpMethod": "GET", + "url": "api/account/logout", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "CheckPasswordByLogin": { + "uniqueName": "CheckPasswordByLogin", + "name": "CheckPassword", + "httpMethod": "POST", + "url": "api/account/checkPassword", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Web", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + } + } + }, + "Volo.Abp.Account.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.AccountController", + "interfaces": [ + { + "type": "Volo.Abp.Account.IAccountAppService" + } + ], + "actions": { + "RegisterAsyncByInput": { + "uniqueName": "RegisterAsyncByInput", + "name": "RegisterAsync", + "httpMethod": "POST", + "url": "api/account/register", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.RegisterDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "SendPasswordResetCodeAsyncByInput": { + "uniqueName": "SendPasswordResetCodeAsyncByInput", + "name": "SendPasswordResetCodeAsync", + "httpMethod": "POST", + "url": "api/account/send-password-reset-code", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendPasswordResetCodeDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "ResetPasswordAsyncByInput": { + "uniqueName": "ResetPasswordAsyncByInput", + "name": "ResetPasswordAsync", + "httpMethod": "POST", + "url": "api/account/reset-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ResetPasswordDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "multi-tenancy": { + "rootPath": "multi-tenancy", + "remoteServiceName": "AbpTenantManagement", + "controllers": { + "Volo.Abp.TenantManagement.TenantController": { + "controllerName": "Tenant", + "type": "Volo.Abp.TenantManagement.TenantController", + "interfaces": [ + { + "type": "Volo.Abp.TenantManagement.ITenantAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.GetTenantsInput, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.GetTenantsInput", + "typeSimple": "Volo.Abp.TenantManagement.GetTenantsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantCreateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantUpdateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetDefaultConnectionStringAsyncById": { + "uniqueName": "GetDefaultConnectionStringAsyncById", + "name": "GetDefaultConnectionStringAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.String", + "typeSimple": "string" + } + }, + "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString": { + "uniqueName": "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString", + "name": "UpdateDefaultConnectionStringAsync", + "httpMethod": "PUT", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "defaultConnectionString", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "defaultConnectionString", + "name": "defaultConnectionString", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "DeleteDefaultConnectionStringAsyncById": { + "uniqueName": "DeleteDefaultConnectionStringAsyncById", + "name": "DeleteDefaultConnectionStringAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "abp": { + "rootPath": "abp", + "remoteServiceName": "abp", + "controllers": { + "Pages.Abp.MultiTenancy.AbpTenantController": { + "controllerName": "AbpTenant", + "type": "Pages.Abp.MultiTenancy.AbpTenantController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" + } + ], + "actions": { + "FindTenantByNameAsyncByName": { + "uniqueName": "FindTenantByNameAsyncByName", + "name": "FindTenantByNameAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-name/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "name", + "name": "name", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + }, + "FindTenantByIdAsyncById": { + "uniqueName": "FindTenantByIdAsyncById", + "name": "FindTenantByIdAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-id/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { + "controllerName": "AbpApplicationConfiguration", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/abp/application-configuration", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { + "controllerName": "AbpApiDefinition", + "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", + "interfaces": [], + "actions": { + "GetByModel": { + "uniqueName": "GetByModel", + "name": "Get", + "httpMethod": "GET", + "url": "api/abp/api-definition", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "model", + "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "model", + "name": "IncludeTypes", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "model" + } + ], + "returnValue": { + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" + } + } + } + } + } + }, + "permissionManagement": { + "rootPath": "permissionManagement", + "remoteServiceName": "AbpPermissionManagement", + "controllers": { + "Volo.Abp.PermissionManagement.PermissionsController": { + "controllerName": "Permissions", + "type": "Volo.Abp.PermissionManagement.PermissionsController", + "interfaces": [ + { + "type": "Volo.Abp.PermissionManagement.IPermissionAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", + "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + } + }, + "types": { + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserNameOrEmailAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RememberMe", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Result", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Success", + "InvalidUserNameOrPassword", + "NotAllowed", + "LockedOut", + "RequiresTwoFactor" + ], + "enumValues": [ + 1, + 2, + 3, + 4, + 5 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Account.RegisterDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "AppName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "TwoFactorEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "LockoutEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "LockoutEnd", + "type": "System.DateTimeOffset?", + "typeSimple": "string?" + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "IsDeleted", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DeleterId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "DeletionTime", + "type": "System.DateTime?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "LastModificationTime", + "type": "System.DateTime?", + "typeSimple": "string?" + }, + { + "name": "LastModifierId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "CreationTime", + "type": "System.DateTime", + "typeSimple": "string" + }, + { + "name": "CreatorId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleEntityDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TKey" + ], + "properties": [ + { + "name": "Id", + "type": "TKey", + "typeSimple": "TKey" + } + ] + }, + "Volo.Abp.ObjectExtending.ExtensibleObject": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ExtraProperties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.Account.SendPasswordResetCodeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "AppName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ReturnUrl", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ReturnUrlHash", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.ResetPasswordDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "ResetToken", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Success", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.ListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Items", + "type": "[T]", + "typeSimple": "[T]" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsDefault", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsStatic", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsPublic", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Sorting", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.LimitedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.Application.Dtos.LimitedResultRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DefaultMaxResultCount", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "MaxMaxResultCount", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultDto": { + "baseType": "Volo.Abp.Application.Dtos.ListResultDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "TotalCount", + "type": "System.Int64", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsDefault", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsPublic", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.GetIdentityUsersInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TwoFactorEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "LockoutEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RoleNames", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateRolesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleNames", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.Users.UserData": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.UserLookupSearchInputDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.UserLookupCountInputDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.ProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsExternal", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "HasPassword", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.UpdateProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.ChangePasswordInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CurrentPassword", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "NewPassword", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.PermissionManagement.GetPermissionListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityDisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Groups", + "type": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGroupDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Permissions", + "type": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGrantInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ParentName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsGranted", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AllowedProviders", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "GrantedProviders", + "type": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.ProviderInfoDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.ProviderInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ProviderName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ProviderKey", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Permissions", + "type": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsGranted", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.TenantManagement.TenantDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TenantManagement.GetTenantsInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TenantManagement.TenantCreateDto": { + "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AdminEmailAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "AdminPassword", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TenantManagement.TenantUpdateDto": { + "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.FeatureManagement.GetFeatureListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Groups", + "type": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureGroupDto]" + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Features", + "type": "[Volo.Abp.FeatureManagement.FeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureDto]" + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Provider", + "type": "Volo.Abp.FeatureManagement.FeatureProviderDto", + "typeSimple": "Volo.Abp.FeatureManagement.FeatureProviderDto" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ValueType", + "type": "Volo.Abp.Validation.StringValues.IStringValueType", + "typeSimple": "Volo.Abp.Validation.StringValues.IStringValueType" + }, + { + "name": "Depth", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "ParentName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureProviderDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Key", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Validation.StringValues.IStringValueType": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Item", + "type": "System.Object", + "typeSimple": "object" + }, + { + "name": "Properties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + }, + { + "name": "Validator", + "type": "Volo.Abp.Validation.StringValues.IValueValidator", + "typeSimple": "Volo.Abp.Validation.StringValues.IValueValidator" + } + ] + }, + "Volo.Abp.Validation.StringValues.IValueValidator": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Item", + "type": "System.Object", + "typeSimple": "object" + }, + { + "name": "Properties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeaturesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Features", + "type": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]" + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Localization", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto" + }, + { + "name": "Auth", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto" + }, + { + "name": "Setting", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto" + }, + { + "name": "CurrentUser", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto" + }, + { + "name": "Features", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto" + }, + { + "name": "MultiTenancy", + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto" + }, + { + "name": "CurrentTenant", + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto" + }, + { + "name": "Timing", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto" + }, + { + "name": "Clock", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto" + }, + { + "name": "ObjectExtensions", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:{System.String:System.String}}", + "typeSimple": "{string:{string:string}}" + }, + { + "name": "Languages", + "type": "[Volo.Abp.Localization.LanguageInfo]", + "typeSimple": "[Volo.Abp.Localization.LanguageInfo]" + }, + { + "name": "CurrentCulture", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto" + }, + { + "name": "DefaultResourceName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LanguagesMap", + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}" + }, + { + "name": "LanguageFilesMap", + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}" + } + ] + }, + "Volo.Abp.Localization.LanguageInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "UiCultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FlagIcon", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EnglishName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ThreeLetterIsoLanguageName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TwoLetterIsoLanguageName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsRightToLeft", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "NativeName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DateTimeFormat", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CalendarAlgorithmType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DateTimeFormatLong", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ShortDatePattern", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FullDateTimePattern", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DateSeparator", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ShortTimePattern", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LongTimePattern", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.NameValue": { + "baseType": "Volo.Abp.NameValue", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.NameValue": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "T", + "typeSimple": "T" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Policies", + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}" + }, + { + "name": "GrantedPolicies", + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:System.String}", + "typeSimple": "{string:string}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAuthenticated", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Id", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "SurName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailVerified", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberVerified", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Roles", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:System.String}", + "typeSimple": "{string:string}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZone", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Iana", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone" + }, + { + "name": "Windows", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneId", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Kind", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}" + }, + { + "name": "Enums", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Entities", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}" + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Properties", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}" + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto" + }, + { + "name": "Api", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto" + }, + { + "name": "Ui", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto" + }, + { + "name": "Attributes", + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]" + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Resource", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnGet", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto" + }, + { + "name": "OnCreate", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto" + }, + { + "name": "OnUpdate", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnTable", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto" + }, + { + "name": "OnCreateForm", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto" + }, + { + "name": "OnEditForm", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Config", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Fields", + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]" + }, + { + "name": "LocalizationResource", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.Object", + "typeSimple": "object" + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IncludeTypes", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "type": "{System.String:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}" + }, + { + "name": "Types", + "type": "{System.String:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}" + } + ] + }, + "Volo.Abp.Http.Modeling.ModuleApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RootPath", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RemoteServiceName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Controllers", + "type": "{System.String:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}" + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ControllerName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Interfaces", + "type": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]" + }, + { + "name": "Actions", + "type": "{System.String:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}" + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Http.Modeling.ActionApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UniqueName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "HttpMethod", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Url", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "SupportedVersions", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "ParametersOnMethod", + "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]" + }, + { + "name": "Parameters", + "type": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]" + }, + { + "name": "ReturnValue", + "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel" + } + ] + }, + "Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeAsString", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsOptional", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object" + } + ] + }, + "Volo.Abp.Http.Modeling.ParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NameOnMethod", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsOptional", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object" + }, + { + "name": "ConstraintTypes", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "BindingSourceId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DescriptorName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Http.Modeling.TypeApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BaseType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsEnum", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "EnumNames", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "EnumValues", + "type": "[System.Object]", + "typeSimple": "[object]" + }, + { + "name": "GenericArguments", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "Properties", + "type": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]" + } + ] + }, + "Volo.Abp.Http.Modeling.PropertyApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + } + ] + } + } +} \ No newline at end of file diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/index.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/index.ts new file mode 100644 index 0000000000..0a3fde0f0f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/index.ts @@ -0,0 +1,2 @@ +export * from './models'; +export * from './permissions.service'; diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/models.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/models.ts new file mode 100644 index 0000000000..c366b2c315 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/models.ts @@ -0,0 +1,34 @@ + +export interface GetPermissionListResultDto { + entityDisplayName: string; + groups: PermissionGroupDto[]; +} + +export interface PermissionGrantInfoDto { + name: string; + displayName: string; + parentName: string; + isGranted: boolean; + allowedProviders: string[]; + grantedProviders: ProviderInfoDto[]; +} + +export interface PermissionGroupDto { + name: string; + displayName: string; + permissions: PermissionGrantInfoDto[]; +} + +export interface ProviderInfoDto { + providerName: string; + providerKey: string; +} + +export interface UpdatePermissionDto { + name: string; + isGranted: boolean; +} + +export interface UpdatePermissionsDto { + permissions: UpdatePermissionDto[]; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/permissions.service.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/permissions.service.ts new file mode 100644 index 0000000000..45ac0b40e1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/permissions.service.ts @@ -0,0 +1,29 @@ +import type { GetPermissionListResultDto, UpdatePermissionsDto } from './models'; +import { RestService } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class PermissionsService { + apiName = 'AbpPermissionManagement'; + + get = (providerName: string, providerKey: string) => + this.restService.request({ + method: 'GET', + url: '/api/permission-management/permissions', + params: { providerName, providerKey }, + }, + { apiName: this.apiName }); + + update = (providerName: string, providerKey: string, input: UpdatePermissionsDto) => + this.restService.request({ + method: 'PUT', + url: '/api/permission-management/permissions', + params: { providerName, providerKey }, + body: input, + }, + { apiName: this.apiName }); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/services/index.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/services/index.ts new file mode 100644 index 0000000000..1304994db1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/services/index.ts @@ -0,0 +1 @@ +export * from './permission-management-state.service'; diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/services/permission-management-state.service.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/services/permission-management-state.service.ts new file mode 100644 index 0000000000..1f372224ae --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/services/permission-management-state.service.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; +import { Store } from '@ngxs/store'; +import { PermissionManagementState } from '../states/permission-management.state'; +import { PermissionManagement } from '../models'; +import { GetPermissions, UpdatePermissions } from '../actions'; + +@Injectable({ + providedIn: 'root', +}) +export class PermissionManagementStateService { + constructor(private store: Store) {} + + getPermissionGroups() { + return this.store.selectSnapshot(PermissionManagementState.getPermissionGroups); + } + getEntityDisplayName() { + return this.store.selectSnapshot(PermissionManagementState.getEntityDisplayName); + } + + dispatchGetPermissions(...args: ConstructorParameters) { + return this.store.dispatch(new GetPermissions(...args)); + } + + dispatchUpdatePermissions(...args: ConstructorParameters) { + return this.store.dispatch(new UpdatePermissions(...args)); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/states/index.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/states/index.ts new file mode 100644 index 0000000000..1d8fcc0d5d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/states/index.ts @@ -0,0 +1 @@ +export * from './permission-management.state'; diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/states/permission-management.state.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/states/permission-management.state.ts new file mode 100644 index 0000000000..e6952f091b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/states/permission-management.state.ts @@ -0,0 +1,47 @@ +import { Injectable } from '@angular/core'; +import { Action, Selector, State, StateContext } from '@ngxs/store'; +import { tap } from 'rxjs/operators'; +import { GetPermissions, UpdatePermissions } from '../actions/permission-management.actions'; +import { PermissionManagement } from '../models/permission-management'; +import { ProviderInfoDto } from '../proxy/models'; +import { PermissionsService } from '../proxy/permissions.service'; + +@State({ + name: 'PermissionManagementState', + defaults: { permissionRes: {} } as PermissionManagement.State, +}) +@Injectable() +export class PermissionManagementState { + @Selector() + static getPermissionGroups({ permissionRes }: PermissionManagement.State) { + return permissionRes.groups || []; + } + + @Selector() + static getEntityDisplayName({ permissionRes }: PermissionManagement.State): string { + return permissionRes.entityDisplayName; + } + + constructor(private service: PermissionsService) {} + + @Action(GetPermissions) + permissionManagementGet( + { patchState }: StateContext, + { payload: { providerKey, providerName } = {} as ProviderInfoDto }: GetPermissions, + ) { + return this.service.get(providerName, providerKey).pipe( + tap(permissionResponse => + patchState({ + permissionRes: permissionResponse, + }), + ), + ); + } + + @Action(UpdatePermissions) + permissionManagementUpdate(_, { payload }: UpdatePermissions) { + return this.service.update(payload.providerName, payload.providerKey, { + permissions: payload.permissions, + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/tests/permission-management-state.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/tests/permission-management-state.service.spec.ts new file mode 100644 index 0000000000..bdc2c9d490 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/tests/permission-management-state.service.spec.ts @@ -0,0 +1,60 @@ +import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; +import { PermissionManagementStateService } from '../services/permission-management-state.service'; +import { PermissionManagementState } from '../states/permission-management.state'; +import { Store } from '@ngxs/store'; +import * as PermissionManagementActions from '../actions'; + +describe('PermissionManagementStateService', () => { + let service: PermissionManagementStateService; + let spectator: SpectatorService; + let store: SpyObject; + + const createService = createServiceFactory({ + service: PermissionManagementStateService, + mocks: [Store], + }); + beforeEach(() => { + spectator = createService(); + service = spectator.service; + store = spectator.inject(Store); + }); + test('should have the all PermissionManagementState static methods', () => { + const reg = /(?<=static )(.*)(?=\()/gm; + PermissionManagementState.toString() + .match(reg) + .forEach(fnName => { + expect(service[fnName]).toBeTruthy(); + + const spy = jest.spyOn(store, 'selectSnapshot'); + spy.mockClear(); + + const isDynamicSelector = PermissionManagementState[fnName].name !== 'memoized'; + + if (isDynamicSelector) { + PermissionManagementState[fnName] = jest.fn((...args) => args); + service[fnName]('test', 0, {}); + expect(PermissionManagementState[fnName]).toHaveBeenCalledWith('test', 0, {}); + } else { + service[fnName](); + expect(spy).toHaveBeenCalledWith(PermissionManagementState[fnName]); + } + }); + }); + + test('should have a dispatch method for every PermissionManagementState action', () => { + const reg = /(?<=dispatch)(\w+)(?=\()/gm; + PermissionManagementStateService.toString() + .match(reg) + .forEach(fnName => { + expect(PermissionManagementActions[fnName]).toBeTruthy(); + + const spy = jest.spyOn(store, 'dispatch'); + spy.mockClear(); + + const params = Array.from(new Array(PermissionManagementActions[fnName].length)); + + service[`dispatch${fnName}`](...params); + expect(spy).toHaveBeenCalledWith(new PermissionManagementActions[fnName](...params)); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/public-api.ts new file mode 100644 index 0000000000..3068cb766f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/public-api.ts @@ -0,0 +1,12 @@ +/* + * Public API Surface of permission-management + */ + +export * from './lib/permission-management.module'; +export * from './lib/actions'; +export * from './lib/components'; +export * from './lib/enums/components'; +export * from './lib/models'; +export * from './lib/services'; +export * from './lib/states'; +export * from './lib/proxy'; diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.json new file mode 100644 index 0000000000..62ebbd9464 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.lib.json new file mode 100644 index 0000000000..bbcc12b1c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.lib.prod.json new file mode 100644 index 0000000000..331d0ecb05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial", + "enableIvy": false + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index 444defbfe0..be7720c2ee 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -15,6 +15,7 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { + "@abp/feature-management": ["dist/packages/feature-management"], "@abp/ng.account.core": ["dist/packages/account-core"], "@abp/ng.components": ["dist/packages/components"], "@abp/ng.components/page": ["dist/packages/components/page"], @@ -29,7 +30,9 @@ "dist/packages/theme-shared/extensions" ], "@abp/ng.theme.shared/testing": ["dist/packages/theme-shared/testing"], - "@abp/feature-management": ["dist/packages/feature-management"] + "@abp/permission-management": [ + "dist/packages/permission-management" + ] } }, "exclude": ["node_modules", "tmp"] From 2a9880069bb1d6f1329bb43aeefa05a22060af55 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 13 Aug 2021 12:24:08 +0300 Subject: [PATCH 11/56] add setting-management to nx workspace --- npm/ng-packs/nx/ng-packs/angular.json | 41 + npm/ng-packs/nx/ng-packs/nx.json | 4 + .../setting-management/.eslintrc.json | 36 + .../packages/setting-management/README.md | 3 + .../setting-management/config/ng-package.json | 7 + .../email-setting-group.component.html | 73 + .../email-setting-group.component.ts | 60 + .../config/src/enums/index.ts | 2 + .../config/src/enums/route-names.ts | 3 + .../config/src/enums/setting-tab-names.ts | 3 + .../config/src/providers/index.ts | 2 + .../config/src/providers/route.provider.ts | 43 + .../src/providers/setting-tab.provider.ts | 26 + .../config/src/proxy/README.md | 17 + .../src/proxy/email-settings.service.ts | 27 + .../config/src/proxy/generate-proxy.json | 4745 +++++++++++++++++ .../config/src/proxy/index.ts | 2 + .../config/src/proxy/models.ts | 24 + .../config/src/public-api.ts | 5 + .../src/setting-management-config.module.ts | 20 + .../setting-management/jest.config.js | 20 + .../setting-management/ng-package.json | 8 + .../packages/setting-management/package.json | 17 + .../src/lib/actions/index.ts | 1 + .../lib/actions/setting-management.actions.ts | 6 + .../setting-management.component.html | 36 + .../setting-management.component.ts | 42 + .../src/lib/enums/components.ts | 3 + .../setting-management/src/lib/enums/index.ts | 2 + .../src/lib/enums/route-names.ts | 3 + .../src/lib/models/index.ts | 1 + .../src/lib/models/setting-management.ts | 7 + .../lib/setting-management-routing.module.ts | 37 + .../src/lib/setting-management.module.ts | 32 + .../src/lib/states/index.ts | 1 + .../lib/states/setting-management.state.ts | 26 + .../setting-management/src/public-api.ts | 3 + .../setting-management/src/test-setup.ts | 1 + .../packages/setting-management/tsconfig.json | 13 + .../setting-management/tsconfig.lib.json | 14 + .../setting-management/tsconfig.lib.prod.json | 11 + .../setting-management/tsconfig.spec.json | 10 + npm/ng-packs/nx/ng-packs/tsconfig.base.json | 8 +- npm/ng-packs/nx/ng-packs/yarn.lock | 185 +- 44 files changed, 5526 insertions(+), 104 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/components/email-setting-group/email-setting-group.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/components/email-setting-group/email-setting-group.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/enums/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/enums/route-names.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/enums/setting-tab-names.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/providers/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/providers/route.provider.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/email-settings.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/generate-proxy.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/setting-management-config.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/actions/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/actions/setting-management.actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/enums/components.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/enums/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/enums/route-names.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/models/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/models/setting-management.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/setting-management.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/states/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/states/setting-management.state.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.lib.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.lib.prod.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index 32a27da6a3..b5983fe4b4 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -325,6 +325,47 @@ } } }, + "setting-management": { + "projectType": "library", + "root": "packages/setting-management", + "sourceRoot": "packages/setting-management/src", + "prefix": "abp", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "packages/setting-management/tsconfig.lib.json", + "project": "packages/setting-management/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "packages/setting-management/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "packages/setting-management/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/packages/setting-management"], + "options": { + "jestConfig": "packages/setting-management/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "packages/setting-management/src/**/*.ts", + "packages/setting-management/src/**/*.html" + ] + } + } + } + }, "theme-basic": { "projectType": "library", "root": "packages/theme-basic", diff --git a/npm/ng-packs/nx/ng-packs/nx.json b/npm/ng-packs/nx/ng-packs/nx.json index 56db299750..2cb0b6300e 100644 --- a/npm/ng-packs/nx/ng-packs/nx.json +++ b/npm/ng-packs/nx/ng-packs/nx.json @@ -57,6 +57,10 @@ "tags": [], "implicitDependencies": ["core", "theme-shared"] }, + "setting-management": { + "tags": [], + "implicitDependencies": ["core", "theme-shared", "components"] + }, "theme-basic": { "tags": [], "implicitDependencies": ["core", "theme-shared", "account-core"] diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/setting-management/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/README.md b/npm/ng-packs/nx/ng-packs/packages/setting-management/README.md new file mode 100644 index 0000000000..4d6e7525c0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/README.md @@ -0,0 +1,3 @@ +

 @abp/ng.setting-management

+ +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/ng-package.json new file mode 100644 index 0000000000..746589c183 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/packages/setting-management/config", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/components/email-setting-group/email-setting-group.component.html b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/components/email-setting-group/email-setting-group.component.html new file mode 100644 index 0000000000..ebdac1326d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/components/email-setting-group/email-setting-group.component.html @@ -0,0 +1,73 @@ +

{{ 'AbpSettingManagement::Menu:Emailing' | abpLocalization }}

+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+ + +
diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/components/email-setting-group/email-setting-group.component.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/components/email-setting-group/email-setting-group.component.ts new file mode 100644 index 0000000000..d756a93a53 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/components/email-setting-group/email-setting-group.component.ts @@ -0,0 +1,60 @@ +import { collapse, ToasterService } from '@abp/ng.theme.shared'; +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { finalize } from 'rxjs/operators'; +import { EmailSettingsService } from '../../proxy/email-settings.service'; +import { EmailSettingsDto } from '../../proxy/models'; + +@Component({ + selector: 'abp-email-setting-group', + templateUrl: 'email-setting-group.component.html', + animations: [collapse], +}) +export class EmailSettingGroupComponent implements OnInit { + form: FormGroup; + + saving = false; + + constructor( + private emailSettingsService: EmailSettingsService, + private fb: FormBuilder, + private toasterService: ToasterService, + ) {} + + ngOnInit() { + this.getData(); + } + + private getData() { + this.emailSettingsService.get().subscribe(res => { + this.buildForm(res); + }); + } + + private buildForm(emailSettings: EmailSettingsDto) { + this.form = this.fb.group({ + defaultFromDisplayName: [emailSettings.defaultFromDisplayName, [Validators.required]], + defaultFromAddress: [emailSettings.defaultFromAddress, [Validators.required]], + smtpHost: [emailSettings.smtpHost], + smtpPort: [emailSettings.smtpPort, [Validators.required]], + smtpEnableSsl: [emailSettings.smtpEnableSsl], + smtpUseDefaultCredentials: [emailSettings.smtpUseDefaultCredentials], + smtpDomain: [emailSettings.smtpDomain], + smtpUserName: [emailSettings.smtpUserName], + smtpPassword: [emailSettings.smtpPassword], + }); + } + + submit() { + if (this.saving || this.form.invalid) return; + + this.saving = true; + this.emailSettingsService + .update(this.form.value) + .pipe(finalize(() => (this.saving = false))) + .subscribe(() => { + this.toasterService.success('AbpSettingManagement::SuccessfullySaved'); + this.getData(); + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/enums/index.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/enums/index.ts new file mode 100644 index 0000000000..34fd5f8eb8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/enums/index.ts @@ -0,0 +1,2 @@ +export * from './route-names'; +export * from './setting-tab-names'; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/enums/route-names.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/enums/route-names.ts new file mode 100644 index 0000000000..86ad145f5f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/enums/route-names.ts @@ -0,0 +1,3 @@ +export const enum eSettingManagementRouteNames { + Settings = 'AbpSettingManagement::Settings', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/enums/setting-tab-names.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/enums/setting-tab-names.ts new file mode 100644 index 0000000000..15eff851ac --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/enums/setting-tab-names.ts @@ -0,0 +1,3 @@ +export const enum eSettingManamagementSettingTabNames { + EmailSettingGroup = 'AbpSettingManagement::Menu:Emailing', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/providers/index.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/providers/index.ts new file mode 100644 index 0000000000..a1e873bacc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/providers/index.ts @@ -0,0 +1,2 @@ +export * from './route.provider'; +export * from './setting-tab.provider'; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/providers/route.provider.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/providers/route.provider.ts new file mode 100644 index 0000000000..9d272b8be0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/providers/route.provider.ts @@ -0,0 +1,43 @@ +import { eLayoutType, RoutesService, SettingTabsService } from '@abp/ng.core'; +import { eThemeSharedRouteNames } from '@abp/ng.theme.shared'; +import { APP_INITIALIZER } from '@angular/core'; +import { debounceTime, map } from 'rxjs/operators'; +import { eSettingManagementRouteNames } from '../enums/route-names'; + +export const SETTING_MANAGEMENT_ROUTE_PROVIDERS = [ + { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, + { + provide: APP_INITIALIZER, + useFactory: hideRoutes, + deps: [RoutesService, SettingTabsService], + multi: true, + }, +]; + +export function configureRoutes(routesService: RoutesService) { + return () => { + routesService.add([ + { + name: eSettingManagementRouteNames.Settings, + path: '/setting-management', + parentName: eThemeSharedRouteNames.Administration, + layout: eLayoutType.application, + order: 100, + iconClass: 'fa fa-cog', + }, + ]); + }; +} + +export function hideRoutes(routesService: RoutesService, settingTabsService: SettingTabsService) { + return () => { + settingTabsService.visible$ + .pipe( + debounceTime(0), + map(nodes => !nodes.length), + ) + .subscribe(invisible => + routesService.patch(eSettingManagementRouteNames.Settings, { invisible }), + ); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts new file mode 100644 index 0000000000..f88e3c3020 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts @@ -0,0 +1,26 @@ +import { SettingTabsService } from '@abp/ng.core'; +import { APP_INITIALIZER } from '@angular/core'; +import { EmailSettingGroupComponent } from '../components/email-setting-group/email-setting-group.component'; +import { eSettingManamagementSettingTabNames } from '../enums/setting-tab-names'; + +export const SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS = [ + { + provide: APP_INITIALIZER, + useFactory: configureSettingTabs, + deps: [SettingTabsService], + multi: true, + }, +]; + +export function configureSettingTabs(settingTabs: SettingTabsService) { + return () => { + settingTabs.add([ + { + name: eSettingManamagementSettingTabNames.EmailSettingGroup, + order: 100, + requiredPolicy: 'SettingManagement.Emailing', + component: EmailSettingGroupComponent, + }, + ]); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/README.md b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/README.md new file mode 100644 index 0000000000..767dfd0f7c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/README.md @@ -0,0 +1,17 @@ +# Proxy Generation Output + +This directory includes the output of the latest proxy generation. +The files and folders in it will be overwritten when proxy generation is run again. +Therefore, please do not place your own content in this folder. + +In addition, `generate-proxy.json` works like a lock file. +It includes information used by the proxy generator, so please do not delete or modify it. + +Finally, the name of the files and folders should not be changed for two reasons: +- Proxy generator will keep creating them at those paths and you will have multiple copies of the same content. +- ABP Suite generates files which include imports from this folder. + +> **Important Notice:** If you are building a module and are planning to publish to npm, +> some of the generated proxies are likely to be exported from public-api.ts file. In such a case, +> please make sure you export files directly and not from barrel exports. In other words, +> do not include index.ts exports in your public-api.ts exports. diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/email-settings.service.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/email-settings.service.ts new file mode 100644 index 0000000000..a9967ef6a4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/email-settings.service.ts @@ -0,0 +1,27 @@ +import type { EmailSettingsDto, UpdateEmailSettingsDto } from './models'; +import { RestService } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class EmailSettingsService { + apiName = 'SettingManagement'; + + get = () => + this.restService.request({ + method: 'GET', + url: '/api/setting-management/emailing', + }, + { apiName: this.apiName }); + + update = (input: UpdateEmailSettingsDto) => + this.restService.request({ + method: 'POST', + url: '/api/setting-management/emailing', + body: input, + }, + { apiName: this.apiName }); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/generate-proxy.json b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/generate-proxy.json new file mode 100644 index 0000000000..f5a18bee75 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/generate-proxy.json @@ -0,0 +1,4745 @@ +{ + "generated": [ + "settingManagement" + ], + "modules": { + "featureManagement": { + "rootPath": "featureManagement", + "remoteServiceName": "AbpFeatureManagement", + "controllers": { + "Volo.Abp.FeatureManagement.FeaturesController": { + "controllerName": "Features", + "type": "Volo.Abp.FeatureManagement.FeaturesController", + "interfaces": [ + { + "type": "Volo.Abp.FeatureManagement.IFeatureAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", + "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "multi-tenancy": { + "rootPath": "multi-tenancy", + "remoteServiceName": "AbpTenantManagement", + "controllers": { + "Volo.Abp.TenantManagement.TenantController": { + "controllerName": "Tenant", + "type": "Volo.Abp.TenantManagement.TenantController", + "interfaces": [ + { + "type": "Volo.Abp.TenantManagement.ITenantAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.GetTenantsInput, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.GetTenantsInput", + "typeSimple": "Volo.Abp.TenantManagement.GetTenantsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantCreateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantUpdateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetDefaultConnectionStringAsyncById": { + "uniqueName": "GetDefaultConnectionStringAsyncById", + "name": "GetDefaultConnectionStringAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.String", + "typeSimple": "string" + } + }, + "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString": { + "uniqueName": "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString", + "name": "UpdateDefaultConnectionStringAsync", + "httpMethod": "PUT", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "defaultConnectionString", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "defaultConnectionString", + "name": "defaultConnectionString", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "DeleteDefaultConnectionStringAsyncById": { + "uniqueName": "DeleteDefaultConnectionStringAsyncById", + "name": "DeleteDefaultConnectionStringAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "settingManagement": { + "rootPath": "settingManagement", + "remoteServiceName": "SettingManagement", + "controllers": { + "Volo.Abp.SettingManagement.EmailSettingsController": { + "controllerName": "EmailSettings", + "type": "Volo.Abp.SettingManagement.EmailSettingsController", + "interfaces": [ + { + "type": "Volo.Abp.SettingManagement.IEmailSettingsAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/setting-management/emailing", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.SettingManagement.EmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.EmailSettingsDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "POST", + "url": "api/setting-management/emailing", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto, Volo.Abp.SettingManagement.Application.Contracts", + "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "permissionManagement": { + "rootPath": "permissionManagement", + "remoteServiceName": "AbpPermissionManagement", + "controllers": { + "Volo.Abp.PermissionManagement.PermissionsController": { + "controllerName": "Permissions", + "type": "Volo.Abp.PermissionManagement.PermissionsController", + "interfaces": [ + { + "type": "Volo.Abp.PermissionManagement.IPermissionAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", + "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "account": { + "rootPath": "account", + "remoteServiceName": "AbpAccount", + "controllers": { + "Volo.Abp.Account.Web.Areas.Account.Controllers.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.AccountController", + "interfaces": [], + "actions": { + "LoginByLogin": { + "uniqueName": "LoginByLogin", + "name": "Login", + "httpMethod": "POST", + "url": "api/account/login", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Web", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + }, + "Logout": { + "uniqueName": "Logout", + "name": "Logout", + "httpMethod": "GET", + "url": "api/account/logout", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "CheckPasswordByLogin": { + "uniqueName": "CheckPasswordByLogin", + "name": "CheckPassword", + "httpMethod": "POST", + "url": "api/account/check-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Web", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + } + } + }, + "Volo.Abp.Account.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.AccountController", + "interfaces": [ + { + "type": "Volo.Abp.Account.IAccountAppService" + } + ], + "actions": { + "RegisterAsyncByInput": { + "uniqueName": "RegisterAsyncByInput", + "name": "RegisterAsync", + "httpMethod": "POST", + "url": "api/account/register", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.RegisterDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "SendPasswordResetCodeAsyncByInput": { + "uniqueName": "SendPasswordResetCodeAsyncByInput", + "name": "SendPasswordResetCodeAsync", + "httpMethod": "POST", + "url": "api/account/send-password-reset-code", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendPasswordResetCodeDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "ResetPasswordAsyncByInput": { + "uniqueName": "ResetPasswordAsyncByInput", + "name": "ResetPasswordAsync", + "httpMethod": "POST", + "url": "api/account/reset-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ResetPasswordDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "abp": { + "rootPath": "abp", + "remoteServiceName": "abp", + "controllers": { + "Pages.Abp.MultiTenancy.AbpTenantController": { + "controllerName": "AbpTenant", + "type": "Pages.Abp.MultiTenancy.AbpTenantController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" + } + ], + "actions": { + "FindTenantByNameAsyncByName": { + "uniqueName": "FindTenantByNameAsyncByName", + "name": "FindTenantByNameAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-name/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "name", + "name": "name", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + }, + "FindTenantByIdAsyncById": { + "uniqueName": "FindTenantByIdAsyncById", + "name": "FindTenantByIdAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-id/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { + "controllerName": "AbpApplicationConfiguration", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/abp/application-configuration", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { + "controllerName": "AbpApiDefinition", + "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", + "interfaces": [], + "actions": { + "GetByModel": { + "uniqueName": "GetByModel", + "name": "Get", + "httpMethod": "GET", + "url": "api/abp/api-definition", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "model", + "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "model", + "name": "IncludeTypes", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "model" + } + ], + "returnValue": { + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" + } + } + } + } + } + }, + "identity": { + "rootPath": "identity", + "remoteServiceName": "AbpIdentity", + "controllers": { + "Volo.Abp.Identity.IdentityRoleController": { + "controllerName": "IdentityRole", + "type": "Volo.Abp.Identity.IdentityRoleController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityRoleAppService" + } + ], + "actions": { + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity/roles/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityRolesInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityRolesInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityRolesInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleCreateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleUpdateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserController": { + "controllerName": "IdentityUser", + "type": "Volo.Abp.Identity.IdentityUserController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityUsersInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserCreateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetRolesAsyncById": { + "uniqueName": "GetRolesAsyncById", + "name": "GetRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAssignableRolesAsync": { + "uniqueName": "GetAssignableRolesAsync", + "name": "GetAssignableRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/assignable-roles", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "UpdateRolesAsyncByIdAndInput": { + "uniqueName": "UpdateRolesAsyncByIdAndInput", + "name": "UpdateRolesAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateRolesDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "FindByUsernameAsyncByUserName": { + "uniqueName": "FindByUsernameAsyncByUserName", + "name": "FindByUsernameAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "userName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "userName", + "name": "userName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "FindByEmailAsyncByEmail": { + "uniqueName": "FindByEmailAsyncByEmail", + "name": "FindByEmailAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-email/{email}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "email", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "email", + "name": "email", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserLookupController": { + "controllerName": "IdentityUserLookup", + "type": "Volo.Abp.Identity.IdentityUserLookupController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserLookupAppService" + } + ], + "actions": { + "FindByIdAsyncById": { + "uniqueName": "FindByIdAsyncById", + "name": "FindByIdAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "FindByUserNameAsyncByUserName": { + "uniqueName": "FindByUserNameAsyncByUserName", + "name": "FindByUserNameAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "userName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "userName", + "name": "userName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "SearchAsyncByInput": { + "uniqueName": "SearchAsyncByInput", + "name": "SearchAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/search", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupSearchInputDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupSearchInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupSearchInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetCountAsyncByInput": { + "uniqueName": "GetCountAsyncByInput", + "name": "GetCountAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/count", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupCountInputDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupCountInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupCountInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Int64", + "typeSimple": "number" + } + } + } + }, + "Volo.Abp.Identity.ProfileController": { + "controllerName": "Profile", + "type": "Volo.Abp.Identity.ProfileController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IProfileAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UpdateProfileDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "ChangePasswordAsyncByInput": { + "uniqueName": "ChangePasswordAsyncByInput", + "name": "ChangePasswordAsync", + "httpMethod": "POST", + "url": "api/identity/my-profile/change-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.ChangePasswordInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + } + }, + "types": { + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserNameOrEmailAddress", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "RememberMe", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Result", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType", + "isRequired": false + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Success", + "InvalidUserNameOrPassword", + "NotAllowed", + "LockedOut", + "RequiresTwoFactor" + ], + "enumValues": [ + 1, + 2, + 3, + 4, + 5 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Account.RegisterDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "EmailAddress", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "AppName", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.ObjectExtending.ExtensibleObject": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ExtraProperties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "LockoutEnabled", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "LockoutEnd", + "type": "System.DateTimeOffset?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "IsDeleted", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DeleterId", + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "DeletionTime", + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "LastModificationTime", + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "LastModifierId", + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "CreationTime", + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreatorId", + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleEntityDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TKey" + ], + "properties": [ + { + "name": "Id", + "type": "TKey", + "typeSimple": "TKey", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.SendPasswordResetCodeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Email", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "AppName", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "ReturnUrl", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ReturnUrlHash", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.ResetPasswordDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ResetToken", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Success", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Items", + "type": "[T]", + "typeSimple": "[T]", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsDefault", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsStatic", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsPublic", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.GetIdentityRolesInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.LimitedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.LimitedResultRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DefaultMaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "MaxMaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultDto": { + "baseType": "Volo.Abp.Application.Dtos.ListResultDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "TotalCount", + "type": "System.Int64", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "IsDefault", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsPublic", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.GetIdentityUsersInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LockoutEnabled", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RoleNames", + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateRolesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleNames", + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": true + } + ] + }, + "Volo.Abp.Users.UserData": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UserLookupSearchInputDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UserLookupCountInputDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.ProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsExternal", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "HasPassword", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UpdateProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.ChangePasswordInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CurrentPassword", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "NewPassword", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.PermissionManagement.GetPermissionListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityDisplayName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Groups", + "type": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Permissions", + "type": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGrantInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ParentName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsGranted", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AllowedProviders", + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "GrantedProviders", + "type": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.ProviderInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ProviderName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ProviderKey", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Permissions", + "type": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsGranted", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.SettingManagement.EmailSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SmtpHost", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPort", + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "SmtpUserName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPassword", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpDomain", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpEnableSsl", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "SmtpUseDefaultCredentials", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultFromAddress", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DefaultFromDisplayName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.SettingManagement.UpdateEmailSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SmtpHost", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPort", + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "SmtpUserName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPassword", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpDomain", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpEnableSsl", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "SmtpUseDefaultCredentials", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultFromAddress", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "DefaultFromDisplayName", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.TenantManagement.TenantDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.TenantManagement.GetTenantsInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.TenantManagement.TenantCreateDto": { + "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AdminEmailAddress", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "AdminPassword", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.TenantManagement.TenantUpdateDto": { + "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.FeatureManagement.GetFeatureListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Groups", + "type": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Features", + "type": "[Volo.Abp.FeatureManagement.FeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Provider", + "type": "Volo.Abp.FeatureManagement.FeatureProviderDto", + "typeSimple": "Volo.Abp.FeatureManagement.FeatureProviderDto", + "isRequired": false + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ValueType", + "type": "Volo.Abp.Validation.StringValues.IStringValueType", + "typeSimple": "Volo.Abp.Validation.StringValues.IStringValueType", + "isRequired": false + }, + { + "name": "Depth", + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "ParentName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureProviderDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Key", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Validation.StringValues.IStringValueType": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Item", + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + }, + { + "name": "Properties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + }, + { + "name": "Validator", + "type": "Volo.Abp.Validation.StringValues.IValueValidator", + "typeSimple": "Volo.Abp.Validation.StringValues.IValueValidator", + "isRequired": false + } + ] + }, + "Volo.Abp.Validation.StringValues.IValueValidator": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Item", + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + }, + { + "name": "Properties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeaturesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Features", + "type": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Localization", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "isRequired": false + }, + { + "name": "Auth", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "isRequired": false + }, + { + "name": "Setting", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "isRequired": false + }, + { + "name": "CurrentUser", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "isRequired": false + }, + { + "name": "Features", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "isRequired": false + }, + { + "name": "MultiTenancy", + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "isRequired": false + }, + { + "name": "CurrentTenant", + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "isRequired": false + }, + { + "name": "Timing", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "isRequired": false + }, + { + "name": "Clock", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "isRequired": false + }, + { + "name": "ObjectExtensions", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:System.Collections.Generic.Dictionary}", + "typeSimple": "{string:System.Collections.Generic.Dictionary}", + "isRequired": false + }, + { + "name": "Languages", + "type": "[Volo.Abp.Localization.LanguageInfo]", + "typeSimple": "[Volo.Abp.Localization.LanguageInfo]", + "isRequired": false + }, + { + "name": "CurrentCulture", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "isRequired": false + }, + { + "name": "DefaultResourceName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LanguagesMap", + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}", + "isRequired": false + }, + { + "name": "LanguageFilesMap", + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}", + "isRequired": false + } + ] + }, + "Volo.Abp.Localization.LanguageInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UiCultureName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FlagIcon", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EnglishName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ThreeLetterIsoLanguageName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TwoLetterIsoLanguageName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsRightToLeft", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "NativeName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DateTimeFormat", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CalendarAlgorithmType", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DateTimeFormatLong", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShortDatePattern", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FullDateTimePattern", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DateSeparator", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShortTimePattern", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LongTimePattern", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.NameValue": { + "baseType": "Volo.Abp.NameValue", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.NameValue": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "type": "T", + "typeSimple": "T", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Policies", + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}", + "isRequired": false + }, + { + "name": "GrantedPolicies", + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:System.String}", + "typeSimple": "{string:string}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAuthenticated", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Id", + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SurName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailVerified", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberVerified", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Roles", + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:System.String}", + "typeSimple": "{string:string}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsEnabled", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZone", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Iana", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "isRequired": false + }, + { + "name": "Windows", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneId", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Kind", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "isRequired": false + }, + { + "name": "Enums", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Entities", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "isRequired": false + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Properties", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "isRequired": false + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "isRequired": false + }, + { + "name": "Api", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "isRequired": false + }, + { + "name": "Ui", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "isRequired": false + }, + { + "name": "Attributes", + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "isRequired": false + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Resource", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnGet", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "isRequired": false + }, + { + "name": "OnCreate", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "isRequired": false + }, + { + "name": "OnUpdate", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnTable", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "isRequired": false + }, + { + "name": "OnCreateForm", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "isRequired": false + }, + { + "name": "OnEditForm", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "isRequired": false + }, + { + "name": "Lookup", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Url", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ResultListPropertyName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayPropertyName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ValuePropertyName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FilterParamName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Config", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Fields", + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "isRequired": false + }, + { + "name": "LocalizationResource", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IncludeTypes", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "type": "{System.String:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "isRequired": false + }, + { + "name": "Types", + "type": "{System.String:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ModuleApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RootPath", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RemoteServiceName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Controllers", + "type": "{System.String:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ControllerName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Interfaces", + "type": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "isRequired": false + }, + { + "name": "Actions", + "type": "{System.String:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ActionApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UniqueName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "HttpMethod", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Url", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SupportedVersions", + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "ParametersOnMethod", + "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "isRequired": false + }, + { + "name": "Parameters", + "type": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "isRequired": false + }, + { + "name": "ReturnValue", + "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeAsString", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsOptional", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NameOnMethod", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsOptional", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + }, + { + "name": "ConstraintTypes", + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "BindingSourceId", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DescriptorName", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.TypeApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BaseType", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsEnum", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "EnumNames", + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "EnumValues", + "type": "[System.Object]", + "typeSimple": "[object]", + "isRequired": false + }, + { + "name": "GenericArguments", + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "Properties", + "type": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.PropertyApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsRequired", + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + } + } +} \ No newline at end of file diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/index.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/index.ts new file mode 100644 index 0000000000..aca6de1944 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/index.ts @@ -0,0 +1,2 @@ +export * from './email-settings.service'; +export * from './models'; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/models.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/models.ts new file mode 100644 index 0000000000..99e2268d0e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/models.ts @@ -0,0 +1,24 @@ + +export interface EmailSettingsDto { + smtpHost?: string; + smtpPort: number; + smtpUserName?: string; + smtpPassword?: string; + smtpDomain?: string; + smtpEnableSsl: boolean; + smtpUseDefaultCredentials: boolean; + defaultFromAddress?: string; + defaultFromDisplayName?: string; +} + +export interface UpdateEmailSettingsDto { + smtpHost?: string; + smtpPort: number; + smtpUserName?: string; + smtpPassword?: string; + smtpDomain?: string; + smtpEnableSsl: boolean; + smtpUseDefaultCredentials: boolean; + defaultFromAddress: string; + defaultFromDisplayName: string; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/public-api.ts new file mode 100644 index 0000000000..c33f10d4d2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/public-api.ts @@ -0,0 +1,5 @@ +export * from './enums'; +export * from './providers'; +export * from './setting-management-config.module'; +export * from './proxy'; +export * from './components/email-setting-group/email-setting-group.component'; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/setting-management-config.module.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/setting-management-config.module.ts new file mode 100644 index 0000000000..38c04c68a0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/setting-management-config.module.ts @@ -0,0 +1,20 @@ +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { CoreModule } from '@abp/ng.core'; +import { EmailSettingGroupComponent } from './components/email-setting-group/email-setting-group.component'; +import { SETTING_MANAGEMENT_ROUTE_PROVIDERS } from './providers/route.provider'; +import { SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS } from './providers/setting-tab.provider'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; + +@NgModule({ + imports: [CoreModule, NgxValidateCoreModule], + declarations: [EmailSettingGroupComponent], + exports: [EmailSettingGroupComponent], +}) +export class SettingManagementConfigModule { + static forRoot(): ModuleWithProviders { + return { + ngModule: SettingManagementConfigModule, + providers: [SETTING_MANAGEMENT_ROUTE_PROVIDERS, SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS], + }; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/jest.config.js b/npm/ng-packs/nx/ng-packs/packages/setting-management/jest.config.js new file mode 100644 index 0000000000..860c59d65c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'setting-management', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/packages/setting-management', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/setting-management/ng-package.json new file mode 100644 index 0000000000..5e181fe8f1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/ng-package.json @@ -0,0 +1,8 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/packages/setting-management", + "lib": { + "entryFile": "src/public-api.ts" + }, + "allowedNonPeerDependencies": ["@abp/ng.theme.shared", "@abp/ng.components"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/package.json b/npm/ng-packs/nx/ng-packs/packages/setting-management/package.json new file mode 100644 index 0000000000..55fe65c71a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/package.json @@ -0,0 +1,17 @@ +{ + "name": "@abp/ng.setting-management", + "version": "4.4.0", + "homepage": "https://abp.io", + "repository": { + "type": "git", + "url": "https://github.com/abpframework/abp.git" + }, + "dependencies": { + "@abp/ng.components": "~4.4.0", + "@abp/ng.theme.shared": "~4.4.0", + "tslib": "^2.0.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/actions/index.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/actions/index.ts new file mode 100644 index 0000000000..e51bb79bf8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/actions/index.ts @@ -0,0 +1 @@ +export * from './setting-management.actions'; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/actions/setting-management.actions.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/actions/setting-management.actions.ts new file mode 100644 index 0000000000..9fd4c48238 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/actions/setting-management.actions.ts @@ -0,0 +1,6 @@ +import { ABP } from '@abp/ng.core'; + +export class SetSelectedSettingTab { + static readonly type = '[SettingManagement] Set Selected Tab'; + constructor(public payload: ABP.Tab) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html new file mode 100644 index 0000000000..d099de1674 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html @@ -0,0 +1,36 @@ + +
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts new file mode 100644 index 0000000000..e8e94293e9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts @@ -0,0 +1,42 @@ +import { ABP, SettingTabsService } from '@abp/ng.core'; +import { Component, OnDestroy, OnInit, TrackByFunction } from '@angular/core'; +import { Store } from '@ngxs/store'; +import { Subscription } from 'rxjs'; +import { SetSelectedSettingTab } from '../actions/setting-management.actions'; +import { SettingManagementState } from '../states/setting-management.state'; + +@Component({ + selector: 'abp-setting-management', + templateUrl: './setting-management.component.html', +}) +export class SettingManagementComponent implements OnDestroy, OnInit { + private subscription = new Subscription(); + settings: ABP.Tab[] = []; + + set selected(value: ABP.Tab) { + this.store.dispatch(new SetSelectedSettingTab(value)); + } + get selected(): ABP.Tab { + const value = this.store.selectSnapshot(SettingManagementState.getSelectedTab); + + return value?.component ? value : this.settings[0] || ({} as ABP.Tab); + } + + trackByFn: TrackByFunction = (_, item) => item.name; + + constructor(private store: Store, private settingTabsService: SettingTabsService) {} + + ngOnDestroy() { + this.subscription.unsubscribe(); + } + + ngOnInit() { + this.subscription.add( + this.settingTabsService.visible$.subscribe(settings => { + this.settings = settings; + + if (!this.selected) this.selected = this.settings[0]; + }), + ); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/enums/components.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/enums/components.ts new file mode 100644 index 0000000000..7dafe76b7d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/enums/components.ts @@ -0,0 +1,3 @@ +export const enum eSettingManagementComponents { + SettingManagement = 'SettingManagement.SettingManagementComponent', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/enums/index.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/enums/index.ts new file mode 100644 index 0000000000..5ac9b6e8fa --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/enums/index.ts @@ -0,0 +1,2 @@ +export * from './components'; +export * from './route-names'; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/enums/route-names.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/enums/route-names.ts new file mode 100644 index 0000000000..86ad145f5f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/enums/route-names.ts @@ -0,0 +1,3 @@ +export const enum eSettingManagementRouteNames { + Settings = 'AbpSettingManagement::Settings', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/models/index.ts new file mode 100644 index 0000000000..16955ae40f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/models/index.ts @@ -0,0 +1 @@ +export * from './setting-management'; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/models/setting-management.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/models/setting-management.ts new file mode 100644 index 0000000000..cb6f542cbc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/models/setting-management.ts @@ -0,0 +1,7 @@ +import { ABP } from '@abp/ng.core'; + +export namespace SettingManagement { + export interface State { + selectedTab?: ABP.Tab; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts new file mode 100644 index 0000000000..55a056c411 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts @@ -0,0 +1,37 @@ +import { + DynamicLayoutComponent, + ReplaceableComponents, + ReplaceableRouteContainerComponent, + AuthGuard, +} from '@abp/ng.core'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { SettingManagementComponent } from './components/setting-management.component'; +import { eSettingManagementComponents } from './enums/components'; + +const routes: Routes = [ + { + path: '', + component: DynamicLayoutComponent, + canActivate: [AuthGuard], + children: [ + { + path: '', + component: ReplaceableRouteContainerComponent, + data: { + requiredPolicy: 'AbpAccount.SettingManagement', + replaceableComponent: { + key: eSettingManagementComponents.SettingManagement, + defaultComponent: SettingManagementComponent, + } as ReplaceableComponents.RouteData, + }, + }, + ], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class SettingManagementRoutingModule {} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/setting-management.module.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/setting-management.module.ts new file mode 100644 index 0000000000..c0df97dc22 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/setting-management.module.ts @@ -0,0 +1,32 @@ +import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; +import { NgxsModule } from '@ngxs/store'; +import { PageModule } from '@abp/ng.components/page'; +import { SettingManagementComponent } from './components/setting-management.component'; +import { SettingManagementRoutingModule } from './setting-management-routing.module'; +import { SettingManagementState } from './states/setting-management.state'; + +@NgModule({ + declarations: [SettingManagementComponent], + exports: [SettingManagementComponent], + imports: [ + SettingManagementRoutingModule, + CoreModule, + ThemeSharedModule, + PageModule, + NgxsModule.forFeature([SettingManagementState]), + ], +}) +export class SettingManagementModule { + static forChild(): ModuleWithProviders { + return { + ngModule: SettingManagementModule, + providers: [], + }; + } + + static forLazy(): NgModuleFactory { + return new LazyModuleFactory(SettingManagementModule.forChild()); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/states/index.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/states/index.ts new file mode 100644 index 0000000000..23cda4c4d0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/states/index.ts @@ -0,0 +1 @@ +export * from './setting-management.state'; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/states/setting-management.state.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/states/setting-management.state.ts new file mode 100644 index 0000000000..19a6ba8835 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/states/setting-management.state.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@angular/core'; +import { Action, Selector, State, StateContext } from '@ngxs/store'; +import { SetSelectedSettingTab } from '../actions/setting-management.actions'; +import { SettingManagement } from '../models/setting-management'; + +@State({ + name: 'SettingManagementState', + defaults: {}, +}) +@Injectable() +export class SettingManagementState { + @Selector() + static getSelectedTab({ selectedTab }: SettingManagement.State) { + return selectedTab; + } + + @Action(SetSelectedSettingTab) + settingManagementAction( + { patchState }: StateContext, + { payload }: SetSelectedSettingTab, + ) { + patchState({ + selectedTab: payload, + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/public-api.ts new file mode 100644 index 0000000000..24e62d4da1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/public-api.ts @@ -0,0 +1,3 @@ +export * from './lib/setting-management.module'; +export * from './lib/components/setting-management.component'; +export * from './lib/enums'; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.json new file mode 100644 index 0000000000..62ebbd9464 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.lib.json new file mode 100644 index 0000000000..bbcc12b1c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.lib.prod.json new file mode 100644 index 0000000000..331d0ecb05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial", + "enableIvy": false + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index be7720c2ee..5bce53d760 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -15,7 +15,7 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { - "@abp/feature-management": ["dist/packages/feature-management"], + "@abp/ng.feature-management": ["dist/packages/feature-management"], "@abp/ng.account.core": ["dist/packages/account-core"], "@abp/ng.components": ["dist/packages/components"], "@abp/ng.components/page": ["dist/packages/components/page"], @@ -30,9 +30,9 @@ "dist/packages/theme-shared/extensions" ], "@abp/ng.theme.shared/testing": ["dist/packages/theme-shared/testing"], - "@abp/permission-management": [ - "dist/packages/permission-management" - ] + "@abp/ng.permission-management": ["dist/packages/permission-management"], + "@abp/ng.setting-management": ["dist/packages/setting-management"], + "@abp/ng.setting-management/config": ["dist/packages/setting-management/config"] } }, "exclude": ["node_modules", "tmp"] diff --git a/npm/ng-packs/nx/ng-packs/yarn.lock b/npm/ng-packs/nx/ng-packs/yarn.lock index 2f001786f8..ebe068c0f0 100644 --- a/npm/ng-packs/nx/ng-packs/yarn.lock +++ b/npm/ng-packs/nx/ng-packs/yarn.lock @@ -9,6 +9,14 @@ dependencies: tslib "^2.0.0" +"@abp/ng.account@~4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-4.4.0.tgz#7f9f828180f739ca7881d4b7ba44a588cf1c377f" + integrity sha512-kig1vu3+7RgQxDhQFbWY0mdCp07QQPyAS6ORd8sMWdM9NkhCU1xCSZOd3HA1us+aVtgezvBxV2nY7JKYtpmmcA== + dependencies: + "@abp/ng.theme.shared" "~4.4.0" + tslib "^2.0.0" + "@abp/ng.components@~4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@abp/ng.components/-/ng.components-4.4.0.tgz#5eefed4c486de0a83431fe9740567b88fd70a36f" @@ -275,18 +283,6 @@ rxjs "6.6.7" source-map "0.7.3" -"@angular-devkit/core@12.2.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-12.2.0.tgz#6ba67f5299d172a29a90394a3a8df2a164e0c15d" - integrity sha512-9H2NfE4eazpMPwbAx4ZbtTNijo6419DZsmQzlzwQWzTInO3+CAjQuyW53W5Nt/IoauNVOgOEsC8/YbYjNmN0Aw== - dependencies: - ajv "8.6.2" - ajv-formats "2.1.0" - fast-json-stable-stringify "2.1.0" - magic-string "0.25.7" - rxjs "6.6.7" - source-map "0.7.3" - "@angular-devkit/core@12.2.1": version "12.2.1" resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-12.2.1.tgz#4c987ea2a55ce201a15313336e2c9d7e56762f10" @@ -311,12 +307,12 @@ source-map "0.7.3" "@angular-devkit/schematics-cli@~12.2.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics-cli/-/schematics-cli-12.2.0.tgz#59719e877b0278f8447b2dfede8cd55832748a87" - integrity sha512-S6KSneLJfyMd711jzimgP/bVh0lZjWUgGCy21WmQuH2PWxPi4lYixtRZwgk2JmVkVYvA0F202GAYAO4G5ak0tQ== + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics-cli/-/schematics-cli-12.2.1.tgz#9c4559eec8c97b00b8242686df384383c25590aa" + integrity sha512-NaD5v8buK4RGT27znZPlKAew1uxnQxyYwjFFpZXuzRtcbN1i/hjhapOj4HEJIIDkIzVscW6JBo2R50AEH4F18Q== dependencies: - "@angular-devkit/core" "12.2.0" - "@angular-devkit/schematics" "12.2.0" + "@angular-devkit/core" "12.2.1" + "@angular-devkit/schematics" "12.2.1" ansi-colors "4.1.1" inquirer "8.1.2" minimist "1.2.5" @@ -331,15 +327,6 @@ ora "5.4.1" rxjs "6.6.7" -"@angular-devkit/schematics@12.2.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-12.2.0.tgz#8e35c20ec539c3acf92a6d4e9673050cf3241461" - integrity sha512-C+eutMKtOLROk/2zs1NkXeLZJpFtvZm7ctWmcns0Yh83Di2sCgGiSqdqNZFyDplxkt5W5lF2cdBSGyP8ZH+/ug== - dependencies: - "@angular-devkit/core" "12.2.0" - ora "5.4.1" - rxjs "6.6.7" - "@angular-devkit/schematics@12.2.1": version "12.2.1" resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-12.2.1.tgz#83beedd6de4535e4566e651d02ba2b6fda7c7399" @@ -390,9 +377,9 @@ eslint-scope "^5.1.0" "@angular/animations@^12.1.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-12.2.0.tgz#85e4e738bd72011067836b63bb8fc51a44646a7e" - integrity sha512-BCta/HT0VaM0hzsyRyb24UIaV7vlpo2jJjSwnBhO5RosH+bAaA3Faa3ps3AjCDCEXo9z99dvxJFm8WqdunPYyw== + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-12.2.1.tgz#a5e40d93ce349309488dc5e876999f9605b77ac4" + integrity sha512-SDsBBQG2AifuVyo+LUiqFLqzQ8ourO60NhkYGugC934lRqox2ZXmAooDBGMh74K7yrzIxMpbrMbL+qGv4OGpjw== dependencies: tslib "^2.2.0" @@ -431,9 +418,9 @@ uuid "8.3.2" "@angular/common@^12.1.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-12.2.0.tgz#b8bb889f310ae2af359120e110634cf356a6d142" - integrity sha512-9OaqH5WhfJ/YpN9b4TmiGHdOar/3NiGjktwG1/5jV4mTO+tOP25yNO4zCd4RuaRURipWUEa8mSaesgUgTb3jmQ== + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-12.2.1.tgz#d0163538db70e22c4999dd44fab8de3415de4f8c" + integrity sha512-LGQwDN3QKX/0LVQQa6v+/Tc4Za+XiIfJMqmr6KNWh3q6/5zibkPE9YCq/nvolUg7RZzYpG7tFPgnggYtUmKURw== dependencies: tslib "^2.2.0" @@ -458,23 +445,23 @@ yargs "^17.0.0" "@angular/compiler@^12.1.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-12.2.0.tgz#d1585f7b7a67b8393eef2aa4cd3ef47c9d7fc3c0" - integrity sha512-24G1joE699gbAHRAIESVQBI797Q506MZ/LWyFHRjfdlfXgltDN63j5dpNJzb/rUK1/uHGGAJaEH+OE60ZK2q9Q== + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-12.2.1.tgz#963875d1cb4c8b1a1584bd5ed831e25517ff1355" + integrity sha512-XUszrdfjSEi3oI81rL4h4+DeN+j7OZukFZ3Zj77a4lu0BcrHFUZ408hzGnAQVnK4xxcpSjQet8yKGnR08YGxxA== dependencies: tslib "^2.2.0" "@angular/core@^12.1.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-12.2.0.tgz#29869aec3f624f6d4e1b5eedc25475cd5235a2e8" - integrity sha512-zy/gqSlSEmi85HVbpoQ0nhC74xoL+aoofvbkKPgdgyEcnqzBt4IFzH++0EZ+GMeZ2pVoNfiXklUhAy2OBAiR/g== + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-12.2.1.tgz#ad81d97bb9f6977c95d590d0878fce25afa72ca8" + integrity sha512-n3h2SIlTexQRhiU0YKk1qUobZBXtFisfNbV4kJLyjNsGyMt70NQLZVe5mUw7LV7aDAJEinuoCofqBl4FHCigEQ== dependencies: tslib "^2.2.0" "@angular/forms@^12.1.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-12.2.0.tgz#ae43c044404b7cac3595ea2500abb2368889b6ef" - integrity sha512-lhKin5IHElH5qk2Su/o0YMF9JYb84grz0WMIHYmt3EASw/EGvzZwUBd76anJWWwFig6GLw/ZdNC9zLW2Leh06Q== + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-12.2.1.tgz#f101482226c63f0f1af4811f6c0baa551e72fff1" + integrity sha512-frYYb/4KhGJkvQ27k0voRi3ZVPvY6NXBYidPmJf7WBnVY8jgHhfUcjc9wUNaS97TyXB3WG/eY/jLC38tO0atMA== dependencies: tslib "^2.2.0" @@ -493,32 +480,32 @@ yargs "15.3.0" "@angular/localize@~12.2.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-12.2.0.tgz#d27c053306976ce8017f9cda3e8bd5118fc9c2ae" - integrity sha512-LGPWzosJPJX1zI48rNelzjRBMjS7krpp+Mp8p6GdIn79cZCOzdR1/gpqHLPpJyNYBytQP/Ep0kP81LKctpWEzg== + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-12.2.1.tgz#763f8b507df0fa232cf42b90fc5193de0b3a9d0f" + integrity sha512-3vush/iVXw7xIQyCCa+GlWQd3WIX234agie364uFIzTJR/9qIY0XnFYXLGmrq91IXo7320mFuRAFSWThjEPrZw== dependencies: "@babel/core" "7.8.3" glob "7.1.7" yargs "^17.0.0" "@angular/platform-browser-dynamic@^12.1.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.0.tgz#d6d882129b5a0cf201c50f0839e5b434e822f0b0" - integrity sha512-mvUo1WEI8PrJxIer0RLXSW9raYDrKarUQ9T2Q0/R3ZgS6Y1WvoJe+qSZ7K/hCbErH4zd+64TuJHlj+g2WHPLug== + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.1.tgz#993451555c2bea66845c3f47af2e95e38221c7cb" + integrity sha512-eAoLf8jdNHdBxK6yDc3ISPmrWxO46BtwTkibCT8vjVgBX2DweYB+ee0glPboIQao3d42nHRfxy4YeaIyJCvxTg== dependencies: tslib "^2.2.0" "@angular/platform-browser@^12.1.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-12.2.0.tgz#d3d01602e331ace3752111e7e64efc9c4a10e561" - integrity sha512-MIoWBhhMmPBFfuOPBgEG21uqCZVudTj4YMGxQH4iVlI9GD9ZAht8XgopN9Vw4cytPNfKWsspLoruhIWRNSJlNA== + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-12.2.1.tgz#cd7e18403df17ae987705be3ced1a0fbc6e1d23d" + integrity sha512-14PSiuKrXe8KP0K5+WtpwdYALKRIFWp1KxIhmqrpjbW322W9d46dC7LAw8Wzof/aHmDJops63u6EDJG7UeiUOg== dependencies: tslib "^2.2.0" "@angular/router@^12.1.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-12.2.0.tgz#b833706e2d935da9dbc828e280f0f566458531bc" - integrity sha512-C5S0bU8KtU/2wBQ76AZVFivWbGYJCDwkVg2Lk4ddjqs/pKWb0vg2Baa3DfJrIz3esqfYUJl00HMYQVM9+QtZQA== + version "12.2.1" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-12.2.1.tgz#38c5645b6915e6514bf1fda1447648427e28a4d5" + integrity sha512-dWQu+C8U8SMeWtOAl3AlfZxQYv68bisBB4uAuPXoyXiLtHgGclyzu1QZVPXTkoiyGv+odrqX8LaG/eQtbU0G8Q== dependencies: tslib "^2.2.0" @@ -2962,9 +2949,9 @@ universal-user-agent "^6.0.0" "@octokit/openapi-types@^9.5.0": - version "9.6.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-9.6.0.tgz#0260a84f5c61c01755402ab5ac5b1ab46e7c0730" - integrity sha512-L+8x7DpcNtHkMbTxxCxg3cozvHUNP46rOIzFwoMs0piWwQzAGNXqlIQO2GLvnKTWLUh99DkY+UyHVrP4jXlowg== + version "9.7.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-9.7.0.tgz#9897cdefd629cd88af67b8dbe2e5fb19c63426b2" + integrity sha512-TUJ16DJU8mekne6+KVcMV5g6g/rJlrnIKn7aALG9QrNpnEipFc1xjoarh0PKaAWf2Hf+HwthRKYt+9mCm5RsRg== "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" @@ -3010,9 +2997,9 @@ once "^1.4.0" "@octokit/request@^5.2.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.0.tgz#6084861b6e4fa21dc40c8e2a739ec5eff597e672" - integrity sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA== + version "5.6.1" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.1.tgz#f97aff075c37ab1d427c49082fefeef0dba2d8ce" + integrity sha512-Ls2cfs1OfXaOKzkcxnqw5MR6drMA/zWX/LIS/p8Yjdz7QKTPQLMsB3R+OvoxE6XnXeXEE2X7xe4G4l4X0gRiKQ== dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.1.0" @@ -3105,7 +3092,7 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@schematics/angular@12.2.1": +"@schematics/angular@12.2.1", "@schematics/angular@~12.2.0": version "12.2.1" resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-12.2.1.tgz#fe5118672c3be1515ee6ed1428b34b3cd7850002" integrity sha512-v6+LWx688PBmp+XWLtwu+UL1AAZsd0RsBrLmruSul70vFQ0xBB3MIuYlF5NHUukaBP/GMn426UkiTUgYUUM8ww== @@ -3123,15 +3110,6 @@ "@angular-devkit/schematics" "12.1.4" jsonc-parser "3.0.0" -"@schematics/angular@~12.2.0": - version "12.2.0" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-12.2.0.tgz#0c5f30cffa1aef5d7700505ba475007fc1c29a96" - integrity sha512-2NolT/PNKgjINIHvz6o4sYFj4D4ai7Usf+HspQCi9W30qtLV4Z6hRXoEhmDxrGSlF67vJdwUwDM3sP+6Tg8XEw== - dependencies: - "@angular-devkit/core" "12.2.0" - "@angular-devkit/schematics" "12.2.0" - jsonc-parser "3.0.0" - "@sindresorhus/is@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.1.tgz#d26729db850fa327b7cacc5522252194404226f5" @@ -3343,9 +3321,9 @@ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*", "@types/node@>= 8": - version "16.4.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.13.tgz#7dfd9c14661edc65cccd43a29eb454174642370d" - integrity sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg== + version "16.6.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.6.1.tgz#aee62c7b966f55fc66c7b6dfa1d58db2a616da61" + integrity sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw== "@types/node@14.14.33": version "14.14.33" @@ -5026,9 +5004,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001248: - version "1.0.30001249" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001249.tgz#90a330057f8ff75bfe97a94d047d5e14fabb2ee8" - integrity sha512-vcX4U8lwVXPdqzPWi6cAJ3FnQaqXbBqy/GZseKNQzRj37J7qZdGcBtxq/QLFNLLlfsoXLUdHw8Iwenri86Tagw== + version "1.0.30001251" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85" + integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A== canonical-path@1.0.0: version "1.0.0" @@ -6519,9 +6497,9 @@ ejs@^3.1.5: jake "^10.6.1" electron-to-chromium@^1.3.793: - version "1.3.802" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.802.tgz#0afa989321de3e904ac653ee79e0d642883731a1" - integrity sha512-dXB0SGSypfm3iEDxrb5n/IVKeX4uuTnFHdve7v+yKJqNpEP0D4mjFJ8e1znmSR+OOVlVC+kDO6f2kAkTFXvJBg== + version "1.3.805" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.805.tgz#a0873393a3b027ec60bdaf22a19c4946688cf941" + integrity sha512-uUJF59M6pNSRHQaXwdkaNB4BhSQ9lldRdG1qCjlrAFkynPGDc5wPoUcYEQQeQGmKyAWJPvGkYAWmtVrxWmDAkg== elliptic@^6.5.3: version "6.5.4" @@ -6693,9 +6671,9 @@ esbuild@0.12.17: integrity sha512-GshKJyVYUnlSXIZj/NheC2O0Kblh42CS7P1wJyTbbIHevTG4jYMS9NNw8EOd8dDWD0dzydYHS01MpZoUcQXB4g== esbuild@^0.12.15: - version "0.12.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.19.tgz#ab849766705a5093df5acd8ec2f6ba2159a38a6c" - integrity sha512-5NuT1G6THW7l3fsSCDkcPepn24R0XtyPjKoqKHD8LfhqMXzCdz0mrS9HgO6hIhzVT7zt0T+JGbzCqF5AH8hS9w== + version "0.12.20" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.20.tgz#4d3c9d83c99a4031e027b42a4c398c23b6827cb0" + integrity sha512-u7+0qTo9Z64MD9PhooEngCmzyEYJ6ovFhPp8PLNh3UasR5Ihjv6HWVXqm8uHmasdQlpsAf0IsY4U0YVUfCpt4Q== escalade@^3.1.1: version "3.1.1" @@ -7184,9 +7162,9 @@ figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== figlet@^1.2.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.0.tgz#2db4d00a584e5155a96080632db919213c3e003c" - integrity sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww== + version "1.5.2" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.2.tgz#dda34ff233c9a48e36fcff6741aeb5bafe49b634" + integrity sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ== figures@^2.0.0: version "2.0.0" @@ -7725,9 +7703,9 @@ globals@^11.1.0, globals@^11.12.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: - version "13.10.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" - integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== + version "13.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" + integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== dependencies: type-fest "^0.20.2" @@ -8452,9 +8430,11 @@ is-arrayish@^0.2.1: integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-bigint@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.3.tgz#fc9d9e364210480675653ddaea0518528d49a581" - integrity sha512-ZU538ajmYJmzysE5yU4Y7uIrPQ2j704u+hXFiIPQExpqzzUbpe5jCPdTfmz7jXRxZdvjY3KZ3ZNenoXQovX+Dg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" is-binary-path@^1.0.0: version "1.0.1" @@ -10567,9 +10547,9 @@ nan@^2.12.1: integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== nanoid@^3.1.23: - version "3.1.23" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" - integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== + version "3.1.25" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" + integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== nanomatch@^1.2.9: version "1.2.13" @@ -14165,9 +14145,9 @@ tapable@^2.1.1, tapable@^2.2.0: integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: - version "4.4.16" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.16.tgz#4a48b3c025e77d9d0c788f038a09b91c594d326d" - integrity sha512-gOVUT/KWPkGFZQmCRDVFNUWBl7niIo/PRR7lzrIqtZpit+st54lGROuVjc6zEQM9FhH+dJfQIl+9F0k8GNXg5g== + version "4.4.17" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.17.tgz#44be5e3fa8353ee1d11db3b1401561223a5c3985" + integrity sha512-q7OwXq6NTdcYIa+k58nEMV3j1euhDhGCs/VRw9ymx/PbH0jtIM2+VTgDE/BW3rbLkrBUXs5fzEKgic5oUciu7g== dependencies: chownr "^1.1.4" fs-minipass "^1.2.7" @@ -14178,9 +14158,9 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: yallist "^3.1.1" tar@^6.0.2, tar@^6.1.0: - version "6.1.7" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.7.tgz#c566d1107d38b09e92983a68db5534fc7f6cab42" - integrity sha512-PBoRkOJU0X3lejJ8GaRCsobjXTgFofRDSPdSUhRSdlwJfifRlQBwGXitDItdGFu0/h0XDMCkig0RN1iT7DBxhA== + version "6.1.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.8.tgz#4fc50cfe56511c538ce15b71e05eebe66530cbd4" + integrity sha512-sb9b0cp855NbkMJcskdSYA7b11Q8JsX4qe4pyUAfHp+Y6jBjJeek2ZVlwEfWayshEIwlIzXx0Fain3QG9JPm2A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -14559,7 +14539,7 @@ tsickle@^0.39.1: resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.39.1.tgz#7ccf672cde5b430f5dd0b281ee49e170ef390ff9" integrity sha512-CCc9cZhZbKoNizVM+K3Uqgit/go8GacjpqTv1cpwG/n2P0gB9GMoWZbxrUULDE9Wz26Lh86CGf6QyIPUVV1lnQ== -tslib@2.3.0, tslib@^2.0.0, tslib@^2.1.0, tslib@^2.2.0: +tslib@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== @@ -14569,6 +14549,11 @@ tslib@^1.10.0, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + tslib@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" From d75a5c3c8de036f21a1144dfe3933e3b746514db Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 13 Aug 2021 13:07:32 +0300 Subject: [PATCH 12/56] add account package to nx workspace --- npm/ng-packs/nx/ng-packs/angular.json | 41 + npm/ng-packs/nx/ng-packs/nx.json | 4 + npm/ng-packs/nx/ng-packs/package.json | 2 +- .../ng-packs/packages/account/.eslintrc.json | 36 + .../nx/ng-packs/packages/account/README.md | 3 + .../packages/account/config/ng-package.json | 7 + .../config/src/account-config.module.ts | 21 + .../account/config/src/enums/index.ts | 1 + .../account/config/src/enums/route-names.ts | 8 + .../account/config/src/providers/index.ts | 1 + .../config/src/providers/route.provider.ts | 52 + .../packages/account/config/src/public-api.ts | 3 + .../account/config/src/utils/factories.ts | 13 + .../ng-packs/packages/account/jest.config.js | 20 + .../ng-packs/packages/account/ng-package.json | 8 + .../nx/ng-packs/packages/account/package.json | 16 + .../account/src/lib/account-routing.module.ts | 87 + .../account/src/lib/account.module.ts | 59 + .../change-password.component.html | 48 + .../change-password.component.ts | 99 + .../forgot-password.component.html | 40 + .../forgot-password.component.ts | 35 + .../account/src/lib/components/index.ts | 7 + .../lib/components/login/login.component.html | 60 + .../lib/components/login/login.component.ts | 80 + .../manage-profile.component.html | 62 + .../manage-profile.component.ts | 45 + .../personal-settings.component.html | 46 + .../personal-settings.component.ts | 58 + .../register/register.component.html | 51 + .../components/register/register.component.ts | 102 + .../reset-password.component.html | 49 + .../reset-password.component.ts | 70 + .../account/src/lib/enums/components.ts | 11 + .../packages/account/src/lib/enums/index.ts | 1 + .../lib/guards/authentication-flow.guard.ts | 15 + .../packages/account/src/lib/guards/index.ts | 1 + .../account/src/lib/models/account.ts | 12 + .../account/src/lib/models/config-options.ts | 3 + .../packages/account/src/lib/models/index.ts | 2 + .../packages/account/src/lib/proxy/README.md | 17 + .../src/lib/proxy/account/account.service.ts | 37 + .../account/src/lib/proxy/account/index.ts | 4 + .../account/src/lib/proxy/account/models.ts | 21 + .../account/controllers/account.service.ts | 35 + .../web/areas/account/controllers/index.ts | 3 + .../areas/account/controllers/models/index.ts | 2 + .../models/login-result-type.enum.ts | 11 + .../account/controllers/models/models.ts | 12 + .../proxy/account/web/areas/account/index.ts | 2 + .../src/lib/proxy/account/web/areas/index.ts | 2 + .../src/lib/proxy/account/web/index.ts | 2 + .../account/src/lib/proxy/generate-proxy.json | 5202 +++++++++++++++++ .../account/src/lib/proxy/identity/index.ts | 1 + .../account/src/lib/proxy/identity/models.ts | 15 + .../packages/account/src/lib/proxy/index.ts | 3 + .../account/src/lib/services/index.ts | 1 + .../services/manage-profile.state.service.ts | 28 + .../src/lib/tokens/config-options.token.ts | 6 + .../packages/account/src/lib/tokens/index.ts | 1 + .../account/src/lib/utils/auth-utils.ts | 9 + .../account/src/lib/utils/factory-utils.ts | 8 + .../packages/account/src/lib/utils/index.ts | 2 + .../packages/account/src/public-api.ts | 9 + .../packages/account/src/test-setup.ts | 1 + .../ng-packs/packages/account/tsconfig.json | 13 + .../packages/account/tsconfig.lib.json | 14 + .../packages/account/tsconfig.lib.prod.json | 11 + .../packages/account/tsconfig.spec.json | 10 + npm/ng-packs/nx/ng-packs/tsconfig.base.json | 14 +- npm/ng-packs/nx/ng-packs/yarn.lock | 7 - 71 files changed, 6769 insertions(+), 13 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/config/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/config/src/account-config.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/config/src/enums/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/config/src/enums/route-names.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/config/src/providers/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/config/src/providers/route.provider.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/config/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/config/src/utils/factories.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/account-routing.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/account.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/change-password/change-password.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/login/login.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/login/login.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/register/register.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/register/register.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/enums/components.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/enums/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/guards/authentication-flow.guard.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/guards/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/account.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/config-options.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/account.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/account.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/login-result-type.enum.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/generate-proxy.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/identity/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/identity/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/services/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/services/manage-profile.state.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/tokens/config-options.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/tokens/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/utils/auth-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/utils/factory-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/lib/utils/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/tsconfig.lib.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/tsconfig.lib.prod.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/account/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index b5983fe4b4..9207cd53f3 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -1,6 +1,47 @@ { "version": 1, "projects": { + "account": { + "projectType": "library", + "root": "packages/account", + "sourceRoot": "packages/account/src", + "prefix": "abp", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "packages/account/tsconfig.lib.json", + "project": "packages/account/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "packages/account/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "packages/account/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/packages/account"], + "options": { + "jestConfig": "packages/account/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "packages/account/src/**/*.ts", + "packages/account/src/**/*.html" + ] + } + } + } + }, "account-core": { "projectType": "library", "root": "packages/account-core", diff --git a/npm/ng-packs/nx/ng-packs/nx.json b/npm/ng-packs/nx/ng-packs/nx.json index 2cb0b6300e..1b3a2842ca 100644 --- a/npm/ng-packs/nx/ng-packs/nx.json +++ b/npm/ng-packs/nx/ng-packs/nx.json @@ -31,6 +31,10 @@ "appsDir": "" }, "projects": { + "account": { + "tags": [], + "implicitDependencies": ["core", "theme-shared"] + }, "account-core": { "tags": [], "implicitDependencies": ["core", "theme-shared"] diff --git a/npm/ng-packs/nx/ng-packs/package.json b/npm/ng-packs/nx/ng-packs/package.json index de4e93dbd9..8661e6fde1 100644 --- a/npm/ng-packs/nx/ng-packs/package.json +++ b/npm/ng-packs/nx/ng-packs/package.json @@ -62,7 +62,7 @@ "@fortawesome/fontawesome-free": "^5.14.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0", "@ngneat/spectator": "^8.0.3", - "@ngx-validate/core": "^0.1.1", + "@ngx-validate/core": "^0.0.13", "@ngxs/store": "^3.7.0", "@nrwl/angular": "12.6.5", "@nrwl/cli": "12.6.5", diff --git a/npm/ng-packs/nx/ng-packs/packages/account/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/account/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/README.md b/npm/ng-packs/nx/ng-packs/packages/account/README.md new file mode 100644 index 0000000000..f3eaaed299 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/README.md @@ -0,0 +1,3 @@ +

@abp/ng.account

+ +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/packages/account/config/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/account/config/ng-package.json new file mode 100644 index 0000000000..9a33eee628 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/config/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/packages/account/config", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/config/src/account-config.module.ts b/npm/ng-packs/nx/ng-packs/packages/account/config/src/account-config.module.ts new file mode 100644 index 0000000000..2c1345927b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/config/src/account-config.module.ts @@ -0,0 +1,21 @@ +import { Injector, ModuleWithProviders, NgModule } from '@angular/core'; +import { NAVIGATE_TO_MANAGE_PROFILE } from '@abp/ng.core'; +import { ACCOUNT_ROUTE_PROVIDERS } from './providers/route.provider'; +import { navigateToManageProfileFactory } from './utils/factories'; + +@NgModule() +export class AccountConfigModule { + static forRoot(): ModuleWithProviders { + return { + ngModule: AccountConfigModule, + providers: [ + ACCOUNT_ROUTE_PROVIDERS, + { + provide: NAVIGATE_TO_MANAGE_PROFILE, + useFactory: navigateToManageProfileFactory, + deps: [Injector], + }, + ], + }; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/config/src/enums/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/config/src/enums/index.ts new file mode 100644 index 0000000000..3bda94b078 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/config/src/enums/index.ts @@ -0,0 +1 @@ +export * from './route-names'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/config/src/enums/route-names.ts b/npm/ng-packs/nx/ng-packs/packages/account/config/src/enums/route-names.ts new file mode 100644 index 0000000000..b4aa41df7b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/config/src/enums/route-names.ts @@ -0,0 +1,8 @@ +export const enum eAccountRouteNames { + Account = 'AbpAccount::Menu:Account', + Login = 'AbpAccount::Login', + Register = 'AbpAccount::Register', + ManageProfile = 'AbpAccount::MyAccount', + ForgotPassword = 'AbpAccount::ForgotPassword', + ResetPassword = 'AbpAccount::ResetPassword', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/config/src/providers/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/config/src/providers/index.ts new file mode 100644 index 0000000000..fe08efba8c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/config/src/providers/index.ts @@ -0,0 +1 @@ +export * from './route.provider'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/config/src/providers/route.provider.ts b/npm/ng-packs/nx/ng-packs/packages/account/config/src/providers/route.provider.ts new file mode 100644 index 0000000000..6b2f016c66 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/config/src/providers/route.provider.ts @@ -0,0 +1,52 @@ +import { eLayoutType, RoutesService } from '@abp/ng.core'; +import { APP_INITIALIZER } from '@angular/core'; +import { eAccountRouteNames } from '../enums/route-names'; + +export const ACCOUNT_ROUTE_PROVIDERS = [ + { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, +]; + +export function configureRoutes(routes: RoutesService) { + return () => { + routes.add([ + { + path: undefined, + name: eAccountRouteNames.Account, + invisible: true, + layout: eLayoutType.account, + order: 1, + }, + { + path: '/account/login', + name: eAccountRouteNames.Login, + parentName: eAccountRouteNames.Account, + order: 1, + }, + { + path: '/account/register', + name: eAccountRouteNames.Register, + parentName: eAccountRouteNames.Account, + order: 2, + }, + { + path: '/account/manage', + name: eAccountRouteNames.ManageProfile, + parentName: eAccountRouteNames.Account, + layout: eLayoutType.application, + order: 3, + }, + { + path: '/account/forgot-password', + parentName: eAccountRouteNames.Account, + name: eAccountRouteNames.ForgotPassword, + invisible: true, + }, + { + path: '/account/reset-password', + parentName: eAccountRouteNames.Account, + name: eAccountRouteNames.ResetPassword, + invisible: true, + }, + ]); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/config/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/account/config/src/public-api.ts new file mode 100644 index 0000000000..cb4f854a64 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/config/src/public-api.ts @@ -0,0 +1,3 @@ +export * from './account-config.module'; +export * from './enums'; +export * from './providers'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/config/src/utils/factories.ts b/npm/ng-packs/nx/ng-packs/packages/account/config/src/utils/factories.ts new file mode 100644 index 0000000000..8adf52c9fb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/config/src/utils/factories.ts @@ -0,0 +1,13 @@ +import { Injector } from '@angular/core'; +import { RoutesService } from '@abp/ng.core'; +import { Router } from '@angular/router'; +import { eAccountRouteNames } from '../enums/route-names'; + +export function navigateToManageProfileFactory(injector: Injector) { + return () => { + const router = injector.get(Router); + const routes = injector.get(RoutesService); + const { path } = routes.find(item => item.name === eAccountRouteNames.ManageProfile); + router.navigateByUrl(path); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/jest.config.js b/npm/ng-packs/nx/ng-packs/packages/account/jest.config.js new file mode 100644 index 0000000000..0b68f6b4fe --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'account', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/packages/account', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/account/ng-package.json new file mode 100644 index 0000000000..9c91cced40 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/ng-package.json @@ -0,0 +1,8 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/packages/account", + "lib": { + "entryFile": "src/public-api.ts" + }, + "allowedNonPeerDependencies": ["@abp/ng.theme.shared"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/package.json b/npm/ng-packs/nx/ng-packs/packages/account/package.json new file mode 100644 index 0000000000..4bc94e6246 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/package.json @@ -0,0 +1,16 @@ +{ + "name": "@abp/ng.account", + "version": "4.4.0", + "homepage": "https://abp.io", + "repository": { + "type": "git", + "url": "https://github.com/abpframework/abp.git" + }, + "dependencies": { + "@abp/ng.theme.shared": "~4.4.0", + "tslib": "^2.0.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/account-routing.module.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/account-routing.module.ts new file mode 100644 index 0000000000..016666ccaf --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/account-routing.module.ts @@ -0,0 +1,87 @@ +import { + AuthGuard, + DynamicLayoutComponent, + ReplaceableComponents, + ReplaceableRouteContainerComponent, +} from '@abp/ng.core'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ForgotPasswordComponent } from './components/forgot-password/forgot-password.component'; +import { LoginComponent } from './components/login/login.component'; +import { ManageProfileComponent } from './components/manage-profile/manage-profile.component'; +import { RegisterComponent } from './components/register/register.component'; +import { ResetPasswordComponent } from './components/reset-password/reset-password.component'; +import { eAccountComponents } from './enums/components'; +import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; + +const routes: Routes = [ + { path: '', pathMatch: 'full', redirectTo: 'login' }, + { + path: '', + component: DynamicLayoutComponent, + children: [ + { + path: 'login', + component: ReplaceableRouteContainerComponent, + canActivate: [AuthenticationFlowGuard], + data: { + replaceableComponent: { + key: eAccountComponents.Login, + defaultComponent: LoginComponent, + } as ReplaceableComponents.RouteData, + }, + }, + { + path: 'register', + component: ReplaceableRouteContainerComponent, + canActivate: [AuthenticationFlowGuard], + data: { + replaceableComponent: { + key: eAccountComponents.Register, + defaultComponent: RegisterComponent, + } as ReplaceableComponents.RouteData, + }, + }, + { + path: 'forgot-password', + component: ReplaceableRouteContainerComponent, + canActivate: [AuthenticationFlowGuard], + data: { + replaceableComponent: { + key: eAccountComponents.ForgotPassword, + defaultComponent: ForgotPasswordComponent, + } as ReplaceableComponents.RouteData, + }, + }, + { + path: 'reset-password', + component: ReplaceableRouteContainerComponent, + canActivate: [], + data: { + tenantBoxVisible: false, + replaceableComponent: { + key: eAccountComponents.ResetPassword, + defaultComponent: ResetPasswordComponent, + } as ReplaceableComponents.RouteData, + }, + }, + { + path: 'manage', + component: ReplaceableRouteContainerComponent, + canActivate: [AuthGuard], + data: { + replaceableComponent: { + key: eAccountComponents.ManageProfile, + defaultComponent: ManageProfileComponent, + } as ReplaceableComponents.RouteData, + }, + }, + ], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class AccountRoutingModule {} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/account.module.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/account.module.ts new file mode 100644 index 0000000000..bfa37d4bfa --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/account.module.ts @@ -0,0 +1,59 @@ +import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; +import { AccountRoutingModule } from './account-routing.module'; +import { ChangePasswordComponent } from './components/change-password/change-password.component'; +import { LoginComponent } from './components/login/login.component'; +import { ManageProfileComponent } from './components/manage-profile/manage-profile.component'; +import { PersonalSettingsComponent } from './components/personal-settings/personal-settings.component'; +import { RegisterComponent } from './components/register/register.component'; +import { AccountConfigOptions } from './models/config-options'; +import { ACCOUNT_CONFIG_OPTIONS } from './tokens/config-options.token'; +import { accountConfigOptionsFactory } from './utils/factory-utils'; +import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; +import { ForgotPasswordComponent } from './components/forgot-password/forgot-password.component'; +import { ResetPasswordComponent } from './components/reset-password/reset-password.component'; + +const declarations = [ + LoginComponent, + RegisterComponent, + ChangePasswordComponent, + ManageProfileComponent, + PersonalSettingsComponent, + ForgotPasswordComponent, + ResetPasswordComponent, +]; + +@NgModule({ + declarations: [...declarations], + imports: [ + CoreModule, + AccountRoutingModule, + ThemeSharedModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], + exports: [...declarations], +}) +export class AccountModule { + static forChild(options = {} as AccountConfigOptions): ModuleWithProviders { + return { + ngModule: AccountModule, + providers: [ + AuthenticationFlowGuard, + { provide: ACCOUNT_CONFIG_OPTIONS, useValue: options }, + { + provide: 'ACCOUNT_OPTIONS', + useFactory: accountConfigOptionsFactory, + deps: [ACCOUNT_CONFIG_OPTIONS], + }, + ], + }; + } + + static forLazy(options = {} as AccountConfigOptions): NgModuleFactory { + return new LazyModuleFactory(AccountModule.forChild(options)); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/change-password/change-password.component.html b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/change-password/change-password.component.html new file mode 100644 index 0000000000..37ac7f0175 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/change-password/change-password.component.html @@ -0,0 +1,48 @@ +
+
+ * +
+
+ * +
+
+ * +
+ {{ 'AbpIdentity::Save' | abpLocalization }} +
diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts new file mode 100644 index 0000000000..d18bd8b165 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts @@ -0,0 +1,99 @@ +import { Profile, ProfileService } from '@abp/ng.core'; +import { getPasswordValidators, ToasterService } from '@abp/ng.theme.shared'; +import { Component, Injector, Input, OnInit } from '@angular/core'; +import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { comparePasswords, Validation } from '@ngx-validate/core'; +import { finalize } from 'rxjs/operators'; +import snq from 'snq'; +import { Account } from '../../models/account'; +import { ManageProfileStateService } from '../../services/manage-profile.state.service'; + +const { required } = Validators; + +const PASSWORD_FIELDS = ['newPassword', 'repeatNewPassword']; + +@Component({ + selector: 'abp-change-password-form', + templateUrl: './change-password.component.html', + exportAs: 'abpChangePasswordForm', +}) +export class ChangePasswordComponent + implements OnInit, Account.ChangePasswordComponentInputs, Account.ChangePasswordComponentOutputs { + form: FormGroup; + + inProgress: boolean; + + hideCurrentPassword: boolean; + + mapErrorsFn: Validation.MapErrorsFn = (errors, groupErrors, control) => { + if (PASSWORD_FIELDS.indexOf(String(control.name)) < 0) return errors; + + return errors.concat(groupErrors.filter(({ key }) => key === 'passwordMismatch')); + }; + + constructor( + private fb: FormBuilder, + private injector: Injector, + private toasterService: ToasterService, + private profileService: ProfileService, + private manageProfileState: ManageProfileStateService, + ) {} + + ngOnInit(): void { + this.hideCurrentPassword = !this.manageProfileState.getProfile()?.hasPassword; + + const passwordValidations = getPasswordValidators(this.injector); + + this.form = this.fb.group( + { + password: ['', required], + newPassword: [ + '', + { + validators: [required, ...passwordValidations], + }, + ], + repeatNewPassword: [ + '', + { + validators: [required, ...passwordValidations], + }, + ], + }, + { + validators: [comparePasswords(PASSWORD_FIELDS)], + }, + ); + + if (this.hideCurrentPassword) this.form.removeControl('password'); + } + + onSubmit() { + if (this.form.invalid) return; + this.inProgress = true; + this.profileService + .changePassword({ + ...(!this.hideCurrentPassword && { currentPassword: this.form.get('password').value }), + newPassword: this.form.get('newPassword').value, + }) + .pipe(finalize(() => (this.inProgress = false))) + .subscribe({ + next: () => { + this.form.reset(); + this.toasterService.success('AbpAccount::PasswordChangedMessage', '', { + life: 5000, + }); + + if (this.hideCurrentPassword) { + this.hideCurrentPassword = false; + this.form.addControl('password', new FormControl('', [required])); + } + }, + error: err => { + this.toasterService.error( + snq(() => err.error.error.message, 'AbpAccount::DefaultErrorMessage'), + ); + }, + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.html b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.html new file mode 100644 index 0000000000..9e1b974c43 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.html @@ -0,0 +1,40 @@ +

{{ 'AbpAccount::ForgotPassword' | abpLocalization }}

+ +
+

{{ 'AbpAccount::SendPasswordResetLink_Information' | abpLocalization }}

+
+ * + +
+ + {{ 'AbpAccount::Submit' | abpLocalization }} + + {{ 'AbpAccount::Login' | abpLocalization }} +
+ + +

+ {{ 'AbpAccount::PasswordResetMailSentMessage' | abpLocalization }} +

+ + + + +
diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.ts new file mode 100644 index 0000000000..3b1a49b89c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.ts @@ -0,0 +1,35 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { finalize } from 'rxjs/operators'; +import { AccountService } from '../../proxy/account/account.service'; + +@Component({ + selector: 'abp-forgot-password', + templateUrl: 'forgot-password.component.html', +}) +export class ForgotPasswordComponent { + form: FormGroup; + + inProgress: boolean; + + isEmailSent = false; + + constructor(private fb: FormBuilder, private accountService: AccountService) { + this.form = this.fb.group({ + email: ['', [Validators.required, Validators.email]], + }); + } + + onSubmit() { + if (this.form.invalid) return; + + this.inProgress = true; + + this.accountService + .sendPasswordResetCode({ email: this.form.get('email').value, appName: 'Angular' }) + .pipe(finalize(() => (this.inProgress = false))) + .subscribe(() => { + this.isEmailSent = true; + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/index.ts new file mode 100644 index 0000000000..098ee8a202 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/index.ts @@ -0,0 +1,7 @@ +export * from './change-password/change-password.component'; +export * from './forgot-password/forgot-password.component'; +export * from './login/login.component'; +export * from './manage-profile/manage-profile.component'; +export * from './register/register.component'; +export * from './personal-settings/personal-settings.component'; +export * from './reset-password/reset-password.component'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/login/login.component.html b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/login/login.component.html new file mode 100644 index 0000000000..d2d9712421 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/login/login.component.html @@ -0,0 +1,60 @@ +

{{ 'AbpAccount::Login' | abpLocalization }}

+ + {{ 'AbpAccount::AreYouANewUser' | abpLocalization }} + {{ + 'AbpAccount::Register' | abpLocalization + }} + +
+
+ + +
+
+ + +
+ +
+
+ +
+ +
+ + + {{ 'AbpAccount::Login' | abpLocalization }} + +
diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/login/login.component.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/login/login.component.ts new file mode 100644 index 0000000000..7ef04e31a9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/login/login.component.ts @@ -0,0 +1,80 @@ +import { ConfigStateService, AuthService } from '@abp/ng.core'; +import { ToasterService } from '@abp/ng.theme.shared'; +import { Component, Injector, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Store } from '@ngxs/store'; +import { throwError } from 'rxjs'; +import { catchError, finalize } from 'rxjs/operators'; +import snq from 'snq'; +import { eAccountComponents } from '../../enums/components'; +import { getRedirectUrl } from '../../utils/auth-utils'; + +const { maxLength, required } = Validators; + +@Component({ + selector: 'abp-login', + templateUrl: './login.component.html', +}) +export class LoginComponent implements OnInit { + form: FormGroup; + + inProgress: boolean; + + isSelfRegistrationEnabled = true; + + authWrapperKey = eAccountComponents.AuthWrapper; + + constructor( + protected injector: Injector, + protected fb: FormBuilder, + protected toasterService: ToasterService, + protected authService: AuthService, + protected configState: ConfigStateService, + ) {} + + ngOnInit() { + this.init(); + this.buildForm(); + } + + protected init() { + this.isSelfRegistrationEnabled = + ( + (this.configState.getSetting('Abp.Account.IsSelfRegistrationEnabled') as string) || '' + ).toLowerCase() !== 'false'; + } + + protected buildForm() { + this.form = this.fb.group({ + username: ['', [required, maxLength(255)]], + password: ['', [required, maxLength(128)]], + rememberMe: [false], + }); + } + + onSubmit() { + if (this.form.invalid) return; + + this.inProgress = true; + + const { username, password, rememberMe } = this.form.value; + + const redirectUrl = getRedirectUrl(this.injector); + + this.authService + .login({ username, password, rememberMe, redirectUrl }) + .pipe( + catchError(err => { + this.toasterService.error( + snq(() => err.error.error_description) || + snq(() => err.error.error.message, 'AbpAccount::DefaultErrorMessage'), + 'Error', + { life: 7000 }, + ); + return throwError(err); + }), + finalize(() => (this.inProgress = false)), + ) + .subscribe(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html new file mode 100644 index 0000000000..91b635c080 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html @@ -0,0 +1,62 @@ +
+ +
+
+
+ +
+
+
+

+ {{ 'AbpIdentity::ChangePassword' | abpLocalization }} +
+

+ +
+
+
+
+

+ {{ 'AbpIdentity::PersonalSettings' | abpLocalization }} +
+

+ +
+
+
+
+
+
diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts new file mode 100644 index 0000000000..695bec8d68 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts @@ -0,0 +1,45 @@ +import { Profile, ProfileService } from '@abp/ng.core'; +import { fadeIn } from '@abp/ng.theme.shared'; +import { transition, trigger, useAnimation } from '@angular/animations'; +import { Component, OnInit } from '@angular/core'; +import { eAccountComponents } from '../../enums/components'; +import { ManageProfileStateService } from '../../services/manage-profile.state.service'; + +@Component({ + selector: 'abp-manage-profile', + templateUrl: './manage-profile.component.html', + animations: [trigger('fadeIn', [transition(':enter', useAnimation(fadeIn))])], + styles: [ + ` + .min-h-400 { + min-height: 400px; + } + `, + ], +}) +export class ManageProfileComponent implements OnInit { + selectedTab = 0; + + changePasswordKey = eAccountComponents.ChangePassword; + + personalSettingsKey = eAccountComponents.PersonalSettings; + + profile$ = this.manageProfileState.getProfile$(); + + hideChangePasswordTab: boolean; + + constructor( + protected profileService: ProfileService, + protected manageProfileState: ManageProfileStateService, + ) {} + + ngOnInit() { + this.profileService.get().subscribe(profile => { + this.manageProfileState.setProfile(profile); + if (profile.isExternal) { + this.hideChangePasswordTab = true; + this.selectedTab = 1; + } + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html new file mode 100644 index 0000000000..291d3f1cbd --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html @@ -0,0 +1,46 @@ +
+
+ * +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ * +
+
+ +
+ + {{ 'AbpIdentity::Save' | abpLocalization }} +
diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts new file mode 100644 index 0000000000..dd7789220f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts @@ -0,0 +1,58 @@ +import { ProfileService } from '@abp/ng.core'; +import { ToasterService } from '@abp/ng.theme.shared'; +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { finalize } from 'rxjs/operators'; +import { Account } from '../../models/account'; +import { ManageProfileStateService } from '../../services/manage-profile.state.service'; + +const { maxLength, required, email } = Validators; + +@Component({ + selector: 'abp-personal-settings-form', + templateUrl: './personal-settings.component.html', + exportAs: 'abpPersonalSettingsForm', +}) +export class PersonalSettingsComponent + implements + OnInit, + Account.PersonalSettingsComponentInputs, + Account.PersonalSettingsComponentOutputs { + form: FormGroup; + + inProgress: boolean; + + constructor( + private fb: FormBuilder, + private toasterService: ToasterService, + private profileService: ProfileService, + private manageProfileState: ManageProfileStateService, + ) {} + + ngOnInit() { + this.buildForm(); + } + + buildForm() { + const profile = this.manageProfileState.getProfile(); + this.form = this.fb.group({ + userName: [profile.userName, [required, maxLength(256)]], + email: [profile.email, [required, email, maxLength(256)]], + name: [profile.name || '', [maxLength(64)]], + surname: [profile.surname || '', [maxLength(64)]], + phoneNumber: [profile.phoneNumber || '', [maxLength(16)]], + }); + } + + submit() { + if (this.form.invalid) return; + this.inProgress = true; + this.profileService + .update(this.form.value) + .pipe(finalize(() => (this.inProgress = false))) + .subscribe(profile => { + this.manageProfileState.setProfile(profile); + this.toasterService.success('AbpAccount::PersonalSettingsSaved', 'Success', { life: 5000 }); + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/register/register.component.html b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/register/register.component.html new file mode 100644 index 0000000000..404c453026 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/register/register.component.html @@ -0,0 +1,51 @@ +

{{ 'AbpAccount::Register' | abpLocalization }}

+ + {{ 'AbpAccount::AlreadyRegistered' | abpLocalization }} + {{ + 'AbpAccount::Login' | abpLocalization + }} + +
+
+ * +
+
+ * +
+
+ * +
+ + {{ 'AbpAccount::Register' | abpLocalization }} + +
diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/register/register.component.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/register/register.component.ts new file mode 100644 index 0000000000..9be22d2203 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/register/register.component.ts @@ -0,0 +1,102 @@ +import { AuthService, ConfigStateService } from '@abp/ng.core'; +import { getPasswordValidators, ToasterService } from '@abp/ng.theme.shared'; +import { Component, Injector, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { throwError } from 'rxjs'; +import { catchError, finalize, switchMap } from 'rxjs/operators'; +import snq from 'snq'; +import { eAccountComponents } from '../../enums/components'; +import { AccountService } from '../../proxy/account/account.service'; +import { RegisterDto } from '../../proxy/account/models'; +import { getRedirectUrl } from '../../utils/auth-utils'; +const { maxLength, required, email } = Validators; + +@Component({ + selector: 'abp-register', + templateUrl: './register.component.html', +}) +export class RegisterComponent implements OnInit { + form: FormGroup; + + inProgress: boolean; + + isSelfRegistrationEnabled = true; + + authWrapperKey = eAccountComponents.AuthWrapper; + + constructor( + protected fb: FormBuilder, + protected accountService: AccountService, + protected configState: ConfigStateService, + protected toasterService: ToasterService, + protected authService: AuthService, + protected injector: Injector, + ) {} + + ngOnInit() { + this.init(); + this.buildForm(); + } + + protected init() { + this.isSelfRegistrationEnabled = + (this.configState.getSetting('Abp.Account.IsSelfRegistrationEnabled') || '').toLowerCase() !== + 'false'; + + if (!this.isSelfRegistrationEnabled) { + this.toasterService.warn( + { + key: 'AbpAccount::SelfRegistrationDisabledMessage', + defaultValue: 'Self registration is disabled.', + }, + null, + { life: 10000 }, + ); + return; + } + } + + protected buildForm() { + this.form = this.fb.group({ + username: ['', [required, maxLength(255)]], + password: ['', [required, ...getPasswordValidators(this.injector)]], + email: ['', [required, email]], + }); + } + + onSubmit() { + if (this.form.invalid) return; + + this.inProgress = true; + + const newUser = { + userName: this.form.get('username').value, + password: this.form.get('password').value, + emailAddress: this.form.get('email').value, + appName: 'Angular', + } as RegisterDto; + + this.accountService + .register(newUser) + .pipe( + switchMap(() => + this.authService.login({ + username: newUser.userName, + password: newUser.password, + redirectUrl: getRedirectUrl(this.injector), + }), + ), + catchError(err => { + this.toasterService.error( + snq(() => err.error.error_description) || + snq(() => err.error.error.message, 'AbpAccount::DefaultErrorMessage'), + 'Error', + { life: 7000 }, + ); + return throwError(err); + }), + finalize(() => (this.inProgress = false)), + ) + .subscribe(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.html b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.html new file mode 100644 index 0000000000..404f525111 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.html @@ -0,0 +1,49 @@ +

{{ 'AbpAccount::ResetPassword' | abpLocalization }}

+ +
+

{{ 'AbpAccount::ResetPassword_Information' | abpLocalization }}

+
+ * + +
+
+ * + +
+ + + {{ 'AbpAccount::Submit' | abpLocalization }} + +
+ + +

+ {{ 'AbpAccount::YourPasswordIsSuccessfullyReset' | abpLocalization }} +

+ + + + +
diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts new file mode 100644 index 0000000000..5e311e7b83 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts @@ -0,0 +1,70 @@ +import { getPasswordValidators } from '@abp/ng.theme.shared'; +import { Component, Injector, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { comparePasswords, Validation } from '@ngx-validate/core'; +import { finalize } from 'rxjs/operators'; +import { AccountService } from '../../proxy/account/account.service'; + +const PASSWORD_FIELDS = ['password', 'confirmPassword']; + +@Component({ + selector: 'abp-reset-password', + templateUrl: './reset-password.component.html', +}) +export class ResetPasswordComponent implements OnInit { + form: FormGroup; + + inProgress = false; + + isPasswordReset = false; + + mapErrorsFn: Validation.MapErrorsFn = (errors, groupErrors, control) => { + if (PASSWORD_FIELDS.indexOf(String(control.name)) < 0) return errors; + + return errors.concat(groupErrors.filter(({ key }) => key === 'passwordMismatch')); + }; + + constructor( + private fb: FormBuilder, + private accountService: AccountService, + private route: ActivatedRoute, + private router: Router, + private injector: Injector, + ) {} + + ngOnInit(): void { + this.route.queryParams.subscribe(({ userId, resetToken }) => { + if (!userId || !resetToken) this.router.navigateByUrl('/account/login'); + + this.form = this.fb.group( + { + userId: [userId, [Validators.required]], + resetToken: [resetToken, [Validators.required]], + password: ['', [Validators.required, ...getPasswordValidators(this.injector)]], + confirmPassword: ['', [Validators.required, ...getPasswordValidators(this.injector)]], + }, + { + validators: [comparePasswords(PASSWORD_FIELDS)], + }, + ); + }); + } + + onSubmit() { + if (this.form.invalid || this.inProgress) return; + + this.inProgress = true; + + this.accountService + .resetPassword({ + userId: this.form.get('userId').value, + resetToken: this.form.get('resetToken').value, + password: this.form.get('password').value, + }) + .pipe(finalize(() => (this.inProgress = false))) + .subscribe(() => { + this.isPasswordReset = true; + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/enums/components.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/enums/components.ts new file mode 100644 index 0000000000..cebfccc13e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/enums/components.ts @@ -0,0 +1,11 @@ +export const enum eAccountComponents { + Login = 'Account.LoginComponent', + Register = 'Account.RegisterComponent', + ForgotPassword = 'Account.ForgotPasswordComponent', + ResetPassword = 'Account.ResetPasswordComponent', + ManageProfile = 'Account.ManageProfileComponent', + TenantBox = 'Account.TenantBoxComponent', + AuthWrapper = 'Account.AuthWrapperComponent', + ChangePassword = 'Account.ChangePasswordComponent', + PersonalSettings = 'Account.PersonalSettingsComponent', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/enums/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/enums/index.ts new file mode 100644 index 0000000000..07635cbbc8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/enums/index.ts @@ -0,0 +1 @@ +export * from './components'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/guards/authentication-flow.guard.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/guards/authentication-flow.guard.ts new file mode 100644 index 0000000000..6828615403 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/guards/authentication-flow.guard.ts @@ -0,0 +1,15 @@ +import { AuthService } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; +import { CanActivate } from '@angular/router'; + +@Injectable() +export class AuthenticationFlowGuard implements CanActivate { + constructor(private authService: AuthService) {} + + canActivate() { + if (this.authService.isInternalAuth) return true; + + this.authService.navigateToLogin(); + return false; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/guards/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/guards/index.ts new file mode 100644 index 0000000000..382170b2b1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/guards/index.ts @@ -0,0 +1 @@ +export * from './authentication-flow.guard'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/account.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/account.ts new file mode 100644 index 0000000000..ef5ad926a2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/account.ts @@ -0,0 +1,12 @@ +import { TemplateRef } from '@angular/core'; + +export namespace Account { + //tslint:disable + export interface TenantBoxComponentInputs {} + export interface TenantBoxComponentOutputs {} + export interface PersonalSettingsComponentInputs {} + export interface PersonalSettingsComponentOutputs {} + export interface ChangePasswordComponentInputs {} + export interface ChangePasswordComponentOutputs {} + // tslint:enable +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/config-options.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/config-options.ts new file mode 100644 index 0000000000..898021b04e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/config-options.ts @@ -0,0 +1,3 @@ +export interface AccountConfigOptions { + redirectUrl?: string; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/index.ts new file mode 100644 index 0000000000..661c72f898 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/index.ts @@ -0,0 +1,2 @@ +export * from './account'; +export * from './config-options'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/README.md b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/README.md new file mode 100644 index 0000000000..767dfd0f7c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/README.md @@ -0,0 +1,17 @@ +# Proxy Generation Output + +This directory includes the output of the latest proxy generation. +The files and folders in it will be overwritten when proxy generation is run again. +Therefore, please do not place your own content in this folder. + +In addition, `generate-proxy.json` works like a lock file. +It includes information used by the proxy generator, so please do not delete or modify it. + +Finally, the name of the files and folders should not be changed for two reasons: +- Proxy generator will keep creating them at those paths and you will have multiple copies of the same content. +- ABP Suite generates files which include imports from this folder. + +> **Important Notice:** If you are building a module and are planning to publish to npm, +> some of the generated proxies are likely to be exported from public-api.ts file. In such a case, +> please make sure you export files directly and not from barrel exports. In other words, +> do not include index.ts exports in your public-api.ts exports. diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/account.service.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/account.service.ts new file mode 100644 index 0000000000..adeb2ee5c9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/account.service.ts @@ -0,0 +1,37 @@ +import type { RegisterDto, ResetPasswordDto, SendPasswordResetCodeDto } from './models'; +import { RestService } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; +import type { IdentityUserDto } from '../identity/models'; + +@Injectable({ + providedIn: 'root', +}) +export class AccountService { + apiName = 'AbpAccount'; + + register = (input: RegisterDto) => + this.restService.request({ + method: 'POST', + url: '/api/account/register', + body: input, + }, + { apiName: this.apiName }); + + resetPassword = (input: ResetPasswordDto) => + this.restService.request({ + method: 'POST', + url: '/api/account/reset-password', + body: input, + }, + { apiName: this.apiName }); + + sendPasswordResetCode = (input: SendPasswordResetCodeDto) => + this.restService.request({ + method: 'POST', + url: '/api/account/send-password-reset-code', + body: input, + }, + { apiName: this.apiName }); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/index.ts new file mode 100644 index 0000000000..ea0f7df7a4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/index.ts @@ -0,0 +1,4 @@ +import * as Web from './web'; +export * from './account.service'; +export * from './models'; +export { Web }; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/models.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/models.ts new file mode 100644 index 0000000000..f186b52977 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/models.ts @@ -0,0 +1,21 @@ +import type { ExtensibleObject } from '@abp/ng.core'; + +export interface RegisterDto extends ExtensibleObject { + userName: string; + emailAddress: string; + password: string; + appName: string; +} + +export interface ResetPasswordDto { + userId?: string; + resetToken: string; + password: string; +} + +export interface SendPasswordResetCodeDto { + email: string; + appName: string; + returnUrl?: string; + returnUrlHash?: string; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/account.service.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/account.service.ts new file mode 100644 index 0000000000..8adf5385b0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/account.service.ts @@ -0,0 +1,35 @@ +import type { AbpLoginResult, UserLoginInfo } from './models/models'; +import { RestService } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class AccountService { + apiName = 'AbpAccount'; + + checkPasswordByLogin = (login: UserLoginInfo) => + this.restService.request({ + method: 'POST', + url: '/api/account/check-password', + body: login, + }, + { apiName: this.apiName }); + + loginByLogin = (login: UserLoginInfo) => + this.restService.request({ + method: 'POST', + url: '/api/account/login', + body: login, + }, + { apiName: this.apiName }); + + logout = () => + this.restService.request({ + method: 'GET', + url: '/api/account/logout', + }, + { apiName: this.apiName }); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/index.ts new file mode 100644 index 0000000000..ac69fdf004 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/index.ts @@ -0,0 +1,3 @@ +import * as Models from './models'; +export * from './account.service'; +export { Models }; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/index.ts new file mode 100644 index 0000000000..f44aa5efd0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/index.ts @@ -0,0 +1,2 @@ +export * from './login-result-type.enum'; +export * from './models'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/login-result-type.enum.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/login-result-type.enum.ts new file mode 100644 index 0000000000..4aa00aa202 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/login-result-type.enum.ts @@ -0,0 +1,11 @@ +import { mapEnumToOptions } from '@abp/ng.core'; + +export enum LoginResultType { + Success = 1, + InvalidUserNameOrPassword = 2, + NotAllowed = 3, + LockedOut = 4, + RequiresTwoFactor = 5, +} + +export const loginResultTypeOptions = mapEnumToOptions(LoginResultType); diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/models.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/models.ts new file mode 100644 index 0000000000..1736180035 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/models.ts @@ -0,0 +1,12 @@ +import type { LoginResultType } from './login-result-type.enum'; + +export interface AbpLoginResult { + result: LoginResultType; + description?: string; +} + +export interface UserLoginInfo { + userNameOrEmailAddress: string; + password: string; + rememberMe: boolean; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/index.ts new file mode 100644 index 0000000000..0c9a059984 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/index.ts @@ -0,0 +1,2 @@ +import * as Controllers from './controllers'; +export { Controllers }; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/index.ts new file mode 100644 index 0000000000..065774a205 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/index.ts @@ -0,0 +1,2 @@ +import * as Account from './account'; +export { Account }; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/index.ts new file mode 100644 index 0000000000..f77d33c351 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/index.ts @@ -0,0 +1,2 @@ +import * as Areas from './areas'; +export { Areas }; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/generate-proxy.json b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/generate-proxy.json new file mode 100644 index 0000000000..ff7a22c89b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/generate-proxy.json @@ -0,0 +1,5202 @@ +{ + "generated": [ + "account" + ], + "modules": { + "settingManagement": { + "rootPath": "settingManagement", + "remoteServiceName": "SettingManagement", + "controllers": { + "Volo.Abp.SettingManagement.EmailSettingsController": { + "controllerName": "EmailSettings", + "type": "Volo.Abp.SettingManagement.EmailSettingsController", + "interfaces": [ + { + "type": "Volo.Abp.SettingManagement.IEmailSettingsAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/setting-management/emailing", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.SettingManagement.EmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.EmailSettingsDto" + }, + "allowAnonymous": null + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "POST", + "url": "api/setting-management/emailing", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto, Volo.Abp.SettingManagement.Application.Contracts", + "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + } + } + } + } + }, + "abp": { + "rootPath": "abp", + "remoteServiceName": "abp", + "controllers": { + "Pages.Abp.MultiTenancy.AbpTenantController": { + "controllerName": "AbpTenant", + "type": "Pages.Abp.MultiTenancy.AbpTenantController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" + } + ], + "actions": { + "FindTenantByNameAsyncByName": { + "uniqueName": "FindTenantByNameAsyncByName", + "name": "FindTenantByNameAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-name/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "name", + "name": "name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + }, + "allowAnonymous": null + }, + "FindTenantByIdAsyncById": { + "uniqueName": "FindTenantByIdAsyncById", + "name": "FindTenantByIdAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-id/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + }, + "allowAnonymous": null + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { + "controllerName": "AbpApplicationConfiguration", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/abp/application-configuration", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" + }, + "allowAnonymous": null + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { + "controllerName": "AbpApiDefinition", + "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", + "interfaces": [], + "actions": { + "GetByModel": { + "uniqueName": "GetByModel", + "name": "Get", + "httpMethod": "GET", + "url": "api/abp/api-definition", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "model", + "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "model", + "name": "IncludeTypes", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "model" + } + ], + "returnValue": { + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" + }, + "allowAnonymous": null + } + } + } + } + }, + "account": { + "rootPath": "account", + "remoteServiceName": "AbpAccount", + "controllers": { + "Volo.Abp.Account.Web.Areas.Account.Controllers.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.AccountController", + "interfaces": [], + "actions": { + "LoginByLogin": { + "uniqueName": "LoginByLogin", + "name": "Login", + "httpMethod": "POST", + "url": "api/account/login", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Web", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "jsonName": null, + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult" + }, + "allowAnonymous": null + }, + "Logout": { + "uniqueName": "Logout", + "name": "Logout", + "httpMethod": "GET", + "url": "api/account/logout", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + }, + "CheckPasswordByLogin": { + "uniqueName": "CheckPasswordByLogin", + "name": "CheckPassword", + "httpMethod": "POST", + "url": "api/account/check-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Web", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "jsonName": null, + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult" + }, + "allowAnonymous": null + } + } + }, + "Volo.Abp.Account.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.AccountController", + "interfaces": [ + { + "type": "Volo.Abp.Account.IAccountAppService" + } + ], + "actions": { + "RegisterAsyncByInput": { + "uniqueName": "RegisterAsyncByInput", + "name": "RegisterAsync", + "httpMethod": "POST", + "url": "api/account/register", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.RegisterDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + }, + "allowAnonymous": null + }, + "SendPasswordResetCodeAsyncByInput": { + "uniqueName": "SendPasswordResetCodeAsyncByInput", + "name": "SendPasswordResetCodeAsync", + "httpMethod": "POST", + "url": "api/account/send-password-reset-code", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendPasswordResetCodeDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + }, + "ResetPasswordAsyncByInput": { + "uniqueName": "ResetPasswordAsyncByInput", + "name": "ResetPasswordAsync", + "httpMethod": "POST", + "url": "api/account/reset-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ResetPasswordDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + } + } + } + } + }, + "permissionManagement": { + "rootPath": "permissionManagement", + "remoteServiceName": "AbpPermissionManagement", + "controllers": { + "Volo.Abp.PermissionManagement.PermissionsController": { + "controllerName": "Permissions", + "type": "Volo.Abp.PermissionManagement.PermissionsController", + "interfaces": [ + { + "type": "Volo.Abp.PermissionManagement.IPermissionAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", + "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + }, + "allowAnonymous": null + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + } + } + } + } + }, + "identity": { + "rootPath": "identity", + "remoteServiceName": "AbpIdentity", + "controllers": { + "Volo.Abp.Identity.IdentityRoleController": { + "controllerName": "IdentityRole", + "type": "Volo.Abp.Identity.IdentityRoleController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityRoleAppService" + } + ], + "actions": { + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity/roles/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + }, + "allowAnonymous": null + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityRolesInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityRolesInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityRolesInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + }, + "allowAnonymous": null + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + }, + "allowAnonymous": null + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleCreateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + }, + "allowAnonymous": null + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleUpdateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + }, + "allowAnonymous": null + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + } + } + }, + "Volo.Abp.Identity.IdentityUserController": { + "controllerName": "IdentityUser", + "type": "Volo.Abp.Identity.IdentityUserController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + }, + "allowAnonymous": null + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityUsersInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + }, + "allowAnonymous": null + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserCreateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + }, + "allowAnonymous": null + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + }, + "allowAnonymous": null + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + }, + "GetRolesAsyncById": { + "uniqueName": "GetRolesAsyncById", + "name": "GetRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + }, + "allowAnonymous": null + }, + "GetAssignableRolesAsync": { + "uniqueName": "GetAssignableRolesAsync", + "name": "GetAssignableRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/assignable-roles", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + }, + "allowAnonymous": null + }, + "UpdateRolesAsyncByIdAndInput": { + "uniqueName": "UpdateRolesAsyncByIdAndInput", + "name": "UpdateRolesAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateRolesDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + }, + "FindByUsernameAsyncByUserName": { + "uniqueName": "FindByUsernameAsyncByUserName", + "name": "FindByUsernameAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "userName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "userName", + "name": "userName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + }, + "allowAnonymous": null + }, + "FindByEmailAsyncByEmail": { + "uniqueName": "FindByEmailAsyncByEmail", + "name": "FindByEmailAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-email/{email}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "email", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "email", + "name": "email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + }, + "allowAnonymous": null + } + } + }, + "Volo.Abp.Identity.IdentityUserLookupController": { + "controllerName": "IdentityUserLookup", + "type": "Volo.Abp.Identity.IdentityUserLookupController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserLookupAppService" + } + ], + "actions": { + "FindByIdAsyncById": { + "uniqueName": "FindByIdAsyncById", + "name": "FindByIdAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + }, + "allowAnonymous": null + }, + "FindByUserNameAsyncByUserName": { + "uniqueName": "FindByUserNameAsyncByUserName", + "name": "FindByUserNameAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "userName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "userName", + "name": "userName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + }, + "allowAnonymous": null + }, + "SearchAsyncByInput": { + "uniqueName": "SearchAsyncByInput", + "name": "SearchAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/search", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupSearchInputDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupSearchInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupSearchInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + }, + "allowAnonymous": null + }, + "GetCountAsyncByInput": { + "uniqueName": "GetCountAsyncByInput", + "name": "GetCountAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/count", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupCountInputDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupCountInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupCountInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Int64", + "typeSimple": "number" + }, + "allowAnonymous": null + } + } + }, + "Volo.Abp.Identity.ProfileController": { + "controllerName": "Profile", + "type": "Volo.Abp.Identity.ProfileController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IProfileAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + }, + "allowAnonymous": null + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UpdateProfileDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + }, + "allowAnonymous": null + }, + "ChangePasswordAsyncByInput": { + "uniqueName": "ChangePasswordAsyncByInput", + "name": "ChangePasswordAsync", + "httpMethod": "POST", + "url": "api/identity/my-profile/change-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.ChangePasswordInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + } + } + } + } + }, + "featureManagement": { + "rootPath": "featureManagement", + "remoteServiceName": "AbpFeatureManagement", + "controllers": { + "Volo.Abp.FeatureManagement.FeaturesController": { + "controllerName": "Features", + "type": "Volo.Abp.FeatureManagement.FeaturesController", + "interfaces": [ + { + "type": "Volo.Abp.FeatureManagement.IFeatureAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", + "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" + }, + "allowAnonymous": null + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + } + } + } + } + }, + "multi-tenancy": { + "rootPath": "multi-tenancy", + "remoteServiceName": "AbpTenantManagement", + "controllers": { + "Volo.Abp.TenantManagement.TenantController": { + "controllerName": "Tenant", + "type": "Volo.Abp.TenantManagement.TenantController", + "interfaces": [ + { + "type": "Volo.Abp.TenantManagement.ITenantAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + }, + "allowAnonymous": null + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.GetTenantsInput, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.GetTenantsInput", + "typeSimple": "Volo.Abp.TenantManagement.GetTenantsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + }, + "allowAnonymous": null + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantCreateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + }, + "allowAnonymous": null + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantUpdateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + }, + "allowAnonymous": null + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + }, + "GetDefaultConnectionStringAsyncById": { + "uniqueName": "GetDefaultConnectionStringAsyncById", + "name": "GetDefaultConnectionStringAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.String", + "typeSimple": "string" + }, + "allowAnonymous": null + }, + "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString": { + "uniqueName": "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString", + "name": "UpdateDefaultConnectionStringAsync", + "httpMethod": "PUT", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "defaultConnectionString", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "defaultConnectionString", + "name": "defaultConnectionString", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + }, + "DeleteDefaultConnectionStringAsyncById": { + "uniqueName": "DeleteDefaultConnectionStringAsyncById", + "name": "DeleteDefaultConnectionStringAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + } + } + } + } + } + }, + "types": { + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserNameOrEmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "RememberMe", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Result", + "jsonName": null, + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Success", + "InvalidUserNameOrPassword", + "NotAllowed", + "LockedOut", + "RequiresTwoFactor" + ], + "enumValues": [ + 1, + 2, + 3, + 4, + 5 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Account.RegisterDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "EmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "AppName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.ObjectExtending.ExtensibleObject": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ExtraProperties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "LockoutEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "LockoutEnd", + "jsonName": null, + "type": "System.DateTimeOffset?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "IsDeleted", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DeleterId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "DeletionTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "LastModificationTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "LastModifierId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreatorId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleEntityDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TKey" + ], + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "TKey", + "typeSimple": "TKey", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.SendPasswordResetCodeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "AppName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "ReturnUrl", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ReturnUrlHash", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.ResetPasswordDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ResetToken", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Success", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsActive", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Items", + "jsonName": null, + "type": "[T]", + "typeSimple": "[T]", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsDefault", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsStatic", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsPublic", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.GetIdentityRolesInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.LimitedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.LimitedResultRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DefaultMaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "MaxMaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultDto": { + "baseType": "Volo.Abp.Application.Dtos.ListResultDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "TotalCount", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "IsDefault", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsPublic", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.GetIdentityUsersInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LockoutEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RoleNames", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateRolesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleNames", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": true + } + ] + }, + "Volo.Abp.Users.UserData": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UserLookupSearchInputDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UserLookupCountInputDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.ProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsExternal", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "HasPassword", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UpdateProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.ChangePasswordInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CurrentPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "NewPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.PermissionManagement.GetPermissionListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityDisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Groups", + "jsonName": null, + "type": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Permissions", + "jsonName": null, + "type": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGrantInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ParentName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsGranted", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AllowedProviders", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "GrantedProviders", + "jsonName": null, + "type": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.ProviderInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ProviderName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ProviderKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Permissions", + "jsonName": null, + "type": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsGranted", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.SettingManagement.EmailSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SmtpHost", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPort", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "SmtpUserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpDomain", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpEnableSsl", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "SmtpUseDefaultCredentials", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultFromAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DefaultFromDisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.SettingManagement.UpdateEmailSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SmtpHost", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPort", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "SmtpUserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpDomain", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpEnableSsl", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "SmtpUseDefaultCredentials", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultFromAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "DefaultFromDisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.TenantManagement.TenantDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.TenantManagement.GetTenantsInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.TenantManagement.TenantCreateDto": { + "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AdminEmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "AdminPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.TenantManagement.TenantUpdateDto": { + "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.FeatureManagement.GetFeatureListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Groups", + "jsonName": null, + "type": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Features", + "jsonName": null, + "type": "[Volo.Abp.FeatureManagement.FeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Provider", + "jsonName": null, + "type": "Volo.Abp.FeatureManagement.FeatureProviderDto", + "typeSimple": "Volo.Abp.FeatureManagement.FeatureProviderDto", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ValueType", + "jsonName": null, + "type": "Volo.Abp.Validation.StringValues.IStringValueType", + "typeSimple": "Volo.Abp.Validation.StringValues.IStringValueType", + "isRequired": false + }, + { + "name": "Depth", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "ParentName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureProviderDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Key", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Validation.StringValues.IStringValueType": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Item", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + }, + { + "name": "Validator", + "jsonName": null, + "type": "Volo.Abp.Validation.StringValues.IValueValidator", + "typeSimple": "Volo.Abp.Validation.StringValues.IValueValidator", + "isRequired": false + } + ] + }, + "Volo.Abp.Validation.StringValues.IValueValidator": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Item", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeaturesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Features", + "jsonName": null, + "type": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Localization", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "isRequired": false + }, + { + "name": "Auth", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "isRequired": false + }, + { + "name": "Setting", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "isRequired": false + }, + { + "name": "CurrentUser", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "isRequired": false + }, + { + "name": "Features", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "isRequired": false + }, + { + "name": "MultiTenancy", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "isRequired": false + }, + { + "name": "CurrentTenant", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "isRequired": false + }, + { + "name": "Timing", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "isRequired": false + }, + { + "name": "Clock", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "isRequired": false + }, + { + "name": "ObjectExtensions", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "jsonName": null, + "type": "{System.String:System.Collections.Generic.Dictionary}", + "typeSimple": "{string:System.Collections.Generic.Dictionary}", + "isRequired": false + }, + { + "name": "Languages", + "jsonName": null, + "type": "[Volo.Abp.Localization.LanguageInfo]", + "typeSimple": "[Volo.Abp.Localization.LanguageInfo]", + "isRequired": false + }, + { + "name": "CurrentCulture", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "isRequired": false + }, + { + "name": "DefaultResourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LanguagesMap", + "jsonName": null, + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}", + "isRequired": false + }, + { + "name": "LanguageFilesMap", + "jsonName": null, + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}", + "isRequired": false + } + ] + }, + "Volo.Abp.Localization.LanguageInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UiCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FlagIcon", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EnglishName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ThreeLetterIsoLanguageName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TwoLetterIsoLanguageName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsRightToLeft", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "NativeName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DateTimeFormat", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CalendarAlgorithmType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DateTimeFormatLong", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShortDatePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FullDateTimePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DateSeparator", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShortTimePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LongTimePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.NameValue": { + "baseType": "Volo.Abp.NameValue", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.NameValue": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "T", + "typeSimple": "T", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Policies", + "jsonName": null, + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}", + "isRequired": false + }, + { + "name": "GrantedPolicies", + "jsonName": null, + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "jsonName": null, + "type": "{System.String:System.String}", + "typeSimple": "{string:string}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAuthenticated", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Id", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ImpersonatorUserId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ImpersonatorTenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SurName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailVerified", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberVerified", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Roles", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "jsonName": null, + "type": "{System.String:System.String}", + "typeSimple": "{string:string}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZone", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Iana", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "isRequired": false + }, + { + "name": "Windows", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Kind", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "isRequired": false + }, + { + "name": "Enums", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Entities", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "isRequired": false + }, + { + "name": "Configuration", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Properties", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "isRequired": false + }, + { + "name": "Configuration", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "isRequired": false + }, + { + "name": "Api", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "isRequired": false + }, + { + "name": "Ui", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "isRequired": false + }, + { + "name": "Attributes", + "jsonName": null, + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "isRequired": false + }, + { + "name": "Configuration", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Resource", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnGet", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "isRequired": false + }, + { + "name": "OnCreate", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "isRequired": false + }, + { + "name": "OnUpdate", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnTable", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "isRequired": false + }, + { + "name": "OnCreateForm", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "isRequired": false + }, + { + "name": "OnEditForm", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "isRequired": false + }, + { + "name": "Lookup", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ResultListPropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayPropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ValuePropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FilterParamName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Config", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Fields", + "jsonName": null, + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "isRequired": false + }, + { + "name": "LocalizationResource", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IncludeTypes", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "isRequired": false + }, + { + "name": "Types", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ModuleApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RootPath", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RemoteServiceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Controllers", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ControllerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Interfaces", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "isRequired": false + }, + { + "name": "Actions", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ActionApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UniqueName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "HttpMethod", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SupportedVersions", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "ParametersOnMethod", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "isRequired": false + }, + { + "name": "Parameters", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "isRequired": false + }, + { + "name": "ReturnValue", + "jsonName": null, + "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "isRequired": false + }, + { + "name": "AllowAnonymous", + "jsonName": null, + "type": "System.Boolean?", + "typeSimple": "boolean?", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeAsString", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsOptional", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NameOnMethod", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "JsonName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsOptional", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + }, + { + "name": "ConstraintTypes", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "BindingSourceId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DescriptorName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.TypeApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BaseType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsEnum", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "EnumNames", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "EnumValues", + "jsonName": null, + "type": "[System.Object]", + "typeSimple": "[object]", + "isRequired": false + }, + { + "name": "GenericArguments", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.PropertyApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "JsonName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsRequired", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + } + } +} \ No newline at end of file diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/identity/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/identity/index.ts new file mode 100644 index 0000000000..e9644dae47 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/identity/index.ts @@ -0,0 +1 @@ +export * from './models'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/identity/models.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/identity/models.ts new file mode 100644 index 0000000000..e9699b4d86 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/identity/models.ts @@ -0,0 +1,15 @@ +import type { ExtensibleFullAuditedEntityDto } from '@abp/ng.core'; + +export interface IdentityUserDto extends ExtensibleFullAuditedEntityDto { + tenantId?: string; + userName?: string; + name?: string; + surname?: string; + email?: string; + emailConfirmed: boolean; + phoneNumber?: string; + phoneNumberConfirmed: boolean; + lockoutEnabled: boolean; + lockoutEnd?: string; + concurrencyStamp?: string; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/index.ts new file mode 100644 index 0000000000..a6a5d415f9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/index.ts @@ -0,0 +1,3 @@ +import * as Account from './account'; +import * as Identity from './identity'; +export { Account, Identity }; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/services/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/services/index.ts new file mode 100644 index 0000000000..b94bc7c840 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/services/index.ts @@ -0,0 +1 @@ +export * from './manage-profile.state.service'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/services/manage-profile.state.service.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/services/manage-profile.state.service.ts new file mode 100644 index 0000000000..74c58c0674 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/services/manage-profile.state.service.ts @@ -0,0 +1,28 @@ +import { Injectable } from '@angular/core'; +import { InternalStore, Profile } from '@abp/ng.core'; +import { Observable } from 'rxjs'; + +export interface ManageProfileState { + profile: Profile.Response; +} + +@Injectable({ providedIn: 'root' }) +export class ManageProfileStateService { + private readonly store = new InternalStore({} as ManageProfileState); + + get createOnUpdateStream() { + return this.store.sliceUpdate; + } + + getProfile$(): Observable { + return this.store.sliceState(state => state.profile); + } + + getProfile(): Profile.Response { + return this.store.state.profile; + } + + setProfile(profile: Profile.Response) { + this.store.patch({ profile }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/tokens/config-options.token.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/tokens/config-options.token.ts new file mode 100644 index 0000000000..0f479a9d1a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/tokens/config-options.token.ts @@ -0,0 +1,6 @@ +import { InjectionToken } from '@angular/core'; +import { AccountConfigOptions } from '../models/config-options'; + +export const ACCOUNT_CONFIG_OPTIONS = new InjectionToken( + 'ACCOUNT_CONFIG_OPTIONS', +); diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/tokens/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/tokens/index.ts new file mode 100644 index 0000000000..0a88318130 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/tokens/index.ts @@ -0,0 +1 @@ +export * from './config-options.token'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/utils/auth-utils.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/utils/auth-utils.ts new file mode 100644 index 0000000000..db6bfe033c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/utils/auth-utils.ts @@ -0,0 +1,9 @@ +import { Injector } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { ACCOUNT_CONFIG_OPTIONS } from '../tokens/config-options.token'; + +export function getRedirectUrl(injector: Injector) { + const route = injector.get(ActivatedRoute); + const options = injector.get(ACCOUNT_CONFIG_OPTIONS); + return route.snapshot.queryParams.returnUrl || options.redirectUrl || '/'; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/utils/factory-utils.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/utils/factory-utils.ts new file mode 100644 index 0000000000..a04c1d4040 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/utils/factory-utils.ts @@ -0,0 +1,8 @@ +import { AccountConfigOptions } from '../models/config-options'; + +export function accountConfigOptionsFactory(options: AccountConfigOptions) { + return { + redirectUrl: '/', + ...options, + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/utils/index.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/utils/index.ts new file mode 100644 index 0000000000..9235af99fd --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/utils/index.ts @@ -0,0 +1,2 @@ +export * from './auth-utils'; +export * from './factory-utils'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/public-api.ts new file mode 100644 index 0000000000..c3e80345c5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/public-api.ts @@ -0,0 +1,9 @@ +export * from './lib/account.module'; +export * from './lib/components'; +export * from './lib/enums'; +export * from './lib/guards'; +export * from './lib/models'; +export * from './lib/services'; +export * from './lib/tokens'; +export * from './lib/proxy/account'; +export * from './lib/proxy/identity'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.json new file mode 100644 index 0000000000..62ebbd9464 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.lib.json new file mode 100644 index 0000000000..bbcc12b1c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.lib.prod.json new file mode 100644 index 0000000000..331d0ecb05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial", + "enableIvy": false + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index 5bce53d760..b5476c8d32 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -15,7 +15,8 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { - "@abp/ng.feature-management": ["dist/packages/feature-management"], + "@abp/ng.account": ["dist/packages/account"], + "@abp/ng.account/config": ["dist/packages/account/config"], "@abp/ng.account.core": ["dist/packages/account-core"], "@abp/ng.components": ["dist/packages/components"], "@abp/ng.components/page": ["dist/packages/components/page"], @@ -23,16 +24,19 @@ "@abp/ng.core": ["dist/packages/core"], "@abp/ng.core/locale": ["dist/packages/core/locale"], "@abp/ng.core/testing": ["dist/packages/core/testing"], + "@abp/ng.feature-management": ["dist/packages/feature-management"], + "@abp/ng.permission-management": ["dist/packages/permission-management"], + "@abp/ng.setting-management": ["dist/packages/setting-management"], + "@abp/ng.setting-management/config": [ + "dist/packages/setting-management/config" + ], "@abp/ng.theme.basic": ["dist/packages/theme-basic"], "@abp/ng.theme.basic/testing": ["dist/packages/theme-basic/testing"], "@abp/ng.theme.shared": ["dist/packages/theme-shared"], "@abp/ng.theme.shared/extensions": [ "dist/packages/theme-shared/extensions" ], - "@abp/ng.theme.shared/testing": ["dist/packages/theme-shared/testing"], - "@abp/ng.permission-management": ["dist/packages/permission-management"], - "@abp/ng.setting-management": ["dist/packages/setting-management"], - "@abp/ng.setting-management/config": ["dist/packages/setting-management/config"] + "@abp/ng.theme.shared/testing": ["dist/packages/theme-shared/testing"] } }, "exclude": ["node_modules", "tmp"] diff --git a/npm/ng-packs/nx/ng-packs/yarn.lock b/npm/ng-packs/nx/ng-packs/yarn.lock index ebe068c0f0..6bb96703d1 100644 --- a/npm/ng-packs/nx/ng-packs/yarn.lock +++ b/npm/ng-packs/nx/ng-packs/yarn.lock @@ -2683,13 +2683,6 @@ dependencies: tslib "^1.9.0" -"@ngx-validate/core@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@ngx-validate/core/-/core-0.1.1.tgz#bb7615e4fcca86fe21319b99a3c2c0cb8dc31285" - integrity sha512-632XUkV/QEIwAawESvFs7mGonDJZao/J/1kb6UgBSF3CYe9ub6alLf1T/5HMmyHpmBujNaFZndJpd28pdvPptA== - dependencies: - tslib "^1.9.0" - "@ngxs/store@^3.7.0": version "3.7.2" resolved "https://registry.yarnpkg.com/@ngxs/store/-/store-3.7.2.tgz#1088b0669adc382d36ca7ae8438c603e55879b42" From 96bae7391b937b31f80dd91f23f02dcdf803fb81 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 13 Aug 2021 16:08:03 +0300 Subject: [PATCH 13/56] add identity package to nx workspace --- npm/ng-packs/nx/ng-packs/angular.json | 41 + npm/ng-packs/nx/ng-packs/nx.json | 4 + .../ng-packs/packages/identity/.eslintrc.json | 36 + .../nx/ng-packs/packages/identity/README.md | 3 + .../packages/identity/config/ng-package.json | 7 + .../identity/config/src/enums/index.ts | 2 + .../identity/config/src/enums/policy-names.ts | 5 + .../identity/config/src/enums/route-names.ts | 5 + .../config/src/identity-config.module.ts | 12 + .../identity/config/src/providers/index.ts | 1 + .../config/src/providers/route.provider.ts | 39 + .../identity/config/src/public-api.ts | 3 + .../ng-packs/packages/identity/jest.config.js | 20 + .../packages/identity/ng-package.json | 11 + .../ng-packs/packages/identity/package.json | 17 + .../src/lib/actions/identity.actions.ts | 64 + .../identity/src/lib/actions/index.ts | 1 + .../identity/src/lib/components/index.ts | 2 + .../lib/components/roles/roles.component.html | 60 + .../lib/components/roles/roles.component.ts | 142 + .../lib/components/users/users.component.html | 102 + .../lib/components/users/users.component.ts | 211 + .../defaults/default-roles-entity-actions.ts | 31 + .../defaults/default-roles-entity-props.ts | 32 + .../lib/defaults/default-roles-form-props.ts | 30 + .../defaults/default-roles-toolbar-actions.ts | 15 + .../defaults/default-users-entity-actions.ts | 30 + .../defaults/default-users-entity-props.ts | 26 + .../lib/defaults/default-users-form-props.ts | 61 + .../defaults/default-users-toolbar-actions.ts | 15 + .../identity/src/lib/enums/components.ts | 4 + .../packages/identity/src/lib/enums/index.ts | 1 + .../src/lib/guards/extensions.guard.ts | 91 + .../packages/identity/src/lib/guards/index.ts | 1 + .../src/lib/identity-routing.module.ts | 52 + .../identity/src/lib/identity.module.ts | 71 + .../identity/src/lib/models/config-options.ts | 42 + .../identity/src/lib/models/identity.ts | 12 + .../packages/identity/src/lib/models/index.ts | 2 + .../src/lib/proxy/generate-proxy.json | 4210 +++++++++++++++++ .../proxy/identity/identity-role.service.ts | 58 + .../identity/identity-user-lookup.service.ts | 44 + .../proxy/identity/identity-user.service.ts | 93 + .../identity/src/lib/proxy/identity/index.ts | 5 + .../identity/src/lib/proxy/identity/models.ts | 95 + .../src/lib/proxy/identity/profile.service.ts | 35 + .../identity/src/lib/proxy/users/index.ts | 1 + .../identity/src/lib/proxy/users/models.ts | 12 + .../lib/services/identity-state.service.ts | 82 + .../identity/src/lib/services/index.ts | 1 + .../identity/src/lib/states/identity.state.ts | 138 + .../packages/identity/src/lib/states/index.ts | 1 + .../lib/tests/identity-state.service.spec.ts | 58 + .../src/lib/tokens/extensions.token.ts | 91 + .../packages/identity/src/lib/tokens/index.ts | 1 + .../packages/identity/src/public-api.ts | 11 + .../packages/identity/src/test-setup.ts | 1 + .../ng-packs/packages/identity/tsconfig.json | 13 + .../packages/identity/tsconfig.lib.json | 14 + .../packages/identity/tsconfig.lib.prod.json | 11 + .../packages/identity/tsconfig.spec.json | 10 + npm/ng-packs/nx/ng-packs/tsconfig.base.json | 4 +- 62 files changed, 6292 insertions(+), 1 deletion(-) create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/config/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/config/src/enums/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/config/src/enums/policy-names.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/config/src/enums/route-names.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/config/src/identity-config.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/config/src/providers/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/config/src/providers/route.provider.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/config/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/actions/identity.actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/actions/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/roles/roles.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/users/users.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/users/users.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-props.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-form-props.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-toolbar-actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-entity-actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-entity-props.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-form-props.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-toolbar-actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/enums/components.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/enums/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/guards/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/identity-routing.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/identity.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/models/config-options.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/models/identity.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/models/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/generate-proxy.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-role.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user-lookup.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/profile.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/users/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/users/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/services/identity-state.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/services/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/states/identity.state.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/states/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tests/identity-state.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tokens/extensions.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tokens/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.lib.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.lib.prod.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index 9207cd53f3..5a308231cf 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -325,6 +325,47 @@ } } }, + "identity": { + "projectType": "library", + "root": "packages/identity", + "sourceRoot": "packages/identity/src", + "prefix": "abp", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "packages/identity/tsconfig.lib.json", + "project": "packages/identity/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "packages/identity/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "packages/identity/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/packages/identity"], + "options": { + "jestConfig": "packages/identity/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "packages/identity/src/**/*.ts", + "packages/identity/src/**/*.html" + ] + } + } + } + }, "permission-management": { "projectType": "library", "root": "packages/permission-management", diff --git a/npm/ng-packs/nx/ng-packs/nx.json b/npm/ng-packs/nx/ng-packs/nx.json index 1b3a2842ca..772bdb1a17 100644 --- a/npm/ng-packs/nx/ng-packs/nx.json +++ b/npm/ng-packs/nx/ng-packs/nx.json @@ -57,6 +57,10 @@ "tags": [], "implicitDependencies": ["core", "theme-shared"] }, + "identity": { + "tags": [], + "implicitDependencies": ["core", "theme-shared", "permission-management"] + }, "permission-management": { "tags": [], "implicitDependencies": ["core", "theme-shared"] diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/identity/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/README.md b/npm/ng-packs/nx/ng-packs/packages/identity/README.md new file mode 100644 index 0000000000..9f56af796a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/README.md @@ -0,0 +1,3 @@ +

@abp/ng.identity

+ +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/config/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/identity/config/ng-package.json new file mode 100644 index 0000000000..1a45764aaf --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/config/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/packages/identity/config", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/config/src/enums/index.ts b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/enums/index.ts new file mode 100644 index 0000000000..4a7a6a0e23 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/enums/index.ts @@ -0,0 +1,2 @@ +export * from './policy-names'; +export * from './route-names'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/config/src/enums/policy-names.ts b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/enums/policy-names.ts new file mode 100644 index 0000000000..f001c03964 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/enums/policy-names.ts @@ -0,0 +1,5 @@ +export const enum eIdentityPolicyNames { + IdentityManagement = 'AbpIdentity.Roles || AbpIdentity.Users', + Roles = 'AbpIdentity.Roles', + Users = 'AbpIdentity.Users', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/config/src/enums/route-names.ts b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/enums/route-names.ts new file mode 100644 index 0000000000..0452f32f7b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/enums/route-names.ts @@ -0,0 +1,5 @@ +export const enum eIdentityRouteNames { + IdentityManagement = 'AbpIdentity::Menu:IdentityManagement', + Roles = 'AbpIdentity::Roles', + Users = 'AbpIdentity::Users', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/config/src/identity-config.module.ts b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/identity-config.module.ts new file mode 100644 index 0000000000..745578f69a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/identity-config.module.ts @@ -0,0 +1,12 @@ +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { IDENTITY_ROUTE_PROVIDERS } from './providers/route.provider'; + +@NgModule() +export class IdentityConfigModule { + static forRoot(): ModuleWithProviders { + return { + ngModule: IdentityConfigModule, + providers: [IDENTITY_ROUTE_PROVIDERS], + }; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/config/src/providers/index.ts b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/providers/index.ts new file mode 100644 index 0000000000..fe08efba8c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/providers/index.ts @@ -0,0 +1 @@ +export * from './route.provider'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/config/src/providers/route.provider.ts b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/providers/route.provider.ts new file mode 100644 index 0000000000..26326138e6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/providers/route.provider.ts @@ -0,0 +1,39 @@ +import { eLayoutType, RoutesService } from '@abp/ng.core'; +import { eThemeSharedRouteNames } from '@abp/ng.theme.shared'; +import { APP_INITIALIZER } from '@angular/core'; +import { eIdentityPolicyNames } from '../enums/policy-names'; +import { eIdentityRouteNames } from '../enums/route-names'; + +export const IDENTITY_ROUTE_PROVIDERS = [ + { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, +]; + +export function configureRoutes(routesService: RoutesService) { + return () => { + routesService.add([ + { + path: undefined, + name: eIdentityRouteNames.IdentityManagement, + parentName: eThemeSharedRouteNames.Administration, + requiredPolicy: eIdentityPolicyNames.IdentityManagement, + iconClass: 'fa fa-id-card-o', + layout: eLayoutType.application, + order: 1, + }, + { + path: '/identity/roles', + name: eIdentityRouteNames.Roles, + parentName: eIdentityRouteNames.IdentityManagement, + requiredPolicy: eIdentityPolicyNames.Roles, + order: 1, + }, + { + path: '/identity/users', + name: eIdentityRouteNames.Users, + parentName: eIdentityRouteNames.IdentityManagement, + requiredPolicy: eIdentityPolicyNames.Users, + order: 2, + }, + ]); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/config/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/public-api.ts new file mode 100644 index 0000000000..1497fe943b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/config/src/public-api.ts @@ -0,0 +1,3 @@ +export * from './enums'; +export * from './identity-config.module'; +export * from './providers'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/jest.config.js b/npm/ng-packs/nx/ng-packs/packages/identity/jest.config.js new file mode 100644 index 0000000000..0ef650e156 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'identity', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/packages/identity', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/identity/ng-package.json new file mode 100644 index 0000000000..a0824f39e5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/ng-package.json @@ -0,0 +1,11 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/packages/identity", + "lib": { + "entryFile": "src/public-api.ts" + }, + "allowedNonPeerDependencies": [ + "@abp/ng.theme.shared", + "@abp/ng.permission-management" + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/package.json b/npm/ng-packs/nx/ng-packs/packages/identity/package.json new file mode 100644 index 0000000000..37da33811e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/package.json @@ -0,0 +1,17 @@ +{ + "name": "@abp/ng.identity", + "version": "4.4.0", + "homepage": "https://abp.io", + "repository": { + "type": "git", + "url": "https://github.com/abpframework/abp.git" + }, + "dependencies": { + "@abp/ng.permission-management": "~4.4.0", + "@abp/ng.theme.shared": "~4.4.0", + "tslib": "^2.0.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/actions/identity.actions.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/actions/identity.actions.ts new file mode 100644 index 0000000000..5b470b080e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/actions/identity.actions.ts @@ -0,0 +1,64 @@ +import { Identity } from '../models/identity'; +import { ABP, PagedAndSortedResultRequestDto } from '@abp/ng.core'; +import { + GetIdentityUsersInput, + IdentityRoleCreateDto, + IdentityRoleUpdateDto, + IdentityUserCreateDto, + IdentityUserUpdateDto, +} from '../proxy/identity/models'; + +export class GetRoles { + static readonly type = '[Identity] Get Roles'; + constructor(public payload?: PagedAndSortedResultRequestDto) {} +} + +export class GetRoleById { + static readonly type = '[Identity] Get Role By Id'; + constructor(public payload: string) {} +} + +export class DeleteRole { + static readonly type = '[Identity] Delete Role'; + constructor(public payload: string) {} +} + +export class CreateRole { + static readonly type = '[Identity] Create Role'; + constructor(public payload: IdentityRoleCreateDto) {} +} + +export class UpdateRole { + static readonly type = '[Identity] Update Role'; + constructor(public payload: IdentityRoleUpdateDto & { id: string }) {} +} + +export class GetUsers { + static readonly type = '[Identity] Get Users'; + constructor(public payload?: GetIdentityUsersInput) {} +} + +export class GetUserById { + static readonly type = '[Identity] Get User By Id'; + constructor(public payload: string) {} +} + +export class DeleteUser { + static readonly type = '[Identity] Delete User'; + constructor(public payload: string) {} +} + +export class CreateUser { + static readonly type = '[Identity] Create User'; + constructor(public payload: IdentityUserCreateDto) {} +} + +export class UpdateUser { + static readonly type = '[Identity] Update User'; + constructor(public payload: IdentityUserUpdateDto & { id: string }) {} +} + +export class GetUserRoles { + static readonly type = '[Identity] Get User Roles'; + constructor(public payload: string) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/actions/index.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/actions/index.ts new file mode 100644 index 0000000000..f2c40cc4c1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/actions/index.ts @@ -0,0 +1 @@ +export * from './identity.actions'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/index.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/index.ts new file mode 100644 index 0000000000..29c90f5833 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/index.ts @@ -0,0 +1,2 @@ +export * from './roles/roles.component'; +export * from './users/users.component'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/roles/roles.component.html b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/roles/roles.component.html new file mode 100644 index 0000000000..f3ab79cd57 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/roles/roles.component.html @@ -0,0 +1,60 @@ +
+
+
+
+
{{ 'AbpIdentity::Roles' | abpLocalization }}
+
+
+ +
+
+
+ +
+ +
+
+ + + +

{{ (selected?.id ? 'AbpIdentity::Edit' : 'AbpIdentity::NewRole') | abpLocalization }}

+
+ + +
+ +
+
+ + + + {{ + 'AbpIdentity::Save' | abpLocalization + }} + +
+ + + diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts new file mode 100644 index 0000000000..75c14d4aeb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts @@ -0,0 +1,142 @@ +import { ListService, PagedAndSortedResultRequestDto } from '@abp/ng.core'; +import { ePermissionManagementComponents } from '@abp/ng.permission-management'; +import { Confirmation, ConfirmationService } from '@abp/ng.theme.shared'; +import { + EXTENSIONS_IDENTIFIER, + FormPropData, + generateFormFromProps, +} from '@abp/ng.theme.shared/extensions'; +import { Component, ElementRef, Injector, OnInit, ViewChild } from '@angular/core'; +import { FormGroup } from '@angular/forms'; +import { Select, Store } from '@ngxs/store'; +import { Observable } from 'rxjs'; +import { finalize, pluck } from 'rxjs/operators'; +import { + CreateRole, + DeleteRole, + GetRoleById, + GetRoles, + UpdateRole, +} from '../../actions/identity.actions'; +import { eIdentityComponents } from '../../enums/components'; +import { IdentityRoleDto } from '../../proxy/identity/models'; +import { IdentityState } from '../../states/identity.state'; + +@Component({ + selector: 'abp-roles', + templateUrl: './roles.component.html', + providers: [ + ListService, + { + provide: EXTENSIONS_IDENTIFIER, + useValue: eIdentityComponents.Roles, + }, + ], +}) +export class RolesComponent implements OnInit { + @Select(IdentityState.getRoles) + data$: Observable; + + @Select(IdentityState.getRolesTotalCount) + totalCount$: Observable; + + form: FormGroup; + + selected: IdentityRoleDto; + + isModalVisible: boolean; + + visiblePermissions = false; + + providerKey: string; + + modalBusy = false; + + permissionManagementKey = ePermissionManagementComponents.PermissionManagement; + + onVisiblePermissionChange = event => { + this.visiblePermissions = event; + }; + + constructor( + public readonly list: ListService, + protected confirmationService: ConfirmationService, + protected store: Store, + protected injector: Injector, + ) {} + + ngOnInit() { + this.hookToQuery(); + } + + buildForm() { + const data = new FormPropData(this.injector, this.selected); + this.form = generateFormFromProps(data); + } + + openModal() { + this.buildForm(); + this.isModalVisible = true; + } + + add() { + this.selected = {} as IdentityRoleDto; + this.openModal(); + } + + edit(id: string) { + this.store + .dispatch(new GetRoleById(id)) + .pipe(pluck('IdentityState', 'selectedRole')) + .subscribe(selectedRole => { + this.selected = selectedRole; + this.openModal(); + }); + } + + save() { + if (!this.form.valid) return; + this.modalBusy = true; + + this.store + .dispatch( + this.selected.id + ? new UpdateRole({ ...this.selected, ...this.form.value, id: this.selected.id }) + : new CreateRole(this.form.value), + ) + .pipe(finalize(() => (this.modalBusy = false))) + .subscribe(() => { + this.isModalVisible = false; + this.list.get(); + }); + } + + delete(id: string, name: string) { + this.confirmationService + .warn('AbpIdentity::RoleDeletionConfirmationMessage', 'AbpIdentity::AreYouSure', { + messageLocalizationParams: [name], + }) + .subscribe((status: Confirmation.Status) => { + if (status === Confirmation.Status.confirm) { + this.store.dispatch(new DeleteRole(id)).subscribe(() => this.list.get()); + } + }); + } + + private hookToQuery() { + this.list.hookToQuery(query => this.store.dispatch(new GetRoles(query))).subscribe(); + } + + openPermissionsModal(providerKey: string) { + this.providerKey = providerKey; + setTimeout(() => { + this.visiblePermissions = true; + }, 0); + } + + sort(data) { + const { prop, dir } = data.sorts[0]; + this.list.sortKey = prop; + this.list.sortOrder = dir; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/users/users.component.html b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/users/users.component.html new file mode 100644 index 0000000000..aa6dac1e93 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/users/users.component.html @@ -0,0 +1,102 @@ +
+
+
+
+
{{ 'AbpIdentity::Users' | abpLocalization }}
+
+
+ +
+
+
+
+
+
+ +
+
+ + +
+
+ + + +

{{ (selected?.id ? 'AbpIdentity::Edit' : 'AbpIdentity::NewUser') | abpLocalization }}

+
+ + +
+ +
+ + +
+
+
+ + + + {{ + 'AbpIdentity::Save' | abpLocalization + }} + +
+ + + diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/users/users.component.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/users/users.component.ts new file mode 100644 index 0000000000..da533ba62a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/components/users/users.component.ts @@ -0,0 +1,211 @@ +import { ListService } from '@abp/ng.core'; +import { ePermissionManagementComponents } from '@abp/ng.permission-management'; +import { Confirmation, ConfirmationService } from '@abp/ng.theme.shared'; +import { + EXTENSIONS_IDENTIFIER, + FormPropData, + generateFormFromProps, +} from '@abp/ng.theme.shared/extensions'; +import { + Component, + Injector, + OnInit, + TemplateRef, + TrackByFunction, + ViewChild, +} from '@angular/core'; +import { AbstractControl, FormArray, FormBuilder, FormGroup } from '@angular/forms'; +import { Select, Store } from '@ngxs/store'; +import { Observable } from 'rxjs'; +import { finalize, pluck, switchMap, take } from 'rxjs/operators'; +import snq from 'snq'; +import { + CreateUser, + DeleteUser, + GetUserById, + GetUserRoles, + GetUsers, + UpdateUser, +} from '../../actions/identity.actions'; +import { eIdentityComponents } from '../../enums/components'; +import { Identity } from '../../models/identity'; +import { IdentityUserService } from '../../proxy/identity/identity-user.service'; +import { + GetIdentityUsersInput, + IdentityRoleDto, + IdentityUserDto, +} from '../../proxy/identity/models'; +import { IdentityState } from '../../states/identity.state'; + +@Component({ + selector: 'abp-users', + templateUrl: './users.component.html', + providers: [ + ListService, + { + provide: EXTENSIONS_IDENTIFIER, + useValue: eIdentityComponents.Users, + }, + ], +}) +export class UsersComponent implements OnInit { + @Select(IdentityState.getUsers) + data$: Observable; + + @Select(IdentityState.getUsersTotalCount) + totalCount$: Observable; + + @ViewChild('modalContent', { static: false }) + modalContent: TemplateRef; + + form: FormGroup; + + selected: IdentityUserDto; + + selectedUserRoles: IdentityRoleDto[]; + + roles: IdentityRoleDto[]; + + visiblePermissions = false; + + providerKey: string; + + isModalVisible: boolean; + + modalBusy = false; + + permissionManagementKey = ePermissionManagementComponents.PermissionManagement; + + trackByFn: TrackByFunction = (index, item) => Object.keys(item)[0] || index; + + onVisiblePermissionChange = event => { + this.visiblePermissions = event; + }; + + get roleGroups(): FormGroup[] { + return snq(() => (this.form.get('roleNames') as FormArray).controls as FormGroup[], []); + } + + constructor( + public readonly list: ListService, + protected confirmationService: ConfirmationService, + protected userService: IdentityUserService, + protected fb: FormBuilder, + protected store: Store, + protected injector: Injector, + ) {} + + ngOnInit() { + this.hookToQuery(); + } + + buildForm() { + const data = new FormPropData(this.injector, this.selected); + this.form = generateFormFromProps(data); + + this.userService.getAssignableRoles().subscribe(({ items }) => { + this.roles = items; + this.form.addControl( + 'roleNames', + this.fb.array( + this.roles.map(role => + this.fb.group({ + [role.name]: [ + this.selected.id + ? !!snq(() => this.selectedUserRoles.find(userRole => userRole.id === role.id)) + : role.isDefault, + ], + }), + ), + ), + ); + }); + } + + openModal() { + this.buildForm(); + this.isModalVisible = true; + } + + add() { + this.selected = {} as IdentityUserDto; + this.selectedUserRoles = [] as IdentityRoleDto[]; + this.openModal(); + } + + edit(id: string) { + this.store + .dispatch(new GetUserById(id)) + .pipe( + switchMap(() => this.store.dispatch(new GetUserRoles(id))), + pluck('IdentityState'), + take(1), + ) + .subscribe((state: Identity.State) => { + this.selected = state.selectedUser; + this.selectedUserRoles = state.selectedUserRoles || []; + this.openModal(); + }); + } + + save() { + if (!this.form.valid || this.modalBusy) return; + this.modalBusy = true; + + const { roleNames } = this.form.value; + const mappedRoleNames = snq( + () => + roleNames.filter(role => !!role[Object.keys(role)[0]]).map(role => Object.keys(role)[0]), + [], + ); + + this.store + .dispatch( + this.selected.id + ? new UpdateUser({ + ...this.selected, + ...this.form.value, + id: this.selected.id, + roleNames: mappedRoleNames, + }) + : new CreateUser({ + ...this.form.value, + roleNames: mappedRoleNames, + }), + ) + .pipe(finalize(() => (this.modalBusy = false))) + .subscribe(() => { + this.isModalVisible = false; + this.list.get(); + }); + } + + delete(id: string, userName: string) { + this.confirmationService + .warn('AbpIdentity::UserDeletionConfirmationMessage', 'AbpIdentity::AreYouSure', { + messageLocalizationParams: [userName], + }) + .subscribe((status: Confirmation.Status) => { + if (status === Confirmation.Status.confirm) { + this.store.dispatch(new DeleteUser(id)).subscribe(() => this.list.get()); + } + }); + } + + sort(data) { + const { prop, dir } = data.sorts[0]; + this.list.sortKey = prop; + this.list.sortOrder = dir; + } + + private hookToQuery() { + this.list.hookToQuery(query => this.store.dispatch(new GetUsers(query))).subscribe(); + } + + openPermissionsModal(providerKey: string) { + this.providerKey = providerKey; + setTimeout(() => { + this.visiblePermissions = true; + }, 0); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-actions.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-actions.ts new file mode 100644 index 0000000000..2a2822c62e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-actions.ts @@ -0,0 +1,31 @@ +import { EntityAction } from '@abp/ng.theme.shared/extensions'; +import { RolesComponent } from '../components/roles/roles.component'; +import { IdentityRoleDto } from '../proxy/identity/models'; + +export const DEFAULT_ROLES_ENTITY_ACTIONS = EntityAction.createMany([ + { + text: 'AbpIdentity::Edit', + action: data => { + const component = data.getInjected(RolesComponent); + component.edit(data.record.id); + }, + permission: 'AbpIdentity.Roles.Update', + }, + { + text: 'AbpIdentity::Permissions', + action: data => { + const component = data.getInjected(RolesComponent); + component.openPermissionsModal(data.record.name); + }, + permission: 'AbpIdentity.Roles.ManagePermissions', + }, + { + text: 'AbpIdentity::Delete', + action: data => { + const component = data.getInjected(RolesComponent); + component.delete(data.record.id, data.record.name); + }, + permission: 'AbpIdentity.Roles.Delete', + visible: data => !data.record.isStatic, + }, +]); diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-props.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-props.ts new file mode 100644 index 0000000000..bd3a49def2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-entity-props.ts @@ -0,0 +1,32 @@ +import { LocalizationService } from '@abp/ng.core'; +import { EntityProp, ePropType } from '@abp/ng.theme.shared/extensions'; +import { of } from 'rxjs'; +import { IdentityRoleDto } from '../proxy/identity/models'; + +export const DEFAULT_ROLES_ENTITY_PROPS = EntityProp.createMany([ + { + type: ePropType.String, + name: 'name', + displayName: 'AbpIdentity::RoleName', + sortable: true, + valueResolver: data => { + const l10n = data.getInjected(LocalizationService); + const t = l10n.instant.bind(l10n); + const { isDefault, isPublic, name } = data.record; + + return of( + name + + (isDefault + ? `${t( + 'AbpIdentity::DisplayName:IsDefault', + )}` + : '') + + (isPublic + ? `${t( + 'AbpIdentity::DisplayName:IsPublic', + )}` + : ''), + ); + }, + }, +]); diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-form-props.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-form-props.ts new file mode 100644 index 0000000000..a9cf966257 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-form-props.ts @@ -0,0 +1,30 @@ +import { ePropType, FormProp, PropData } from '@abp/ng.theme.shared/extensions'; +import { Validators } from '@angular/forms'; +import { IdentityRoleDto } from '../proxy/identity/models'; + +export const DEFAULT_ROLES_CREATE_FORM_PROPS = FormProp.createMany([ + { + type: ePropType.String, + name: 'name', + displayName: 'AbpIdentity::RoleName', + id: 'role-name', + disabled: (data: PropData) => data.record && data.record.isStatic, + validators: () => [Validators.required], + }, + { + type: ePropType.Boolean, + name: 'isDefault', + displayName: 'AbpIdentity::DisplayName:IsDefault', + id: 'role-is-default', + defaultValue: false, + }, + { + type: ePropType.Boolean, + name: 'isPublic', + displayName: 'AbpIdentity::DisplayName:IsPublic', + id: 'role-is-public', + defaultValue: false, + }, +]); + +export const DEFAULT_ROLES_EDIT_FORM_PROPS = DEFAULT_ROLES_CREATE_FORM_PROPS; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-toolbar-actions.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-toolbar-actions.ts new file mode 100644 index 0000000000..271aced701 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-roles-toolbar-actions.ts @@ -0,0 +1,15 @@ +import { ToolbarAction } from '@abp/ng.theme.shared/extensions'; +import { RolesComponent } from '../components/roles/roles.component'; +import { IdentityRoleDto } from '../proxy/identity/models'; + +export const DEFAULT_ROLES_TOOLBAR_ACTIONS = ToolbarAction.createMany([ + { + text: 'AbpIdentity::NewRole', + action: data => { + const component = data.getInjected(RolesComponent); + component.add(); + }, + permission: 'AbpIdentity.Roles.Create', + icon: 'fa fa-plus', + }, +]); diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-entity-actions.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-entity-actions.ts new file mode 100644 index 0000000000..f8be7740ff --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-entity-actions.ts @@ -0,0 +1,30 @@ +import { EntityAction } from '@abp/ng.theme.shared/extensions'; +import { UsersComponent } from '../components/users/users.component'; +import { IdentityUserDto } from '../proxy/identity/models'; + +export const DEFAULT_USERS_ENTITY_ACTIONS = EntityAction.createMany([ + { + text: 'AbpIdentity::Edit', + action: data => { + const component = data.getInjected(UsersComponent); + component.edit(data.record.id); + }, + permission: 'AbpIdentity.Users.Update', + }, + { + text: 'AbpIdentity::Permissions', + action: data => { + const component = data.getInjected(UsersComponent); + component.openPermissionsModal(data.record.id); + }, + permission: 'AbpIdentity.Users.ManagePermissions', + }, + { + text: 'AbpIdentity::Delete', + action: data => { + const component = data.getInjected(UsersComponent); + component.delete(data.record.id, data.record.name || data.record.userName); + }, + permission: 'AbpIdentity.Users.Delete', + }, +]); diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-entity-props.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-entity-props.ts new file mode 100644 index 0000000000..f9d7c217be --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-entity-props.ts @@ -0,0 +1,26 @@ +import { EntityProp, ePropType } from '@abp/ng.theme.shared/extensions'; +import { IdentityUserDto } from '../proxy/identity/models'; + +export const DEFAULT_USERS_ENTITY_PROPS = EntityProp.createMany([ + { + type: ePropType.String, + name: 'userName', + displayName: 'AbpIdentity::UserName', + sortable: true, + columnWidth: 250, + }, + { + type: ePropType.String, + name: 'email', + displayName: 'AbpIdentity::EmailAddress', + sortable: true, + columnWidth: 250, + }, + { + type: ePropType.String, + name: 'phoneNumber', + displayName: 'AbpIdentity::PhoneNumber', + sortable: true, + columnWidth: 250, + }, +]); diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-form-props.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-form-props.ts new file mode 100644 index 0000000000..3092bdf7e8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-form-props.ts @@ -0,0 +1,61 @@ +import { getPasswordValidators } from '@abp/ng.theme.shared'; +import { ePropType, FormProp } from '@abp/ng.theme.shared/extensions'; +import { Validators } from '@angular/forms'; +import { IdentityUserDto } from '../proxy/identity/models'; + +export const DEFAULT_USERS_CREATE_FORM_PROPS = FormProp.createMany([ + { + type: ePropType.String, + name: 'userName', + displayName: 'AbpIdentity::UserName', + id: 'user-name', + validators: () => [Validators.required, Validators.maxLength(256)], + }, + { + type: ePropType.Password, + name: 'password', + displayName: 'AbpIdentity::Password', + id: 'password', + autocomplete: 'new-password', + validators: data => [Validators.required, ...getPasswordValidators({ get: data.getInjected })], + }, + { + type: ePropType.String, + name: 'name', + displayName: 'AbpIdentity::DisplayName:Name', + id: 'name', + validators: () => [Validators.maxLength(64)], + }, + { + type: ePropType.String, + name: 'surname', + displayName: 'AbpIdentity::DisplayName:Surname', + id: 'surname', + validators: () => [Validators.maxLength(64)], + }, + { + type: ePropType.Email, + name: 'email', + displayName: 'AbpIdentity::EmailAddress', + id: 'email', + validators: () => [Validators.required, Validators.maxLength(256), Validators.email], + }, + { + type: ePropType.String, + name: 'phoneNumber', + displayName: 'AbpIdentity::PhoneNumber', + id: 'phone-number', + validators: () => [Validators.maxLength(16)], + }, + { + type: ePropType.Boolean, + name: 'lockoutEnabled', + displayName: 'AbpIdentity::DisplayName:LockoutEnabled', + id: 'lockout-checkbox', + defaultValue: true, + }, +]); + +export const DEFAULT_USERS_EDIT_FORM_PROPS = DEFAULT_USERS_CREATE_FORM_PROPS.filter( + prop => prop.name !== 'password', +); diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-toolbar-actions.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-toolbar-actions.ts new file mode 100644 index 0000000000..b1e62a9e18 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/defaults/default-users-toolbar-actions.ts @@ -0,0 +1,15 @@ +import { ToolbarAction } from '@abp/ng.theme.shared/extensions'; +import { UsersComponent } from '../components/users/users.component'; +import { IdentityUserDto } from '../proxy/identity/models'; + +export const DEFAULT_USERS_TOOLBAR_ACTIONS = ToolbarAction.createMany([ + { + text: 'AbpIdentity::NewUser', + action: data => { + const component = data.getInjected(UsersComponent); + component.add(); + }, + permission: 'AbpIdentity.Users.Create', + icon: 'fa fa-plus', + }, +]); diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/enums/components.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/enums/components.ts new file mode 100644 index 0000000000..abadd38955 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/enums/components.ts @@ -0,0 +1,4 @@ +export const enum eIdentityComponents { + Roles = 'Identity.RolesComponent', + Users = 'Identity.UsersComponent', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/enums/index.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/enums/index.ts new file mode 100644 index 0000000000..07635cbbc8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/enums/index.ts @@ -0,0 +1 @@ +export * from './components'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts new file mode 100644 index 0000000000..3b5d592acc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts @@ -0,0 +1,91 @@ +import { ConfigStateService } from '@abp/ng.core'; +import { + ExtensionsService, + getObjectExtensionEntitiesFromStore, + mapEntitiesToContributors, + mergeWithDefaultActions, + mergeWithDefaultProps, +} from '@abp/ng.theme.shared/extensions'; +import { Injectable, Injector } from '@angular/core'; +import { CanActivate } from '@angular/router'; +import { Observable } from 'rxjs'; +import { map, mapTo, tap } from 'rxjs/operators'; +import { eIdentityComponents } from '../enums/components'; +import { + IdentityCreateFormPropContributors, + IdentityEditFormPropContributors, + IdentityEntityActionContributors, + IdentityEntityPropContributors, + IdentityToolbarActionContributors, +} from '../models/config-options'; +import { + DEFAULT_IDENTITY_CREATE_FORM_PROPS, + DEFAULT_IDENTITY_EDIT_FORM_PROPS, + DEFAULT_IDENTITY_ENTITY_ACTIONS, + DEFAULT_IDENTITY_ENTITY_PROPS, + DEFAULT_IDENTITY_TOOLBAR_ACTIONS, + IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, + IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, + IDENTITY_ENTITY_ACTION_CONTRIBUTORS, + IDENTITY_ENTITY_PROP_CONTRIBUTORS, + IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, +} from '../tokens/extensions.token'; + +@Injectable() +export class IdentityExtensionsGuard implements CanActivate { + constructor(private injector: Injector) {} + + canActivate(): Observable { + const extensions: ExtensionsService = this.injector.get(ExtensionsService); + const actionContributors: IdentityEntityActionContributors = + this.injector.get(IDENTITY_ENTITY_ACTION_CONTRIBUTORS, null) || {}; + const toolbarContributors: IdentityToolbarActionContributors = + this.injector.get(IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, null) || {}; + const propContributors: IdentityEntityPropContributors = + this.injector.get(IDENTITY_ENTITY_PROP_CONTRIBUTORS, null) || {}; + const createFormContributors: IdentityCreateFormPropContributors = + this.injector.get(IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, null) || {}; + const editFormContributors: IdentityEditFormPropContributors = + this.injector.get(IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, null) || {}; + + const configState = this.injector.get(ConfigStateService); + return getObjectExtensionEntitiesFromStore(configState, 'Identity').pipe( + map(entities => ({ + [eIdentityComponents.Roles]: entities.Role, + [eIdentityComponents.Users]: entities.User, + })), + mapEntitiesToContributors(configState, 'AbpIdentity'), + tap(objectExtensionContributors => { + mergeWithDefaultActions( + extensions.entityActions, + DEFAULT_IDENTITY_ENTITY_ACTIONS, + actionContributors, + ); + mergeWithDefaultActions( + extensions.toolbarActions, + DEFAULT_IDENTITY_TOOLBAR_ACTIONS, + toolbarContributors, + ); + mergeWithDefaultProps( + extensions.entityProps, + DEFAULT_IDENTITY_ENTITY_PROPS, + objectExtensionContributors.prop, + propContributors, + ); + mergeWithDefaultProps( + extensions.createFormProps, + DEFAULT_IDENTITY_CREATE_FORM_PROPS, + objectExtensionContributors.createForm, + createFormContributors, + ); + mergeWithDefaultProps( + extensions.editFormProps, + DEFAULT_IDENTITY_EDIT_FORM_PROPS, + objectExtensionContributors.editForm, + editFormContributors, + ); + }), + mapTo(true), + ); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/guards/index.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/guards/index.ts new file mode 100644 index 0000000000..480f14c40b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/guards/index.ts @@ -0,0 +1 @@ +export * from './extensions.guard'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/identity-routing.module.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/identity-routing.module.ts new file mode 100644 index 0000000000..3b290e851b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/identity-routing.module.ts @@ -0,0 +1,52 @@ +import { + AuthGuard, + DynamicLayoutComponent, + PermissionGuard, + ReplaceableComponents, + ReplaceableRouteContainerComponent, +} from '@abp/ng.core'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { RolesComponent } from './components/roles/roles.component'; +import { UsersComponent } from './components/users/users.component'; +import { eIdentityComponents } from './enums/components'; +import { IdentityExtensionsGuard } from './guards/extensions.guard'; + +const routes: Routes = [ + { path: '', redirectTo: 'roles', pathMatch: 'full' }, + { + path: '', + component: DynamicLayoutComponent, + canActivate: [AuthGuard, PermissionGuard, IdentityExtensionsGuard], + children: [ + { + path: 'roles', + component: ReplaceableRouteContainerComponent, + data: { + requiredPolicy: 'AbpIdentity.Roles', + replaceableComponent: { + key: eIdentityComponents.Roles, + defaultComponent: RolesComponent, + } as ReplaceableComponents.RouteData, + }, + }, + { + path: 'users', + component: ReplaceableRouteContainerComponent, + data: { + requiredPolicy: 'AbpIdentity.Users', + replaceableComponent: { + key: eIdentityComponents.Users, + defaultComponent: UsersComponent, + } as ReplaceableComponents.RouteData, + }, + }, + ], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class IdentityRoutingModule {} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/identity.module.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/identity.module.ts new file mode 100644 index 0000000000..e2b832350a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/identity.module.ts @@ -0,0 +1,71 @@ +import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; +import { PermissionManagementModule } from '@abp/ng.permission-management'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { UiExtensionsModule } from '@abp/ng.theme.shared/extensions'; +import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; +import { NgbDropdownModule, NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; +import { NgxsModule } from '@ngxs/store'; +import { RolesComponent } from './components/roles/roles.component'; +import { UsersComponent } from './components/users/users.component'; +import { IdentityExtensionsGuard } from './guards/extensions.guard'; +import { IdentityRoutingModule } from './identity-routing.module'; +import { IdentityConfigOptions } from './models/config-options'; +import { IdentityState } from './states/identity.state'; +import { + IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, + IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, + IDENTITY_ENTITY_ACTION_CONTRIBUTORS, + IDENTITY_ENTITY_PROP_CONTRIBUTORS, + IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, +} from './tokens/extensions.token'; + +@NgModule({ + declarations: [RolesComponent, UsersComponent], + exports: [RolesComponent, UsersComponent], + imports: [ + NgxsModule.forFeature([IdentityState]), + CoreModule, + IdentityRoutingModule, + NgbNavModule, + ThemeSharedModule, + UiExtensionsModule, + NgbDropdownModule, + PermissionManagementModule, + NgxValidateCoreModule, + ], +}) +export class IdentityModule { + static forChild(options: IdentityConfigOptions = {}): ModuleWithProviders { + return { + ngModule: IdentityModule, + providers: [ + { + provide: IDENTITY_ENTITY_ACTION_CONTRIBUTORS, + useValue: options.entityActionContributors, + }, + { + provide: IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, + useValue: options.toolbarActionContributors, + }, + { + provide: IDENTITY_ENTITY_PROP_CONTRIBUTORS, + useValue: options.entityPropContributors, + }, + { + provide: IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, + useValue: options.createFormPropContributors, + }, + { + provide: IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, + useValue: options.editFormPropContributors, + }, + IdentityExtensionsGuard, + ], + }; + } + + static forLazy(options: IdentityConfigOptions = {}): NgModuleFactory { + return new LazyModuleFactory(IdentityModule.forChild(options)); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/models/config-options.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/models/config-options.ts new file mode 100644 index 0000000000..6a1fc29a00 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/models/config-options.ts @@ -0,0 +1,42 @@ +import { + CreateFormPropContributorCallback, + EditFormPropContributorCallback, + EntityActionContributorCallback, + EntityPropContributorCallback, + ToolbarActionContributorCallback, +} from '@abp/ng.theme.shared/extensions'; +import { eIdentityComponents } from '../enums/components'; +import { IdentityRoleDto, IdentityUserDto } from '../proxy/identity/models'; + +export type IdentityEntityActionContributors = Partial<{ + [eIdentityComponents.Roles]: EntityActionContributorCallback[]; + [eIdentityComponents.Users]: EntityActionContributorCallback[]; +}>; + +export type IdentityToolbarActionContributors = Partial<{ + [eIdentityComponents.Roles]: ToolbarActionContributorCallback[]; + [eIdentityComponents.Users]: ToolbarActionContributorCallback[]; +}>; + +export type IdentityEntityPropContributors = Partial<{ + [eIdentityComponents.Roles]: EntityPropContributorCallback[]; + [eIdentityComponents.Users]: EntityPropContributorCallback[]; +}>; + +export type IdentityCreateFormPropContributors = Partial<{ + [eIdentityComponents.Roles]: CreateFormPropContributorCallback[]; + [eIdentityComponents.Users]: CreateFormPropContributorCallback[]; +}>; + +export type IdentityEditFormPropContributors = Partial<{ + [eIdentityComponents.Roles]: EditFormPropContributorCallback[]; + [eIdentityComponents.Users]: EditFormPropContributorCallback[]; +}>; + +export interface IdentityConfigOptions { + entityActionContributors?: IdentityEntityActionContributors; + toolbarActionContributors?: IdentityToolbarActionContributors; + entityPropContributors?: IdentityEntityPropContributors; + createFormPropContributors?: IdentityCreateFormPropContributors; + editFormPropContributors?: IdentityEditFormPropContributors; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/models/identity.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/models/identity.ts new file mode 100644 index 0000000000..115e0b488f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/models/identity.ts @@ -0,0 +1,12 @@ +import { PagedResultDto } from '@abp/ng.core'; +import { IdentityRoleDto, IdentityUserDto } from '../proxy/identity/models'; + +export namespace Identity { + export interface State { + roles: PagedResultDto; + users: PagedResultDto; + selectedRole: IdentityRoleDto; + selectedUser: IdentityUserDto; + selectedUserRoles: IdentityRoleDto[]; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/models/index.ts new file mode 100644 index 0000000000..c7964853da --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/models/index.ts @@ -0,0 +1,2 @@ +export * from './config-options'; +export * from './identity'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/generate-proxy.json b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/generate-proxy.json new file mode 100644 index 0000000000..22d15ae64c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/generate-proxy.json @@ -0,0 +1,4210 @@ +{ + "generated": [ + "identity" + ], + "modules": { + "identity": { + "rootPath": "identity", + "remoteServiceName": "AbpIdentity", + "controllers": { + "Volo.Abp.Identity.IdentityRoleController": { + "controllerName": "IdentityRole", + "type": "Volo.Abp.Identity.IdentityRoleController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityRoleAppService" + } + ], + "actions": { + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity/roles/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto, Volo.Abp.Ddd.Application.Contracts", + "type": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleCreateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleUpdateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserController": { + "controllerName": "IdentityUser", + "type": "Volo.Abp.Identity.IdentityUserController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityUsersInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserCreateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetRolesAsyncById": { + "uniqueName": "GetRolesAsyncById", + "name": "GetRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAssignableRolesAsync": { + "uniqueName": "GetAssignableRolesAsync", + "name": "GetAssignableRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/assignable-roles", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "UpdateRolesAsyncByIdAndInput": { + "uniqueName": "UpdateRolesAsyncByIdAndInput", + "name": "UpdateRolesAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateRolesDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "FindByUsernameAsyncByUsername": { + "uniqueName": "FindByUsernameAsyncByUsername", + "name": "FindByUsernameAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "username", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "username", + "name": "username", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "FindByEmailAsyncByEmail": { + "uniqueName": "FindByEmailAsyncByEmail", + "name": "FindByEmailAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-email/{email}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "email", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "email", + "name": "email", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserLookupController": { + "controllerName": "IdentityUserLookup", + "type": "Volo.Abp.Identity.IdentityUserLookupController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserLookupAppService" + } + ], + "actions": { + "FindByIdAsyncById": { + "uniqueName": "FindByIdAsyncById", + "name": "FindByIdAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "FindByUserNameAsyncByUserName": { + "uniqueName": "FindByUserNameAsyncByUserName", + "name": "FindByUserNameAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "userName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "userName", + "name": "userName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "SearchAsyncByInput": { + "uniqueName": "SearchAsyncByInput", + "name": "SearchAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/search", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupSearchInputDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupSearchInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupSearchInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetCountAsyncByInput": { + "uniqueName": "GetCountAsyncByInput", + "name": "GetCountAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/count", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupCountInputDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupCountInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupCountInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Int64", + "typeSimple": "number" + } + } + } + }, + "Volo.Abp.Identity.ProfileController": { + "controllerName": "Profile", + "type": "Volo.Abp.Identity.ProfileController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IProfileAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UpdateProfileDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "ChangePasswordAsyncByInput": { + "uniqueName": "ChangePasswordAsyncByInput", + "name": "ChangePasswordAsync", + "httpMethod": "POST", + "url": "api/identity/my-profile/change-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.ChangePasswordInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "featureManagement": { + "rootPath": "featureManagement", + "remoteServiceName": "AbpFeatureManagement", + "controllers": { + "Volo.Abp.FeatureManagement.FeaturesController": { + "controllerName": "Features", + "type": "Volo.Abp.FeatureManagement.FeaturesController", + "interfaces": [ + { + "type": "Volo.Abp.FeatureManagement.IFeatureAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", + "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "abp": { + "rootPath": "abp", + "remoteServiceName": "abp", + "controllers": { + "Pages.Abp.MultiTenancy.AbpTenantController": { + "controllerName": "AbpTenant", + "type": "Pages.Abp.MultiTenancy.AbpTenantController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" + } + ], + "actions": { + "FindTenantByNameAsyncByName": { + "uniqueName": "FindTenantByNameAsyncByName", + "name": "FindTenantByNameAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-name/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "name", + "name": "name", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + }, + "FindTenantByIdAsyncById": { + "uniqueName": "FindTenantByIdAsyncById", + "name": "FindTenantByIdAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-id/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { + "controllerName": "AbpApplicationConfiguration", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/abp/application-configuration", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { + "controllerName": "AbpApiDefinition", + "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", + "interfaces": [], + "actions": { + "GetByModel": { + "uniqueName": "GetByModel", + "name": "Get", + "httpMethod": "GET", + "url": "api/abp/api-definition", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "model", + "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "model", + "name": "IncludeTypes", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "model" + } + ], + "returnValue": { + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" + } + } + } + } + } + }, + "account": { + "rootPath": "account", + "remoteServiceName": "AbpAccount", + "controllers": { + "Volo.Abp.Account.Web.Areas.Account.Controllers.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.AccountController", + "interfaces": [], + "actions": { + "LoginByLogin": { + "uniqueName": "LoginByLogin", + "name": "Login", + "httpMethod": "POST", + "url": "api/account/login", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Web", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + }, + "Logout": { + "uniqueName": "Logout", + "name": "Logout", + "httpMethod": "GET", + "url": "api/account/logout", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "CheckPasswordByLogin": { + "uniqueName": "CheckPasswordByLogin", + "name": "CheckPassword", + "httpMethod": "POST", + "url": "api/account/checkPassword", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Web", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + } + } + }, + "Volo.Abp.Account.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.AccountController", + "interfaces": [ + { + "type": "Volo.Abp.Account.IAccountAppService" + } + ], + "actions": { + "RegisterAsyncByInput": { + "uniqueName": "RegisterAsyncByInput", + "name": "RegisterAsync", + "httpMethod": "POST", + "url": "api/account/register", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.RegisterDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "SendPasswordResetCodeAsyncByInput": { + "uniqueName": "SendPasswordResetCodeAsyncByInput", + "name": "SendPasswordResetCodeAsync", + "httpMethod": "POST", + "url": "api/account/send-password-reset-code", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendPasswordResetCodeDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "ResetPasswordAsyncByInput": { + "uniqueName": "ResetPasswordAsyncByInput", + "name": "ResetPasswordAsync", + "httpMethod": "POST", + "url": "api/account/reset-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ResetPasswordDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "multi-tenancy": { + "rootPath": "multi-tenancy", + "remoteServiceName": "AbpTenantManagement", + "controllers": { + "Volo.Abp.TenantManagement.TenantController": { + "controllerName": "Tenant", + "type": "Volo.Abp.TenantManagement.TenantController", + "interfaces": [ + { + "type": "Volo.Abp.TenantManagement.ITenantAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.GetTenantsInput, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.GetTenantsInput", + "typeSimple": "Volo.Abp.TenantManagement.GetTenantsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantCreateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantUpdateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetDefaultConnectionStringAsyncById": { + "uniqueName": "GetDefaultConnectionStringAsyncById", + "name": "GetDefaultConnectionStringAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.String", + "typeSimple": "string" + } + }, + "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString": { + "uniqueName": "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString", + "name": "UpdateDefaultConnectionStringAsync", + "httpMethod": "PUT", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "defaultConnectionString", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "defaultConnectionString", + "name": "defaultConnectionString", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "DeleteDefaultConnectionStringAsyncById": { + "uniqueName": "DeleteDefaultConnectionStringAsyncById", + "name": "DeleteDefaultConnectionStringAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "permissionManagement": { + "rootPath": "permissionManagement", + "remoteServiceName": "AbpPermissionManagement", + "controllers": { + "Volo.Abp.PermissionManagement.PermissionsController": { + "controllerName": "Permissions", + "type": "Volo.Abp.PermissionManagement.PermissionsController", + "interfaces": [ + { + "type": "Volo.Abp.PermissionManagement.IPermissionAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", + "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + } + }, + "types": { + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserNameOrEmailAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RememberMe", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Result", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Success", + "InvalidUserNameOrPassword", + "NotAllowed", + "LockedOut", + "RequiresTwoFactor" + ], + "enumValues": [ + 1, + 2, + 3, + 4, + 5 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Account.RegisterDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "AppName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "TwoFactorEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "LockoutEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "LockoutEnd", + "type": "System.DateTimeOffset?", + "typeSimple": "string?" + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "IsDeleted", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DeleterId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "DeletionTime", + "type": "System.DateTime?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "LastModificationTime", + "type": "System.DateTime?", + "typeSimple": "string?" + }, + { + "name": "LastModifierId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "CreationTime", + "type": "System.DateTime", + "typeSimple": "string" + }, + { + "name": "CreatorId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleEntityDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TKey" + ], + "properties": [ + { + "name": "Id", + "type": "TKey", + "typeSimple": "TKey" + } + ] + }, + "Volo.Abp.ObjectExtending.ExtensibleObject": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ExtraProperties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.Account.SendPasswordResetCodeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "AppName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ReturnUrl", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ReturnUrlHash", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.ResetPasswordDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "ResetToken", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Success", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.ListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Items", + "type": "[T]", + "typeSimple": "[T]" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsDefault", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsStatic", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsPublic", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Sorting", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.LimitedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.Application.Dtos.LimitedResultRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DefaultMaxResultCount", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "MaxMaxResultCount", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultDto": { + "baseType": "Volo.Abp.Application.Dtos.ListResultDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "TotalCount", + "type": "System.Int64", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsDefault", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsPublic", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.GetIdentityUsersInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TwoFactorEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "LockoutEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RoleNames", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateRolesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleNames", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.Users.UserData": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.UserLookupSearchInputDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.UserLookupCountInputDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.ProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsExternal", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "HasPassword", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.UpdateProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.ChangePasswordInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CurrentPassword", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "NewPassword", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.PermissionManagement.GetPermissionListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityDisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Groups", + "type": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGroupDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Permissions", + "type": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGrantInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ParentName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsGranted", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AllowedProviders", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "GrantedProviders", + "type": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.ProviderInfoDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.ProviderInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ProviderName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ProviderKey", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Permissions", + "type": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsGranted", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.TenantManagement.TenantDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TenantManagement.GetTenantsInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TenantManagement.TenantCreateDto": { + "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AdminEmailAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "AdminPassword", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TenantManagement.TenantUpdateDto": { + "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.FeatureManagement.GetFeatureListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Groups", + "type": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureGroupDto]" + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Features", + "type": "[Volo.Abp.FeatureManagement.FeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureDto]" + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Provider", + "type": "Volo.Abp.FeatureManagement.FeatureProviderDto", + "typeSimple": "Volo.Abp.FeatureManagement.FeatureProviderDto" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ValueType", + "type": "Volo.Abp.Validation.StringValues.IStringValueType", + "typeSimple": "Volo.Abp.Validation.StringValues.IStringValueType" + }, + { + "name": "Depth", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "ParentName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureProviderDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Key", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Validation.StringValues.IStringValueType": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Item", + "type": "System.Object", + "typeSimple": "object" + }, + { + "name": "Properties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + }, + { + "name": "Validator", + "type": "Volo.Abp.Validation.StringValues.IValueValidator", + "typeSimple": "Volo.Abp.Validation.StringValues.IValueValidator" + } + ] + }, + "Volo.Abp.Validation.StringValues.IValueValidator": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Item", + "type": "System.Object", + "typeSimple": "object" + }, + { + "name": "Properties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeaturesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Features", + "type": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]" + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Localization", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto" + }, + { + "name": "Auth", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto" + }, + { + "name": "Setting", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto" + }, + { + "name": "CurrentUser", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto" + }, + { + "name": "Features", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto" + }, + { + "name": "MultiTenancy", + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto" + }, + { + "name": "CurrentTenant", + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto" + }, + { + "name": "Timing", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto" + }, + { + "name": "Clock", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto" + }, + { + "name": "ObjectExtensions", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:{System.String:System.String}}", + "typeSimple": "{string:{string:string}}" + }, + { + "name": "Languages", + "type": "[Volo.Abp.Localization.LanguageInfo]", + "typeSimple": "[Volo.Abp.Localization.LanguageInfo]" + }, + { + "name": "CurrentCulture", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto" + }, + { + "name": "DefaultResourceName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LanguagesMap", + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}" + }, + { + "name": "LanguageFilesMap", + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}" + } + ] + }, + "Volo.Abp.Localization.LanguageInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "UiCultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FlagIcon", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EnglishName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ThreeLetterIsoLanguageName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TwoLetterIsoLanguageName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsRightToLeft", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "NativeName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DateTimeFormat", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CalendarAlgorithmType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DateTimeFormatLong", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ShortDatePattern", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FullDateTimePattern", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DateSeparator", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ShortTimePattern", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LongTimePattern", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.NameValue": { + "baseType": "Volo.Abp.NameValue", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.NameValue": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "T", + "typeSimple": "T" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Policies", + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}" + }, + { + "name": "GrantedPolicies", + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:System.String}", + "typeSimple": "{string:string}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAuthenticated", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Id", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "SurName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailVerified", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberVerified", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Roles", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:System.String}", + "typeSimple": "{string:string}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZone", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Iana", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone" + }, + { + "name": "Windows", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneId", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Kind", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}" + }, + { + "name": "Enums", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Entities", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}" + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Properties", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}" + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto" + }, + { + "name": "Api", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto" + }, + { + "name": "Ui", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto" + }, + { + "name": "Attributes", + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]" + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Resource", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnGet", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto" + }, + { + "name": "OnCreate", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto" + }, + { + "name": "OnUpdate", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnTable", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto" + }, + { + "name": "OnCreateForm", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto" + }, + { + "name": "OnEditForm", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Config", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Fields", + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]" + }, + { + "name": "LocalizationResource", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.Object", + "typeSimple": "object" + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IncludeTypes", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "type": "{System.String:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}" + }, + { + "name": "Types", + "type": "{System.String:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}" + } + ] + }, + "Volo.Abp.Http.Modeling.ModuleApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RootPath", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RemoteServiceName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Controllers", + "type": "{System.String:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}" + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ControllerName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Interfaces", + "type": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]" + }, + { + "name": "Actions", + "type": "{System.String:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}" + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Http.Modeling.ActionApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UniqueName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "HttpMethod", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Url", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "SupportedVersions", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "ParametersOnMethod", + "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]" + }, + { + "name": "Parameters", + "type": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]" + }, + { + "name": "ReturnValue", + "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel" + } + ] + }, + "Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeAsString", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsOptional", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object" + } + ] + }, + "Volo.Abp.Http.Modeling.ParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NameOnMethod", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsOptional", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object" + }, + { + "name": "ConstraintTypes", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "BindingSourceId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DescriptorName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Http.Modeling.TypeApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BaseType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsEnum", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "EnumNames", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "EnumValues", + "type": "[System.Object]", + "typeSimple": "[object]" + }, + { + "name": "GenericArguments", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "Properties", + "type": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]" + } + ] + }, + "Volo.Abp.Http.Modeling.PropertyApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + } + ] + } + } +} \ No newline at end of file diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-role.service.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-role.service.ts new file mode 100644 index 0000000000..5fd029c43d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-role.service.ts @@ -0,0 +1,58 @@ +import type { ListResultDto, PagedAndSortedResultRequestDto, PagedResultDto } from '@abp/ng.core'; +import { RestService } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; +import type { IdentityRoleCreateDto, IdentityRoleDto, IdentityRoleUpdateDto } from './models'; + +@Injectable({ + providedIn: 'root', +}) +export class IdentityRoleService { + apiName = 'AbpIdentity'; + + create = (input: IdentityRoleCreateDto) => + this.restService.request({ + method: 'POST', + url: '/api/identity/roles', + body: input, + }, + { apiName: this.apiName }); + + delete = (id: string) => + this.restService.request({ + method: 'DELETE', + url: `/api/identity/roles/${id}`, + }, + { apiName: this.apiName }); + + get = (id: string) => + this.restService.request({ + method: 'GET', + url: `/api/identity/roles/${id}`, + }, + { apiName: this.apiName }); + + getAllList = () => + this.restService.request>({ + method: 'GET', + url: '/api/identity/roles/all', + }, + { apiName: this.apiName }); + + getList = (input: PagedAndSortedResultRequestDto) => + this.restService.request>({ + method: 'GET', + url: '/api/identity/roles', + params: { sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount }, + }, + { apiName: this.apiName }); + + update = (id: string, input: IdentityRoleUpdateDto) => + this.restService.request({ + method: 'PUT', + url: `/api/identity/roles/${id}`, + body: input, + }, + { apiName: this.apiName }); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user-lookup.service.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user-lookup.service.ts new file mode 100644 index 0000000000..af4583aa28 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user-lookup.service.ts @@ -0,0 +1,44 @@ +import type { UserLookupCountInputDto, UserLookupSearchInputDto } from './models'; +import { RestService } from '@abp/ng.core'; +import type { ListResultDto } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; +import type { UserData } from '../users/models'; + +@Injectable({ + providedIn: 'root', +}) +export class IdentityUserLookupService { + apiName = 'AbpIdentity'; + + findById = (id: string) => + this.restService.request({ + method: 'GET', + url: `/api/identity/users/lookup/${id}`, + }, + { apiName: this.apiName }); + + findByUserName = (userName: string) => + this.restService.request({ + method: 'GET', + url: `/api/identity/users/lookup/by-username/${userName}`, + }, + { apiName: this.apiName }); + + getCount = (input: UserLookupCountInputDto) => + this.restService.request({ + method: 'GET', + url: '/api/identity/users/lookup/count', + params: { filter: input.filter }, + }, + { apiName: this.apiName }); + + search = (input: UserLookupSearchInputDto) => + this.restService.request>({ + method: 'GET', + url: '/api/identity/users/lookup/search', + params: { filter: input.filter, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount }, + }, + { apiName: this.apiName }); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user.service.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user.service.ts new file mode 100644 index 0000000000..fe69946ff1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user.service.ts @@ -0,0 +1,93 @@ +import type { + GetIdentityUsersInput, + IdentityRoleDto, + IdentityUserCreateDto, + IdentityUserDto, + IdentityUserUpdateDto, + IdentityUserUpdateRolesDto } from './models'; +import { RestService } from '@abp/ng.core'; +import type { ListResultDto, PagedResultDto } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class IdentityUserService { + apiName = 'AbpIdentity'; + + create = (input: IdentityUserCreateDto) => + this.restService.request({ + method: 'POST', + url: '/api/identity/users', + body: input, + }, + { apiName: this.apiName }); + + delete = (id: string) => + this.restService.request({ + method: 'DELETE', + url: `/api/identity/users/${id}`, + }, + { apiName: this.apiName }); + + findByEmail = (email: string) => + this.restService.request({ + method: 'GET', + url: `/api/identity/users/by-email/${email}`, + }, + { apiName: this.apiName }); + + findByUsername = (username: string) => + this.restService.request({ + method: 'GET', + url: '/api/identity/users/by-username/{userName}', + }, + { apiName: this.apiName }); + + get = (id: string) => + this.restService.request({ + method: 'GET', + url: `/api/identity/users/${id}`, + }, + { apiName: this.apiName }); + + getAssignableRoles = () => + this.restService.request>({ + method: 'GET', + url: '/api/identity/users/assignable-roles', + }, + { apiName: this.apiName }); + + getList = (input: GetIdentityUsersInput) => + this.restService.request>({ + method: 'GET', + url: '/api/identity/users', + params: { filter: input.filter, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount }, + }, + { apiName: this.apiName }); + + getRoles = (id: string) => + this.restService.request>({ + method: 'GET', + url: `/api/identity/users/${id}/roles`, + }, + { apiName: this.apiName }); + + update = (id: string, input: IdentityUserUpdateDto) => + this.restService.request({ + method: 'PUT', + url: `/api/identity/users/${id}`, + body: input, + }, + { apiName: this.apiName }); + + updateRoles = (id: string, input: IdentityUserUpdateRolesDto) => + this.restService.request({ + method: 'PUT', + url: `/api/identity/users/${id}/roles`, + body: input, + }, + { apiName: this.apiName }); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/index.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/index.ts new file mode 100644 index 0000000000..df2fed0c35 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/index.ts @@ -0,0 +1,5 @@ +export * from './identity-role.service'; +export * from './identity-user-lookup.service'; +export * from './identity-user.service'; +export * from './models'; +export * from './profile.service'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/models.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/models.ts new file mode 100644 index 0000000000..95f62fa77e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/models.ts @@ -0,0 +1,95 @@ +import type { ExtensibleEntityDto, ExtensibleFullAuditedEntityDto, ExtensibleObject, PagedAndSortedResultRequestDto } from '@abp/ng.core'; + +export interface ChangePasswordInput { + currentPassword: string; + newPassword: string; +} + +export interface GetIdentityUsersInput extends PagedAndSortedResultRequestDto { + filter: string; +} + +// tslint:disable-next-line: no-empty-interface +export interface IdentityRoleCreateDto extends IdentityRoleCreateOrUpdateDtoBase { +} + +export interface IdentityRoleCreateOrUpdateDtoBase extends ExtensibleObject { + name: string; + isDefault: boolean; + isPublic: boolean; +} + +export interface IdentityRoleDto extends ExtensibleEntityDto { + name: string; + isDefault: boolean; + isStatic: boolean; + isPublic: boolean; + concurrencyStamp: string; +} + +export interface IdentityRoleUpdateDto extends IdentityRoleCreateOrUpdateDtoBase { + concurrencyStamp: string; +} + +export interface IdentityUserCreateDto extends IdentityUserCreateOrUpdateDtoBase { + password: string; +} + +export interface IdentityUserCreateOrUpdateDtoBase extends ExtensibleObject { + userName: string; + name: string; + surname: string; + email: string; + phoneNumber: string; + lockoutEnabled: boolean; + roleNames: string[]; +} + +export interface IdentityUserDto extends ExtensibleFullAuditedEntityDto { + tenantId?: string; + userName: string; + name: string; + surname: string; + email: string; + emailConfirmed: boolean; + phoneNumber: string; + phoneNumberConfirmed: boolean; + lockoutEnabled: boolean; + lockoutEnd?: string; + concurrencyStamp: string; +} + +export interface IdentityUserUpdateDto extends IdentityUserCreateOrUpdateDtoBase { + password: string; + concurrencyStamp: string; +} + +export interface IdentityUserUpdateRolesDto { + roleNames: string[]; +} + +export interface ProfileDto extends ExtensibleObject { + userName: string; + email: string; + name: string; + surname: string; + phoneNumber: string; + isExternal: boolean; + hasPassword: boolean; +} + +export interface UpdateProfileDto extends ExtensibleObject { + userName: string; + email: string; + name: string; + surname: string; + phoneNumber: string; +} + +export interface UserLookupCountInputDto { + filter: string; +} + +export interface UserLookupSearchInputDto extends PagedAndSortedResultRequestDto { + filter: string; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/profile.service.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/profile.service.ts new file mode 100644 index 0000000000..4b8460d03b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/profile.service.ts @@ -0,0 +1,35 @@ +import type { ChangePasswordInput, ProfileDto, UpdateProfileDto } from './models'; +import { RestService } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class ProfileService { + apiName = 'AbpIdentity'; + + changePassword = (input: ChangePasswordInput) => + this.restService.request({ + method: 'POST', + url: '/api/identity/my-profile/change-password', + body: input, + }, + { apiName: this.apiName }); + + get = () => + this.restService.request({ + method: 'GET', + url: '/api/identity/my-profile', + }, + { apiName: this.apiName }); + + update = (input: UpdateProfileDto) => + this.restService.request({ + method: 'PUT', + url: '/api/identity/my-profile', + body: input, + }, + { apiName: this.apiName }); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/users/index.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/users/index.ts new file mode 100644 index 0000000000..e9644dae47 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/users/index.ts @@ -0,0 +1 @@ +export * from './models'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/users/models.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/users/models.ts new file mode 100644 index 0000000000..5201620e29 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/users/models.ts @@ -0,0 +1,12 @@ + +export interface UserData { + id: string; + tenantId?: string; + userName: string; + name: string; + surname: string; + email: string; + emailConfirmed: boolean; + phoneNumber: string; + phoneNumberConfirmed: boolean; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/services/identity-state.service.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/services/identity-state.service.ts new file mode 100644 index 0000000000..0fcb6d4014 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/services/identity-state.service.ts @@ -0,0 +1,82 @@ +import { ABP } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; +import { Store } from '@ngxs/store'; +import { + CreateRole, + CreateUser, + DeleteRole, + DeleteUser, + GetRoleById, + GetRoles, + GetUserById, + GetUsers, + UpdateRole, + UpdateUser, + GetUserRoles, +} from '../actions/identity.actions'; +import { Identity } from '../models/identity'; +import { IdentityState } from '../states/identity.state'; + +@Injectable({ + providedIn: 'root', +}) +export class IdentityStateService { + constructor(private store: Store) {} + + getRoles() { + return this.store.selectSnapshot(IdentityState.getRoles); + } + getRolesTotalCount() { + return this.store.selectSnapshot(IdentityState.getRolesTotalCount); + } + getUsers() { + return this.store.selectSnapshot(IdentityState.getUsers); + } + getUsersTotalCount() { + return this.store.selectSnapshot(IdentityState.getUsersTotalCount); + } + + dispatchGetRoles(...args: ConstructorParameters) { + return this.store.dispatch(new GetRoles(...args)); + } + + dispatchGetRoleById(...args: ConstructorParameters) { + return this.store.dispatch(new GetRoleById(...args)); + } + + dispatchDeleteRole(...args: ConstructorParameters) { + return this.store.dispatch(new DeleteRole(...args)); + } + + dispatchCreateRole(...args: ConstructorParameters) { + return this.store.dispatch(new CreateRole(...args)); + } + + dispatchUpdateRole(...args: ConstructorParameters) { + return this.store.dispatch(new UpdateRole(...args)); + } + + dispatchGetUsers(...args: ConstructorParameters) { + return this.store.dispatch(new GetUsers(...args)); + } + + dispatchGetUserById(...args: ConstructorParameters) { + return this.store.dispatch(new GetUserById(...args)); + } + + dispatchDeleteUser(...args: ConstructorParameters) { + return this.store.dispatch(new DeleteUser(...args)); + } + + dispatchCreateUser(...args: ConstructorParameters) { + return this.store.dispatch(new CreateUser(...args)); + } + + dispatchUpdateUser(...args: ConstructorParameters) { + return this.store.dispatch(new UpdateUser(...args)); + } + + dispatchGetUserRoles(...args: ConstructorParameters) { + return this.store.dispatch(new GetUserRoles(...args)); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/services/index.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/services/index.ts new file mode 100644 index 0000000000..d29e295c98 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/services/index.ts @@ -0,0 +1 @@ +export * from './identity-state.service'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/states/identity.state.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/states/identity.state.ts new file mode 100644 index 0000000000..f67661e0d1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/states/identity.state.ts @@ -0,0 +1,138 @@ +import { Injectable } from '@angular/core'; +import { Action, Selector, State, StateContext } from '@ngxs/store'; +import { pluck, tap } from 'rxjs/operators'; +import { + CreateRole, + CreateUser, + DeleteRole, + DeleteUser, + GetRoleById, + GetRoles, + GetUserById, + GetUserRoles, + GetUsers, + UpdateRole, + UpdateUser, +} from '../actions/identity.actions'; +import { Identity } from '../models/identity'; +import { IdentityRoleService } from '../proxy/identity/identity-role.service'; +import { IdentityUserService } from '../proxy/identity/identity-user.service'; +import { IdentityRoleDto, IdentityUserDto } from '../proxy/identity/models'; + +@State({ + name: 'IdentityState', + defaults: { roles: {}, selectedRole: {}, users: {}, selectedUser: {} } as Identity.State, +}) +@Injectable() +export class IdentityState { + @Selector() + static getRoles({ roles }: Identity.State): IdentityRoleDto[] { + return roles.items || []; + } + + @Selector() + static getRolesTotalCount({ roles }: Identity.State): number { + return roles.totalCount || 0; + } + + @Selector() + static getUsers({ users }: Identity.State): IdentityUserDto[] { + return users.items || []; + } + + @Selector() + static getUsersTotalCount({ users }: Identity.State): number { + return users.totalCount || 0; + } + + constructor( + private identityUserService: IdentityUserService, + private identityRoleService: IdentityRoleService, + ) {} + + @Action(GetRoles) + getRoles({ patchState }: StateContext, { payload }: GetRoles) { + return this.identityRoleService.getList(payload).pipe( + tap(roles => + patchState({ + roles, + }), + ), + ); + } + + @Action(GetRoleById) + getRole({ patchState }: StateContext, { payload }: GetRoleById) { + return this.identityRoleService.get(payload).pipe( + tap(selectedRole => + patchState({ + selectedRole, + }), + ), + ); + } + + @Action(DeleteRole) + deleteRole(_, { payload }: GetRoleById) { + return this.identityRoleService.delete(payload); + } + + @Action(CreateRole) + addRole(_, { payload }: CreateRole) { + return this.identityRoleService.create(payload); + } + + @Action(UpdateRole) + updateRole({ getState }: StateContext, { payload }: UpdateRole) { + return this.identityRoleService.update(payload.id, { ...getState().selectedRole, ...payload }); + } + + @Action(GetUsers) + getUsers({ patchState }: StateContext, { payload }: GetUsers) { + return this.identityUserService.getList(payload).pipe( + tap(users => + patchState({ + users, + }), + ), + ); + } + + @Action(GetUserById) + getUser({ patchState }: StateContext, { payload }: GetUserById) { + return this.identityUserService.get(payload).pipe( + tap(selectedUser => + patchState({ + selectedUser, + }), + ), + ); + } + + @Action(DeleteUser) + deleteUser(_, { payload }: GetUserById) { + return this.identityUserService.delete(payload); + } + + @Action(CreateUser) + addUser(_, { payload }: CreateUser) { + return this.identityUserService.create(payload); + } + + @Action(UpdateUser) + updateUser({ getState }: StateContext, { payload }: UpdateUser) { + return this.identityUserService.update(payload.id, { ...getState().selectedUser, ...payload }); + } + + @Action(GetUserRoles) + getUserRoles({ patchState }: StateContext, { payload }: GetUserRoles) { + return this.identityUserService.getRoles(payload).pipe( + pluck('items'), + tap(selectedUserRoles => + patchState({ + selectedUserRoles, + }), + ), + ); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/states/index.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/states/index.ts new file mode 100644 index 0000000000..7dccd18456 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/states/index.ts @@ -0,0 +1 @@ +export * from './identity.state'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tests/identity-state.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tests/identity-state.service.spec.ts new file mode 100644 index 0000000000..ac0952d9c0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tests/identity-state.service.spec.ts @@ -0,0 +1,58 @@ +import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; +import { IdentityStateService } from '../services/identity-state.service'; +import { IdentityState } from '../states/identity.state'; +import { Store } from '@ngxs/store'; +import * as IdentityActions from '../actions/identity.actions'; + +describe('IdentityStateService', () => { + let service: IdentityStateService; + let spectator: SpectatorService; + let store: SpyObject; + + const createService = createServiceFactory({ service: IdentityStateService, mocks: [Store] }); + beforeEach(() => { + spectator = createService(); + service = spectator.service; + store = spectator.inject(Store); + }); + + test('should have the all IdentityState static methods', () => { + const reg = /(?<=static )(.*)(?=\()/gm; + IdentityState.toString() + .match(reg) + .forEach(fnName => { + expect(service[fnName]).toBeTruthy(); + + const spy = jest.spyOn(store, 'selectSnapshot'); + spy.mockClear(); + + const isDynamicSelector = IdentityState[fnName].name !== 'memoized'; + + if (isDynamicSelector) { + IdentityState[fnName] = jest.fn((...args) => args); + service[fnName]('test', 0, {}); + expect(IdentityState[fnName]).toHaveBeenCalledWith('test', 0, {}); + } else { + service[fnName](); + expect(spy).toHaveBeenCalledWith(IdentityState[fnName]); + } + }); + }); + + test('should have a dispatch method for every IdentityState action', () => { + const reg = /(?<=dispatch)(\w+)(?=\()/gm; + IdentityStateService.toString() + .match(reg) + .forEach(fnName => { + expect(IdentityActions[fnName]).toBeTruthy(); + + const spy = jest.spyOn(store, 'dispatch'); + spy.mockClear(); + + const params = Array.from(new Array(IdentityActions[fnName].length)); + + service[`dispatch${fnName}`](...params); + expect(spy).toHaveBeenCalledWith(new IdentityActions[fnName](...params)); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tokens/extensions.token.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tokens/extensions.token.ts new file mode 100644 index 0000000000..14e506da0a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tokens/extensions.token.ts @@ -0,0 +1,91 @@ +import { + CreateFormPropContributorCallback, + EditFormPropContributorCallback, + EntityActionContributorCallback, + EntityPropContributorCallback, + ToolbarActionContributorCallback, +} from '@abp/ng.theme.shared/extensions'; +import { InjectionToken } from '@angular/core'; +import { DEFAULT_ROLES_ENTITY_ACTIONS } from '../defaults/default-roles-entity-actions'; +import { DEFAULT_ROLES_ENTITY_PROPS } from '../defaults/default-roles-entity-props'; +import { + DEFAULT_ROLES_CREATE_FORM_PROPS, + DEFAULT_ROLES_EDIT_FORM_PROPS, +} from '../defaults/default-roles-form-props'; +import { DEFAULT_ROLES_TOOLBAR_ACTIONS } from '../defaults/default-roles-toolbar-actions'; +import { DEFAULT_USERS_ENTITY_ACTIONS } from '../defaults/default-users-entity-actions'; +import { DEFAULT_USERS_ENTITY_PROPS } from '../defaults/default-users-entity-props'; +import { + DEFAULT_USERS_CREATE_FORM_PROPS, + DEFAULT_USERS_EDIT_FORM_PROPS, +} from '../defaults/default-users-form-props'; +import { DEFAULT_USERS_TOOLBAR_ACTIONS } from '../defaults/default-users-toolbar-actions'; +import { eIdentityComponents } from '../enums/components'; +import { IdentityRoleDto, IdentityUserDto } from '../proxy/identity/models'; + +export const DEFAULT_IDENTITY_ENTITY_ACTIONS = { + [eIdentityComponents.Roles]: DEFAULT_ROLES_ENTITY_ACTIONS, + [eIdentityComponents.Users]: DEFAULT_USERS_ENTITY_ACTIONS, +}; + +export const DEFAULT_IDENTITY_TOOLBAR_ACTIONS = { + [eIdentityComponents.Roles]: DEFAULT_ROLES_TOOLBAR_ACTIONS, + [eIdentityComponents.Users]: DEFAULT_USERS_TOOLBAR_ACTIONS, +}; + +export const DEFAULT_IDENTITY_ENTITY_PROPS = { + [eIdentityComponents.Roles]: DEFAULT_ROLES_ENTITY_PROPS, + [eIdentityComponents.Users]: DEFAULT_USERS_ENTITY_PROPS, +}; + +export const DEFAULT_IDENTITY_CREATE_FORM_PROPS = { + [eIdentityComponents.Roles]: DEFAULT_ROLES_CREATE_FORM_PROPS, + [eIdentityComponents.Users]: DEFAULT_USERS_CREATE_FORM_PROPS, +}; + +export const DEFAULT_IDENTITY_EDIT_FORM_PROPS = { + [eIdentityComponents.Roles]: DEFAULT_ROLES_EDIT_FORM_PROPS, + [eIdentityComponents.Users]: DEFAULT_USERS_EDIT_FORM_PROPS, +}; + +export const IDENTITY_ENTITY_ACTION_CONTRIBUTORS = new InjectionToken( + 'IDENTITY_ENTITY_ACTION_CONTRIBUTORS', +); + +export const IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS = new InjectionToken( + 'IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS', +); + +export const IDENTITY_ENTITY_PROP_CONTRIBUTORS = new InjectionToken( + 'IDENTITY_ENTITY_PROP_CONTRIBUTORS', +); + +export const IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS = new InjectionToken( + 'IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS', +); + +export const IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS = new InjectionToken( + 'IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS', +); + +// Fix for TS4023 -> https://github.com/microsoft/TypeScript/issues/9944#issuecomment-254693497 +type EntityActionContributors = Partial<{ + [eIdentityComponents.Roles]: EntityActionContributorCallback[]; + [eIdentityComponents.Users]: EntityActionContributorCallback[]; +}>; +type ToolbarActionContributors = Partial<{ + [eIdentityComponents.Roles]: ToolbarActionContributorCallback[]; + [eIdentityComponents.Users]: ToolbarActionContributorCallback[]; +}>; +type EntityPropContributors = Partial<{ + [eIdentityComponents.Roles]: EntityPropContributorCallback[]; + [eIdentityComponents.Users]: EntityPropContributorCallback[]; +}>; +type CreateFormPropContributors = Partial<{ + [eIdentityComponents.Roles]: CreateFormPropContributorCallback[]; + [eIdentityComponents.Users]: CreateFormPropContributorCallback[]; +}>; +type EditFormPropContributors = Partial<{ + [eIdentityComponents.Roles]: EditFormPropContributorCallback[]; + [eIdentityComponents.Users]: EditFormPropContributorCallback[]; +}>; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tokens/index.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tokens/index.ts new file mode 100644 index 0000000000..33233400a2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tokens/index.ts @@ -0,0 +1 @@ +export * from './extensions.token'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/public-api.ts new file mode 100644 index 0000000000..9ba4a982db --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/public-api.ts @@ -0,0 +1,11 @@ +export * from './lib/actions'; +export * from './lib/components'; +export * from './lib/enums'; +export * from './lib/guards'; +export * from './lib/identity.module'; +export * from './lib/models'; +export * from './lib/proxy/identity'; +export * from './lib/proxy/users'; +export * from './lib/services'; +export * from './lib/states'; +export * from './lib/tokens'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.json new file mode 100644 index 0000000000..62ebbd9464 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.lib.json new file mode 100644 index 0000000000..bbcc12b1c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.lib.prod.json new file mode 100644 index 0000000000..331d0ecb05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial", + "enableIvy": false + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index b5476c8d32..dd1e858d7c 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -15,9 +15,11 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { + "@abp/ng.identity": ["dist/packages/identity/"], + "@abp/ng.identity/config": ["dist/packages/identity/config"], "@abp/ng.account": ["dist/packages/account"], - "@abp/ng.account/config": ["dist/packages/account/config"], "@abp/ng.account.core": ["dist/packages/account-core"], + "@abp/ng.account/config": ["dist/packages/account/config"], "@abp/ng.components": ["dist/packages/components"], "@abp/ng.components/page": ["dist/packages/components/page"], "@abp/ng.components/tree": ["dist/packages/components/tree"], From 79e0dab3ba8721360b8733b4420e72af2a2e59cf Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 13 Aug 2021 16:21:44 +0300 Subject: [PATCH 14/56] add tenant-management to nx workspace --- npm/ng-packs/nx/ng-packs/angular.json | 41 + npm/ng-packs/nx/ng-packs/nx.json | 4 + .../packages/tenant-management/.eslintrc.json | 36 + .../packages/tenant-management/README.md | 3 + .../tenant-management/config/ng-package.json | 7 + .../config/src/enums/index.ts | 2 + .../config/src/enums/policy-names.ts | 4 + .../config/src/enums/route-names.ts | 4 + .../config/src/providers/index.ts | 1 + .../config/src/providers/route.provider.ts | 32 + .../config/src/public-api.ts | 3 + .../src/tenant-management-config.module.ts | 12 + .../packages/tenant-management/jest.config.js | 20 + .../tenant-management/ng-package.json | 11 + .../packages/tenant-management/package.json | 17 + .../src/lib/actions/index.ts | 1 + .../lib/actions/tenant-management.actions.ts | 26 + .../src/lib/components/index.ts | 1 + .../components/tenants/tenants.component.html | 72 + .../components/tenants/tenants.component.ts | 259 + .../default-tenants-entity-actions.ts | 30 + .../defaults/default-tenants-entity-props.ts | 11 + .../defaults/default-tenants-form-props.ts | 33 + .../default-tenants-toolbar-actions.ts | 24 + .../src/lib/enums/components.ts | 3 + .../tenant-management/src/lib/enums/index.ts | 1 + .../src/lib/guards/extensions.guard.ts | 90 + .../tenant-management/src/lib/guards/index.ts | 1 + .../src/lib/models/config-options.ts | 37 + .../tenant-management/src/lib/models/index.ts | 2 + .../src/lib/models/tenant-management.ts | 9 + .../tenant-management/src/lib/proxy/README.md | 17 + .../src/lib/proxy/generate-proxy.json | 4210 +++++++++++++++++ .../tenant-management/src/lib/proxy/index.ts | 2 + .../tenant-management/src/lib/proxy/models.ts | 22 + .../src/lib/proxy/tenant.service.ts | 74 + .../src/lib/services/index.ts | 1 + .../tenant-management-state.service.ts | 41 + .../tenant-management/src/lib/states/index.ts | 1 + .../src/lib/states/tenant-management.state.ts | 70 + .../lib/tenant-management-routing.module.ts | 40 + .../src/lib/tenant-management.module.ts | 73 + .../tenant-management-state.service.spec.ts | 61 + .../src/lib/tokens/extensions.token.ts | 74 + .../tenant-management/src/lib/tokens/index.ts | 1 + .../tenant-management/src/public-api.ts | 10 + .../tenant-management/src/test-setup.ts | 1 + .../packages/tenant-management/tsconfig.json | 13 + .../tenant-management/tsconfig.lib.json | 14 + .../tenant-management/tsconfig.lib.prod.json | 11 + .../tenant-management/tsconfig.spec.json | 10 + npm/ng-packs/nx/ng-packs/tsconfig.base.json | 8 +- 52 files changed, 5548 insertions(+), 3 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/config/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/enums/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/enums/policy-names.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/enums/route-names.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/providers/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/providers/route.provider.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/tenant-management-config.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/ng-package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/actions/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/actions/tenant-management.actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/components/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-props.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-form-props.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-toolbar-actions.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/enums/components.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/enums/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/guards/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/models/config-options.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/models/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/models/tenant-management.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/generate-proxy.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/models.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/tenant.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/services/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/services/tenant-management-state.service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/states/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/states/tenant-management.state.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tenant-management-routing.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tests/tenant-management-state.service.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tokens/extensions.token.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tokens/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/public-api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.lib.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.lib.prod.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index 5a308231cf..b25e385ea6 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -448,6 +448,47 @@ } } }, + "tenant-management": { + "projectType": "library", + "root": "packages/tenant-management", + "sourceRoot": "packages/tenant-management/src", + "prefix": "abp", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "packages/identity/tsconfig.lib.json", + "project": "packages/identity/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "packages/tenant-management/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "packages/tenant-management/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/packages/tenant-management"], + "options": { + "jestConfig": "packages/tenant-management/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "packages/tenant-management/src/**/*.ts", + "packages/tenant-management/src/**/*.html" + ] + } + } + } + }, "theme-basic": { "projectType": "library", "root": "packages/theme-basic", diff --git a/npm/ng-packs/nx/ng-packs/nx.json b/npm/ng-packs/nx/ng-packs/nx.json index 772bdb1a17..cdaaab6821 100644 --- a/npm/ng-packs/nx/ng-packs/nx.json +++ b/npm/ng-packs/nx/ng-packs/nx.json @@ -69,6 +69,10 @@ "tags": [], "implicitDependencies": ["core", "theme-shared", "components"] }, + "tenant-management": { + "tags": [], + "implicitDependencies": ["core", "theme-shared", "feature-management"] + }, "theme-basic": { "tags": [], "implicitDependencies": ["core", "theme-shared", "account-core"] diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/tenant-management/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/README.md b/npm/ng-packs/nx/ng-packs/packages/tenant-management/README.md new file mode 100644 index 0000000000..f44dae0ecb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/README.md @@ -0,0 +1,3 @@ +

@abp/ng.tenant-management

+ +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/ng-package.json new file mode 100644 index 0000000000..21edb08d66 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/packages/tenant-management/config", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/enums/index.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/enums/index.ts new file mode 100644 index 0000000000..4a7a6a0e23 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/enums/index.ts @@ -0,0 +1,2 @@ +export * from './policy-names'; +export * from './route-names'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/enums/policy-names.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/enums/policy-names.ts new file mode 100644 index 0000000000..4b78f4d397 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/enums/policy-names.ts @@ -0,0 +1,4 @@ +export const enum eTenantManagementPolicyNames { + TenantManagement = 'AbpTenantManagement.Tenants', + Tenants = 'AbpTenantManagement.Tenants', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/enums/route-names.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/enums/route-names.ts new file mode 100644 index 0000000000..267ddc2f08 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/enums/route-names.ts @@ -0,0 +1,4 @@ +export const enum eTenantManagementRouteNames { + TenantManagement = 'AbpTenantManagement::Menu:TenantManagement', + Tenants = 'AbpTenantManagement::Tenants', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/providers/index.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/providers/index.ts new file mode 100644 index 0000000000..fe08efba8c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/providers/index.ts @@ -0,0 +1 @@ +export * from './route.provider'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/providers/route.provider.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/providers/route.provider.ts new file mode 100644 index 0000000000..5b3d9c88fd --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/providers/route.provider.ts @@ -0,0 +1,32 @@ +import { eLayoutType, RoutesService } from '@abp/ng.core'; +import { eThemeSharedRouteNames } from '@abp/ng.theme.shared'; +import { APP_INITIALIZER } from '@angular/core'; +import { eTenantManagementPolicyNames } from '../enums/policy-names'; +import { eTenantManagementRouteNames } from '../enums/route-names'; + +export const TENANT_MANAGEMENT_ROUTE_PROVIDERS = [ + { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, +]; + +export function configureRoutes(routes: RoutesService) { + return () => { + routes.add([ + { + path: undefined, + name: eTenantManagementRouteNames.TenantManagement, + parentName: eThemeSharedRouteNames.Administration, + requiredPolicy: eTenantManagementPolicyNames.TenantManagement, + layout: eLayoutType.application, + iconClass: 'fa fa-users', + order: 2, + }, + { + path: '/tenant-management/tenants', + name: eTenantManagementRouteNames.Tenants, + parentName: eTenantManagementRouteNames.TenantManagement, + requiredPolicy: eTenantManagementPolicyNames.Tenants, + order: 1, + }, + ]); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/public-api.ts new file mode 100644 index 0000000000..6c2c00a53a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/public-api.ts @@ -0,0 +1,3 @@ +export * from './enums'; +export * from './providers'; +export * from './tenant-management-config.module'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/tenant-management-config.module.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/tenant-management-config.module.ts new file mode 100644 index 0000000000..2929f766c0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/config/src/tenant-management-config.module.ts @@ -0,0 +1,12 @@ +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { TENANT_MANAGEMENT_ROUTE_PROVIDERS } from './providers/route.provider'; + +@NgModule() +export class TenantManagementConfigModule { + static forRoot(): ModuleWithProviders { + return { + ngModule: TenantManagementConfigModule, + providers: [TENANT_MANAGEMENT_ROUTE_PROVIDERS], + }; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/jest.config.js b/npm/ng-packs/nx/ng-packs/packages/tenant-management/jest.config.js new file mode 100644 index 0000000000..9a08bbbafc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'tenant-management', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/packages/tenant-management', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/ng-package.json b/npm/ng-packs/nx/ng-packs/packages/tenant-management/ng-package.json new file mode 100644 index 0000000000..ec0114c801 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/ng-package.json @@ -0,0 +1,11 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/packages/tenant-management", + "lib": { + "entryFile": "src/public-api.ts" + }, + "allowedNonPeerDependencies": [ + "@abp/ng.theme.shared", + "@abp/ng.feature-management" + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/nx/ng-packs/packages/tenant-management/package.json new file mode 100644 index 0000000000..77c031e5a1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/package.json @@ -0,0 +1,17 @@ +{ + "name": "@abp/ng.tenant-management", + "version": "4.4.0", + "homepage": "https://abp.io", + "repository": { + "type": "git", + "url": "https://github.com/abpframework/abp.git" + }, + "dependencies": { + "@abp/ng.feature-management": "~4.4.0", + "@abp/ng.theme.shared": "~4.4.0", + "tslib": "^2.0.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/actions/index.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/actions/index.ts new file mode 100644 index 0000000000..5c9207873f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/actions/index.ts @@ -0,0 +1 @@ +export * from './tenant-management.actions'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/actions/tenant-management.actions.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/actions/tenant-management.actions.ts new file mode 100644 index 0000000000..23e0aecb9e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/actions/tenant-management.actions.ts @@ -0,0 +1,26 @@ +import { GetTenantsInput, TenantCreateDto, TenantUpdateDto } from '../proxy/models'; + +export class GetTenants { + static readonly type = '[TenantManagement] Get Tenant'; + constructor(public payload?: GetTenantsInput) {} +} + +export class GetTenantById { + static readonly type = '[TenantManagement] Get Tenant By Id'; + constructor(public payload: string) {} +} + +export class CreateTenant { + static readonly type = '[TenantManagement] Create Tenant'; + constructor(public payload: TenantCreateDto) {} +} + +export class UpdateTenant { + static readonly type = '[TenantManagement] Update Tenant'; + constructor(public payload: TenantUpdateDto & { id: string }) {} +} + +export class DeleteTenant { + static readonly type = '[TenantManagement] Delete Tenant'; + constructor(public payload: string) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/components/index.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/components/index.ts new file mode 100644 index 0000000000..3174cf9458 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/components/index.ts @@ -0,0 +1 @@ +export * from './tenants/tenants.component'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html new file mode 100644 index 0000000000..c296589afd --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html @@ -0,0 +1,72 @@ +
+
+
+
+
{{ 'AbpTenantManagement::Tenants' | abpLocalization }}
+
+
+ +
+
+
+ +
+
+
+ +
+
+ + +
+
+ + + +

{{ selectedModalContent.title | abpLocalization }}

+
+ + + + + + + + {{ + 'AbpTenantManagement::Save' | abpLocalization + }} + +
+ + +
+ +
+
+ + + diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts new file mode 100644 index 0000000000..22880151f4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts @@ -0,0 +1,259 @@ +import { ListService, PagedResultDto } from '@abp/ng.core'; +import { eFeatureManagementComponents } from '@abp/ng.feature-management'; +import { Confirmation, ConfirmationService, getPasswordValidators } from '@abp/ng.theme.shared'; +import { Component, Injector, OnInit, TemplateRef, ViewChild } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Select, Store } from '@ngxs/store'; +import { Observable } from 'rxjs'; +import { finalize, pluck, switchMap, take } from 'rxjs/operators'; +import { + CreateTenant, + DeleteTenant, + GetTenantById, + GetTenants, + UpdateTenant, +} from '../../actions/tenant-management.actions'; +import { GetTenantsInput, TenantDto } from '../../proxy/models'; +import { TenantService } from '../../proxy/tenant.service'; +import { TenantManagementState } from '../../states/tenant-management.state'; +import { + EXTENSIONS_IDENTIFIER, + FormPropData, + generateFormFromProps, +} from '@abp/ng.theme.shared/extensions'; +import { eTenantManagementComponents } from '../../enums/components'; + +interface SelectedModalContent { + type: 'saveConnStr' | 'saveTenant'; + title: string; + template: TemplateRef; +} + +@Component({ + selector: 'abp-tenants', + templateUrl: './tenants.component.html', + providers: [ + ListService, + { + provide: EXTENSIONS_IDENTIFIER, + useValue: eTenantManagementComponents.Tenants, + }, + ], +}) +export class TenantsComponent implements OnInit { + @Select(TenantManagementState.get) + data$: Observable>; + + @Select(TenantManagementState.getTenantsTotalCount) + totalCount$: Observable; + + selected: TenantDto; + + tenantForm: FormGroup; + + defaultConnectionStringForm: FormGroup; + + defaultConnectionString: string; + + isModalVisible: boolean; + + selectedModalContent = {} as SelectedModalContent; + + visibleFeatures = false; + + providerKey: string; + + _useSharedDatabase: boolean; + + modalBusy = false; + + featureManagementKey = eFeatureManagementComponents.FeatureManagement; + + get hasSelectedTenant(): boolean { + return Boolean(this.selected.id); + } + + get useSharedDatabase(): boolean { + return this.defaultConnectionStringForm.get('useSharedDatabase').value; + } + + get connectionString(): string { + return this.defaultConnectionStringForm.get('defaultConnectionString').value; + } + + @ViewChild('tenantModalTemplate') + tenantModalTemplate: TemplateRef; + + get isDisabledSaveButton(): boolean { + if (!this.selectedModalContent) return false; + + if ( + this.selectedModalContent.type === 'saveConnStr' && + this.defaultConnectionStringForm && + this.defaultConnectionStringForm.invalid + ) { + return true; + } else if ( + this.selectedModalContent.type === 'saveTenant' && + this.tenantForm && + this.tenantForm.invalid + ) { + return true; + } else { + return false; + } + } + + onVisibleFeaturesChange = (value: boolean) => { + this.visibleFeatures = value; + }; + + constructor( + public readonly list: ListService, + private injector: Injector, + private confirmationService: ConfirmationService, + private tenantService: TenantService, + private fb: FormBuilder, + private store: Store, + ) {} + + ngOnInit() { + this.hookToQuery(); + } + + private createTenantForm() { + const data = new FormPropData(this.injector, this.selected); + this.tenantForm = generateFormFromProps(data); + } + + private createDefaultConnectionStringForm() { + this.defaultConnectionStringForm = this.fb.group({ + useSharedDatabase: this._useSharedDatabase, + defaultConnectionString: [this.defaultConnectionString || ''], + }); + } + + openModal(title: string, template: TemplateRef, type: 'saveConnStr' | 'saveTenant') { + this.selectedModalContent = { + title, + template, + type, + }; + + this.isModalVisible = true; + } + + addTenant() { + this.selected = {} as TenantDto; + this.createTenantForm(); + this.openModal('AbpTenantManagement::NewTenant', this.tenantModalTemplate, 'saveTenant'); + } + + editTenant(id: string) { + this.store + .dispatch(new GetTenantById(id)) + .pipe(pluck('TenantManagementState', 'selectedItem')) + .subscribe(selected => { + this.selected = selected; + this.createTenantForm(); + this.openModal('AbpTenantManagement::Edit', this.tenantModalTemplate, 'saveTenant'); + }); + } + + save() { + const { type } = this.selectedModalContent; + if (!type) return; + if (type === 'saveTenant') this.saveTenant(); + else if (type === 'saveConnStr') this.saveConnectionString(); + } + + saveConnectionString() { + if (this.modalBusy) return; + + this.modalBusy = true; + if (this.useSharedDatabase || (!this.useSharedDatabase && !this.connectionString)) { + this.tenantService + .deleteDefaultConnectionString(this.selected.id) + .pipe( + take(1), + finalize(() => (this.modalBusy = false)), + ) + .subscribe(() => { + this.isModalVisible = false; + }); + } else { + this.tenantService + .updateDefaultConnectionString(this.selected.id, this.connectionString) + .pipe( + take(1), + finalize(() => (this.modalBusy = false)), + ) + .subscribe(() => { + this.isModalVisible = false; + }); + } + } + + saveTenant() { + if (!this.tenantForm.valid || this.modalBusy) return; + this.modalBusy = true; + + this.store + .dispatch( + this.selected.id + ? new UpdateTenant({ ...this.selected, ...this.tenantForm.value, id: this.selected.id }) + : new CreateTenant(this.tenantForm.value), + ) + .pipe(finalize(() => (this.modalBusy = false))) + .subscribe(() => { + this.isModalVisible = false; + this.list.get(); + }); + } + + delete(id: string, name: string) { + this.confirmationService + .warn( + 'AbpTenantManagement::TenantDeletionConfirmationMessage', + 'AbpTenantManagement::AreYouSure', + { + messageLocalizationParams: [name], + }, + ) + .subscribe((status: Confirmation.Status) => { + if (status === Confirmation.Status.confirm) { + this.store.dispatch(new DeleteTenant(id)).subscribe(() => this.list.get()); + } + }); + } + + hookToQuery() { + this.list.hookToQuery(query => this.store.dispatch(new GetTenants(query))).subscribe(); + } + + onSharedDatabaseChange(value: boolean) { + if (!value) { + setTimeout(() => { + const defaultConnectionString = document.getElementById( + 'defaultConnectionString', + ) as HTMLInputElement; + if (defaultConnectionString) { + defaultConnectionString.focus(); + } + }, 0); + } + } + + openFeaturesModal(providerKey: string) { + this.providerKey = providerKey; + setTimeout(() => { + this.visibleFeatures = true; + }, 0); + } + + sort(data) { + const { prop, dir } = data.sorts[0]; + this.list.sortKey = prop; + this.list.sortOrder = dir; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-actions.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-actions.ts new file mode 100644 index 0000000000..715dbd1a1b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-actions.ts @@ -0,0 +1,30 @@ +import { EntityAction } from '@abp/ng.theme.shared/extensions'; +import { TenantsComponent } from '../components/tenants/tenants.component'; +import { TenantDto } from '../proxy/models'; + +export const DEFAULT_TENANTS_ENTITY_ACTIONS = EntityAction.createMany([ + { + text: 'AbpTenantManagement::Edit', + action: data => { + const component = data.getInjected(TenantsComponent); + component.editTenant(data.record.id); + }, + permission: 'AbpTenantManagement.Tenants.Update', + }, + { + text: 'AbpTenantManagement::Permission:ManageFeatures', + action: data => { + const component = data.getInjected(TenantsComponent); + component.openFeaturesModal(data.record.id); + }, + permission: 'AbpTenantManagement.Tenants.ManageFeatures', + }, + { + text: 'AbpTenantManagement::Delete', + action: data => { + const component = data.getInjected(TenantsComponent); + component.delete(data.record.id, data.record.name); + }, + permission: 'AbpTenantManagement.Tenants.Delete', + }, +]); diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-props.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-props.ts new file mode 100644 index 0000000000..31de557fde --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-entity-props.ts @@ -0,0 +1,11 @@ +import { EntityProp, ePropType } from '@abp/ng.theme.shared/extensions'; +import { TenantDto } from '../proxy/models'; + +export const DEFAULT_TENANTS_ENTITY_PROPS = EntityProp.createMany([ + { + type: ePropType.String, + name: 'name', + displayName: 'AbpTenantManagement::TenantName', + sortable: true, + }, +]); diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-form-props.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-form-props.ts new file mode 100644 index 0000000000..a17832113a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-form-props.ts @@ -0,0 +1,33 @@ +import { getPasswordValidators } from '@abp/ng.theme.shared'; +import { ePropType, FormProp } from '@abp/ng.theme.shared/extensions'; +import { Validators } from '@angular/forms'; +import { TenantCreateDto, TenantUpdateDto } from '../proxy/models'; + +export const DEFAULT_TENANTS_CREATE_FORM_PROPS = FormProp.createMany< + TenantCreateDto | TenantUpdateDto +>([ + { + type: ePropType.String, + name: 'name', + id: 'name', + displayName: 'AbpTenantManagement::TenantName', + validators: () => [Validators.required, Validators.maxLength(256)], + }, + { + type: ePropType.Email, + name: 'adminEmailAddress', + displayName: 'AbpTenantManagement::DisplayName:AdminEmailAddress', + id: 'admin-email-address', + validators: () => [Validators.required, Validators.maxLength(256), Validators.email], + }, + { + type: ePropType.Password, + name: 'adminPassword', + displayName: 'AbpTenantManagement::DisplayName:AdminPassword', + id: 'admin-password', + autocomplete: 'new-password', + validators: data => [Validators.required, ...getPasswordValidators({ get: data.getInjected })], + }, +]); + +export const DEFAULT_TENANTS_EDIT_FORM_PROPS = DEFAULT_TENANTS_CREATE_FORM_PROPS.slice(0, 1); diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-toolbar-actions.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-toolbar-actions.ts new file mode 100644 index 0000000000..948294894d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-toolbar-actions.ts @@ -0,0 +1,24 @@ +import { ToolbarAction } from '@abp/ng.theme.shared/extensions'; +import { TenantsComponent } from '../components/tenants/tenants.component'; +import { TenantDto } from '../proxy/models'; + +export const DEFAULT_TENANTS_TOOLBAR_ACTIONS = ToolbarAction.createMany([ + { + text: 'AbpTenantManagement::ManageHostFeatures', + action: data => { + const component = data.getInjected(TenantsComponent); + component.openFeaturesModal(null); + }, + permission: 'FeatureManagement.ManageHostFeatures', + icon: 'fa fa-cog', + }, + { + text: 'AbpTenantManagement::NewTenant', + action: data => { + const component = data.getInjected(TenantsComponent); + component.addTenant(); + }, + permission: 'AbpTenantManagement.Tenants.Create', + icon: 'fa fa-plus', + }, +]); diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/enums/components.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/enums/components.ts new file mode 100644 index 0000000000..69004a800b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/enums/components.ts @@ -0,0 +1,3 @@ +export const enum eTenantManagementComponents { + Tenants = 'TenantManagement.TenantsComponent', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/enums/index.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/enums/index.ts new file mode 100644 index 0000000000..07635cbbc8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/enums/index.ts @@ -0,0 +1 @@ +export * from './components'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts new file mode 100644 index 0000000000..32f014ddfd --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts @@ -0,0 +1,90 @@ +import { ConfigStateService } from '@abp/ng.core'; +import { + ExtensionsService, + getObjectExtensionEntitiesFromStore, + mapEntitiesToContributors, + mergeWithDefaultActions, + mergeWithDefaultProps, +} from '@abp/ng.theme.shared/extensions'; +import { Injectable, Injector } from '@angular/core'; +import { CanActivate } from '@angular/router'; +import { Observable } from 'rxjs'; +import { map, mapTo, tap } from 'rxjs/operators'; +import { eTenantManagementComponents } from '../enums/components'; +import { + TenantManagementCreateFormPropContributors, + TenantManagementEditFormPropContributors, + TenantManagementEntityActionContributors, + TenantManagementEntityPropContributors, + TenantManagementToolbarActionContributors, +} from '../models/config-options'; +import { + DEFAULT_TENANT_MANAGEMENT_CREATE_FORM_PROPS, + DEFAULT_TENANT_MANAGEMENT_EDIT_FORM_PROPS, + DEFAULT_TENANT_MANAGEMENT_ENTITY_ACTIONS, + DEFAULT_TENANT_MANAGEMENT_ENTITY_PROPS, + DEFAULT_TENANT_MANAGEMENT_TOOLBAR_ACTIONS, + TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, + TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, +} from '../tokens/extensions.token'; + +@Injectable() +export class TenantManagementExtensionsGuard implements CanActivate { + constructor(private injector: Injector) {} + + canActivate(): Observable { + const extensions: ExtensionsService = this.injector.get(ExtensionsService); + const actionContributors: TenantManagementEntityActionContributors = + this.injector.get(TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, null) || {}; + const toolbarContributors: TenantManagementToolbarActionContributors = + this.injector.get(TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, null) || {}; + const propContributors: TenantManagementEntityPropContributors = + this.injector.get(TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, null) || {}; + const createFormContributors: TenantManagementCreateFormPropContributors = + this.injector.get(TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, null) || {}; + const editFormContributors: TenantManagementEditFormPropContributors = + this.injector.get(TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, null) || {}; + + const configState = this.injector.get(ConfigStateService); + return getObjectExtensionEntitiesFromStore(configState, 'TenantManagement').pipe( + map(entities => ({ + [eTenantManagementComponents.Tenants]: entities.Tenant, + })), + mapEntitiesToContributors(configState, 'TenantManagement'), + tap(objectExtensionContributors => { + mergeWithDefaultActions( + extensions.entityActions, + DEFAULT_TENANT_MANAGEMENT_ENTITY_ACTIONS, + actionContributors, + ); + mergeWithDefaultActions( + extensions.toolbarActions, + DEFAULT_TENANT_MANAGEMENT_TOOLBAR_ACTIONS, + toolbarContributors, + ); + mergeWithDefaultProps( + extensions.entityProps, + DEFAULT_TENANT_MANAGEMENT_ENTITY_PROPS, + objectExtensionContributors.prop, + propContributors, + ); + mergeWithDefaultProps( + extensions.createFormProps, + DEFAULT_TENANT_MANAGEMENT_CREATE_FORM_PROPS, + objectExtensionContributors.createForm, + createFormContributors, + ); + mergeWithDefaultProps( + extensions.editFormProps, + DEFAULT_TENANT_MANAGEMENT_EDIT_FORM_PROPS, + objectExtensionContributors.editForm, + editFormContributors, + ); + }), + mapTo(true), + ); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/guards/index.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/guards/index.ts new file mode 100644 index 0000000000..480f14c40b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/guards/index.ts @@ -0,0 +1 @@ +export * from './extensions.guard'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/models/config-options.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/models/config-options.ts new file mode 100644 index 0000000000..306162f6c5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/models/config-options.ts @@ -0,0 +1,37 @@ +import { + CreateFormPropContributorCallback, + EditFormPropContributorCallback, + EntityActionContributorCallback, + EntityPropContributorCallback, + ToolbarActionContributorCallback, +} from '@abp/ng.theme.shared/extensions'; +import { eTenantManagementComponents } from '../enums/components'; +import { TenantCreateDto, TenantDto, TenantUpdateDto } from '../proxy/models'; + +export type TenantManagementEntityActionContributors = Partial<{ + [eTenantManagementComponents.Tenants]: EntityActionContributorCallback[]; +}>; + +export type TenantManagementToolbarActionContributors = Partial<{ + [eTenantManagementComponents.Tenants]: ToolbarActionContributorCallback[]; +}>; + +export type TenantManagementEntityPropContributors = Partial<{ + [eTenantManagementComponents.Tenants]: EntityPropContributorCallback[]; +}>; + +export type TenantManagementCreateFormPropContributors = Partial<{ + [eTenantManagementComponents.Tenants]: CreateFormPropContributorCallback[]; +}>; + +export type TenantManagementEditFormPropContributors = Partial<{ + [eTenantManagementComponents.Tenants]: EditFormPropContributorCallback[]; +}>; + +export interface TenantManagementConfigOptions { + entityActionContributors?: TenantManagementEntityActionContributors; + toolbarActionContributors?: TenantManagementToolbarActionContributors; + entityPropContributors?: TenantManagementEntityPropContributors; + createFormPropContributors?: TenantManagementCreateFormPropContributors; + editFormPropContributors?: TenantManagementEditFormPropContributors; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/models/index.ts new file mode 100644 index 0000000000..2385684df7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/models/index.ts @@ -0,0 +1,2 @@ +export * from './tenant-management'; +export * from './config-options'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/models/tenant-management.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/models/tenant-management.ts new file mode 100644 index 0000000000..3771d94e23 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/models/tenant-management.ts @@ -0,0 +1,9 @@ +import { PagedResultDto } from '@abp/ng.core'; +import { TenantDto } from '../proxy/models'; + +export namespace TenantManagement { + export interface State { + result: PagedResultDto; + selectedItem: TenantDto; + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/README.md b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/README.md new file mode 100644 index 0000000000..767dfd0f7c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/README.md @@ -0,0 +1,17 @@ +# Proxy Generation Output + +This directory includes the output of the latest proxy generation. +The files and folders in it will be overwritten when proxy generation is run again. +Therefore, please do not place your own content in this folder. + +In addition, `generate-proxy.json` works like a lock file. +It includes information used by the proxy generator, so please do not delete or modify it. + +Finally, the name of the files and folders should not be changed for two reasons: +- Proxy generator will keep creating them at those paths and you will have multiple copies of the same content. +- ABP Suite generates files which include imports from this folder. + +> **Important Notice:** If you are building a module and are planning to publish to npm, +> some of the generated proxies are likely to be exported from public-api.ts file. In such a case, +> please make sure you export files directly and not from barrel exports. In other words, +> do not include index.ts exports in your public-api.ts exports. diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/generate-proxy.json b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/generate-proxy.json new file mode 100644 index 0000000000..6fd332abe4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/generate-proxy.json @@ -0,0 +1,4210 @@ +{ + "generated": [ + "multi-tenancy" + ], + "modules": { + "identity": { + "rootPath": "identity", + "remoteServiceName": "AbpIdentity", + "controllers": { + "Volo.Abp.Identity.IdentityRoleController": { + "controllerName": "IdentityRole", + "type": "Volo.Abp.Identity.IdentityRoleController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityRoleAppService" + } + ], + "actions": { + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity/roles/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto, Volo.Abp.Ddd.Application.Contracts", + "type": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleCreateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleUpdateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserController": { + "controllerName": "IdentityUser", + "type": "Volo.Abp.Identity.IdentityUserController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityUsersInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserCreateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetRolesAsyncById": { + "uniqueName": "GetRolesAsyncById", + "name": "GetRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAssignableRolesAsync": { + "uniqueName": "GetAssignableRolesAsync", + "name": "GetAssignableRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/assignable-roles", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "UpdateRolesAsyncByIdAndInput": { + "uniqueName": "UpdateRolesAsyncByIdAndInput", + "name": "UpdateRolesAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateRolesDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "FindByUsernameAsyncByUsername": { + "uniqueName": "FindByUsernameAsyncByUsername", + "name": "FindByUsernameAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "username", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "username", + "name": "username", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "FindByEmailAsyncByEmail": { + "uniqueName": "FindByEmailAsyncByEmail", + "name": "FindByEmailAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-email/{email}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "email", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "email", + "name": "email", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserLookupController": { + "controllerName": "IdentityUserLookup", + "type": "Volo.Abp.Identity.IdentityUserLookupController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserLookupAppService" + } + ], + "actions": { + "FindByIdAsyncById": { + "uniqueName": "FindByIdAsyncById", + "name": "FindByIdAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "FindByUserNameAsyncByUserName": { + "uniqueName": "FindByUserNameAsyncByUserName", + "name": "FindByUserNameAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "userName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "userName", + "name": "userName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "SearchAsyncByInput": { + "uniqueName": "SearchAsyncByInput", + "name": "SearchAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/search", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupSearchInputDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupSearchInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupSearchInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetCountAsyncByInput": { + "uniqueName": "GetCountAsyncByInput", + "name": "GetCountAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/count", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupCountInputDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupCountInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupCountInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Int64", + "typeSimple": "number" + } + } + } + }, + "Volo.Abp.Identity.ProfileController": { + "controllerName": "Profile", + "type": "Volo.Abp.Identity.ProfileController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IProfileAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UpdateProfileDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "ChangePasswordAsyncByInput": { + "uniqueName": "ChangePasswordAsyncByInput", + "name": "ChangePasswordAsync", + "httpMethod": "POST", + "url": "api/identity/my-profile/change-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.ChangePasswordInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "featureManagement": { + "rootPath": "featureManagement", + "remoteServiceName": "AbpFeatureManagement", + "controllers": { + "Volo.Abp.FeatureManagement.FeaturesController": { + "controllerName": "Features", + "type": "Volo.Abp.FeatureManagement.FeaturesController", + "interfaces": [ + { + "type": "Volo.Abp.FeatureManagement.IFeatureAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", + "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "account": { + "rootPath": "account", + "remoteServiceName": "AbpAccount", + "controllers": { + "Volo.Abp.Account.Web.Areas.Account.Controllers.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.AccountController", + "interfaces": [], + "actions": { + "LoginByLogin": { + "uniqueName": "LoginByLogin", + "name": "Login", + "httpMethod": "POST", + "url": "api/account/login", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Web", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + }, + "Logout": { + "uniqueName": "Logout", + "name": "Logout", + "httpMethod": "GET", + "url": "api/account/logout", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "CheckPasswordByLogin": { + "uniqueName": "CheckPasswordByLogin", + "name": "CheckPassword", + "httpMethod": "POST", + "url": "api/account/checkPassword", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "login", + "typeAsString": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Web", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + } + } + }, + "Volo.Abp.Account.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.AccountController", + "interfaces": [ + { + "type": "Volo.Abp.Account.IAccountAppService" + } + ], + "actions": { + "RegisterAsyncByInput": { + "uniqueName": "RegisterAsyncByInput", + "name": "RegisterAsync", + "httpMethod": "POST", + "url": "api/account/register", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.RegisterDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "SendPasswordResetCodeAsyncByInput": { + "uniqueName": "SendPasswordResetCodeAsyncByInput", + "name": "SendPasswordResetCodeAsync", + "httpMethod": "POST", + "url": "api/account/send-password-reset-code", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendPasswordResetCodeDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "ResetPasswordAsyncByInput": { + "uniqueName": "ResetPasswordAsyncByInput", + "name": "ResetPasswordAsync", + "httpMethod": "POST", + "url": "api/account/reset-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ResetPasswordDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "multi-tenancy": { + "rootPath": "multi-tenancy", + "remoteServiceName": "AbpTenantManagement", + "controllers": { + "Volo.Abp.TenantManagement.TenantController": { + "controllerName": "Tenant", + "type": "Volo.Abp.TenantManagement.TenantController", + "interfaces": [ + { + "type": "Volo.Abp.TenantManagement.ITenantAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.GetTenantsInput, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.GetTenantsInput", + "typeSimple": "Volo.Abp.TenantManagement.GetTenantsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantCreateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantUpdateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetDefaultConnectionStringAsyncById": { + "uniqueName": "GetDefaultConnectionStringAsyncById", + "name": "GetDefaultConnectionStringAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.String", + "typeSimple": "string" + } + }, + "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString": { + "uniqueName": "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString", + "name": "UpdateDefaultConnectionStringAsync", + "httpMethod": "PUT", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "defaultConnectionString", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "defaultConnectionString", + "name": "defaultConnectionString", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "DeleteDefaultConnectionStringAsyncById": { + "uniqueName": "DeleteDefaultConnectionStringAsyncById", + "name": "DeleteDefaultConnectionStringAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "abp": { + "rootPath": "abp", + "remoteServiceName": "abp", + "controllers": { + "Pages.Abp.MultiTenancy.AbpTenantController": { + "controllerName": "AbpTenant", + "type": "Pages.Abp.MultiTenancy.AbpTenantController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" + } + ], + "actions": { + "FindTenantByNameAsyncByName": { + "uniqueName": "FindTenantByNameAsyncByName", + "name": "FindTenantByNameAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-name/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "name", + "name": "name", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + }, + "FindTenantByIdAsyncById": { + "uniqueName": "FindTenantByIdAsyncById", + "name": "FindTenantByIdAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-id/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { + "controllerName": "AbpApplicationConfiguration", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/abp/application-configuration", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { + "controllerName": "AbpApiDefinition", + "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", + "interfaces": [], + "actions": { + "GetByModel": { + "uniqueName": "GetByModel", + "name": "Get", + "httpMethod": "GET", + "url": "api/abp/api-definition", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "model", + "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "model", + "name": "IncludeTypes", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "model" + } + ], + "returnValue": { + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" + } + } + } + } + } + }, + "permissionManagement": { + "rootPath": "permissionManagement", + "remoteServiceName": "AbpPermissionManagement", + "controllers": { + "Volo.Abp.PermissionManagement.PermissionsController": { + "controllerName": "Permissions", + "type": "Volo.Abp.PermissionManagement.PermissionsController", + "interfaces": [ + { + "type": "Volo.Abp.PermissionManagement.IPermissionAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", + "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + } + }, + "types": { + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserNameOrEmailAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RememberMe", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Result", + "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType", + "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Success", + "InvalidUserNameOrPassword", + "NotAllowed", + "LockedOut", + "RequiresTwoFactor" + ], + "enumValues": [ + 1, + 2, + 3, + 4, + 5 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.Account.RegisterDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "AppName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "TwoFactorEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "LockoutEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "LockoutEnd", + "type": "System.DateTimeOffset?", + "typeSimple": "string?" + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "IsDeleted", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DeleterId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "DeletionTime", + "type": "System.DateTime?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "LastModificationTime", + "type": "System.DateTime?", + "typeSimple": "string?" + }, + { + "name": "LastModifierId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "CreationTime", + "type": "System.DateTime", + "typeSimple": "string" + }, + { + "name": "CreatorId", + "type": "System.Guid?", + "typeSimple": "string?" + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleEntityDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TKey" + ], + "properties": [ + { + "name": "Id", + "type": "TKey", + "typeSimple": "TKey" + } + ] + }, + "Volo.Abp.ObjectExtending.ExtensibleObject": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ExtraProperties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.Account.SendPasswordResetCodeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "AppName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ReturnUrl", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ReturnUrlHash", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Account.ResetPasswordDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "ResetToken", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Success", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.ListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Items", + "type": "[T]", + "typeSimple": "[T]" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsDefault", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsStatic", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsPublic", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Sorting", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.LimitedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.Application.Dtos.LimitedResultRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DefaultMaxResultCount", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "MaxMaxResultCount", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultDto": { + "baseType": "Volo.Abp.Application.Dtos.ListResultDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "TotalCount", + "type": "System.Int64", + "typeSimple": "number" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsDefault", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "IsPublic", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.IdentityRoleUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.GetIdentityUsersInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TwoFactorEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "LockoutEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "RoleNames", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ConcurrencyStamp", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateRolesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleNames", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.Users.UserData": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "type": "System.Guid", + "typeSimple": "string" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberConfirmed", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.UserLookupSearchInputDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.UserLookupCountInputDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.ProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsExternal", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "HasPassword", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.UpdateProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Surname", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.ChangePasswordInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CurrentPassword", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "NewPassword", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.PermissionManagement.GetPermissionListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityDisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Groups", + "type": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGroupDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Permissions", + "type": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGrantInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ParentName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsGranted", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "AllowedProviders", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "GrantedProviders", + "type": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.ProviderInfoDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.ProviderInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ProviderName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ProviderKey", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Permissions", + "type": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]" + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsGranted", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.TenantManagement.TenantDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TenantManagement.GetTenantsInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TenantManagement.TenantCreateDto": { + "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AdminEmailAddress", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "AdminPassword", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.TenantManagement.TenantUpdateDto": { + "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.FeatureManagement.GetFeatureListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Groups", + "type": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureGroupDto]" + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Features", + "type": "[Volo.Abp.FeatureManagement.FeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureDto]" + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Provider", + "type": "Volo.Abp.FeatureManagement.FeatureProviderDto", + "typeSimple": "Volo.Abp.FeatureManagement.FeatureProviderDto" + }, + { + "name": "Description", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ValueType", + "type": "Volo.Abp.Validation.StringValues.IStringValueType", + "typeSimple": "Volo.Abp.Validation.StringValues.IStringValueType" + }, + { + "name": "Depth", + "type": "System.Int32", + "typeSimple": "number" + }, + { + "name": "ParentName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureProviderDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Key", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Validation.StringValues.IStringValueType": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Item", + "type": "System.Object", + "typeSimple": "object" + }, + { + "name": "Properties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + }, + { + "name": "Validator", + "type": "Volo.Abp.Validation.StringValues.IValueValidator", + "typeSimple": "Volo.Abp.Validation.StringValues.IValueValidator" + } + ] + }, + "Volo.Abp.Validation.StringValues.IValueValidator": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Item", + "type": "System.Object", + "typeSimple": "object" + }, + { + "name": "Properties", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeaturesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Features", + "type": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]" + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Localization", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto" + }, + { + "name": "Auth", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto" + }, + { + "name": "Setting", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto" + }, + { + "name": "CurrentUser", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto" + }, + { + "name": "Features", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto" + }, + { + "name": "MultiTenancy", + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto" + }, + { + "name": "CurrentTenant", + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto" + }, + { + "name": "Timing", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto" + }, + { + "name": "Clock", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto" + }, + { + "name": "ObjectExtensions", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:{System.String:System.String}}", + "typeSimple": "{string:{string:string}}" + }, + { + "name": "Languages", + "type": "[Volo.Abp.Localization.LanguageInfo]", + "typeSimple": "[Volo.Abp.Localization.LanguageInfo]" + }, + { + "name": "CurrentCulture", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto" + }, + { + "name": "DefaultResourceName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LanguagesMap", + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}" + }, + { + "name": "LanguageFilesMap", + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}" + } + ] + }, + "Volo.Abp.Localization.LanguageInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "UiCultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FlagIcon", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EnglishName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ThreeLetterIsoLanguageName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TwoLetterIsoLanguageName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsRightToLeft", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "CultureName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "NativeName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DateTimeFormat", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CalendarAlgorithmType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DateTimeFormatLong", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ShortDatePattern", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "FullDateTimePattern", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DateSeparator", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "ShortTimePattern", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "LongTimePattern", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.NameValue": { + "baseType": "Volo.Abp.NameValue", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.NameValue": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "T", + "typeSimple": "T" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Policies", + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}" + }, + { + "name": "GrantedPolicies", + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:System.String}", + "typeSimple": "{string:string}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAuthenticated", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Id", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "TenantId", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "UserName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "SurName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Email", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "EmailVerified", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "PhoneNumber", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "PhoneNumberVerified", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "Roles", + "type": "[System.String]", + "typeSimple": "[string]" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "type": "{System.String:System.String}", + "typeSimple": "{string:string}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "type": "System.Guid?", + "typeSimple": "string?" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZone", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Iana", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone" + }, + { + "name": "Windows", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneId", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Kind", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}" + }, + { + "name": "Enums", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Entities", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}" + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Properties", + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}" + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DisplayName", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto" + }, + { + "name": "Api", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto" + }, + { + "name": "Ui", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto" + }, + { + "name": "Attributes", + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]" + }, + { + "name": "Configuration", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Resource", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnGet", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto" + }, + { + "name": "OnCreate", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto" + }, + { + "name": "OnUpdate", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnTable", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto" + }, + { + "name": "OnCreateForm", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto" + }, + { + "name": "OnEditForm", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Config", + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Fields", + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]" + }, + { + "name": "LocalizationResource", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Value", + "type": "System.Object", + "typeSimple": "object" + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IncludeTypes", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "type": "{System.String:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}" + }, + { + "name": "Types", + "type": "{System.String:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}" + } + ] + }, + "Volo.Abp.Http.Modeling.ModuleApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RootPath", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "RemoteServiceName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Controllers", + "type": "{System.String:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}" + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ControllerName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Interfaces", + "type": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]" + }, + { + "name": "Actions", + "type": "{System.String:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}" + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Http.Modeling.ActionApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UniqueName", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "HttpMethod", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Url", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "SupportedVersions", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "ParametersOnMethod", + "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]" + }, + { + "name": "Parameters", + "type": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]" + }, + { + "name": "ReturnValue", + "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel" + } + ] + }, + "Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeAsString", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsOptional", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object" + } + ] + }, + "Volo.Abp.Http.Modeling.ParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NameOnMethod", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsOptional", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "DefaultValue", + "type": "System.Object", + "typeSimple": "object" + }, + { + "name": "ConstraintTypes", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "BindingSourceId", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "DescriptorName", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Http.Modeling.TypeApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BaseType", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "IsEnum", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "EnumNames", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "EnumValues", + "type": "[System.Object]", + "typeSimple": "[object]" + }, + { + "name": "GenericArguments", + "type": "[System.String]", + "typeSimple": "[string]" + }, + { + "name": "Properties", + "type": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]" + } + ] + }, + "Volo.Abp.Http.Modeling.PropertyApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Type", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "TypeSimple", + "type": "System.String", + "typeSimple": "string" + } + ] + } + } +} \ No newline at end of file diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/index.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/index.ts new file mode 100644 index 0000000000..12a257602f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/index.ts @@ -0,0 +1,2 @@ +export * from './models'; +export * from './tenant.service'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/models.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/models.ts new file mode 100644 index 0000000000..c084037c5b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/models.ts @@ -0,0 +1,22 @@ +import type { ExtensibleEntityDto, ExtensibleObject, PagedAndSortedResultRequestDto } from '@abp/ng.core'; + +export interface GetTenantsInput extends PagedAndSortedResultRequestDto { + filter: string; +} + +export interface TenantCreateDto extends TenantCreateOrUpdateDtoBase { + adminEmailAddress: string; + adminPassword: string; +} + +export interface TenantCreateOrUpdateDtoBase extends ExtensibleObject { + name: string; +} + +export interface TenantDto extends ExtensibleEntityDto { + name: string; +} + +// tslint:disable-next-line: no-empty-interface +export interface TenantUpdateDto extends TenantCreateOrUpdateDtoBase { +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/tenant.service.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/tenant.service.ts new file mode 100644 index 0000000000..61d1667be4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/tenant.service.ts @@ -0,0 +1,74 @@ +import type { GetTenantsInput, TenantCreateDto, TenantDto, TenantUpdateDto } from './models'; +import { RestService } from '@abp/ng.core'; +import type { PagedResultDto } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class TenantService { + apiName = 'AbpTenantManagement'; + + create = (input: TenantCreateDto) => + this.restService.request({ + method: 'POST', + url: '/api/multi-tenancy/tenants', + body: input, + }, + { apiName: this.apiName }); + + delete = (id: string) => + this.restService.request({ + method: 'DELETE', + url: `/api/multi-tenancy/tenants/${id}`, + }, + { apiName: this.apiName }); + + deleteDefaultConnectionString = (id: string) => + this.restService.request({ + method: 'DELETE', + url: `/api/multi-tenancy/tenants/${id}/default-connection-string`, + }, + { apiName: this.apiName }); + + get = (id: string) => + this.restService.request({ + method: 'GET', + url: `/api/multi-tenancy/tenants/${id}`, + }, + { apiName: this.apiName }); + + getDefaultConnectionString = (id: string) => + this.restService.request({ + method: 'GET', + responseType: 'text', + url: `/api/multi-tenancy/tenants/${id}/default-connection-string`, + }, + { apiName: this.apiName }); + + getList = (input: GetTenantsInput) => + this.restService.request>({ + method: 'GET', + url: '/api/multi-tenancy/tenants', + params: { filter: input.filter, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount }, + }, + { apiName: this.apiName }); + + update = (id: string, input: TenantUpdateDto) => + this.restService.request({ + method: 'PUT', + url: `/api/multi-tenancy/tenants/${id}`, + body: input, + }, + { apiName: this.apiName }); + + updateDefaultConnectionString = (id: string, defaultConnectionString: string) => + this.restService.request({ + method: 'PUT', + url: `/api/multi-tenancy/tenants/${id}/default-connection-string`, + params: { defaultConnectionString }, + }, + { apiName: this.apiName }); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/services/index.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/services/index.ts new file mode 100644 index 0000000000..22b8fba686 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/services/index.ts @@ -0,0 +1 @@ +export * from './tenant-management-state.service'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/services/tenant-management-state.service.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/services/tenant-management-state.service.ts new file mode 100644 index 0000000000..4475bef141 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/services/tenant-management-state.service.ts @@ -0,0 +1,41 @@ +import { Injectable } from '@angular/core'; +import { Store } from '@ngxs/store'; +import { TenantManagementState } from '../states/tenant-management.state'; +import { ABP } from '@abp/ng.core'; +import { GetTenants, GetTenantById, CreateTenant, UpdateTenant, DeleteTenant } from '../actions'; +import { TenantManagement } from '../models'; + +@Injectable({ + providedIn: 'root', +}) +export class TenantManagementStateService { + constructor(private store: Store) {} + + get() { + return this.store.selectSnapshot(TenantManagementState.get); + } + + getTenantsTotalCount() { + return this.store.selectSnapshot(TenantManagementState.getTenantsTotalCount); + } + + dispatchGetTenants(...args: ConstructorParameters) { + return this.store.dispatch(new GetTenants(...args)); + } + + dispatchGetTenantById(...args: ConstructorParameters) { + return this.store.dispatch(new GetTenantById(...args)); + } + + dispatchCreateTenant(...args: ConstructorParameters) { + return this.store.dispatch(new CreateTenant(...args)); + } + + dispatchUpdateTenant(...args: ConstructorParameters) { + return this.store.dispatch(new UpdateTenant(...args)); + } + + dispatchDeleteTenant(...args: ConstructorParameters) { + return this.store.dispatch(new DeleteTenant(...args)); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/states/index.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/states/index.ts new file mode 100644 index 0000000000..a6fb4168fe --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/states/index.ts @@ -0,0 +1 @@ +export * from './tenant-management.state'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/states/tenant-management.state.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/states/tenant-management.state.ts new file mode 100644 index 0000000000..2002afbcd9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/states/tenant-management.state.ts @@ -0,0 +1,70 @@ +import { ABP, PagedResultDto } from '@abp/ng.core'; +import { Action, Selector, State, StateContext } from '@ngxs/store'; +import { tap } from 'rxjs/operators'; +import { + CreateTenant, + DeleteTenant, + GetTenantById, + GetTenants, + UpdateTenant, +} from '../actions/tenant-management.actions'; +import { TenantManagement } from '../models/tenant-management'; +import { Injectable } from '@angular/core'; +import { TenantService } from '../proxy/tenant.service'; +import { TenantDto } from '../proxy/models'; + +@State({ + name: 'TenantManagementState', + defaults: { result: {}, selectedItem: {} } as TenantManagement.State, +}) +@Injectable() +export class TenantManagementState { + @Selector() + static get({ result }: TenantManagement.State): TenantDto[] { + return result.items || []; + } + + @Selector() + static getTenantsTotalCount({ result }: TenantManagement.State): number { + return result.totalCount; + } + + constructor(private service: TenantService) {} + + @Action(GetTenants) + get({ patchState }: StateContext, { payload }: GetTenants) { + return this.service.getList(payload).pipe( + tap(result => + patchState({ + result, + }), + ), + ); + } + + @Action(GetTenantById) + getById({ patchState }: StateContext, { payload }: GetTenantById) { + return this.service.get(payload).pipe( + tap(selectedItem => + patchState({ + selectedItem, + }), + ), + ); + } + + @Action(DeleteTenant) + delete(_, { payload }: DeleteTenant) { + return this.service.delete(payload); + } + + @Action(CreateTenant) + add(_, { payload }: CreateTenant) { + return this.service.create(payload); + } + + @Action(UpdateTenant) + update({ getState }: StateContext, { payload }: UpdateTenant) { + return this.service.update(payload.id, { ...getState().selectedItem, ...payload }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tenant-management-routing.module.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tenant-management-routing.module.ts new file mode 100644 index 0000000000..65666ea5a9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tenant-management-routing.module.ts @@ -0,0 +1,40 @@ +import { + AuthGuard, + DynamicLayoutComponent, + PermissionGuard, + ReplaceableComponents, + ReplaceableRouteContainerComponent, +} from '@abp/ng.core'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { TenantsComponent } from './components/tenants/tenants.component'; +import { eTenantManagementComponents } from './enums/components'; +import { TenantManagementExtensionsGuard } from './guards'; + +const routes: Routes = [ + { path: '', redirectTo: 'tenants', pathMatch: 'full' }, + { + path: '', + component: DynamicLayoutComponent, + canActivate: [AuthGuard, PermissionGuard, TenantManagementExtensionsGuard], + children: [ + { + path: 'tenants', + component: ReplaceableRouteContainerComponent, + data: { + requiredPolicy: 'AbpTenantManagement.Tenants', + replaceableComponent: { + key: eTenantManagementComponents.Tenants, + defaultComponent: TenantsComponent, + } as ReplaceableComponents.RouteData, + }, + }, + ], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class TenantManagementRoutingModule {} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts new file mode 100644 index 0000000000..e349b9b820 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts @@ -0,0 +1,73 @@ +import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; +import { FeatureManagementModule } from '@abp/ng.feature-management'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { UiExtensionsModule } from '@abp/ng.theme.shared/extensions'; +import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; +import { NgxsModule } from '@ngxs/store'; +import { TenantsComponent } from './components/tenants/tenants.component'; +import { TenantManagementExtensionsGuard } from './guards/extensions.guard'; +import { TenantManagementConfigOptions } from './models/config-options'; +import { TenantManagementState } from './states/tenant-management.state'; +import { TenantManagementRoutingModule } from './tenant-management-routing.module'; +import { + TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, + TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, +} from './tokens/extensions.token'; + +@NgModule({ + declarations: [TenantsComponent], + exports: [TenantsComponent], + imports: [ + TenantManagementRoutingModule, + NgxsModule.forFeature([TenantManagementState]), + NgxValidateCoreModule, + CoreModule, + ThemeSharedModule, + NgbDropdownModule, + FeatureManagementModule, + UiExtensionsModule, + ], +}) +export class TenantManagementModule { + static forChild( + options: TenantManagementConfigOptions = {}, + ): ModuleWithProviders { + return { + ngModule: TenantManagementModule, + providers: [ + { + provide: TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, + useValue: options.entityActionContributors, + }, + { + provide: TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, + useValue: options.toolbarActionContributors, + }, + { + provide: TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, + useValue: options.entityPropContributors, + }, + { + provide: TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, + useValue: options.createFormPropContributors, + }, + { + provide: TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, + useValue: options.editFormPropContributors, + }, + TenantManagementExtensionsGuard, + ], + }; + } + + static forLazy( + options: TenantManagementConfigOptions = {}, + ): NgModuleFactory { + return new LazyModuleFactory(TenantManagementModule.forChild(options)); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tests/tenant-management-state.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tests/tenant-management-state.service.spec.ts new file mode 100644 index 0000000000..befd819b70 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tests/tenant-management-state.service.spec.ts @@ -0,0 +1,61 @@ +import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; +import { TenantManagementStateService } from '../services/tenant-management-state.service'; +import { TenantManagementState } from '../states/tenant-management.state'; +import { Store } from '@ngxs/store'; +import * as TenantManagementActions from '../actions'; + +describe('TenantManagementStateService', () => { + let service: TenantManagementStateService; + let spectator: SpectatorService; + let store: SpyObject; + + const createService = createServiceFactory({ + service: TenantManagementStateService, + mocks: [Store], + }); + beforeEach(() => { + spectator = createService(); + service = spectator.service; + store = spectator.inject(Store); + }); + + test('should have the all TenantManagementState static methods', () => { + const reg = /(?<=static )(.*)(?=\()/gm; + TenantManagementState.toString() + .match(reg) + .forEach(fnName => { + expect(service[fnName]).toBeTruthy(); + + const spy = jest.spyOn(store, 'selectSnapshot'); + spy.mockClear(); + + const isDynamicSelector = TenantManagementState[fnName].name !== 'memoized'; + + if (isDynamicSelector) { + TenantManagementState[fnName] = jest.fn((...args) => args); + service[fnName]('test', 0, {}); + expect(TenantManagementState[fnName]).toHaveBeenCalledWith('test', 0, {}); + } else { + service[fnName](); + expect(spy).toHaveBeenCalledWith(TenantManagementState[fnName]); + } + }); + }); + + test('should have a dispatch method for every TenantManagementState action', () => { + const reg = /(?<=dispatch)(\w+)(?=\()/gm; + TenantManagementStateService.toString() + .match(reg) + .forEach(fnName => { + expect(TenantManagementActions[fnName]).toBeTruthy(); + + const spy = jest.spyOn(store, 'dispatch'); + spy.mockClear(); + + const params = Array.from(new Array(TenantManagementActions[fnName].length)); + + service[`dispatch${fnName}`](...params); + expect(spy).toHaveBeenCalledWith(new TenantManagementActions[fnName](...params)); + }); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tokens/extensions.token.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tokens/extensions.token.ts new file mode 100644 index 0000000000..fb79b126d9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tokens/extensions.token.ts @@ -0,0 +1,74 @@ +import { + CreateFormPropContributorCallback, + EditFormPropContributorCallback, + EntityActionContributorCallback, + EntityPropContributorCallback, + ToolbarActionContributorCallback, +} from '@abp/ng.theme.shared/extensions'; +import { InjectionToken } from '@angular/core'; +import { DEFAULT_TENANTS_ENTITY_ACTIONS } from '../defaults/default-tenants-entity-actions'; +import { DEFAULT_TENANTS_ENTITY_PROPS } from '../defaults/default-tenants-entity-props'; +import { + DEFAULT_TENANTS_CREATE_FORM_PROPS, + DEFAULT_TENANTS_EDIT_FORM_PROPS, +} from '../defaults/default-tenants-form-props'; +import { DEFAULT_TENANTS_TOOLBAR_ACTIONS } from '../defaults/default-tenants-toolbar-actions'; +import { eTenantManagementComponents } from '../enums/components'; +import { TenantCreateDto, TenantDto, TenantUpdateDto } from '../proxy/models'; + +export const DEFAULT_TENANT_MANAGEMENT_ENTITY_ACTIONS = { + [eTenantManagementComponents.Tenants]: DEFAULT_TENANTS_ENTITY_ACTIONS, +}; + +export const DEFAULT_TENANT_MANAGEMENT_TOOLBAR_ACTIONS = { + [eTenantManagementComponents.Tenants]: DEFAULT_TENANTS_TOOLBAR_ACTIONS, +}; + +export const DEFAULT_TENANT_MANAGEMENT_ENTITY_PROPS = { + [eTenantManagementComponents.Tenants]: DEFAULT_TENANTS_ENTITY_PROPS, +}; + +export const DEFAULT_TENANT_MANAGEMENT_CREATE_FORM_PROPS = { + [eTenantManagementComponents.Tenants]: DEFAULT_TENANTS_CREATE_FORM_PROPS, +}; + +export const DEFAULT_TENANT_MANAGEMENT_EDIT_FORM_PROPS = { + [eTenantManagementComponents.Tenants]: DEFAULT_TENANTS_EDIT_FORM_PROPS, +}; + +export const TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS = new InjectionToken( + 'TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS', +); + +export const TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS = new InjectionToken( + 'TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS', +); + +export const TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS = new InjectionToken( + 'TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS', +); + +export const TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS = new InjectionToken( + 'TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS', +); + +export const TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS = new InjectionToken( + 'TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS', +); + +// Fix for TS4023 -> https://github.com/microsoft/TypeScript/issues/9944#issuecomment-254693497 +type EntityActionContributors = Partial<{ + [eTenantManagementComponents.Tenants]: EntityActionContributorCallback[]; +}>; +type ToolbarActionContributors = Partial<{ + [eTenantManagementComponents.Tenants]: ToolbarActionContributorCallback[]; +}>; +type EntityPropContributors = Partial<{ + [eTenantManagementComponents.Tenants]: EntityPropContributorCallback[]; +}>; +type CreateFormPropContributors = Partial<{ + [eTenantManagementComponents.Tenants]: CreateFormPropContributorCallback[]; +}>; +type EditFormPropContributors = Partial<{ + [eTenantManagementComponents.Tenants]: EditFormPropContributorCallback[]; +}>; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tokens/index.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tokens/index.ts new file mode 100644 index 0000000000..33233400a2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tokens/index.ts @@ -0,0 +1 @@ +export * from './extensions.token'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/public-api.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/public-api.ts new file mode 100644 index 0000000000..e012a538b4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/public-api.ts @@ -0,0 +1,10 @@ +export * from './lib/actions'; +export * from './lib/components'; +export * from './lib/enums'; +export * from './lib/guards'; +export * from './lib/models'; +export * from './lib/proxy'; +export * from './lib/services'; +export * from './lib/states'; +export * from './lib/tenant-management.module'; +export * from './lib/tokens'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.json new file mode 100644 index 0000000000..62ebbd9464 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.lib.json new file mode 100644 index 0000000000..bbcc12b1c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.lib.prod.json new file mode 100644 index 0000000000..331d0ecb05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial", + "enableIvy": false + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index dd1e858d7c..e472bc62e4 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -15,8 +15,6 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { - "@abp/ng.identity": ["dist/packages/identity/"], - "@abp/ng.identity/config": ["dist/packages/identity/config"], "@abp/ng.account": ["dist/packages/account"], "@abp/ng.account.core": ["dist/packages/account-core"], "@abp/ng.account/config": ["dist/packages/account/config"], @@ -27,6 +25,8 @@ "@abp/ng.core/locale": ["dist/packages/core/locale"], "@abp/ng.core/testing": ["dist/packages/core/testing"], "@abp/ng.feature-management": ["dist/packages/feature-management"], + "@abp/ng.identity": ["dist/packages/identity/"], + "@abp/ng.identity/config": ["dist/packages/identity/config"], "@abp/ng.permission-management": ["dist/packages/permission-management"], "@abp/ng.setting-management": ["dist/packages/setting-management"], "@abp/ng.setting-management/config": [ @@ -38,7 +38,9 @@ "@abp/ng.theme.shared/extensions": [ "dist/packages/theme-shared/extensions" ], - "@abp/ng.theme.shared/testing": ["dist/packages/theme-shared/testing"] + "@abp/ng.theme.shared/testing": ["dist/packages/theme-shared/testing"], + "@abp/ng.tenant-management": ["dist/packages/tenant-management"], + "@abp/ng.tenant-management/config": ["dist/packages/tenant-management/config"] } }, "exclude": ["node_modules", "tmp"] From 48ec2890e2175df87d9012d7f4a428e7bff98f64 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 16 Aug 2021 09:45:30 +0300 Subject: [PATCH 15/56] add schematics package to nx workspace --- npm/ng-packs/nx/ng-packs/angular.json | 25 + npm/ng-packs/nx/ng-packs/nx.json | 3 + npm/ng-packs/nx/ng-packs/package.json | 3 +- .../packages/schematics/.eslintrc.json | 36 + .../ng-packs/packages/schematics/.gitignore | 18 + .../ng-packs/packages/schematics/.npmignore | 3 + .../nx/ng-packs/packages/schematics/README.md | 3 + .../packages/schematics/jest.config.js | 20 + .../ng-packs/packages/schematics/package.json | 29 + .../packages/schematics/src/collection.json | 29 + .../__name@kebab__.enum.ts.template | 8 + .../__namespace@dir__/models.ts.template | 10 + .../__name@kebab__.service.ts.template | 25 + .../schematics/src/commands/api/index.ts | 172 + .../schematics/src/commands/api/schema.json | 45 + .../src/commands/proxy-add/index.ts | 59 + .../src/commands/proxy-add/schema.json | 45 + .../src/commands/proxy-index/index.ts | 20 + .../src/commands/proxy-index/schema.json | 18 + .../src/commands/proxy-refresh/index.ts | 45 + .../src/commands/proxy-refresh/schema.json | 45 + .../src/commands/proxy-remove/index.ts | 50 + .../src/commands/proxy-remove/schema.json | 45 + .../packages/schematics/src/constants/api.ts | 1 + .../schematics/src/constants/index.ts | 4 + .../schematics/src/constants/proxy.ts | 22 + .../schematics/src/constants/system-types.ts | 24 + .../packages/schematics/src/constants/volo.ts | 1 + .../schematics/src/enums/binding-source-id.ts | 6 + .../schematics/src/enums/exception.ts | 16 + .../schematics/src/enums/import-keyword.ts | 4 + .../packages/schematics/src/enums/index.ts | 4 + .../schematics/src/enums/method-modifier.ts | 6 + .../ng-packs/packages/schematics/src/index.ts | 1 + .../schematics/src/lib/schematics.module.ts | 7 + .../schematics/src/mocks/api-definition.json | 4859 +++++++++++++++++ .../schematics/src/models/api-definition.ts | 83 + .../src/models/generate-proxy-schema.ts | 21 + .../packages/schematics/src/models/import.ts | 16 + .../packages/schematics/src/models/index.ts | 10 + .../packages/schematics/src/models/method.ts | 84 + .../packages/schematics/src/models/model.ts | 97 + .../packages/schematics/src/models/project.ts | 6 + .../schematics/src/models/proxy-config.ts | 5 + .../packages/schematics/src/models/service.ts | 27 + .../packages/schematics/src/models/tree.ts | 1 + .../packages/schematics/src/models/util.ts | 16 + .../packages/schematics/src/test-setup.ts | 1 + .../schematics/src/utils/angular/README.md | 5 + .../schematics/src/utils/angular/ast-utils.ts | 753 +++ .../schematics/src/utils/angular/change.ts | 127 + .../schematics/src/utils/angular/config.ts | 532 ++ .../src/utils/angular/dependencies.ts | 76 + .../src/utils/angular/find-module.ts | 151 + .../schematics/src/utils/angular/index.ts | 17 + .../schematics/src/utils/angular/json-file.ts | 82 + .../src/utils/angular/json-utils.ts | 231 + .../src/utils/angular/latest-versions.ts | 26 + .../schematics/src/utils/angular/lint-fix.ts | 51 + .../src/utils/angular/ng-ast-utils.ts | 87 + .../src/utils/angular/parse-name.ts | 25 + .../schematics/src/utils/angular/paths.ts | 19 + .../src/utils/angular/project-targets.ts | 13 + .../schematics/src/utils/angular/tsconfig.ts | 70 + .../src/utils/angular/validation.ts | 77 + .../src/utils/angular/workspace-models.ts | 179 + .../schematics/src/utils/angular/workspace.ts | 91 + .../packages/schematics/src/utils/api.ts | 6 + .../packages/schematics/src/utils/ast.ts | 37 + .../packages/schematics/src/utils/barrel.ts | 99 + .../packages/schematics/src/utils/common.ts | 35 + .../packages/schematics/src/utils/enum.ts | 47 + .../packages/schematics/src/utils/file.ts | 8 + .../packages/schematics/src/utils/generics.ts | 100 + .../packages/schematics/src/utils/import.ts | 11 + .../packages/schematics/src/utils/index.ts | 19 + .../packages/schematics/src/utils/model.ts | 177 + .../schematics/src/utils/namespace.ts | 20 + .../packages/schematics/src/utils/path.ts | 39 + .../packages/schematics/src/utils/rule.ts | 35 + .../packages/schematics/src/utils/service.ts | 122 + .../packages/schematics/src/utils/source.ts | 190 + .../packages/schematics/src/utils/text.ts | 56 + .../packages/schematics/src/utils/tree.ts | 71 + .../packages/schematics/src/utils/type.ts | 114 + .../schematics/src/utils/workspace.ts | 66 + .../packages/schematics/tsconfig.json | 24 + .../packages/schematics/tsconfig.spec.json | 10 + npm/ng-packs/nx/ng-packs/tsconfig.base.json | 8 +- 89 files changed, 9980 insertions(+), 4 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/.eslintrc.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/.gitignore create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/.npmignore create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/jest.config.js create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/package.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/collection.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/files-enum/proxy/__namespace@dir__/__name@kebab__.enum.ts.template create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/files-model/proxy/__namespace@dir__/models.ts.template create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/files-service/proxy/__namespace@dir__/__name@kebab__.service.ts.template create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/schema.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-add/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-add/schema.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-index/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-index/schema.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-refresh/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-remove/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/proxy.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/system-types.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/volo.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/binding-source-id.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/exception.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/import-keyword.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/method-modifier.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/lib/schematics.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/mocks/api-definition.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/models/api-definition.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/models/generate-proxy-schema.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/models/import.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/models/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/models/method.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/models/model.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/models/project.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/models/proxy-config.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/models/service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/models/tree.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/models/util.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/test-setup.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/README.md create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/ast-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/change.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/config.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/dependencies.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/find-module.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-file.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/latest-versions.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/lint-fix.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/ng-ast-utils.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/parse-name.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/paths.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/project-targets.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/tsconfig.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/validation.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace-models.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/api.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/ast.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/barrel.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/common.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/enum.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/file.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/generics.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/import.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/index.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/model.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/namespace.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/path.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/rule.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/service.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/source.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/text.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/tree.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/type.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/workspace.ts create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/packages/schematics/tsconfig.spec.json diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index b25e385ea6..42eb653191 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -407,6 +407,31 @@ } } }, + "schematics": { + "projectType": "library", + "root": "packages/schematics", + "sourceRoot": "packages/schematics/src", + "prefix": "abp", + "architect": { + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/packages/schematics"], + "options": { + "jestConfig": "packages/schematics/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "packages/schematics/src/**/*.ts", + "packages/schematics/src/**/*.html" + ] + } + } + } + }, "setting-management": { "projectType": "library", "root": "packages/setting-management", diff --git a/npm/ng-packs/nx/ng-packs/nx.json b/npm/ng-packs/nx/ng-packs/nx.json index cdaaab6821..9e5e5a77da 100644 --- a/npm/ng-packs/nx/ng-packs/nx.json +++ b/npm/ng-packs/nx/ng-packs/nx.json @@ -65,6 +65,9 @@ "tags": [], "implicitDependencies": ["core", "theme-shared"] }, + "schematics": { + "tags": [] + }, "setting-management": { "tags": [], "implicitDependencies": ["core", "theme-shared", "components"] diff --git a/npm/ng-packs/nx/ng-packs/package.json b/npm/ng-packs/nx/ng-packs/package.json index 8661e6fde1..184de83209 100644 --- a/npm/ng-packs/nx/ng-packs/package.json +++ b/npm/ng-packs/nx/ng-packs/package.json @@ -25,7 +25,8 @@ "update": "nx migrate latest", "workspace-generator": "nx workspace-generator", "dep-graph": "nx dep-graph", - "help": "nx help" + "help": "nx help", + "build-all-packages": "nx run-many --target=build --all --exclude=dev-app" }, "private": true, "devDependencies": { diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/schematics/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/.gitignore b/npm/ng-packs/nx/ng-packs/packages/schematics/.gitignore new file mode 100644 index 0000000000..82677b5884 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/.gitignore @@ -0,0 +1,18 @@ +# Outputs +src/**/*.js +src/**/*.js.map +src/**/*.d.ts + +# IDEs +.idea/ +jsconfig.json +.vscode/ + +# Misc +node_modules/ +npm-debug.log* +yarn-error.log* + +# Mac OSX Finder files. +**/.DS_Store +.DS_Store diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/.npmignore b/npm/ng-packs/nx/ng-packs/packages/schematics/.npmignore new file mode 100644 index 0000000000..c55ccfc3f5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/.npmignore @@ -0,0 +1,3 @@ +# Ignores TypeScript files, but keeps definitions. +*.ts +!*.d.ts diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/README.md b/npm/ng-packs/nx/ng-packs/packages/schematics/README.md new file mode 100644 index 0000000000..19e68b6796 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/README.md @@ -0,0 +1,3 @@ +# ABP Suite Schematics + +TODO: Add usage and development information diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/jest.config.js b/npm/ng-packs/nx/ng-packs/packages/schematics/jest.config.js new file mode 100644 index 0000000000..341a57e917 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'schematics', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/packages/schematics', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/package.json b/npm/ng-packs/nx/ng-packs/packages/schematics/package.json new file mode 100644 index 0000000000..d8b7cb50d2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/package.json @@ -0,0 +1,29 @@ +{ + "name": "@abp/ng.schematics", + "version": "4.4.0", + "description": "Schematics that works with ABP Backend", + "keywords": [ + "schematics" + ], + "author": "", + "license": "MIT", + "schematics": "./collection.json", + "dependencies": { + "@angular-devkit/core": "~11.0.2", + "@angular-devkit/schematics": "~11.0.2", + "got": "^11.5.2", + "jsonc-parser": "^2.3.0", + "should-quote": "^1.0.0", + "typescript": "~3.9.2" + }, + "devDependencies": { + "@schematics/angular": "~11.0.2", + "@types/jest": "^26.0.0", + "@types/node": "^12.11.1", + "jest": "^26.0.0", + "jest-preset-angular": "^8.2.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/collection.json b/npm/ng-packs/nx/ng-packs/packages/schematics/src/collection.json new file mode 100644 index 0000000000..0b1b738e08 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/collection.json @@ -0,0 +1,29 @@ +{ + "schematics": { + "proxy-add": { + "description": "ABP Proxy Generator Add Schematics", + "factory": "./commands/proxy-add", + "schema": "./commands/proxy-add/schema.json" + }, + "proxy-index": { + "description": "ABP Proxy Generator Index Schematics", + "factory": "./commands/proxy-index", + "schema": "./commands/proxy-index/schema.json" + }, + "proxy-refresh": { + "description": "ABP Proxy Generator Refresh Schematics", + "factory": "./commands/proxy-refresh", + "schema": "./commands/proxy-refresh/schema.json" + }, + "proxy-remove": { + "description": "ABP Proxy Generator Remove Schematics", + "factory": "./commands/proxy-remove", + "schema": "./commands/proxy-remove/schema.json" + }, + "api": { + "description": "ABP API Generator Schematics", + "factory": "./commands/api", + "schema": "./commands/api/schema.json" + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/files-enum/proxy/__namespace@dir__/__name@kebab__.enum.ts.template b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/files-enum/proxy/__namespace@dir__/__name@kebab__.enum.ts.template new file mode 100644 index 0000000000..8b4254090d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/files-enum/proxy/__namespace@dir__/__name@kebab__.enum.ts.template @@ -0,0 +1,8 @@ +import { mapEnumToOptions } from '@abp/ng.core'; + +export enum <%= name %> {<% + for (let member of members) { %> + <%= member.key %> = <%= quote(member.value) %>,<% } %> +} + +export const <%= camel(name) %>Options = mapEnumToOptions(<%= name %>); diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/files-model/proxy/__namespace@dir__/models.ts.template b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/files-model/proxy/__namespace@dir__/models.ts.template new file mode 100644 index 0000000000..c5790647c5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/files-model/proxy/__namespace@dir__/models.ts.template @@ -0,0 +1,10 @@ +<% +for (const {keyword, specifiers, path} of imports) { +%><%= keyword %> { <%= specifiers.join(', ') %> } from '<%= path %>'; +<% } +for (let {base, identifier, properties} of interfaces) { %> +export interface <%= identifier %> <%= base ? `extends ${base} ` : '' %>{<% + for (let {name, optional, type} of properties) { %> + <%= name + optional %>: <%= type %>;<% } %> +} +<% } %> \ No newline at end of file diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/files-service/proxy/__namespace@dir__/__name@kebab__.service.ts.template b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/files-service/proxy/__namespace@dir__/__name@kebab__.service.ts.template new file mode 100644 index 0000000000..78fb27c33d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/files-service/proxy/__namespace@dir__/__name@kebab__.service.ts.template @@ -0,0 +1,25 @@ +<% for (const {keyword, specifiers, path} of imports) { +%><%= keyword %> { <%= specifiers.join(', ') %> } from '<%= path %>'; +<% } %> +@Injectable({ + providedIn: 'root', +}) +export class <%= name %>Service { + apiName = '<%= apiName %>';<% + for (let {body, signature} of methods) { %> + + <%= camel(signature.name) %> = (<%= serializeParameters(signature.parameters) %>) => + this.restService.request<<%= body.requestType %>, <%= body.responseType %>>({ + method: '<%= body.method %>',<% + if (body.responseType === 'string') { %> + responseType: 'text',<% } %> + url: <%= body.url %>,<% + if (body.params.length) { %> + params: { <%= body.params.join(', ') %> },<% } + if (body.body) { %> + body: <%= body.body %>,<% } %> + }, + { apiName: this.apiName });<% } %> + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/index.ts new file mode 100644 index 0000000000..f8954beb16 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/index.ts @@ -0,0 +1,172 @@ +import { normalize } from '@angular-devkit/core'; +import { + applyTemplates, + branchAndMerge, + chain, + move, + SchematicContext, + SchematicsException, + Tree, + url, +} from '@angular-devkit/schematics'; +import { Exception } from '../../enums'; +import { GenerateProxySchema, ServiceGeneratorParams } from '../../models'; +import { + applyWithOverwrite, + buildDefaultPath, + createControllerToServiceMapper, + createImportRefsToModelReducer, + createImportRefToEnumMapper, + createProxyConfigReader, + createProxyConfigWriterCreator, + createRootNamespaceGetter, + EnumGeneratorParams, + generateProxyConfigJson, + getEnumNamesFromImports, + interpolate, + ModelGeneratorParams, + removeDefaultPlaceholders, + resolveProject, + serializeParameters, +} from '../../utils'; +import * as cases from '../../utils/text'; + +export default function(schema: GenerateProxySchema) { + const params = removeDefaultPlaceholders(schema); + const moduleName = params.module || 'app'; + + return chain([ + async (tree: Tree, _context: SchematicContext) => { + const getRootNamespace = createRootNamespaceGetter(params); + const solution = await getRootNamespace(tree); + + const target = await resolveProject(tree, params.target!); + const targetPath = buildDefaultPath(target.definition); + const readProxyConfig = createProxyConfigReader(targetPath); + const createProxyConfigWriter = createProxyConfigWriterCreator(targetPath); + const data = readProxyConfig(tree); + const types = data.types; + const modules = data.modules; + if (!types || !modules) throw new SchematicsException(Exception.InvalidApiDefinition); + + const definition = data.modules[moduleName]; + if (!definition) + throw new SchematicsException(interpolate(Exception.InvalidModule, moduleName)); + + const apiName = definition.remoteServiceName; + const controllers = Object.values(definition.controllers || {}); + const serviceImports: Record = {}; + const generateServices = createServiceGenerator({ + targetPath, + solution, + types, + apiName, + controllers, + serviceImports, + }); + + const modelImports: Record = {}; + const generateModels = createModelGenerator({ + targetPath, + solution, + types, + serviceImports, + modelImports, + }); + + const generateEnums = createEnumGenerator({ + targetPath, + solution, + types, + serviceImports, + modelImports, + }); + + if (!data.generated.includes(moduleName)) data.generated.push(moduleName); + data.generated.sort(); + const json = generateProxyConfigJson(data); + const overwriteProxyConfig = createProxyConfigWriter('overwrite', json); + + return branchAndMerge( + chain([generateServices, generateModels, generateEnums, overwriteProxyConfig]), + ); + }, + ]); +} + +function createEnumGenerator(params: EnumGeneratorParams) { + const { targetPath, serviceImports, modelImports } = params; + const mapImportRefToEnum = createImportRefToEnumMapper(params); + const enumRefs = [ + ...new Set([ + ...getEnumNamesFromImports(serviceImports), + ...getEnumNamesFromImports(modelImports), + ]), + ]; + + return chain( + enumRefs.map(ref => { + return applyWithOverwrite(url('./files-enum'), [ + applyTemplates({ + ...cases, + ...mapImportRefToEnum(ref), + }), + move(normalize(targetPath)), + ]); + }), + ); +} + +function createModelGenerator(params: ModelGeneratorParams) { + const { targetPath, serviceImports, modelImports } = params; + const reduceImportRefsToModels = createImportRefsToModelReducer(params); + const models = Object.values(serviceImports).reduce(reduceImportRefsToModels, []); + models.forEach(({ imports }) => + imports.forEach(({ refs, path }) => + refs.forEach(ref => { + if (path === '@abp/ng.core') return; + if (!modelImports[path]) return (modelImports[path] = [ref]); + modelImports[path] = [...new Set([...modelImports[path], ref])]; + }), + ), + ); + + return chain( + models.map(model => + applyWithOverwrite(url('./files-model'), [ + applyTemplates({ + ...cases, + ...model, + }), + move(normalize(targetPath)), + ]), + ), + ); +} + +function createServiceGenerator(params: ServiceGeneratorParams) { + const { targetPath, controllers, serviceImports } = params; + const mapControllerToService = createControllerToServiceMapper(params); + + return chain( + controllers.map(controller => { + const service = mapControllerToService(controller); + service.imports.forEach(({ refs, path }) => + refs.forEach(ref => { + if (path === '@abp/ng.core') return; + if (!serviceImports[path]) return (serviceImports[path] = [ref]); + serviceImports[path] = [...new Set([...serviceImports[path], ref])]; + }), + ); + + return applyWithOverwrite(url('./files-service'), [ + applyTemplates({ + ...cases, + serializeParameters, + ...service, + }), + move(normalize(targetPath)), + ]); + }), + ); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/schema.json b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/schema.json new file mode 100644 index 0000000000..d003d3a4b2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/schema.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "SchematicsAbpGenerateAPI", + "title": "ABP Generate API Schema", + "type": "object", + "properties": { + "module": { + "description": "Backend module name", + "type": "string", + "$default": { + "$source": "argv", + "index": 0 + }, + "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": { + "description": "Source Angular project for API definition URL & root namespace resolution", + "type": "string", + "$default": { + "$source": "argv", + "index": 2 + }, + "x-prompt": "Please 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": "Please enter target Angular project to place the generated code. (default: workspace \"defaultProject\")" + } + }, + "required": [] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-add/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-add/index.ts new file mode 100644 index 0000000000..a8387045f9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-add/index.ts @@ -0,0 +1,59 @@ +import { chain, SchematicContext, Tree } from '@angular-devkit/schematics'; +import { GenerateProxySchema } from '../../models'; +import { + buildDefaultPath, + createApiDefinitionGetter, + createApisGenerator, + createProxyClearer, + createProxyConfigReader, + createProxyConfigSaver, + createProxyIndexGenerator, + createProxyWarningSaver, + mergeAndAllowDelete, + removeDefaultPlaceholders, + resolveProject, +} from '../../utils'; + +export default function(schema: GenerateProxySchema) { + const params = removeDefaultPlaceholders(schema); + const moduleName = params.module || 'app'; + + return chain([ + async (host: Tree, _context: SchematicContext) => { + const target = await resolveProject(host, params.target!); + const targetPath = buildDefaultPath(target.definition); + const readProxyConfig = createProxyConfigReader(targetPath); + let generated: string[] = []; + + try { + generated = readProxyConfig(host).generated; + const index = generated.findIndex(m => m === moduleName); + if (index < 0) generated.push(moduleName); + } catch (_) { + generated.push(moduleName); + } + + const getApiDefinition = createApiDefinitionGetter(params); + const data = { generated, ...(await getApiDefinition(host)) }; + data.generated = []; + + const clearProxy = createProxyClearer(targetPath); + + const saveProxyConfig = createProxyConfigSaver(data, targetPath); + + const saveProxyWarning = createProxyWarningSaver(targetPath); + + const generateApis = createApisGenerator(schema, generated); + + const generateIndex = createProxyIndexGenerator(targetPath); + + return chain([ + mergeAndAllowDelete(host, clearProxy), + saveProxyConfig, + saveProxyWarning, + generateApis, + generateIndex, + ]); + }, + ]); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-add/schema.json b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-add/schema.json new file mode 100644 index 0000000000..8ac8fb2b68 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-add/schema.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "SchematicsAbpGenerateProxy", + "title": "ABP Generate Proxy Schema", + "type": "object", + "properties": { + "module": { + "description": "Backend module name", + "type": "string", + "$default": { + "$source": "argv", + "index": 0 + }, + "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": { + "description": "Source Angular project for API definition URL & root namespace resolution", + "type": "string", + "$default": { + "$source": "argv", + "index": 2 + }, + "x-prompt": "Please 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": "Please enter target Angular project to place the generated code. (default: workspace \"defaultProject\")" + } + }, + "required": [] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-index/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-index/index.ts new file mode 100644 index 0000000000..85c4707daa --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-index/index.ts @@ -0,0 +1,20 @@ +import { SchematicContext, Tree } from '@angular-devkit/schematics'; +import { + buildDefaultPath, + createProxyIndexGenerator, + removeDefaultPlaceholders, + resolveProject, +} from '../../utils'; + +export default function(schema: { target?: string }) { + const params = removeDefaultPlaceholders(schema); + + return async (host: Tree, _context: SchematicContext) => { + const target = await resolveProject(host, params.target!); + const targetPath = buildDefaultPath(target.definition); + + const generateIndex = createProxyIndexGenerator(targetPath); + + return generateIndex(host); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-index/schema.json b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-index/schema.json new file mode 100644 index 0000000000..9447cd397b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-index/schema.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "SchematicsAbpIndexProxy", + "title": "ABP Index Proxy Schema", + "type": "object", + "properties": { + "target": { + "description": "Target Angular project to place the generated code", + "type": "string", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "Please enter target Angular project to place the generated code. (default: workspace \"defaultProject\")" + } + }, + "required": [] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-refresh/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-refresh/index.ts new file mode 100644 index 0000000000..1a0a5ea3be --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-refresh/index.ts @@ -0,0 +1,45 @@ +import { chain, SchematicContext, Tree } from '@angular-devkit/schematics'; +import { GenerateProxySchema } from '../../models'; +import { + buildDefaultPath, + createApiDefinitionGetter, + createApisGenerator, + createProxyClearer, + createProxyConfigReader, + createProxyConfigSaver, + createProxyIndexGenerator, + mergeAndAllowDelete, + removeDefaultPlaceholders, + resolveProject, +} from '../../utils'; + +export default function(schema: GenerateProxySchema) { + const params = removeDefaultPlaceholders(schema); + + return async (host: Tree, _context: SchematicContext) => { + const target = await resolveProject(host, params.target!); + const targetPath = buildDefaultPath(target.definition); + + const readProxyConfig = createProxyConfigReader(targetPath); + const { generated } = readProxyConfig(host); + + const getApiDefinition = createApiDefinitionGetter(params); + const data = { generated, ...(await getApiDefinition(host)) }; + data.generated = []; + + const clearProxy = createProxyClearer(targetPath); + + const saveProxyConfig = createProxyConfigSaver(data, targetPath); + + const generateApis = createApisGenerator(schema, generated); + + const generateIndex = createProxyIndexGenerator(targetPath); + + return chain([ + mergeAndAllowDelete(host, clearProxy), + saveProxyConfig, + generateApis, + generateIndex, + ]); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json new file mode 100644 index 0000000000..8ac8fb2b68 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "SchematicsAbpGenerateProxy", + "title": "ABP Generate Proxy Schema", + "type": "object", + "properties": { + "module": { + "description": "Backend module name", + "type": "string", + "$default": { + "$source": "argv", + "index": 0 + }, + "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": { + "description": "Source Angular project for API definition URL & root namespace resolution", + "type": "string", + "$default": { + "$source": "argv", + "index": 2 + }, + "x-prompt": "Please 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": "Please enter target Angular project to place the generated code. (default: workspace \"defaultProject\")" + } + }, + "required": [] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-remove/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-remove/index.ts new file mode 100644 index 0000000000..abc6d72c81 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-remove/index.ts @@ -0,0 +1,50 @@ +import { chain, SchematicContext, Tree } from '@angular-devkit/schematics'; +import { GenerateProxySchema } from '../../models'; +import { + buildDefaultPath, + createApiDefinitionGetter, + createApisGenerator, + createProxyClearer, + createProxyConfigReader, + createProxyConfigSaver, + createProxyIndexGenerator, + mergeAndAllowDelete, + removeDefaultPlaceholders, + resolveProject, +} from '../../utils'; + +export default function(schema: GenerateProxySchema) { + const params = removeDefaultPlaceholders(schema); + const moduleName = params.module || 'app'; + + return async (host: Tree, _context: SchematicContext) => { + const target = await resolveProject(host, params.target!); + const targetPath = buildDefaultPath(target.definition); + + const readProxyConfig = createProxyConfigReader(targetPath); + const { generated } = readProxyConfig(host); + + const index = generated.findIndex(m => m === moduleName); + if (index < 0) return host; + generated.splice(index, 1); + + const getApiDefinition = createApiDefinitionGetter(params); + const data = { generated, ...(await getApiDefinition(host)) }; + data.generated = []; + + const clearProxy = createProxyClearer(targetPath); + + const saveProxyConfig = createProxyConfigSaver(data, targetPath); + + const generateApis = createApisGenerator(schema, generated); + + const generateIndex = createProxyIndexGenerator(targetPath); + + return chain([ + mergeAndAllowDelete(host, clearProxy), + saveProxyConfig, + generateApis, + generateIndex, + ]); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json new file mode 100644 index 0000000000..8ac8fb2b68 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "SchematicsAbpGenerateProxy", + "title": "ABP Generate Proxy Schema", + "type": "object", + "properties": { + "module": { + "description": "Backend module name", + "type": "string", + "$default": { + "$source": "argv", + "index": 0 + }, + "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": { + "description": "Source Angular project for API definition URL & root namespace resolution", + "type": "string", + "$default": { + "$source": "argv", + "index": 2 + }, + "x-prompt": "Please 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": "Please enter target Angular project to place the generated code. (default: workspace \"defaultProject\")" + } + }, + "required": [] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/api.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/api.ts new file mode 100644 index 0000000000..fdd0c05ded --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/api.ts @@ -0,0 +1 @@ +export const API_DEFINITION_ENDPOINT = '/api/abp/api-definition'; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/index.ts new file mode 100644 index 0000000000..cd95fb5201 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/index.ts @@ -0,0 +1,4 @@ +export * from './api'; +export * from './proxy'; +export * from './system-types'; +export * from './volo'; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/proxy.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/proxy.ts new file mode 100644 index 0000000000..7e159090e1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/proxy.ts @@ -0,0 +1,22 @@ +export const PROXY_PATH = '/proxy'; +export const PROXY_CONFIG_PATH = `${PROXY_PATH}/generate-proxy.json`; +export const PROXY_WARNING_PATH = `${PROXY_PATH}/README.md`; + +export const PROXY_WARNING = `# Proxy Generation Output + +This directory includes the output of the latest proxy generation. +The files and folders in it will be overwritten when proxy generation is run again. +Therefore, please do not place your own content in this folder. + +In addition, \`generate-proxy.json\` works like a lock file. +It includes information used by the proxy generator, so please do not delete or modify it. + +Finally, the name of the files and folders should not be changed for two reasons: +- Proxy generator will keep creating them at those paths and you will have multiple copies of the same content. +- ABP Suite generates files which include imports from this folder. + +> **Important Notice:** If you are building a module and are planning to publish to npm, +> some of the generated proxies are likely to be exported from public-api.ts file. In such a case, +> please make sure you export files directly and not from barrel exports. In other words, +> do not include index.ts exports in your public-api.ts exports. +`; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/system-types.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/system-types.ts new file mode 100644 index 0000000000..19a8eee259 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/system-types.ts @@ -0,0 +1,24 @@ +export const SYSTEM_TYPES = new Map([ + ['Bool', 'boolean'], + ['Byte', 'number'], + ['Char', 'string'], + ['Collections.Generic.Dictionary', 'Record'], + ['DateTime', 'string'], + ['DateTimeOffset', 'string'], + ['Decimal', 'number'], + ['Double', 'number'], + ['Guid', 'string'], + ['Int16', 'number'], + ['Int32', 'number'], + ['Int64', 'number'], + ['Net.HttpStatusCode', 'number'], + ['Object', 'object'], + ['Sbyte', 'number'], + ['Single', 'number'], + ['String', 'string'], + ['TimeSpan', 'string'], + ['UInt16', 'number'], + ['UInt32', 'number'], + ['UInt64', 'number'], + ['Void', 'void'], +]); diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/volo.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/volo.ts new file mode 100644 index 0000000000..00fde72c79 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/constants/volo.ts @@ -0,0 +1 @@ +export const VOLO_REGEX = /^Volo\.Abp\.(Application\.Dtos|ObjectExtending)/; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/binding-source-id.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/binding-source-id.ts new file mode 100644 index 0000000000..1e4e65c5f5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/binding-source-id.ts @@ -0,0 +1,6 @@ +export enum eBindingSourceId { + Body = 'Body', + Model = 'ModelBinding', + Path = 'Path', + Query = 'Query', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/exception.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/exception.ts new file mode 100644 index 0000000000..b7b206cbf6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/exception.ts @@ -0,0 +1,16 @@ +export const enum Exception { + DirRemoveFailed = '[Directory Remove Failed] Cannot remove "{0}".', + FileNotFound = '[File Not Found] There is no file at "{0}" path.', + FileWriteFailed = '[File Write Failed] Cannot write file at "{0}".', + InvalidModule = '[Invalid Module] Backend module "{0}" does not exist in API definition.', + InvalidApiDefinition = '[Invalid API Definition] The provided API definition is invalid.', + InvalidWorkspace = '[Invalid Workspace] The angular.json should be a valid JSON file.', + NoApi = '[API Not Available] Request to {0} is unsuccessful. Please double-check the URL in the source project environment and make sure your application is up and running.', + NoProject = '[Project Not Found] Either define a default project in your workspace or specify the project name in schematics options.', + NoProxyConfig = '[Proxy Config Not Found] There is no JSON file at "{0}".', + 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}" 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/nx/ng-packs/packages/schematics/src/enums/import-keyword.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/import-keyword.ts new file mode 100644 index 0000000000..015c80814f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/import-keyword.ts @@ -0,0 +1,4 @@ +export enum eImportKeyword { + Default = 'import', + Type = 'import type', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/index.ts new file mode 100644 index 0000000000..aee862a5f5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/index.ts @@ -0,0 +1,4 @@ +export * from './binding-source-id'; +export * from './exception'; +export * from './import-keyword'; +export * from './method-modifier'; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/method-modifier.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/method-modifier.ts new file mode 100644 index 0000000000..1c10f33a67 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/enums/method-modifier.ts @@ -0,0 +1,6 @@ +export enum eMethodModifier { + Public = '', + Private = 'private ', + Async = 'async ', + PrivateAsync = 'private async ', +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/index.ts new file mode 100644 index 0000000000..cb0ff5c3b5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/lib/schematics.module.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/lib/schematics.module.ts new file mode 100644 index 0000000000..6babd84ecc --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/lib/schematics.module.ts @@ -0,0 +1,7 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +@NgModule({ + imports: [CommonModule], +}) +export class SchematicsModule {} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/mocks/api-definition.json b/npm/ng-packs/nx/ng-packs/packages/schematics/src/mocks/api-definition.json new file mode 100644 index 0000000000..b58add3d9c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/mocks/api-definition.json @@ -0,0 +1,4859 @@ +{ + "modules": { + "settingManagement": { + "rootPath": "settingManagement", + "remoteServiceName": "SettingManagement", + "controllers": { + "Volo.Abp.SettingManagement.EmailSettingsController": { + "controllerName": "EmailSettings", + "type": "Volo.Abp.SettingManagement.EmailSettingsController", + "interfaces": [{ "type": "Volo.Abp.SettingManagement.IEmailSettingsAppService" }], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/setting-management/emailing", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.SettingManagement.EmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.EmailSettingsDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "POST", + "url": "api/setting-management/emailing", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto, Volo.Abp.SettingManagement.Application.Contracts", + "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } + } + } + } + } + }, + "identity": { + "rootPath": "identity", + "remoteServiceName": "AbpIdentity", + "controllers": { + "Volo.Abp.Identity.IdentityRoleController": { + "controllerName": "IdentityRole", + "type": "Volo.Abp.Identity.IdentityRoleController", + "interfaces": [{ "type": "Volo.Abp.Identity.IIdentityRoleAppService" }], + "actions": { + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity/roles/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityRolesInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityRolesInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityRolesInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleCreateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityRoleUpdateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/roles/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } + } + } + }, + "Volo.Abp.Identity.IdentityUserController": { + "controllerName": "IdentityUser", + "type": "Volo.Abp.Identity.IdentityUserController", + "interfaces": [{ "type": "Volo.Abp.Identity.IIdentityUserAppService" }], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityUsersInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/users", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserCreateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/users/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } + }, + "GetRolesAsyncById": { + "uniqueName": "GetRolesAsyncById", + "name": "GetRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAssignableRolesAsync": { + "uniqueName": "GetAssignableRolesAsync", + "name": "GetAssignableRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/assignable-roles", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "UpdateRolesAsyncByIdAndInput": { + "uniqueName": "UpdateRolesAsyncByIdAndInput", + "name": "UpdateRolesAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateRolesDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } + }, + "FindByUsernameAsyncByUserName": { + "uniqueName": "FindByUsernameAsyncByUserName", + "name": "FindByUsernameAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "userName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "userName", + "name": "userName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "FindByEmailAsyncByEmail": { + "uniqueName": "FindByEmailAsyncByEmail", + "name": "FindByEmailAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-email/{email}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "email", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "email", + "name": "email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserLookupController": { + "controllerName": "IdentityUserLookup", + "type": "Volo.Abp.Identity.IdentityUserLookupController", + "interfaces": [{ "type": "Volo.Abp.Identity.IIdentityUserLookupAppService" }], + "actions": { + "FindByIdAsyncById": { + "uniqueName": "FindByIdAsyncById", + "name": "FindByIdAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "FindByUserNameAsyncByUserName": { + "uniqueName": "FindByUserNameAsyncByUserName", + "name": "FindByUserNameAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "userName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "userName", + "name": "userName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "SearchAsyncByInput": { + "uniqueName": "SearchAsyncByInput", + "name": "SearchAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/search", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupSearchInputDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupSearchInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupSearchInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetCountAsyncByInput": { + "uniqueName": "GetCountAsyncByInput", + "name": "GetCountAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/count", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupCountInputDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupCountInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupCountInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { "type": "System.Int64", "typeSimple": "number" } + } + } + }, + "Volo.Abp.Identity.ProfileController": { + "controllerName": "Profile", + "type": "Volo.Abp.Identity.ProfileController", + "interfaces": [{ "type": "Volo.Abp.Identity.IProfileAppService" }], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UpdateProfileDto, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "ChangePasswordAsyncByInput": { + "uniqueName": "ChangePasswordAsyncByInput", + "name": "ChangePasswordAsync", + "httpMethod": "POST", + "url": "api/identity/my-profile/change-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.ChangePasswordInput, Volo.Abp.Identity.Application.Contracts", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } + } + } + } + } + }, + "multi-tenancy": { + "rootPath": "multi-tenancy", + "remoteServiceName": "AbpTenantManagement", + "controllers": { + "Volo.Abp.TenantManagement.TenantController": { + "controllerName": "Tenant", + "type": "Volo.Abp.TenantManagement.TenantController", + "interfaces": [{ "type": "Volo.Abp.TenantManagement.ITenantAppService" }], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.GetTenantsInput, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.GetTenantsInput", + "typeSimple": "Volo.Abp.TenantManagement.GetTenantsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantCreateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantUpdateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } + }, + "GetDefaultConnectionStringAsyncById": { + "uniqueName": "GetDefaultConnectionStringAsyncById", + "name": "GetDefaultConnectionStringAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.String", "typeSimple": "string" } + }, + "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString": { + "uniqueName": "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString", + "name": "UpdateDefaultConnectionStringAsync", + "httpMethod": "PUT", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "defaultConnectionString", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "defaultConnectionString", + "name": "defaultConnectionString", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } + }, + "DeleteDefaultConnectionStringAsyncById": { + "uniqueName": "DeleteDefaultConnectionStringAsyncById", + "name": "DeleteDefaultConnectionStringAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } + } + } + } + } + }, + "featureManagement": { + "rootPath": "featureManagement", + "remoteServiceName": "AbpFeatureManagement", + "controllers": { + "Volo.Abp.FeatureManagement.FeaturesController": { + "controllerName": "Features", + "type": "Volo.Abp.FeatureManagement.FeaturesController", + "interfaces": [{ "type": "Volo.Abp.FeatureManagement.IFeatureAppService" }], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", + "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } + } + } + } + } + }, + "account": { + "rootPath": "account", + "remoteServiceName": "AbpAccount", + "controllers": { + "Volo.Abp.Account.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.AccountController", + "interfaces": [{ "type": "Volo.Abp.Account.IAccountAppService" }], + "actions": { + "RegisterAsyncByInput": { + "uniqueName": "RegisterAsyncByInput", + "name": "RegisterAsync", + "httpMethod": "POST", + "url": "api/account/register", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.RegisterDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "SendPasswordResetCodeAsyncByInput": { + "uniqueName": "SendPasswordResetCodeAsyncByInput", + "name": "SendPasswordResetCodeAsync", + "httpMethod": "POST", + "url": "api/account/send-password-reset-code", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendPasswordResetCodeDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } + }, + "ResetPasswordAsyncByInput": { + "uniqueName": "ResetPasswordAsyncByInput", + "name": "ResetPasswordAsync", + "httpMethod": "POST", + "url": "api/account/reset-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ResetPasswordDto, Volo.Abp.Account.Application.Contracts", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } + } + } + } + } + }, + "abp": { + "rootPath": "abp", + "remoteServiceName": "abp", + "controllers": { + "Pages.Abp.MultiTenancy.AbpTenantController": { + "controllerName": "AbpTenant", + "type": "Pages.Abp.MultiTenancy.AbpTenantController", + "interfaces": [{ "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" }], + "actions": { + "FindTenantByNameAsyncByName": { + "uniqueName": "FindTenantByNameAsyncByName", + "name": "FindTenantByNameAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-name/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "name", + "name": "name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + }, + "FindTenantByIdAsyncById": { + "uniqueName": "FindTenantByIdAsyncById", + "name": "FindTenantByIdAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-id/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { + "controllerName": "AbpApplicationConfiguration", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/abp/application-configuration", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { + "controllerName": "AbpApiDefinition", + "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", + "interfaces": [], + "actions": { + "GetByModel": { + "uniqueName": "GetByModel", + "name": "Get", + "httpMethod": "GET", + "url": "api/abp/api-definition", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "model", + "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "model", + "name": "IncludeTypes", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "model" + } + ], + "returnValue": { + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" + } + } + } + } + } + }, + "permissionManagement": { + "rootPath": "permissionManagement", + "remoteServiceName": "AbpPermissionManagement", + "controllers": { + "Volo.Abp.PermissionManagement.PermissionsController": { + "controllerName": "Permissions", + "type": "Volo.Abp.PermissionManagement.PermissionsController", + "interfaces": [{ "type": "Volo.Abp.PermissionManagement.IPermissionAppService" }], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", + "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } + } + } + } + } + } + }, + "types": { + "Volo.Abp.Account.RegisterDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "EmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "AppName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.ObjectExtending.ExtensibleObject": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ExtraProperties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "LockoutEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "LockoutEnd", + "jsonName": null, + "type": "System.DateTimeOffset?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": ["TPrimaryKey"], + "properties": [ + { + "name": "IsDeleted", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DeleterId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "DeletionTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": ["TPrimaryKey"], + "properties": [ + { + "name": "LastModificationTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "LastModifierId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": ["TPrimaryKey"], + "properties": [ + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "CreatorId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleEntityDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": ["TKey"], + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "TKey", + "typeSimple": "TKey", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.SendPasswordResetCodeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "AppName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "ReturnUrl", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ReturnUrlHash", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Account.ResetPasswordDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ResetToken", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Success", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.ListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": ["T"], + "properties": [ + { + "name": "Items", + "jsonName": null, + "type": "[T]", + "typeSimple": "[T]", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsDefault", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsStatic", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsPublic", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.GetIdentityRolesInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.LimitedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.LimitedResultRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DefaultMaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "MaxMaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultDto": { + "baseType": "Volo.Abp.Application.Dtos.ListResultDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": ["T"], + "properties": [ + { + "name": "TotalCount", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "IsDefault", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "IsPublic", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityRoleUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.GetIdentityUsersInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LockoutEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "RoleNames", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateDto": { + "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Password", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.IdentityUserUpdateRolesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleNames", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": true + } + ] + }, + "Volo.Abp.Users.UserData": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberConfirmed", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UserLookupSearchInputDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UserLookupCountInputDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.ProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsExternal", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "HasPassword", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.UpdateProfileDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Surname", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Identity.ChangePasswordInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CurrentPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "NewPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.PermissionManagement.GetPermissionListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EntityDisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Groups", + "jsonName": null, + "type": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Permissions", + "jsonName": null, + "type": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.PermissionGrantInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ParentName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsGranted", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "AllowedProviders", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "GrantedProviders", + "jsonName": null, + "type": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.ProviderInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ProviderName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ProviderKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Permissions", + "jsonName": null, + "type": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", + "typeSimple": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.PermissionManagement.UpdatePermissionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsGranted", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.SettingManagement.EmailSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SmtpHost", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPort", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "SmtpUserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpDomain", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpEnableSsl", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "SmtpUseDefaultCredentials", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultFromAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DefaultFromDisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.SettingManagement.UpdateEmailSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SmtpHost", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPort", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "SmtpUserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpDomain", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SmtpEnableSsl", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "SmtpUseDefaultCredentials", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultFromAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "DefaultFromDisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.TenantManagement.TenantDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.TenantManagement.GetTenantsInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.TenantManagement.TenantCreateDto": { + "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "AdminEmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + }, + { + "name": "AdminPassword", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true + } + ] + }, + "Volo.Abp.TenantManagement.TenantUpdateDto": { + "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.FeatureManagement.GetFeatureListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Groups", + "jsonName": null, + "type": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureGroupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Features", + "jsonName": null, + "type": "[Volo.Abp.FeatureManagement.FeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.FeatureDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Provider", + "jsonName": null, + "type": "Volo.Abp.FeatureManagement.FeatureProviderDto", + "typeSimple": "Volo.Abp.FeatureManagement.FeatureProviderDto", + "isRequired": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ValueType", + "jsonName": null, + "type": "Volo.Abp.Validation.StringValues.IStringValueType", + "typeSimple": "Volo.Abp.Validation.StringValues.IStringValueType", + "isRequired": false + }, + { + "name": "Depth", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false + }, + { + "name": "ParentName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.FeatureProviderDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Key", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Validation.StringValues.IStringValueType": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Item", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + }, + { + "name": "Validator", + "jsonName": null, + "type": "Volo.Abp.Validation.StringValues.IValueValidator", + "typeSimple": "Volo.Abp.Validation.StringValues.IValueValidator", + "isRequired": false + } + ] + }, + "Volo.Abp.Validation.StringValues.IValueValidator": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Item", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeaturesDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Features", + "jsonName": null, + "type": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", + "typeSimple": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", + "isRequired": false + } + ] + }, + "Volo.Abp.FeatureManagement.UpdateFeatureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Localization", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "isRequired": false + }, + { + "name": "Auth", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "isRequired": false + }, + { + "name": "Setting", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "isRequired": false + }, + { + "name": "CurrentUser", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "isRequired": false + }, + { + "name": "Features", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "isRequired": false + }, + { + "name": "MultiTenancy", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "isRequired": false + }, + { + "name": "CurrentTenant", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "isRequired": false + }, + { + "name": "Timing", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "isRequired": false + }, + { + "name": "Clock", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "isRequired": false + }, + { + "name": "ObjectExtensions", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "jsonName": null, + "type": "{System.String:System.Collections.Generic.Dictionary}", + "typeSimple": "{string:System.Collections.Generic.Dictionary}", + "isRequired": false + }, + { + "name": "Languages", + "jsonName": null, + "type": "[Volo.Abp.Localization.LanguageInfo]", + "typeSimple": "[Volo.Abp.Localization.LanguageInfo]", + "isRequired": false + }, + { + "name": "CurrentCulture", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "isRequired": false + }, + { + "name": "DefaultResourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LanguagesMap", + "jsonName": null, + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}", + "isRequired": false + }, + { + "name": "LanguageFilesMap", + "jsonName": null, + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}", + "isRequired": false + } + ] + }, + "Volo.Abp.Localization.LanguageInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "UiCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FlagIcon", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EnglishName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ThreeLetterIsoLanguageName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TwoLetterIsoLanguageName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsRightToLeft", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "NativeName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DateTimeFormat", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CalendarAlgorithmType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DateTimeFormatLong", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShortDatePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FullDateTimePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DateSeparator", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ShortTimePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "LongTimePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.NameValue": { + "baseType": "Volo.Abp.NameValue", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.NameValue": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": ["T"], + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { "name": "Value", "jsonName": null, "type": "T", "typeSimple": "T", "isRequired": false } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Policies", + "jsonName": null, + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}", + "isRequired": false + }, + { + "name": "GrantedPolicies", + "jsonName": null, + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "jsonName": null, + "type": "{System.String:System.String}", + "typeSimple": "{string:string}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAuthenticated", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Id", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SurName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "EmailVerified", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "PhoneNumberVerified", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "Roles", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "jsonName": null, + "type": "{System.String:System.String}", + "typeSimple": "{string:string}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZone", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Iana", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "isRequired": false + }, + { + "name": "Windows", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Kind", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "isRequired": false + }, + { + "name": "Enums", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Entities", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "isRequired": false + }, + { + "name": "Configuration", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Properties", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "isRequired": false + }, + { + "name": "Configuration", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "isRequired": false + }, + { + "name": "Api", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "isRequired": false + }, + { + "name": "Ui", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "isRequired": false + }, + { + "name": "Attributes", + "jsonName": null, + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "isRequired": false + }, + { + "name": "Configuration", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Resource", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnGet", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "isRequired": false + }, + { + "name": "OnCreate", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "isRequired": false + }, + { + "name": "OnUpdate", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnTable", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "isRequired": false + }, + { + "name": "OnCreateForm", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "isRequired": false + }, + { + "name": "OnEditForm", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "isRequired": false + }, + { + "name": "Lookup", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ResultListPropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DisplayPropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "ValuePropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "FilterParamName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Config", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Fields", + "jsonName": null, + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "isRequired": false + }, + { + "name": "LocalizationResource", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IncludeTypes", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "isRequired": false + }, + { + "name": "Types", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ModuleApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RootPath", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "RemoteServiceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Controllers", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ControllerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Interfaces", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "isRequired": false + }, + { + "name": "Actions", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ActionApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UniqueName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "HttpMethod", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "SupportedVersions", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "ParametersOnMethod", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "isRequired": false + }, + { + "name": "Parameters", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "isRequired": false + }, + { + "name": "ReturnValue", + "jsonName": null, + "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeAsString", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsOptional", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NameOnMethod", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "JsonName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsOptional", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false + }, + { + "name": "ConstraintTypes", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "BindingSourceId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "DescriptorName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.TypeApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BaseType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsEnum", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + }, + { + "name": "EnumNames", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "EnumValues", + "jsonName": null, + "type": "[System.Object]", + "typeSimple": "[object]", + "isRequired": false + }, + { + "name": "GenericArguments", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "isRequired": false + } + ] + }, + "Volo.Abp.Http.Modeling.PropertyApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "JsonName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "IsRequired", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false + } + ] + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/api-definition.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/api-definition.ts new file mode 100644 index 0000000000..68a607ac1c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/api-definition.ts @@ -0,0 +1,83 @@ +import { eBindingSourceId } from '../enums'; + +export interface ApiDefinition { + modules: Record; + types: Record; +} + +export interface Type { + baseType: string | null; + isEnum: boolean; + enumNames: string[] | null; + enumValues: number[] | null; + genericArguments: string[] | null; + properties: PropertyDef[] | null; +} + +export interface PropertyDef { + name: string; + jsonName: string | null; + type: string; + typeSimple: string; + isRequired: boolean; +} + +export interface Module { + rootPath: string; + remoteServiceName: string; + controllers: Record; +} + +export interface Controller { + controllerName: string; + type: string; + interfaces: InterfaceDef[]; + actions: Record; +} + +export interface InterfaceDef { + type: string; +} + +export interface Action { + uniqueName: string; + name: string; + httpMethod: string; + url: string; + supportedVersions: string[]; + parametersOnMethod: ParameterInSignature[]; + parameters: ParameterInBody[]; + returnValue: TypeDef; +} + +export interface ParameterInSignature { + name: string; + typeAsString: string; + type: string; + typeSimple: string; + isOptional: boolean; + defaultValue: any; +} + +export interface ParameterInBody { + nameOnMethod: string; + name: string; + jsonName: string | null; + type: string; + typeSimple: string; + isOptional: boolean; + defaultValue: any; + constraintTypes: string[] | null; + bindingSourceId: eBindingSourceId; + descriptorName: string; +} + +export interface TypeDef { + type: string; + typeSimple: string; +} + +export interface TypeWithEnum { + isEnum: boolean; + type: string; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/generate-proxy-schema.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/generate-proxy-schema.ts new file mode 100644 index 0000000000..5e305923c4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/generate-proxy-schema.ts @@ -0,0 +1,21 @@ +export interface GenerateProxySchema { + /** + * Backend module name + */ + module?: string; + + /** + * Backend api name, a.k.a. remoteServiceName + */ + ['api-name']?: string; + + /** + * Source Angular project for API definition URL & root namespace resolution + */ + source?: string; + + /** + * Target Angular project to place the generated code + */ + target?: string; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/import.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/import.ts new file mode 100644 index 0000000000..82dff1e7f6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/import.ts @@ -0,0 +1,16 @@ +import { eImportKeyword } from '../enums'; +import { Omissible } from './util'; + +export class Import { + alias?: string; + keyword = eImportKeyword.Default; + path: string; + refs: string[] = []; + specifiers: string[] = []; + + constructor(options: ImportOptions) { + Object.assign(this, options); + } +} + +export type ImportOptions = Omissible; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/index.ts new file mode 100644 index 0000000000..176c9c6617 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/index.ts @@ -0,0 +1,10 @@ +export * from './api-definition'; +export * from './generate-proxy-schema'; +export * from './import'; +export * from './method'; +export * from './model'; +export * from './project'; +export * from './proxy-config'; +export * from './service'; +export * from './tree'; +export * from './util'; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/method.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/method.ts new file mode 100644 index 0000000000..7259a61884 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/method.ts @@ -0,0 +1,84 @@ +import { eBindingSourceId, eMethodModifier } from '../enums'; +import { camel } from '../utils/text'; +import { ParameterInBody } from './api-definition'; +import { Property } from './model'; +import { Omissible } from './util'; +const shouldQuote = require('should-quote'); + +export class Method { + body: Body; + signature: Signature; + + constructor(options: MethodOptions) { + Object.assign(this, options); + } +} + +export type MethodOptions = Method; + +export class Signature { + generics = ''; + modifier = eMethodModifier.Public; + name: string; + parameters: Property[] = []; + returnType = ''; + + constructor(options: SignatureOptions) { + Object.assign(this, options); + } +} + +export type SignatureOptions = Omissible< + Signature, + 'generics' | 'modifier' | 'parameters' | 'returnType' +>; + +export class Body { + body?: string; + method: string; + params: string[] = []; + requestType = 'any'; + responseType: string; + url: string; + + registerActionParameter = (param: ParameterInBody) => { + const { bindingSourceId, descriptorName, jsonName, name, nameOnMethod } = param; + const camelName = camel(name); + const paramName = jsonName || camelName; + const value = descriptorName + ? shouldQuote(paramName) + ? `${descriptorName}['${paramName}']` + : `${descriptorName}.${paramName}` + : nameOnMethod; + + switch (bindingSourceId) { + case eBindingSourceId.Model: + case eBindingSourceId.Query: + this.params.push(paramName === value ? value : `${paramName}: ${value}`); + break; + case eBindingSourceId.Body: + this.body = value; + break; + case eBindingSourceId.Path: + const regex = new RegExp('{(' + paramName + '|' + camelName + '|' + name + ')}', 'g'); + this.url = this.url.replace(regex, '${' + value + '}'); + break; + default: + break; + } + }; + + constructor(options: BodyOptions) { + Object.assign(this, options); + this.setUrlQuotes(); + } + + private setUrlQuotes() { + this.url = /{/.test(this.url) ? `\`/${this.url}\`` : `'/${this.url}'`; + } +} + +export type BodyOptions = Omissible< + Omit, + 'params' | 'requestType' +>; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/model.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/model.ts new file mode 100644 index 0000000000..048c08a1b0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/model.ts @@ -0,0 +1,97 @@ +import { Import } from './import'; +import { Options } from './util'; + +export class Model { + readonly imports: Import[] = []; + readonly interfaces: Interface[] = []; + readonly namespace: string; + readonly path: string; + + constructor(options: ModelOptions) { + Object.assign(this, options); + } +} + +export type ModelOptions = Options; + +export class Interface { + readonly base: string | null; + readonly identifier: string; + readonly namespace: string; + readonly generics: Generic[] = []; + readonly properties: Property[] = []; + readonly ref: string; + + constructor(options: InterfaceOptions) { + Object.assign(this, options); + } +} + +export type InterfaceOptions = Options; + +abstract class TypeRef { + readonly refs: string[] = []; + + protected _type = ''; + get type() { + return this._type; + } + set type(value: string) { + if (!value) return; + this._type = value; + } + + protected _default = ''; + get default() { + return this._default; + } + set default(value: string) { + if (!value) return; + this._default = ` = ${value}`; + } + + constructor(options: TypeRefOptions) { + Object.assign(this, options); + } + + setDefault(value: string) { + this.default = value; + } + + setType(value: string) { + this.type = value; + } +} + +type TypeRefOptionalKeys = 'default' | 'refs'; +type TypeRefOptions = Options; + +export class Generic extends TypeRef { + constructor(options: GenericOptions) { + super(options); + } +} + +export type GenericOptions = Options; + +export class Property extends TypeRef { + readonly name: string; + private _optional: '' | '?' = ''; + get optional() { + return this.default ? '' : this._optional; + } + + set optional(value: '' | '?') { + this._optional = value; + } + + constructor(options: PropertyOptions) { + super(options); + } + + setOptional(isOptional: boolean) { + this.optional = isOptional ? '?' : ''; + } +} + +export type PropertyOptions = Options; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/project.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/project.ts new file mode 100644 index 0000000000..f4794719aa --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/project.ts @@ -0,0 +1,6 @@ +import { workspaces } from '@angular-devkit/core'; + +export interface Project { + name: string; + definition: workspaces.ProjectDefinition; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/proxy-config.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/proxy-config.ts new file mode 100644 index 0000000000..226833da12 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/proxy-config.ts @@ -0,0 +1,5 @@ +import { ApiDefinition } from './api-definition'; + +export interface ProxyConfig extends ApiDefinition { + generated: string[]; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/service.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/service.ts new file mode 100644 index 0000000000..98a18bddd8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/service.ts @@ -0,0 +1,27 @@ +import { Controller, Type } from './api-definition'; +import { Import } from './import'; +import { Method } from './method'; +import { Omissible } from './util'; + +export interface ServiceGeneratorParams { + targetPath: string; + solution: string; + types: Record; + apiName: string; + controllers: Controller[]; + serviceImports: Record; +} + +export class Service { + apiName: string; + imports: Import[] = []; + methods: Method[] = []; + name: string; + namespace: string; + + constructor(options: ServiceOptions) { + Object.assign(this, options); + } +} + +export type ServiceOptions = Omissible; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/tree.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/tree.ts new file mode 100644 index 0000000000..3c17cfcb10 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/tree.ts @@ -0,0 +1 @@ +export type WriteOp = 'create' | 'overwrite'; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/util.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/util.ts new file mode 100644 index 0000000000..0588ed7d5b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/util.ts @@ -0,0 +1,16 @@ +// Omissible (given keys will become optional) +export type Omissible = Partial> & Omit; + +// ExcludeKeys (keys will be excluded based on their type) +type ExcludeKeys = Exclude< + { + [Key in keyof Type]: Type[Key] extends Excluded ? never : Key; + }[keyof Type], + never +>; + +// tslint:disable-next-line: ban-types +type ExcludeMethods = Pick>; + +// Options (methods will be omitted, given keys will become optional) +export type Options> = Omissible, K>; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/README.md b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/README.md new file mode 100644 index 0000000000..8d98f50e2d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/README.md @@ -0,0 +1,5 @@ +**DISCLAIMER** + +This directory is a direct copy of https://github.com/angular/angular-cli/tree/master/packages/schematics/angular/utility and is used under terms and permissions by the MIT license granted by Google, Inc. + +All credits go to Angular team for building these utilities. diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/ast-utils.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/ast-utils.ts new file mode 100644 index 0000000000..6883e73360 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/ast-utils.ts @@ -0,0 +1,753 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import * as ts from 'typescript'; +import { Change, InsertChange, NoopChange } from './change'; + + +/** + * Add Import `import { symbolName } from fileName` if the import doesn't exit + * already. Assumes fileToEdit can be resolved and accessed. + * @param fileToEdit (file we want to add import to) + * @param symbolName (item to import) + * @param fileName (path to the file) + * @param isDefault (if true, import follows style for importing default exports) + * @return Change + */ +export function insertImport(source: ts.SourceFile, fileToEdit: string, symbolName: string, + fileName: string, isDefault = false): Change { + const rootNode = source; + const allImports = findNodes(rootNode, ts.SyntaxKind.ImportDeclaration); + + // get nodes that map to import statements from the file fileName + const relevantImports = allImports.filter(node => { + // StringLiteral of the ImportDeclaration is the import file (fileName in this case). + const importFiles = node.getChildren() + .filter(ts.isStringLiteral) + .map(n => n.text); + + return importFiles.filter(file => file === fileName).length === 1; + }); + + if (relevantImports.length > 0) { + let importsAsterisk = false; + // imports from import file + const imports: ts.Node[] = []; + relevantImports.forEach(n => { + Array.prototype.push.apply(imports, findNodes(n, ts.SyntaxKind.Identifier)); + if (findNodes(n, ts.SyntaxKind.AsteriskToken).length > 0) { + importsAsterisk = true; + } + }); + + // if imports * from fileName, don't add symbolName + if (importsAsterisk) { + return new NoopChange(); + } + + const importTextNodes = imports.filter(n => (n as ts.Identifier).text === symbolName); + + // insert import if it's not there + if (importTextNodes.length === 0) { + const fallbackPos = + findNodes(relevantImports[0], ts.SyntaxKind.CloseBraceToken)[0].getStart() || + findNodes(relevantImports[0], ts.SyntaxKind.FromKeyword)[0].getStart(); + + return insertAfterLastOccurrence(imports, `, ${symbolName}`, fileToEdit, fallbackPos); + } + + return new NoopChange(); + } + + // no such import declaration exists + const useStrict = findNodes(rootNode, ts.isStringLiteral) + .filter((n) => n.text === 'use strict'); + let fallbackPos = 0; + if (useStrict.length > 0) { + fallbackPos = useStrict[0].end; + } + const open = isDefault ? '' : '{ '; + const close = isDefault ? '' : ' }'; + // if there are no imports or 'use strict' statement, insert import at beginning of file + const insertAtBeginning = allImports.length === 0 && useStrict.length === 0; + const separator = insertAtBeginning ? '' : ';\n'; + const toInsert = `${separator}import ${open}${symbolName}${close}` + + ` from '${fileName}'${insertAtBeginning ? ';\n' : ''}`; + + return insertAfterLastOccurrence( + allImports, + toInsert, + fileToEdit, + fallbackPos, + ts.SyntaxKind.StringLiteral, + ); +} + + +/** + * Find all nodes from the AST in the subtree of node of SyntaxKind kind. + * @param node + * @param kind + * @param max The maximum number of items to return. + * @param recursive Continue looking for nodes of kind recursive until end + * the last child even when node of kind has been found. + * @return all nodes of kind, or [] if none is found + */ +export function findNodes(node: ts.Node, kind: ts.SyntaxKind, max?: number, recursive?: boolean): ts.Node[]; + +/** + * Find all nodes from the AST in the subtree that satisfy a type guard. + * @param node + * @param guard + * @param max The maximum number of items to return. + * @param recursive Continue looking for nodes of kind recursive until end + * the last child even when node of kind has been found. + * @return all nodes that satisfy the type guard, or [] if none is found + */ +export function findNodes(node: ts.Node, guard: (node: ts.Node) => node is T, max?: number, recursive?: boolean): T[]; + +export function findNodes( + node: ts.Node, + kindOrGuard: ts.SyntaxKind | ((node: ts.Node) => node is T), + max = Infinity, + recursive = false, +): T[] { + if (!node || max == 0) { + return []; + } + + const test = + typeof kindOrGuard === 'function' + ? kindOrGuard + : (node: ts.Node): node is T => node.kind === kindOrGuard; + + const arr: T[] = []; + if (test(node)) { + arr.push(node); + max--; + } + if (max > 0 && (recursive || !test(node))) { + for (const child of node.getChildren()) { + findNodes(child, test, max).forEach((node) => { + if (max > 0) { + arr.push(node); + } + max--; + }); + + if (max <= 0) { + break; + } + } + } + + return arr; +} + + +/** + * Get all the nodes from a source. + * @param sourceFile The source file object. + * @returns {Array} An array of all the nodes in the source. + */ +export function getSourceNodes(sourceFile: ts.SourceFile): ts.Node[] { + const nodes: ts.Node[] = [sourceFile]; + const result = []; + + while (nodes.length > 0) { + const node = nodes.shift(); + + if (node) { + result.push(node); + if (node.getChildCount(sourceFile) >= 0) { + nodes.unshift(...node.getChildren()); + } + } + } + + return result; +} + +export function findNode(node: ts.Node, kind: ts.SyntaxKind, text: string): ts.Node | null { + if (node.kind === kind && node.getText() === text) { + // throw new Error(node.getText()); + return node; + } + + let foundNode: ts.Node | null = null; + ts.forEachChild(node, childNode => { + foundNode = foundNode || findNode(childNode, kind, text); + }); + + return foundNode; +} + + +/** + * Helper for sorting nodes. + * @return function to sort nodes in increasing order of position in sourceFile + */ +function nodesByPosition(first: ts.Node, second: ts.Node): number { + return first.getStart() - second.getStart(); +} + + +/** + * Insert `toInsert` after the last occurence of `ts.SyntaxKind[nodes[i].kind]` + * or after the last of occurence of `syntaxKind` if the last occurence is a sub child + * of ts.SyntaxKind[nodes[i].kind] and save the changes in file. + * + * @param nodes insert after the last occurence of nodes + * @param toInsert string to insert + * @param file file to insert changes into + * @param fallbackPos position to insert if toInsert happens to be the first occurence + * @param syntaxKind the ts.SyntaxKind of the subchildren to insert after + * @return Change instance + * @throw Error if toInsert is first occurence but fall back is not set + */ +export function insertAfterLastOccurrence(nodes: ts.Node[], + toInsert: string, + file: string, + fallbackPos: number, + syntaxKind?: ts.SyntaxKind): Change { + let lastItem: ts.Node | undefined; + for (const node of nodes) { + if (!lastItem || lastItem.getStart() < node.getStart()) { + lastItem = node; + } + } + if (syntaxKind && lastItem) { + lastItem = findNodes(lastItem, syntaxKind).sort(nodesByPosition).pop(); + } + if (!lastItem && fallbackPos == undefined) { + throw new Error(`tried to insert ${toInsert} as first occurence with no fallback position`); + } + const lastItemPosition: number = lastItem ? lastItem.getEnd() : fallbackPos; + + return new InsertChange(file, lastItemPosition, toInsert); +} + + +export function getContentOfKeyLiteral(_source: ts.SourceFile, node: ts.Node): string | null { + if (node.kind == ts.SyntaxKind.Identifier) { + return (node as ts.Identifier).text; + } else if (node.kind == ts.SyntaxKind.StringLiteral) { + return (node as ts.StringLiteral).text; + } else { + return null; + } +} + + +function _angularImportsFromNode(node: ts.ImportDeclaration, + _sourceFile: ts.SourceFile): {[name: string]: string} { + const ms = node.moduleSpecifier; + let modulePath: string; + switch (ms.kind) { + case ts.SyntaxKind.StringLiteral: + modulePath = (ms as ts.StringLiteral).text; + break; + default: + return {}; + } + + if (!modulePath.startsWith('@angular/')) { + return {}; + } + + if (node.importClause) { + if (node.importClause.name) { + // This is of the form `import Name from 'path'`. Ignore. + return {}; + } else if (node.importClause.namedBindings) { + const nb = node.importClause.namedBindings; + if (nb.kind == ts.SyntaxKind.NamespaceImport) { + // This is of the form `import * as name from 'path'`. Return `name.`. + return { + [(nb as ts.NamespaceImport).name.text + '.']: modulePath, + }; + } else { + // This is of the form `import {a,b,c} from 'path'` + const namedImports = nb as ts.NamedImports; + + return namedImports.elements + .map((is: ts.ImportSpecifier) => is.propertyName ? is.propertyName.text : is.name.text) + .reduce((acc: {[name: string]: string}, curr: string) => { + acc[curr] = modulePath; + + return acc; + }, {}); + } + } + + return {}; + } else { + // This is of the form `import 'path';`. Nothing to do. + return {}; + } +} + + +export function getDecoratorMetadata(source: ts.SourceFile, identifier: string, + module: string): ts.Node[] { + const angularImports = findNodes(source, ts.isImportDeclaration) + .map((node) => _angularImportsFromNode(node, source)) + .reduce((acc, current) => { + for (const key of Object.keys(current)) { + acc[key] = current[key]; + } + + return acc; + }, {}); + + return getSourceNodes(source) + .filter(node => { + return node.kind == ts.SyntaxKind.Decorator + && (node as ts.Decorator).expression.kind == ts.SyntaxKind.CallExpression; + }) + .map(node => (node as ts.Decorator).expression as ts.CallExpression) + .filter(expr => { + if (expr.expression.kind == ts.SyntaxKind.Identifier) { + const id = expr.expression as ts.Identifier; + + return id.text == identifier && angularImports[id.text] === module; + } else if (expr.expression.kind == ts.SyntaxKind.PropertyAccessExpression) { + // This covers foo.NgModule when importing * as foo. + const paExpr = expr.expression as ts.PropertyAccessExpression; + // If the left expression is not an identifier, just give up at that point. + if (paExpr.expression.kind !== ts.SyntaxKind.Identifier) { + return false; + } + + const id = paExpr.name.text; + const moduleId = (paExpr.expression as ts.Identifier).text; + + return id === identifier && (angularImports[moduleId + '.'] === module); + } + + return false; + }) + .filter(expr => expr.arguments[0] + && expr.arguments[0].kind == ts.SyntaxKind.ObjectLiteralExpression) + .map(expr => expr.arguments[0] as ts.ObjectLiteralExpression); +} + +function findClassDeclarationParent(node: ts.Node): ts.ClassDeclaration|undefined { + if (ts.isClassDeclaration(node)) { + return node; + } + + return node.parent && findClassDeclarationParent(node.parent); +} + +/** + * Given a source file with @NgModule class(es), find the name of the first @NgModule class. + * + * @param source source file containing one or more @NgModule + * @returns the name of the first @NgModule, or `undefined` if none is found + */ +export function getFirstNgModuleName(source: ts.SourceFile): string|undefined { + // First, find the @NgModule decorators. + const ngModulesMetadata = getDecoratorMetadata(source, 'NgModule', '@angular/core'); + if (ngModulesMetadata.length === 0) { + return undefined; + } + + // Then walk parent pointers up the AST, looking for the ClassDeclaration parent of the NgModule + // metadata. + const moduleClass = findClassDeclarationParent(ngModulesMetadata[0]); + if (!moduleClass || !moduleClass.name) { + return undefined; + } + + // Get the class name of the module ClassDeclaration. + return moduleClass.name.text; +} + +export function getMetadataField( + node: ts.ObjectLiteralExpression, + metadataField: string, +): ts.ObjectLiteralElement[] { + return node.properties + .filter(ts.isPropertyAssignment) + // Filter out every fields that's not "metadataField". Also handles string literals + // (but not expressions). + .filter(({ name }) => { + return (ts.isIdentifier(name) || ts.isStringLiteral(name)) + && name.getText() === metadataField; + }); +} + +export function addSymbolToNgModuleMetadata( + source: ts.SourceFile, + ngModulePath: string, + metadataField: string, + symbolName: string, + importPath: string | null = null, +): Change[] { + const nodes = getDecoratorMetadata(source, 'NgModule', '@angular/core'); + let node: any = nodes[0]; // tslint:disable-line:no-any + + // Find the decorator declaration. + if (!node) { + return []; + } + + // Get all the children property assignment of object literals. + const matchingProperties = getMetadataField( + node as ts.ObjectLiteralExpression, + metadataField, + ); + + // Get the last node of the array literal. + if (!matchingProperties) { + return []; + } + if (matchingProperties.length == 0) { + // We haven't found the field in the metadata declaration. Insert a new field. + const expr = node as ts.ObjectLiteralExpression; + let position: number; + let toInsert: string; + if (expr.properties.length == 0) { + position = expr.getEnd() - 1; + toInsert = ` ${metadataField}: [${symbolName}]\n`; + } else { + node = expr.properties[expr.properties.length - 1]; + position = node.getEnd(); + // Get the indentation of the last element, if any. + const text = node.getFullText(source); + const matches = text.match(/^\r?\n\s*/); + if (matches && matches.length > 0) { + toInsert = `,${matches[0]}${metadataField}: [${symbolName}]`; + } else { + toInsert = `, ${metadataField}: [${symbolName}]`; + } + } + if (importPath !== null) { + return [ + new InsertChange(ngModulePath, position, toInsert), + insertImport(source, ngModulePath, symbolName.replace(/\..*$/, ''), importPath), + ]; + } else { + return [new InsertChange(ngModulePath, position, toInsert)]; + } + } + const assignment = matchingProperties[0] as ts.PropertyAssignment; + + // If it's not an array, nothing we can do really. + if (assignment.initializer.kind !== ts.SyntaxKind.ArrayLiteralExpression) { + return []; + } + + const arrLiteral = assignment.initializer as ts.ArrayLiteralExpression; + if (arrLiteral.elements.length == 0) { + // Forward the property. + node = arrLiteral; + } else { + node = arrLiteral.elements; + } + + if (!node) { + // tslint:disable-next-line: no-console + console.error('No app module found. Please add your new class to your component.'); + + return []; + } + + if (Array.isArray(node)) { + const nodeArray = node as {} as Array; + const symbolsArray = nodeArray.map(node => node.getText()); + if (symbolsArray.includes(symbolName)) { + return []; + } + + node = node[node.length - 1]; + } + + let toInsert: string; + let position = node.getEnd(); + if (node.kind == ts.SyntaxKind.ObjectLiteralExpression) { + // We haven't found the field in the metadata declaration. Insert a new + // field. + const expr = node as ts.ObjectLiteralExpression; + if (expr.properties.length == 0) { + position = expr.getEnd() - 1; + toInsert = ` ${symbolName}\n`; + } else { + // Get the indentation of the last element, if any. + const text = node.getFullText(source); + if (text.match(/^\r?\r?\n/)) { + toInsert = `,${text.match(/^\r?\n\s*/)[0]}${symbolName}`; + } else { + toInsert = `, ${symbolName}`; + } + } + } else if (node.kind == ts.SyntaxKind.ArrayLiteralExpression) { + // We found the field but it's empty. Insert it just before the `]`. + position--; + toInsert = `${symbolName}`; + } else { + // Get the indentation of the last element, if any. + const text = node.getFullText(source); + if (text.match(/^\r?\n/)) { + toInsert = `,${text.match(/^\r?\n(\r?)\s*/)[0]}${symbolName}`; + } else { + toInsert = `, ${symbolName}`; + } + } + if (importPath !== null) { + return [ + new InsertChange(ngModulePath, position, toInsert), + insertImport(source, ngModulePath, symbolName.replace(/\..*$/, ''), importPath), + ]; + } + + return [new InsertChange(ngModulePath, position, toInsert)]; +} + +/** + * Custom function to insert a declaration (component, pipe, directive) + * into NgModule declarations. It also imports the component. + */ +export function addDeclarationToModule(source: ts.SourceFile, + modulePath: string, classifiedName: string, + importPath: string): Change[] { + return addSymbolToNgModuleMetadata( + source, modulePath, 'declarations', classifiedName, importPath); +} + +/** + * Custom function to insert an NgModule into NgModule imports. It also imports the module. + */ +export function addImportToModule(source: ts.SourceFile, + modulePath: string, classifiedName: string, + importPath: string): Change[] { + + return addSymbolToNgModuleMetadata(source, modulePath, 'imports', classifiedName, importPath); +} + +/** + * Custom function to insert a provider into NgModule. It also imports it. + */ +export function addProviderToModule(source: ts.SourceFile, + modulePath: string, classifiedName: string, + importPath: string): Change[] { + return addSymbolToNgModuleMetadata(source, modulePath, 'providers', classifiedName, importPath); +} + +/** + * Custom function to insert an export into NgModule. It also imports it. + */ +export function addExportToModule(source: ts.SourceFile, + modulePath: string, classifiedName: string, + importPath: string): Change[] { + return addSymbolToNgModuleMetadata(source, modulePath, 'exports', classifiedName, importPath); +} + +/** + * Custom function to insert an export into NgModule. It also imports it. + */ +export function addBootstrapToModule(source: ts.SourceFile, + modulePath: string, classifiedName: string, + importPath: string): Change[] { + return addSymbolToNgModuleMetadata(source, modulePath, 'bootstrap', classifiedName, importPath); +} + +/** + * Custom function to insert an entryComponent into NgModule. It also imports it. + * @deprecated - Since version 9.0.0 with Ivy, entryComponents is no longer necessary. + */ +export function addEntryComponentToModule(source: ts.SourceFile, + modulePath: string, classifiedName: string, + importPath: string): Change[] { + return addSymbolToNgModuleMetadata( + source, modulePath, + 'entryComponents', classifiedName, importPath, + ); +} + +/** + * Determine if an import already exists. + */ +export function isImported(source: ts.SourceFile, + classifiedName: string, + importPath: string): boolean { + const allNodes = getSourceNodes(source); + const matchingNodes = allNodes + .filter(ts.isImportDeclaration) + .filter( + (imp) => ts.isStringLiteral(imp.moduleSpecifier) && imp.moduleSpecifier.text === importPath, + ) + .filter((imp) => { + if (!imp.importClause) { + return false; + } + const nodes = findNodes(imp.importClause, ts.isImportSpecifier).filter( + (n) => n.getText() === classifiedName, + ); + + return nodes.length > 0; + }); + + return matchingNodes.length > 0; +} + +/** + * This function returns the name of the environment export + * whether this export is aliased or not. If the environment file + * is not imported, then it will return `null`. + */ +export function getEnvironmentExportName(source: ts.SourceFile): string | null { + // Initial value is `null` as we don't know yet if the user + // has imported `environment` into the root module or not. + let environmentExportName: string | null = null; + + const allNodes = getSourceNodes(source); + + allNodes + .filter(ts.isImportDeclaration) + .filter( + (declaration) => + declaration.moduleSpecifier.kind === ts.SyntaxKind.StringLiteral && + declaration.importClause !== undefined, + ) + .map((declaration) => + // If `importClause` property is defined then the first + // child will be `NamedImports` object (or `namedBindings`). + (declaration.importClause as ts.ImportClause).getChildAt(0), + ) + // Find those `NamedImports` object that contains `environment` keyword + // in its text. E.g. `{ environment as env }`. + .filter(ts.isNamedImports) + .filter((namedImports) => namedImports.getText().includes('environment')) + .forEach((namedImports) => { + for (const specifier of namedImports.elements) { + // `propertyName` is defined if the specifier + // has an aliased import. + const name = specifier.propertyName || specifier.name; + + // Find specifier that contains `environment` keyword in its text. + // Whether it's `environment` or `environment as env`. + if (name.text.includes('environment')) { + environmentExportName = specifier.name.text; + } + } + }); + + return environmentExportName; +} + +/** + * Returns the RouterModule declaration from NgModule metadata, if any. + */ +export function getRouterModuleDeclaration(source: ts.SourceFile): ts.Expression | undefined { + const result = getDecoratorMetadata(source, 'NgModule', '@angular/core') as ts.Node[]; + const node = result[0] as ts.ObjectLiteralExpression; + const matchingProperties = getMetadataField(node, 'imports'); + + if (!matchingProperties) { + return; + } + + const assignment = matchingProperties[0] as ts.PropertyAssignment; + + if (assignment.initializer.kind !== ts.SyntaxKind.ArrayLiteralExpression) { + return; + } + + const arrLiteral = assignment.initializer as ts.ArrayLiteralExpression; + + return arrLiteral.elements + .filter(el => el.kind === ts.SyntaxKind.CallExpression) + .find(el => (el as ts.Identifier).getText().startsWith('RouterModule')); +} + +/** + * Adds a new route declaration to a router module (i.e. has a RouterModule declaration) + */ +export function addRouteDeclarationToModule( + source: ts.SourceFile, + fileToAdd: string, + routeLiteral: string, +): Change { + const routerModuleExpr = getRouterModuleDeclaration(source); + if (!routerModuleExpr) { + throw new Error(`Couldn't find a route declaration in ${fileToAdd}.`); + } + const scopeConfigMethodArgs = (routerModuleExpr as ts.CallExpression).arguments; + if (!scopeConfigMethodArgs.length) { + const { line } = source.getLineAndCharacterOfPosition(routerModuleExpr.getStart()); + throw new Error( + `The router module method doesn't have arguments ` + + `at line ${line} in ${fileToAdd}`, + ); + } + + let routesArr: ts.ArrayLiteralExpression | undefined; + const routesArg = scopeConfigMethodArgs[0]; + + // Check if the route declarations array is + // an inlined argument of RouterModule or a standalone variable + if (ts.isArrayLiteralExpression(routesArg)) { + routesArr = routesArg; + } else { + const routesVarName = routesArg.getText(); + let routesVar; + if (routesArg.kind === ts.SyntaxKind.Identifier) { + routesVar = source.statements + .filter(ts.isVariableStatement) + .find((v) => { + return v.declarationList.declarations[0].name.getText() === routesVarName; + }); + } + + if (!routesVar) { + const { line } = source.getLineAndCharacterOfPosition(routesArg.getStart()); + throw new Error( + `No route declaration array was found that corresponds ` + + `to router module at line ${line} in ${fileToAdd}`, + ); + } + + routesArr = findNodes(routesVar, ts.SyntaxKind.ArrayLiteralExpression, 1)[0] as ts.ArrayLiteralExpression; + } + + const occurrencesCount = routesArr.elements.length; + const text = routesArr.getFullText(source); + + let route: string = routeLiteral; + let insertPos = routesArr.elements.pos; + + if (occurrencesCount > 0) { + const lastRouteLiteral = [...routesArr.elements].pop() as ts.Expression; + const lastRouteIsWildcard = ts.isObjectLiteralExpression(lastRouteLiteral) + && lastRouteLiteral + .properties + .some(n => ( + ts.isPropertyAssignment(n) + && ts.isIdentifier(n.name) + && n.name.text === 'path' + && ts.isStringLiteral(n.initializer) + && n.initializer.text === '**' + )); + + const indentation = text.match(/\r?\n(\r?)\s*/) || []; + const routeText = `${indentation[0] || ' '}${routeLiteral}`; + + // Add the new route before the wildcard route + // otherwise we'll always redirect to the wildcard route + if (lastRouteIsWildcard) { + insertPos = lastRouteLiteral.pos; + route = `${routeText},`; + } else { + insertPos = lastRouteLiteral.end; + route = `,${routeText}`; + } + } + + return new InsertChange(fileToAdd, insertPos, route); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/change.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/change.ts new file mode 100644 index 0000000000..12556352ab --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/change.ts @@ -0,0 +1,127 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +export interface Host { + write(path: string, content: string): Promise; + read(path: string): Promise; +} + + +export interface Change { + apply(host: Host): Promise; + + // The file this change should be applied to. Some changes might not apply to + // a file (maybe the config). + readonly path: string | null; + + // The order this change should be applied. Normally the position inside the file. + // Changes are applied from the bottom of a file to the top. + readonly order: number; + + // The description of this change. This will be outputted in a dry or verbose run. + readonly description: string; +} + + +/** + * An operation that does nothing. + */ +export class NoopChange implements Change { + description = 'No operation.'; + order = Infinity; + path = null; + apply() { return Promise.resolve(); } +} + + +/** + * Will add text to the source code. + */ +export class InsertChange implements Change { + + order: number; + description: string; + + constructor(public path: string, public pos: number, public toAdd: string) { + if (pos < 0) { + throw new Error('Negative positions are invalid'); + } + this.description = `Inserted ${toAdd} into position ${pos} of ${path}`; + this.order = pos; + } + + /** + * This method does not insert spaces if there is none in the original string. + */ + apply(host: Host) { + return host.read(this.path).then(content => { + const prefix = content.substring(0, this.pos); + const suffix = content.substring(this.pos); + + return host.write(this.path, `${prefix}${this.toAdd}${suffix}`); + }); + } +} + +/** + * Will remove text from the source code. + */ +export class RemoveChange implements Change { + + order: number; + description: string; + + constructor(public path: string, private pos: number, private toRemove: string) { + if (pos < 0) { + throw new Error('Negative positions are invalid'); + } + this.description = `Removed ${toRemove} into position ${pos} of ${path}`; + this.order = pos; + } + + apply(host: Host): Promise { + return host.read(this.path).then(content => { + const prefix = content.substring(0, this.pos); + const suffix = content.substring(this.pos + this.toRemove.length); + + // TODO: throw error if toRemove doesn't match removed string. + return host.write(this.path, `${prefix}${suffix}`); + }); + } +} + +/** + * Will replace text from the source code. + */ +export class ReplaceChange implements Change { + order: number; + description: string; + + constructor(public path: string, private pos: number, private oldText: string, + private newText: string) { + if (pos < 0) { + throw new Error('Negative positions are invalid'); + } + this.description = `Replaced ${oldText} into position ${pos} of ${path} with ${newText}`; + this.order = pos; + } + + apply(host: Host): Promise { + return host.read(this.path).then(content => { + const prefix = content.substring(0, this.pos); + const suffix = content.substring(this.pos + this.oldText.length); + const text = content.substring(this.pos, this.pos + this.oldText.length); + + if (text !== this.oldText) { + return Promise.reject(new Error(`Invalid replace: "${text}" != "${this.oldText}".`)); + } + + // TODO: throw error if oldText doesn't match removed string. + return host.write(this.path, `${prefix}${this.newText}${suffix}`); + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/config.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/config.ts new file mode 100644 index 0000000000..ce0d15320b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/config.ts @@ -0,0 +1,532 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import { JsonParseMode, parseJson } from '@angular-devkit/core'; +import { Rule, SchematicContext, SchematicsException, Tree } from '@angular-devkit/schematics'; +import { ProjectType, WorkspaceProject, WorkspaceSchema } from './workspace-models'; + +// The interfaces below are generated from the Angular CLI configuration schema +// https://github.com/angular/angular-cli/blob/master/packages/@angular/cli/lib/config/schema.json +export interface AppConfig { + /** + * Name of the app. + */ + name?: string; + /** + * Directory where app files are placed. + */ + appRoot?: string; + /** + * The root directory of the app. + */ + root?: string; + /** + * The output directory for build results. + */ + outDir?: string; + /** + * List of application assets. + */ + assets?: (string | { + /** + * The pattern to match. + */ + glob?: string; + /** + * The dir to search within. + */ + input?: string; + /** + * The output path (relative to the outDir). + */ + output?: string; + })[]; + /** + * URL where files will be deployed. + */ + deployUrl?: string; + /** + * Base url for the application being built. + */ + baseHref?: string; + /** + * The runtime platform of the app. + */ + platform?: ('browser' | 'server'); + /** + * The name of the start HTML file. + */ + index?: string; + /** + * The name of the main entry-point file. + */ + main?: string; + /** + * The name of the polyfills file. + */ + polyfills?: string; + /** + * The name of the test entry-point file. + */ + test?: string; + /** + * The name of the TypeScript configuration file. + */ + tsconfig?: string; + /** + * The name of the TypeScript configuration file for unit tests. + */ + testTsconfig?: string; + /** + * The prefix to apply to generated selectors. + */ + prefix?: string; + /** + * Experimental support for a service worker from @angular/service-worker. + */ + serviceWorker?: boolean; + /** + * Global styles to be included in the build. + */ + styles?: (string | { + input?: string; + [name: string]: any; // tslint:disable-line:no-any + })[]; + /** + * Options to pass to style preprocessors + */ + stylePreprocessorOptions?: { + /** + * Paths to include. Paths will be resolved to project root. + */ + includePaths?: string[]; + }; + /** + * Global scripts to be included in the build. + */ + scripts?: (string | { + input: string; + [name: string]: any; // tslint:disable-line:no-any + })[]; + /** + * Source file for environment config. + */ + environmentSource?: string; + /** + * Name and corresponding file for environment config. + */ + environments?: { + [name: string]: any; // tslint:disable-line:no-any + }; + appShell?: { + app: string; + route: string; + }; + budgets?: { + /** + * The type of budget + */ + type?: ('bundle' | 'initial' | 'allScript' | 'all' | 'anyScript' | 'any' | 'anyComponentStyle'); + /** + * The name of the bundle + */ + name?: string; + /** + * The baseline size for comparison. + */ + baseline?: string; + /** + * The maximum threshold for warning relative to the baseline. + */ + maximumWarning?: string; + /** + * The maximum threshold for error relative to the baseline. + */ + maximumError?: string; + /** + * The minimum threshold for warning relative to the baseline. + */ + minimumWarning?: string; + /** + * The minimum threshold for error relative to the baseline. + */ + minimumError?: string; + /** + * The threshold for warning relative to the baseline (min & max). + */ + warning?: string; + /** + * The threshold for error relative to the baseline (min & max). + */ + error?: string; + }[]; +} + +export interface CliConfig { + $schema?: string; + /** + * The global configuration of the project. + */ + project?: { + /** + * The name of the project. + */ + name?: string; + /** + * Whether or not this project was ejected. + */ + ejected?: boolean; + }; + /** + * Properties of the different applications in this project. + */ + apps?: AppConfig[]; + /** + * Configuration for end-to-end tests. + */ + e2e?: { + protractor?: { + /** + * Path to the config file. + */ + config?: string; + }; + }; + /** + * Properties to be passed to TSLint. + */ + lint?: { + /** + * File glob(s) to lint. + */ + files?: (string | string[]); + /** + * Location of the tsconfig.json project file. + * Will also use as files to lint if 'files' property not present. + */ + project: string; + /** + * Location of the tslint.json configuration. + */ + tslintConfig?: string; + /** + * File glob(s) to ignore. + */ + exclude?: (string | string[]); + }[]; + /** + * Configuration for unit tests. + */ + test?: { + karma?: { + /** + * Path to the karma config file. + */ + config?: string; + }; + codeCoverage?: { + /** + * Globs to exclude from code coverage. + */ + exclude?: string[]; + }; + }; + /** + * Specify the default values for generating. + */ + defaults?: { + /** + * The file extension to be used for style files. + */ + styleExt?: string; + /** + * How often to check for file updates. + */ + poll?: number; + /** + * Use lint to fix files after generation + */ + lintFix?: boolean; + /** + * Options for generating a class. + */ + class?: { + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + }; + /** + * Options for generating a component. + */ + component?: { + /** + * Flag to indicate if a directory is created. + */ + flat?: boolean; + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + /** + * Specifies if the style will be in the ts file. + */ + inlineStyle?: boolean; + /** + * Specifies if the template will be in the ts file. + */ + inlineTemplate?: boolean; + /** + * Specifies the view encapsulation strategy. + */ + viewEncapsulation?: ('Emulated' | 'Native' | 'None'); + /** + * Specifies the change detection strategy. + */ + changeDetection?: ('Default' | 'OnPush'); + }; + /** + * Options for generating a directive. + */ + directive?: { + /** + * Flag to indicate if a directory is created. + */ + flat?: boolean; + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + }; + /** + * Options for generating a guard. + */ + guard?: { + /** + * Flag to indicate if a directory is created. + */ + flat?: boolean; + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + }; + /** + * Options for generating an interface. + */ + interface?: { + /** + * Prefix to apply to interface names. (i.e. I) + */ + prefix?: string; + }; + /** + * Options for generating a module. + */ + module?: { + /** + * Flag to indicate if a directory is created. + */ + flat?: boolean; + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + }; + /** + * Options for generating a pipe. + */ + pipe?: { + /** + * Flag to indicate if a directory is created. + */ + flat?: boolean; + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + }; + /** + * Options for generating a service. + */ + service?: { + /** + * Flag to indicate if a directory is created. + */ + flat?: boolean; + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + }; + /** + * Properties to be passed to the build command. + */ + build?: { + /** + * Output sourcemaps. + */ + sourcemaps?: boolean; + /** + * Base url for the application being built. + */ + baseHref?: string; + /** + * The ssl key used by the server. + */ + progress?: boolean; + /** + * Enable and define the file watching poll time period (milliseconds). + */ + poll?: number; + /** + * Delete output path before build. + */ + deleteOutputPath?: boolean; + /** + * Do not use the real path when resolving modules. + */ + preserveSymlinks?: boolean; + /** + * Show circular dependency warnings on builds. + */ + showCircularDependencies?: boolean; + /** + * Use a separate bundle containing code used across multiple bundles. + */ + commonChunk?: boolean; + /** + * Use file name for lazy loaded chunks. + */ + namedChunks?: boolean; + }; + /** + * Properties to be passed to the serve command. + */ + serve?: { + /** + * The port the application will be served on. + */ + port?: number; + /** + * The host the application will be served on. + */ + host?: string; + /** + * Enables ssl for the application. + */ + ssl?: boolean; + /** + * The ssl key used by the server. + */ + sslKey?: string; + /** + * The ssl certificate used by the server. + */ + sslCert?: string; + /** + * Proxy configuration file. + */ + proxyConfig?: string; + }; + /** + * Properties about schematics. + */ + schematics?: { + /** + * The schematics collection to use. + */ + collection?: string; + /** + * The new app schematic. + */ + newApp?: string; + }; + }; + /** + * Specify which package manager tool to use. + */ + packageManager?: ('npm' | 'cnpm' | 'yarn' | 'default'); + /** + * Allow people to disable console warnings. + */ + warnings?: { + versionMismatch?: boolean; + }; +} + +export function getWorkspacePath(host: Tree): string { + const possibleFiles = [ '/angular.json', '/.angular.json' ]; + const path = possibleFiles.filter(path => host.exists(path))[0]; + + return path; +} + +export function getWorkspaceSchema(host: Tree): WorkspaceSchema { + const path = getWorkspacePath(host); + const configBuffer = host.read(path); + if (configBuffer === null) { + throw new SchematicsException(`Could not find (${path})`); + } + const content = configBuffer.toString(); + + return parseJson(content, JsonParseMode.Loose) as {} as WorkspaceSchema; +} + +export function addProjectToWorkspace( + workspace: WorkspaceSchema, + name: string, + project: WorkspaceProject, +): Rule { + return (_host: Tree, _context: SchematicContext) => { + + if (workspace.projects[name]) { + throw new Error(`Project '${name}' already exists in workspace.`); + } + + // Add project to workspace. + workspace.projects[name] = project; + + if (!workspace.defaultProject && Object.keys(workspace.projects).length === 1) { + // Make the new project the default one. + workspace.defaultProject = name; + } + + return updateWorkspaceSchema(workspace); + }; +} + +export function updateWorkspaceSchema(workspace: WorkspaceSchema): Rule { + return (host: Tree, _context: SchematicContext) => { + host.overwrite(getWorkspacePath(host), JSON.stringify(workspace, null, 2)); + }; +} + +export const configPath = '/.angular-cli.json'; + +export function getConfig(host: Tree): CliConfig { + const configBuffer = host.read(configPath); + if (configBuffer === null) { + throw new SchematicsException('Could not find .angular-cli.json'); + } + + const config = parseJson(configBuffer.toString(), JsonParseMode.Loose) as {} as CliConfig; + + return config; +} + +export function getAppFromConfig(config: CliConfig, appIndexOrName: string): AppConfig | null { + if (!config.apps) { + return null; + } + + if (parseInt(appIndexOrName) >= 0) { + return config.apps[parseInt(appIndexOrName)]; + } + + return config.apps.filter((app) => app.name === appIndexOrName)[0]; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/dependencies.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/dependencies.ts new file mode 100644 index 0000000000..76a60f53e6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/dependencies.ts @@ -0,0 +1,76 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import { Tree } from '@angular-devkit/schematics'; +import { JSONFile } from './json-file'; + +const PKG_JSON_PATH = '/package.json'; +export enum NodeDependencyType { + Default = 'dependencies', + Dev = 'devDependencies', + Peer = 'peerDependencies', + Optional = 'optionalDependencies', +} + +export interface NodeDependency { + type: NodeDependencyType; + name: string; + version: string; + overwrite?: boolean; +} + +const ALL_DEPENDENCY_TYPE = [ + NodeDependencyType.Default, + NodeDependencyType.Dev, + NodeDependencyType.Optional, + NodeDependencyType.Peer, +]; + +export function addPackageJsonDependency(tree: Tree, dependency: NodeDependency, pkgJsonPath = PKG_JSON_PATH): void { + const json = new JSONFile(tree, pkgJsonPath); + if (json.error) { + throw json.error; + } + + const { overwrite, type, name, version } = dependency; + const path = [type, name]; + if (overwrite || !json.get(path)) { + json.modify(path, version); + } +} + +export function removePackageJsonDependency(tree: Tree, name: string, pkgJsonPath = PKG_JSON_PATH): void { + const json = new JSONFile(tree, pkgJsonPath); + if (json.error) { + throw json.error; + } + + for (const depType of ALL_DEPENDENCY_TYPE) { + json.remove([depType, name]); + } +} + +export function getPackageJsonDependency(tree: Tree, name: string, pkgJsonPath = PKG_JSON_PATH): NodeDependency | null { + const json = new JSONFile(tree, pkgJsonPath); + if (json.error) { + throw json.error; + } + + for (const depType of ALL_DEPENDENCY_TYPE) { + const version = json.get([depType, name]); + + if (typeof version === 'string') { + return { + type: depType, + name: name, + version, + }; + } + } + + return null; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/find-module.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/find-module.ts new file mode 100644 index 0000000000..cf2a50379a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/find-module.ts @@ -0,0 +1,151 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import { + dirname, + join, + normalize, NormalizedRoot, + Path, + relative +} from '@angular-devkit/core'; +import { DirEntry, Tree } from '@angular-devkit/schematics'; + + +export interface ModuleOptions { + project?: string; // added this + module?: string; + name: string; + flat?: boolean; + path?: string; + route?: string; // added this + selector?: string; // added this + skipImport?: boolean; + moduleExt?: string; + routingModuleExt?: string; +} + +export const MODULE_EXT = '.module.ts'; +export const ROUTING_MODULE_EXT = '-routing.module.ts'; + +/** + * Find the module referred by a set of options passed to the schematics. + */ +export function findModuleFromOptions(host: Tree, options: ModuleOptions): Path | undefined { + if (options.hasOwnProperty('skipImport') && options.skipImport) { + return undefined; + } + + const moduleExt = options.moduleExt || MODULE_EXT; + const routingModuleExt = options.routingModuleExt || ROUTING_MODULE_EXT; + + if (!options.module) { + const pathToCheck = (options.path || '') + '/' + options.name; + + return normalize(findModule(host, pathToCheck, moduleExt, routingModuleExt)); + } else { + const modulePath = normalize(`/${options.path}/${options.module}`); + const componentPath = normalize(`/${options.path}/${options.name}`); + const moduleBaseName = normalize(modulePath).split('/').pop(); + + const candidateSet = new Set([ + normalize(options.path || '/'), + ]); + + for (let dir = modulePath; dir != NormalizedRoot; dir = dirname(dir)) { + candidateSet.add(dir); + } + for (let dir = componentPath; dir != NormalizedRoot; dir = dirname(dir)) { + candidateSet.add(dir); + } + + const candidatesDirs = [...candidateSet].sort((a, b) => b.length - a.length); + for (const c of candidatesDirs) { + const candidateFiles = [ + '', + `${moduleBaseName}.ts`, + `${moduleBaseName}${moduleExt}`, + ].map(x => join(c, x)); + + for (const sc of candidateFiles) { + if (host.exists(sc)) { + return normalize(sc); + } + } + } + + throw new Error( + `Specified module '${options.module}' does not exist.\n` + + `Looked in the following directories:\n ${candidatesDirs.join('\n ')}`, + ); + } +} + +/** + * Function to find the "closest" module to a generated file's path. + */ +export function findModule(host: Tree, generateDir: string, + moduleExt = MODULE_EXT, routingModuleExt = ROUTING_MODULE_EXT): Path { + + let dir: DirEntry | null = host.getDir('/' + generateDir); + let foundRoutingModule = false; + + while (dir) { + const allMatches = dir.subfiles.filter(p => p.endsWith(moduleExt)); + const filteredMatches = allMatches.filter(p => !p.endsWith(routingModuleExt)); + + foundRoutingModule = foundRoutingModule || allMatches.length !== filteredMatches.length; + + if (filteredMatches.length == 1) { + return join(dir.path, filteredMatches[0]); + } else if (filteredMatches.length > 1) { + throw new Error( + 'More than one module matches. Use the skip-import option to skip importing ' + + 'the component into the closest module or use the module option to specify a module.'); + } + + dir = dir.parent; + } + + const errorMsg = foundRoutingModule ? 'Could not find a non Routing NgModule.' + + `\nModules with suffix '${routingModuleExt}' are strictly reserved for routing.` + + '\nUse the skip-import option to skip importing in NgModule.' + : 'Could not find an NgModule. Use the skip-import option to skip importing in NgModule.'; + + throw new Error(errorMsg); +} + +/** + * Build a relative path from one file path to another file path. + */ +export function buildRelativePath(from: string, to: string): string { + from = normalize(from); + to = normalize(to); + + // Convert to arrays. + const fromParts = from.split('/'); + const toParts = to.split('/'); + + // Remove file names (preserving destination) + fromParts.pop(); + const toFileName = toParts.pop(); + + const relativePath = relative(normalize(fromParts.join('/') || '/'), + normalize(toParts.join('/') || '/')); + let pathPrefix = ''; + + // Set the path prefix for same dir or child dir, parent dir starts with `..` + if (!relativePath) { + pathPrefix = '.'; + } else if (!relativePath.startsWith('.')) { + pathPrefix = `./`; + } + if (pathPrefix && !pathPrefix.endsWith('/')) { + pathPrefix += '/'; + } + + return pathPrefix + (relativePath ? relativePath + '/' : '') + toFileName; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/index.ts new file mode 100644 index 0000000000..fec78af448 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/index.ts @@ -0,0 +1,17 @@ +export * from './ast-utils'; +export * from './change'; +export * from './config'; +export * from './dependencies'; +export * from './find-module'; +export * from './json-file'; +export * from './json-utils'; +export * from './latest-versions'; +export * from './lint-fix'; +export * from './ng-ast-utils'; +export * from './parse-name'; +export * from './paths'; +export * from './project-targets'; +export * from './tsconfig'; +export * from './validation'; +export * from './workspace'; +export * from './workspace-models'; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-file.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-file.ts new file mode 100644 index 0000000000..1832f38c5c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-file.ts @@ -0,0 +1,82 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import { JsonValue } from '@angular-devkit/core'; +import { Tree } from '@angular-devkit/schematics'; +import { Node, applyEdits, findNodeAtLocation, getNodeValue, modify, parseTree } from 'jsonc-parser'; + +export type JSONPath = (string | number)[]; + +/** @internal */ +export class JSONFile { + private content: string; + error: undefined | Error; + + constructor( + private readonly host: Tree, + private readonly path: string, + ) { + const buffer = this.host.read(this.path); + if (buffer) { + this.content = buffer.toString(); + } else { + this.error = new Error(`Could not read ${path}.`); + } + } + + private _jsonAst: Node | undefined; + private get JsonAst(): Node { + if (this._jsonAst) { + return this._jsonAst; + } + + this._jsonAst = parseTree(this.content); + + return this._jsonAst; + } + + get(jsonPath: JSONPath): unknown { + if (jsonPath.length === 0) { + return getNodeValue(this.JsonAst); + } + + const node = findNodeAtLocation(this.JsonAst, jsonPath); + + return node === undefined ? undefined : getNodeValue(node); + } + + modify(jsonPath: JSONPath, value: JsonValue | undefined, getInsertionIndex?: (properties: string[]) => number): void { + if (!getInsertionIndex) { + const property = jsonPath.slice(-1)[0]; + getInsertionIndex = properties => [...properties, property].sort().findIndex(p => p === property); + } + + const edits = modify( + this.content, + jsonPath, + value, + { + getInsertionIndex, + formattingOptions: { + insertSpaces: true, + tabSize: 2, + }, + }, + ); + + this.content = applyEdits(this.content, edits); + this.host.overwrite(this.path, this.content); + this._jsonAst = undefined; + } + + remove(jsonPath: JSONPath): void { + if (this.get(jsonPath) !== undefined) { + this.modify(jsonPath, undefined); + } + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-utils.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-utils.ts new file mode 100644 index 0000000000..cf1754a9a4 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-utils.ts @@ -0,0 +1,231 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import { + JsonAstArray, + JsonAstKeyValue, + JsonAstNode, + JsonAstObject, + JsonValue, +} from '@angular-devkit/core'; +import { UpdateRecorder } from '@angular-devkit/schematics'; + +export function appendPropertyInAstObject( + recorder: UpdateRecorder, + node: JsonAstObject, + propertyName: string, + value: JsonValue, + indent: number, +) { + const indentStr = _buildIndent(indent); + let index = node.start.offset + 1; + if (node.properties.length > 0) { + // Insert comma. + const last = node.properties[node.properties.length - 1]; + const { text, end } = last; + const commaIndex = text.endsWith('\n') ? end.offset - 1 : end.offset; + recorder.insertRight(commaIndex, ','); + index = end.offset; + } + const content = _stringifyContent(value, indentStr); + recorder.insertRight( + index, + (node.properties.length === 0 && indent ? '\n' : '') + + ' '.repeat(indent) + + `"${propertyName}":${indent ? ' ' : ''}${content}` + + indentStr.slice(0, -indent), + ); +} + +export function insertPropertyInAstObjectInOrder( + recorder: UpdateRecorder, + node: JsonAstObject, + propertyName: string, + value: JsonValue, + indent: number, +) { + + if (node.properties.length === 0) { + appendPropertyInAstObject(recorder, node, propertyName, value, indent); + + return; + } + + // Find insertion info. + let insertAfterProp: JsonAstKeyValue | null = null; + let prev: JsonAstKeyValue | null = null; + let isLastProp = false; + const last = node.properties[node.properties.length - 1]; + for (const prop of node.properties) { + if (prop.key.value > propertyName) { + if (prev) { + insertAfterProp = prev; + } + break; + } + if (prop === last) { + isLastProp = true; + insertAfterProp = last; + } + prev = prop; + } + + if (isLastProp) { + appendPropertyInAstObject(recorder, node, propertyName, value, indent); + + return; + } + + const indentStr = _buildIndent(indent); + const insertIndex = insertAfterProp === null + ? node.start.offset + 1 + : insertAfterProp.end.offset + 1; + const content = _stringifyContent(value, indentStr); + recorder.insertRight( + insertIndex, + indentStr + + `"${propertyName}":${indent ? ' ' : ''}${content}` + + ',', + ); +} + +export function removePropertyInAstObject( + recorder: UpdateRecorder, + node: JsonAstObject, + propertyName: string, +) { + // Find the property inside the object. + const propIdx = node.properties.findIndex(prop => prop.key.value === propertyName); + + if (propIdx === -1) { + // There's nothing to remove. + return; + } + + if (node.properties.length === 1) { + // This is a special case. Everything should be removed, including indentation. + recorder.remove(node.start.offset, node.end.offset - node.start.offset); + recorder.insertRight(node.start.offset, '{}'); + + return; + } + + // The AST considers commas and indentation to be part of the preceding property. + // To get around messy comma and identation management, we can work over the range between + // two properties instead. + const previousProp = node.properties[propIdx - 1]; + const targetProp = node.properties[propIdx]; + const nextProp = node.properties[propIdx + 1]; + + let start, end; + if (previousProp) { + // Given the object below, and intending to remove the `m` property: + // "{\n \"a\": \"a\",\n \"m\": \"m\",\n \"z\": \"z\"\n}" + // ^---------------^ + // Removing the range above results in: + // "{\n \"a\": \"a\",\n \"z\": \"z\"\n}" + start = previousProp.end; + end = targetProp.end; + } else { + // If there's no previousProp there is a nextProp, since we've specialcased the 1 length case. + // Given the object below, and intending to remove the `a` property: + // "{\n \"a\": \"a\",\n \"m\": \"m\",\n \"z\": \"z\"\n}" + // ^---------------^ + // Removing the range above results in: + // "{\n \"m\": \"m\",\n \"z\": \"z\"\n}" + start = targetProp.start; + end = nextProp.start; + } + + recorder.remove(start.offset, end.offset - start.offset); + if (!nextProp) { + recorder.insertRight(start.offset, '\n'); + } +} + + +export function appendValueInAstArray( + recorder: UpdateRecorder, + node: JsonAstArray, + value: JsonValue, + indent = 4, +) { + let indentStr = _buildIndent(indent); + let index = node.start.offset + 1; + // tslint:disable-next-line: no-any + let newNodes: any[] | undefined; + + if (node.elements.length > 0) { + // Insert comma. + const { end } = node.elements[node.elements.length - 1]; + const isClosingOnSameLine = node.end.offset - end.offset === 1; + + if (isClosingOnSameLine && indent) { + // Reformat the entire array + recorder.remove(node.start.offset, node.end.offset - node.start.offset); + newNodes = [ + ...node.elements.map(({ value }) => value), + value, + ]; + index = node.start.offset; + // In case we are generating the entire node we need to reduce the spacing as + // otherwise we'd end up having incorrect double spacing + indent = indent - 2; + indentStr = _buildIndent(indent); + } else { + recorder.insertRight(end.offset, ','); + index = end.offset; + } + } + + recorder.insertRight( + index, + (newNodes ? '' : indentStr) + + _stringifyContent(newNodes || value, indentStr) + + (node.elements.length === 0 && indent ? indentStr.substr(0, -indent) + '\n' : ''), + ); +} + + +export function findPropertyInAstObject( + node: JsonAstObject, + propertyName: string, +): JsonAstNode | null { + let maybeNode: JsonAstNode | null = null; + for (const property of node.properties) { + if (property.key.value == propertyName) { + maybeNode = property.value; + } + } + + return maybeNode; +} + +function _buildIndent(count: number): string { + return count ? '\n' + ' '.repeat(count) : ''; +} + +function _stringifyContent(value: JsonValue, indentStr: string): string { + // TODO: Add snapshot tests + + // The 'space' value is 2, because we want to add 2 additional + // indents from the 'key' node. + + // If we use the indent provided we will have double indents: + // "budgets": [ + // { + // "type": "initial", + // "maximumWarning": "2mb", + // "maximumError": "5mb" + // }, + // { + // "type": "anyComponentStyle", + // 'maximumWarning": "5kb" + // } + // ] + return JSON.stringify(value, null, 2).replace(/\n/g, indentStr); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/latest-versions.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/latest-versions.ts new file mode 100644 index 0000000000..bead0e6282 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/latest-versions.ts @@ -0,0 +1,26 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +export const latestVersions = { + // These versions should be kept up to date with latest Angular peer dependencies. + Angular: '~10.0.0-rc.0', + RxJs: '~6.6.0', + ZoneJs: '~0.10.2', + TypeScript: '~3.9.5', + TsLib: '^2.0.0', + + // The versions below must be manually updated when making a new devkit release. + // For our e2e tests, these versions must match the latest tag present on the branch. + // During RC periods they will not match the latest RC until there's a new git tag, and + // should not be updated. + DevkitBuildAngular: '~0.1000.0-rc.0', + DevkitBuildNgPackagr: '~0.1000.0-rc.0', + DevkitBuildWebpack: '~0.1000.0-rc.0', + + ngPackagr: '^10.0.0', +}; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/lint-fix.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/lint-fix.ts new file mode 100644 index 0000000000..f794bf681f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/lint-fix.ts @@ -0,0 +1,51 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import { + DirEntry, + Rule, + SchematicContext, + SchematicsException, + Tree, +} from '@angular-devkit/schematics'; +import { TslintFixTask } from '@angular-devkit/schematics/tasks'; + +export function applyLintFix(path = '/'): Rule { + return (tree: Tree, context: SchematicContext) => { + // Find the closest tslint.json or tslint.yaml + let dir: DirEntry | null = tree.getDir(path.substr(0, path.lastIndexOf('/'))); + + do { + if ((dir.subfiles as string[]).some(f => f === 'tslint.json' || f === 'tslint.yaml')) { + break; + } + + dir = dir.parent; + } while (dir !== null); + + if (dir === null) { + throw new SchematicsException( + 'Asked to run lint fixes, but could not find a tslint.json or tslint.yaml config file.'); + } + + // Only include files that have been touched. + const files = tree.actions.reduce((acc: Set, action) => { + const path = action.path.substr(1); // Remove the starting '/'. + if (path.endsWith('.ts') && dir && action.path.startsWith(dir.path)) { + acc.add(path); + } + + return acc; + }, new Set()); + + context.addTask(new TslintFixTask({ + ignoreErrors: true, + tsConfigPath: 'tsconfig.json', + files: [...files], + })); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/ng-ast-utils.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/ng-ast-utils.ts new file mode 100644 index 0000000000..2c48c9b8bd --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/ng-ast-utils.ts @@ -0,0 +1,87 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import { normalize } from '@angular-devkit/core'; +import { SchematicsException, Tree } from '@angular-devkit/schematics'; +import { dirname } from 'path'; +import * as ts from 'typescript'; +import { findNode, getSourceNodes } from './ast-utils'; + +export function findBootstrapModuleCall(host: Tree, mainPath: string): ts.CallExpression | null { + const mainBuffer = host.read(mainPath); + if (!mainBuffer) { + throw new SchematicsException(`Main file (${mainPath}) not found`); + } + const mainText = mainBuffer.toString('utf-8'); + const source = ts.createSourceFile(mainPath, mainText, ts.ScriptTarget.Latest, true); + + const allNodes = getSourceNodes(source); + + let bootstrapCall: ts.CallExpression | null = null; + + for (const node of allNodes) { + let bootstrapCallNode: ts.Node | null = null; + bootstrapCallNode = findNode(node, ts.SyntaxKind.Identifier, 'bootstrapModule'); + + // Walk up the parent until CallExpression is found. + while ( + bootstrapCallNode && + bootstrapCallNode.parent && + bootstrapCallNode.parent.kind !== ts.SyntaxKind.CallExpression + ) { + bootstrapCallNode = bootstrapCallNode.parent; + } + + if ( + bootstrapCallNode !== null && + bootstrapCallNode.parent !== undefined && + bootstrapCallNode.parent.kind === ts.SyntaxKind.CallExpression + ) { + bootstrapCall = bootstrapCallNode.parent as ts.CallExpression; + break; + } + } + + return bootstrapCall; +} + +export function findBootstrapModulePath(host: Tree, mainPath: string): string { + const bootstrapCall = findBootstrapModuleCall(host, mainPath); + if (!bootstrapCall) { + throw new SchematicsException('Bootstrap call not found'); + } + + const bootstrapModule = bootstrapCall.arguments[0]; + + const mainBuffer = host.read(mainPath); + if (!mainBuffer) { + throw new SchematicsException(`Client app main file (${mainPath}) not found`); + } + const mainText = mainBuffer.toString('utf-8'); + const source = ts.createSourceFile(mainPath, mainText, ts.ScriptTarget.Latest, true); + const allNodes = getSourceNodes(source); + const bootstrapModuleRelativePath = allNodes + .filter(node => node.kind === ts.SyntaxKind.ImportDeclaration) + .filter(imp => { + return findNode(imp, ts.SyntaxKind.Identifier, bootstrapModule.getText()); + }) + .map((imp: ts.ImportDeclaration) => { + const modulePathStringLiteral = imp.moduleSpecifier as ts.StringLiteral; + + return modulePathStringLiteral.text; + })[0]; + + return bootstrapModuleRelativePath; +} + +export function getAppModulePath(host: Tree, mainPath: string): string { + const moduleRelativePath = findBootstrapModulePath(host, mainPath); + const mainDir = dirname(mainPath); + const modulePath = normalize(`/${mainDir}/${moduleRelativePath}.ts`); + + return modulePath; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/parse-name.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/parse-name.ts new file mode 100644 index 0000000000..cac57b0868 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/parse-name.ts @@ -0,0 +1,25 @@ + +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +// import { relative, Path } from "../../../angular_devkit/core/src/virtual-fs"; +import { Path, basename, dirname, join, normalize } from '@angular-devkit/core'; + +export interface Location { + name: string; + path: Path; +} + +export function parseName(path: string, name: string): Location { + const nameWithoutPath = basename(normalize(name)); + const namePath = dirname(join(normalize(path), name) as Path); + + return { + name: nameWithoutPath, + path: normalize('/' + namePath), + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/paths.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/paths.ts new file mode 100644 index 0000000000..35729a6417 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/paths.ts @@ -0,0 +1,19 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import { normalize, split } from '@angular-devkit/core'; + +export function relativePathToWorkspaceRoot(projectRoot: string | undefined): string { + const normalizedPath = split(normalize(projectRoot || '')); + + if (normalizedPath.length === 0 || !normalizedPath[0]) { + return '.'; + } else { + return normalizedPath.map(() => '..').join('/'); + } +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/project-targets.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/project-targets.ts new file mode 100644 index 0000000000..e99293f10e --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/project-targets.ts @@ -0,0 +1,13 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import { SchematicsException } from '@angular-devkit/schematics'; + +export function targetBuildNotFoundError(): SchematicsException { + return new SchematicsException(`Project target "build" not found.`); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/tsconfig.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/tsconfig.ts new file mode 100644 index 0000000000..4d6679a1d8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/tsconfig.ts @@ -0,0 +1,70 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import { JsonParseMode, parseJsonAst } from '@angular-devkit/core'; +import { Rule, SchematicsException, Tree } from '@angular-devkit/schematics'; +import { appendValueInAstArray, findPropertyInAstObject } from './json-utils'; + +const SOLUTION_TSCONFIG_PATH = 'tsconfig.json'; + +/** + * Add project references in "Solution Style" tsconfig. + */ +export function addTsConfigProjectReferences(paths: string[]): Rule { + return (host, context) => { + const logger = context.logger; + + // We need to read after each write to avoid missing `,` when appending multiple items. + for (const path of paths) { + const source = host.read(SOLUTION_TSCONFIG_PATH); + if (!source) { + // Solution tsconfig doesn't exist. + logger.warn(`Cannot add reference '${path}' in '${SOLUTION_TSCONFIG_PATH}'. File doesn't exists.`); + + return; + } + + const jsonAst = parseJsonAst(source.toString(), JsonParseMode.Loose); + if (jsonAst?.kind !== 'object') { + // Invalid JSON + throw new SchematicsException(`Invalid JSON AST Object '${SOLUTION_TSCONFIG_PATH}'.`); + } + + // Solutions style tsconfig can contain 2 properties: + // - 'files' with a value of empty array + // - 'references' + const filesAst = findPropertyInAstObject(jsonAst, 'files'); + const referencesAst = findPropertyInAstObject(jsonAst, 'references'); + if ( + filesAst?.kind !== 'array' || + filesAst.elements.length !== 0 || + referencesAst?.kind !== 'array' + ) { + logger.warn(`Cannot add reference '${path}' in '${SOLUTION_TSCONFIG_PATH}'. It appears to be an invalid solution style tsconfig.`); + + return; + } + + // Append new paths + const recorder = host.beginUpdate(SOLUTION_TSCONFIG_PATH); + appendValueInAstArray(recorder, referencesAst, { 'path': `./${path}` }, 4); + host.commitUpdate(recorder); + } + }; +} + +/** + * Throws an exception when the base tsconfig doesn't exists. + */ +export function verifyBaseTsConfigExists(host: Tree): void { + if (host.exists('tsconfig.base.json')) { + return; + } + + throw new SchematicsException(`Cannot find base TypeScript configuration file 'tsconfig.base.json'.`); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/validation.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/validation.ts new file mode 100644 index 0000000000..923b819df9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/validation.ts @@ -0,0 +1,77 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import { tags } from '@angular-devkit/core'; +import { SchematicsException } from '@angular-devkit/schematics'; + +export function validateName(name: string): void { + if (name && /^\d/.test(name)) { + throw new SchematicsException(tags.oneLine`name (${name}) + can not start with a digit.`); + } +} + +// Must start with a letter, and must contain only alphanumeric characters or dashes. +// When adding a dash the segment after the dash must also start with a letter. +export const htmlSelectorRe = /^[a-zA-Z][.0-9a-zA-Z]*(:?-[a-zA-Z][.0-9a-zA-Z]*)*$/; + +export function validateHtmlSelector(selector: string): void { + if (selector && !htmlSelectorRe.test(selector)) { + throw new SchematicsException(tags.oneLine`Selector (${selector}) + is invalid.`); + } +} + + +export function validateProjectName(projectName: string) { + const errorIndex = getRegExpFailPosition(projectName); + const unsupportedProjectNames: string[] = []; + const packageNameRegex = /^(?:@[a-zA-Z0-9_-]+\/)?[a-zA-Z0-9_-]+$/; + if (errorIndex !== null) { + const firstMessage = tags.oneLine` + Project name "${projectName}" is not valid. New project names must + start with a letter, and must contain only alphanumeric characters or dashes. + When adding a dash the segment after the dash must also start with a letter. + `; + const msg = tags.stripIndent` + ${firstMessage} + ${projectName} + ${Array(errorIndex + 1).join(' ') + '^'} + `; + throw new SchematicsException(msg); + } else if (unsupportedProjectNames.indexOf(projectName) !== -1) { + throw new SchematicsException( + `Project name ${JSON.stringify(projectName)} is not a supported name.`); + } else if (!packageNameRegex.test(projectName)) { + throw new SchematicsException(`Project name ${JSON.stringify(projectName)} is invalid.`); + } +} + +function getRegExpFailPosition(str: string): number | null { + const isScope = /^@.*\/.*/.test(str); + if (isScope) { + // Remove starting @ + str = str.replace(/^@/, ''); + // Change / to - for validation + str = str.replace(/\//g, '-'); + } + + const parts = str.indexOf('-') >= 0 ? str.split('-') : [str]; + const matched: string[] = []; + + const projectNameRegexp = /^[a-zA-Z][.0-9a-zA-Z]*(-[.0-9a-zA-Z]*)*$/; + + parts.forEach(part => { + if (part.match(projectNameRegexp)) { + matched.push(part); + } + }); + + const compare = matched.join('-'); + + return (str !== compare) ? compare.length : null; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace-models.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace-models.ts new file mode 100644 index 0000000000..d4e050d317 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace-models.ts @@ -0,0 +1,179 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +export enum ProjectType { + Application = 'application', + Library = 'library', +} + +export enum Builders { + AppShell = '@angular-devkit/build-angular:app-shell', + Server = '@angular-devkit/build-angular:server', + Browser = '@angular-devkit/build-angular:browser', + Karma = '@angular-devkit/build-angular:karma', + TsLint = '@angular-devkit/build-angular:tslint', + DeprecatedNgPackagr = '@angular-devkit/build-ng-packagr:build', + NgPackagr = '@angular-devkit/build-angular:ng-packagr', + DevServer = '@angular-devkit/build-angular:dev-server', + ExtractI18n = '@angular-devkit/build-angular:extract-i18n', + Protractor = '@angular-devkit/build-angular:protractor', +} + +export interface FileReplacements { + replace: string; + with: string; +} + +export interface BrowserBuilderBaseOptions { + main: string; + tsConfig: string; + fileReplacements?: FileReplacements[]; + outputPath?: string; + index?: string; + polyfills: string; + assets?: (object | string)[]; + styles?: (object | string)[]; + scripts?: (object | string)[]; + sourceMap?: boolean; +} + +export type OutputHashing = 'all' | 'media' | 'none' | 'bundles'; + +export interface BrowserBuilderOptions extends BrowserBuilderBaseOptions { + serviceWorker?: boolean; + optimization?: boolean; + outputHashing?: OutputHashing; + resourcesOutputPath?: string; + extractCss?: boolean; + namedChunks?: boolean; + aot?: boolean; + extractLicenses?: boolean; + vendorChunk?: boolean; + buildOptimizer?: boolean; + ngswConfigPath?: string; + budgets?: { + type: string; + maximumWarning?: string; + maximumError?: string; + }[]; + webWorkerTsConfig?: string; +} + +export interface ServeBuilderOptions { + browserTarget: string; +} +export interface LibraryBuilderOptions { + tsConfig: string; + project: string; +} + +export interface ServerBuilderOptions { + outputPath: string; + tsConfig: string; + main: string; + fileReplacements?: FileReplacements[]; + optimization?: { + scripts?: boolean; + styles?: boolean; + }; + sourceMap?: + | boolean + | { + scripts?: boolean; + styles?: boolean; + hidden?: boolean; + vendor?: boolean; + }; +} + +export interface AppShellBuilderOptions { + browserTarget: string; + serverTarget: string; + route: string; +} + +export interface TestBuilderOptions extends Partial { + karmaConfig: string; +} + +export interface LintBuilderOptions { + tsConfig: string[] | string; + exclude?: string[]; +} + +export interface ExtractI18nOptions { + browserTarget: string; +} + +export interface E2EOptions { + protractorConfig: string; + devServerTarget: string; +} + +export interface BuilderTarget { + builder: TBuilder; + options: TOptions; + configurations?: { + production: Partial; + [key: string]: Partial; + }; +} + +export type LibraryBuilderTarget = BuilderTarget; +export type BrowserBuilderTarget = BuilderTarget; +export type ServerBuilderTarget = BuilderTarget; +export type AppShellBuilderTarget = BuilderTarget; +export type LintBuilderTarget = BuilderTarget; +export type TestBuilderTarget = BuilderTarget; +export type ServeBuilderTarget = BuilderTarget; +export type ExtractI18nBuilderTarget = BuilderTarget; +export type E2EBuilderTarget = BuilderTarget; + +export interface WorkspaceSchema { + version: 1; + defaultProject?: string; + cli?: { warnings?: Record }; + projects: { + [key: string]: WorkspaceProject; + }; +} + +export interface WorkspaceProject { + /** + * Project type. + */ + projectType: ProjectType; + + root: string; + sourceRoot: string; + prefix: string; + + cli?: { warnings?: Record }; + + /** + * Tool options. + */ + architect?: WorkspaceTargets; + /** + * Tool options. + */ + targets?: WorkspaceTargets; +} + +export interface WorkspaceTargets { + build?: TProjectType extends ProjectType.Library ? LibraryBuilderTarget : BrowserBuilderTarget; + server?: ServerBuilderTarget; + lint?: LintBuilderTarget; + test?: TestBuilderTarget; + serve?: ServeBuilderTarget; + e2e?: E2EBuilderTarget; + 'app-shell'?: AppShellBuilderTarget; + 'extract-i18n'?: ExtractI18nBuilderTarget; + // TODO(hans): change this any to unknown when google3 supports TypeScript 3.0. + // tslint:disable-next-line:no-any + [key: string]: any; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace.ts new file mode 100644 index 0000000000..79dbfbb6ad --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace.ts @@ -0,0 +1,91 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import { virtualFs, workspaces } from '@angular-devkit/core'; +import { Rule, Tree } from '@angular-devkit/schematics'; +import { ProjectType } from './workspace-models'; + +function createHost(tree: Tree): workspaces.WorkspaceHost { + return { + async readFile(path: string): Promise { + const data = tree.read(path); + if (!data) { + throw new Error('File not found.'); + } + + return virtualFs.fileBufferToString(data); + }, + async writeFile(path: string, data: string): Promise { + return tree.overwrite(path, data); + }, + async isDirectory(path: string): Promise { + // approximate a directory check + return !tree.exists(path) && tree.getDir(path).subfiles.length > 0; + }, + async isFile(path: string): Promise { + return tree.exists(path); + }, + }; +} + +export function updateWorkspace( + updater: (workspace: workspaces.WorkspaceDefinition) => void | PromiseLike, +): Rule; +export function updateWorkspace( + workspace: workspaces.WorkspaceDefinition, +): Rule; +export function updateWorkspace( + updaterOrWorkspace: workspaces.WorkspaceDefinition + | ((workspace: workspaces.WorkspaceDefinition) => void | PromiseLike), +): Rule { + return async (tree: Tree) => { + const host = createHost(tree); + + if (typeof updaterOrWorkspace === 'function') { + + const { workspace } = await workspaces.readWorkspace('/', host); + + const result = updaterOrWorkspace(workspace); + if (result !== undefined) { + await result; + } + + await workspaces.writeWorkspace(workspace, host); + } else { + await workspaces.writeWorkspace(updaterOrWorkspace, host); + } + }; +} + +export async function getWorkspace(tree: Tree, path = '/') { + const host = createHost(tree); + + const { workspace } = await workspaces.readWorkspace(path, host); + + return workspace; +} + +/** + * Build a default project path for generating. + * @param project The project which will have its default path generated. + */ +export function buildDefaultPath(project: workspaces.ProjectDefinition): string { + const root = project.sourceRoot ? `/${project.sourceRoot}/` : `/${project.root}/src/`; + const projectDirName = project.extensions['projectType'] === ProjectType.Application ? 'app' : 'lib'; + + return `${root}${projectDirName}`; +} + +export async function createDefaultPath(tree: Tree, projectName: string): Promise { + const workspace = await getWorkspace(tree); + const project = workspace.projects.get(projectName); + if (!project) { + throw new Error('Specified project does not exist.'); + } + + return buildDefaultPath(project); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/api.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/api.ts new file mode 100644 index 0000000000..39483c2aa9 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/api.ts @@ -0,0 +1,6 @@ +import { chain, schematic } from '@angular-devkit/schematics'; +import { GenerateProxySchema } from '../models'; + +export function createApisGenerator(schema: GenerateProxySchema, generated: string[]) { + return chain(generated.map(m => schematic('api', { ...schema, module: m }))); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/ast.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/ast.ts new file mode 100644 index 0000000000..a1ffe5a319 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/ast.ts @@ -0,0 +1,37 @@ +import * as ts from 'typescript'; +import { findNodes } from './angular/ast-utils'; + +export function findEnvironmentExpression(source: ts.SourceFile) { + const expressions = findNodes(source, ts.isObjectLiteralExpression); + return expressions.find(expr => expr.getText().includes('production')); +} + +export function getAssignedPropertyFromObjectliteral( + expression: ts.ObjectLiteralExpression, + variableSelector: string[], +) { + const expressions = findNodes(expression, isBooleanStringOrNumberLiteral); + + const literal = expressions.find(node => + Boolean( + variableSelector.reduceRight( + (acc: ts.PropertyAssignment, key) => + acc?.name?.getText() === key ? acc.parent.parent : undefined, + node.parent, + ), + ), + ); + + return literal ? literal.getText() : undefined; +} + +export function isBooleanStringOrNumberLiteral( + node: ts.Node, +): node is ts.StringLiteral | ts.NumericLiteral | ts.BooleanLiteral { + return ( + ts.isStringLiteral(node) || + ts.isNumericLiteral(node) || + node.kind === ts.SyntaxKind.TrueKeyword || + node.kind === ts.SyntaxKind.FalseKeyword + ); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/barrel.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/barrel.ts new file mode 100644 index 0000000000..b5ac6a0cc3 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/barrel.ts @@ -0,0 +1,99 @@ +import { strings } from '@angular-devkit/core'; +import { Tree } from '@angular-devkit/schematics'; +import { PROXY_PATH } from '../constants'; +import { createFileSaver } from './file'; + +export function createProxyIndexGenerator(targetPath: string) { + return createBarrelsGenerator(targetPath + PROXY_PATH); +} + +export function createBarrelsGenerator(rootPath: string) { + return (tree: Tree) => { + generateBarrelFromPath(tree, rootPath); + return tree; + }; +} + +export function generateBarrelFromPath(tree: Tree, indexPath: string) { + const saveFile = createFileSaver(tree); + + const asterisk = collectAsteriskBarrel(tree, indexPath); + const named = collectNamedBarrel(tree, indexPath); + + if (asterisk.exports.length + named.exports.length) + saveFile(indexPath + '/index.ts', generateBarrelContent(asterisk, named)); +} + +function generateBarrelContent(asterisk: AsteriskBarrel, named: NamedBarrel): string { + const namedImports = !named.imports.length + ? '' + : named.imports.join(` +`) + + ` +`; + + const namedExports = !named.exports.length + ? '' + : `export { ${named.exports.join(', ')} }; +`; + + const asteriskExports = !asterisk.exports.length + ? '' + : asterisk.exports.join(` +`) + + ` +`; + + return namedImports + asteriskExports + namedExports; +} + +function collectNamedBarrel(tree: Tree, indexPath: string) { + const dir = tree.getDir(indexPath); + const barrel = new NamedBarrel(); + + dir.subdirs.forEach(fragment => { + const subDirPath = indexPath + '/' + fragment; + const subDir = tree.getDir(subDirPath); + let hasFiles = false; + subDir.visit(() => (hasFiles = true)); + if (!hasFiles) return; + + const namespaceFragment = strings.classify(fragment); + barrel.imports.push(`import * as ${namespaceFragment} from './${fragment}';`); + barrel.exports.push(namespaceFragment); + generateBarrelFromPath(tree, subDirPath); + }); + + barrel.imports.sort(); + barrel.exports.sort(); + + return barrel; +} + +function collectAsteriskBarrel(tree: Tree, indexPath: string) { + const dir = tree.getDir(indexPath); + const barrel = new AsteriskBarrel(); + + dir.subfiles.forEach(fragment => { + if (!fragment.endsWith('.ts') || fragment === 'index.ts') return; + + barrel.exports.push(`export * from './${fragment.replace(/\.ts$/, '')}';`); + }); + + barrel.exports.sort(); + + return barrel; +} + +abstract class Barrel { + imports: string[] = []; + exports: string[] = []; +} + +class AsteriskBarrel extends Barrel { + type = 'Asterisk' as const; +} + +class NamedBarrel extends Barrel { + type = 'Named' as const; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/common.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/common.ts new file mode 100644 index 0000000000..ff01bd27c5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/common.ts @@ -0,0 +1,35 @@ +import { SchematicsException, Tree } from '@angular-devkit/schematics'; +import * as ts from 'typescript'; +import { Exception } from '../enums'; + +export function interpolate(text: string, ...params: (string | number | boolean)[]) { + params.forEach((param, i) => { + const pattern = new RegExp('{\\s*' + i + '\\s*}'); + text = text.replace(pattern, String(param)); + }); + + return text; +} + +export function isNullOrUndefined(value: any): value is null | undefined { + return value === null || value === undefined; +} + +export function readFileInTree(tree: Tree, filePath: string): ts.SourceFile { + const buffer = tree.read(filePath); + if (isNullOrUndefined(buffer)) + throw new SchematicsException(interpolate(Exception.FileNotFound, filePath)); + + const text = buffer.toString('utf-8'); + return ts.createSourceFile(filePath, text, ts.ScriptTarget.Latest, true); +} + +export function removeDefaultPlaceholders(oldParams: T) { + const newParams: Record = {}; + + Object.entries(oldParams).forEach(([key, value]) => { + newParams[key] = value === '__default' ? undefined : value; + }); + + return newParams as T; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/enum.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/enum.ts new file mode 100644 index 0000000000..78b1ad355d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/enum.ts @@ -0,0 +1,47 @@ +import { SchematicsException } from '@angular-devkit/schematics'; +import { Exception } from '../enums'; +import { Type } from '../models'; +import { interpolate } from './common'; +import { parseNamespace } from './namespace'; +const shouldQuote = require('should-quote'); + +export interface EnumGeneratorParams { + targetPath: string; + solution: string; + types: Record; + serviceImports: Record; + modelImports: Record; +} + +export function isEnumImport(path: string) { + return path.endsWith('.enum'); +} + +export function getEnumNamesFromImports(serviceImports: Record) { + return Object.keys(serviceImports) + .filter(isEnumImport) + .reduce((acc: string[], path) => { + serviceImports[path].forEach(_import => acc.push(_import)); + return acc; + }, []); +} + +export function createImportRefToEnumMapper({ solution, types }: EnumGeneratorParams) { + return (ref: string) => { + const { enumNames, enumValues } = types[ref]; + if (!enumNames || !enumValues) + throw new SchematicsException(interpolate(Exception.NoTypeDefinition, ref)); + + const namespace = parseNamespace(solution, ref); + const members = enumNames!.map((key, i) => ({ + key: shouldQuote(key) ? `'${key}'` : key, + value: enumValues[i], + })); + + return { + namespace, + name: ref.split('.').pop()!, + members, + }; + }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/file.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/file.ts new file mode 100644 index 0000000000..cbfa9afcd2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/file.ts @@ -0,0 +1,8 @@ +import { Tree } from '@angular-devkit/schematics'; + +export function createFileSaver(tree: Tree) { + return (filePath: string, fileContent: string) => + tree.exists(filePath) + ? tree.overwrite(filePath, fileContent) + : tree.create(filePath, fileContent); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/generics.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/generics.ts new file mode 100644 index 0000000000..8dc7fb2629 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/generics.ts @@ -0,0 +1,100 @@ +import { Generic } from '../models'; + +export class GenericsCollector { + private _generics: Generic[] = []; + get generics() { + return this._generics; + } + + apply = (value: string, index: number) => { + const generic = this.get(index); + if (generic) { + if (!generic.type) generic.setType(value); + return value + generic.default; + } + + return value; + }; + + constructor(private getTypeIdentifier = (type: string) => type) {} + + private createGeneric(type: string, ref: string, defaultValue: string) { + const _default = this.getTypeIdentifier(defaultValue); + const refs = [generateRefWithPlaceholders(ref)]; + const generic = new Generic({ type, default: _default, refs }); + return generic; + } + + private register(index: number, generic: Generic) { + const existing = this.get(index); + if (existing) { + existing.setDefault(generic.default); + existing.setType(generic.type); + } else this.set(index, generic); + } + + collect(generics: string[], genericArguments: string[]) { + generics.forEach((ref, i) => { + const generic = this.createGeneric( + genericArguments[i], + ref, + genericArguments.includes(ref) ? '' : ref, + ); + this.register(i, generic); + }); + } + + get(index: number) { + return this.generics[index]; + } + + set(index: number, value: Generic) { + this.generics[index] = value; + } + + reset() { + this._generics = []; + } +} + +export function generateRefWithPlaceholders(sourceType: string) { + let { identifier, generics } = extractGenerics(sourceType); + + identifier = identifier; + generics = generics.map((_, i) => `T${i}`); + + return generics.length ? `${identifier}<${generics}>` : identifier; +} + +export function extractSimpleGenerics(sourceType: string) { + const { identifier, generics } = extractGenerics(sourceType); + + return { + identifier: getLastSegment(identifier), + generics: generics.map(getLastSegment), + }; +} + +export function extractGenerics(sourceType: string) { + const regex = /(?[^<]+)(<(?.+)>)?/g; + const { identifier = '', generics = '' } = regex.exec(sourceType)?.groups ?? {}; + + return { + identifier, + generics: generics.split(/,\s*/).filter(Boolean), + }; +} + +function getLastSegment(str: string) { + return str.split('.').pop()!; +} + +export function replacePlaceholdersWithGenerics( + type: string, + generics: string[], + genericsCollector: GenericsCollector, +) { + return generics + .map(genericsCollector.apply) + .reduce((acc, v, i) => acc.replace(new RegExp(`([<, ])T${i}([,>])`, 'g'), `$1${v}$2`), type); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/import.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/import.ts new file mode 100644 index 0000000000..26b22d44e6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/import.ts @@ -0,0 +1,11 @@ +import { Import } from '../models'; + +export function sortImports(imports: Import[]) { + imports.sort((a, b) => + removeRelative(a) > removeRelative(b) ? 1 : a.keyword > b.keyword ? 1 : -1, + ); +} + +export function removeRelative(importDef: Import) { + return importDef.path.replace(/\.\.\//g, ''); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/index.ts new file mode 100644 index 0000000000..e6df05b2e2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/index.ts @@ -0,0 +1,19 @@ +export * from './angular'; +export * from './api'; +export * from './ast'; +export * from './barrel'; +export * from './common'; +export * from './enum'; +export * from './file'; +export * from './generics'; +export * from './import'; +export * from './model'; +export * from './namespace'; +export * from './path'; +export * from './rule'; +export * from './service'; +export * from './source'; +export * from './text'; +export * from './tree'; +export * from './type'; +export * from './workspace'; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/model.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/model.ts new file mode 100644 index 0000000000..0924524392 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/model.ts @@ -0,0 +1,177 @@ +import { VOLO_REGEX } from '../constants'; +import { Interface, Model, Property, PropertyDef, Type, TypeWithEnum } from '../models'; +import { + extractGenerics, + generateRefWithPlaceholders, + GenericsCollector, + replacePlaceholdersWithGenerics, +} from './generics'; +import { parseNamespace } from './namespace'; +import { relativePathToModel } from './path'; +import { camel } from './text'; +import { parseGenerics } from './tree'; +import { + createTypeParser, + createTypeSimplifier, + createTypesToImportsReducer, + extendsSelf, + removeTypeModifiers, +} from './type'; +const shouldQuote = require('should-quote'); + +export interface ModelGeneratorParams { + targetPath: string; + solution: string; + types: Record; + serviceImports: Record; + modelImports: Record; +} + +export function createImportRefsToModelReducer(params: ModelGeneratorParams) { + const reduceImportRefsToInterfaces = createImportRefToInterfaceReducerCreator(params); + const createRefToImportReducer = createRefToImportReducerCreator(params); + const { solution, types } = params; + + return (models: Model[], importRefs: string[]) => { + const enums: string[] = []; + const interfaces = importRefs.reduce(reduceImportRefsToInterfaces, []); + + sortInterfaces(interfaces); + + interfaces.forEach(_interface => { + if (VOLO_REGEX.test(_interface.ref)) return; + + if (types[_interface.ref]!.isEnum) { + if (!enums.includes(_interface.ref)) enums.push(_interface.ref); + return; + } + + const index = models.findIndex(m => m.namespace === _interface.namespace); + if (index > -1) { + if (models[index].interfaces.some(i => i.identifier === _interface.identifier)) return; + + models[index].interfaces.push(_interface); + } else { + const { namespace } = _interface; + + models.push( + new Model({ + interfaces: [_interface], + namespace, + path: relativePathToModel(namespace, namespace), + }), + ); + } + }); + + models.forEach(model => { + const toBeImported: TypeWithEnum[] = []; + + model.interfaces.forEach(_interface => { + const { baseType } = types[_interface.ref]; + + if (baseType && parseNamespace(solution, baseType) !== model.namespace) + toBeImported.push({ + type: baseType.split('<')[0], + isEnum: false, + }); + + [..._interface.properties, ..._interface.generics].forEach(prop => { + prop.refs.forEach(ref => { + const propType = types[ref]; + if (!propType) return; + if (propType.isEnum) toBeImported.push({ type: ref, isEnum: true }); + else if (parseNamespace(solution, ref) !== model.namespace) + toBeImported.push({ type: ref, isEnum: false }); + }); + }); + }); + + if (!toBeImported.length) return; + + const reduceRefToImport = createRefToImportReducer(model.namespace); + reduceRefToImport(model.imports, toBeImported); + }); + + return models; + }; +} + +function sortInterfaces(interfaces: Interface[]) { + interfaces.sort((a, b) => (a.identifier > b.identifier ? 1 : -1)); +} + +export function createImportRefToInterfaceReducerCreator(params: ModelGeneratorParams) { + const { solution, types } = params; + const parseType = createTypeParser(removeTypeModifiers); + const simplifyType = createTypeSimplifier(); + const getIdentifier = (type: string) => removeTypeModifiers(simplifyType(type)); + const genericsCollector = new GenericsCollector(getIdentifier); + + return reduceRefsToInterfaces; + + function reduceRefsToInterfaces(interfaces: Interface[], ref: string): Interface[] { + const typeDef = types[ref]; + if (!typeDef) return interfaces; + + const namespace = parseNamespace(solution, ref); + + let { baseType: base, genericArguments } = typeDef; + genericArguments = genericArguments || []; + let identifier = getIdentifier(ref); + identifier = replacePlaceholdersWithGenerics(identifier, genericArguments, genericsCollector); + + if (base) { + if (extendsSelf(ref, base)) { + genericsCollector.collect(extractGenerics(base).generics, genericArguments); + return reduceRefsToInterfaces(interfaces, generateRefWithPlaceholders(base)); + } else { + base = getIdentifier(base); + } + } + + const { generics } = genericsCollector; + const _interface = new Interface({ identifier, base, namespace, ref, generics }); + genericsCollector.reset(); + + typeDef.properties?.forEach(prop => { + let name = prop.jsonName || camel(prop.name); + name = shouldQuote(name) ? `'${name}'` : name; + const type = simplifyType(prop.typeSimple); + const refs = parseType(prop.type).reduce( + (acc: string[], r) => acc.concat(parseGenerics(r).toGenerics()), + [], + ); + const property = new Property({ name, type, refs }); + property.setOptional(isOptionalProperty(prop)); + + _interface.properties.push(property); + }); + + interfaces.push(_interface); + + return [..._interface.properties, ..._interface.generics] + .reduce((refs, prop) => { + prop.refs.forEach(type => { + if (types[type]?.isEnum) return; + if (interfaces.some(i => i.ref === type)) return; + refs.push(type); + }); + + return refs; + }, []) + .concat(base ? parseGenerics(typeDef.baseType!).toGenerics() : []) + .reduce(reduceRefsToInterfaces, interfaces); + } +} + +export function createRefToImportReducerCreator(params: ModelGeneratorParams) { + const { solution } = params; + return (namespace: string) => createTypesToImportsReducer(solution, namespace); +} + +function isOptionalProperty(prop: PropertyDef) { + return ( + prop.typeSimple.endsWith('?') || (prop.typeSimple === 'string' && prop.isRequired === false) + ); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/namespace.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/namespace.ts new file mode 100644 index 0000000000..779c7b9770 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/namespace.ts @@ -0,0 +1,20 @@ +import { createTypeParser, removeGenerics } from './type'; + +export function parseNamespace(solution: string, type: string) { + const parseType = createTypeParser(removeGenerics); + let namespace = parseType(type)[0] + .split('.') + .slice(0, -1) + .join('.'); + + if (solution === namespace) return ''; + + solution.split('.').reduceRight((acc, part) => { + acc = `${part}\\.${acc}`; + const regex = new RegExp(`^${acc}(Controllers\\.)?`); + namespace = namespace.replace(regex, ''); + return acc; + }, ''); + + return namespace; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/path.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/path.ts new file mode 100644 index 0000000000..c28951c8db --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/path.ts @@ -0,0 +1,39 @@ +import { strings } from '@angular-devkit/core'; +import { kebab } from './text'; + +export function relativePathToEnum(namespace: string, enumNamespace: string, enumName: string) { + const path = calculateRelativePath(namespace, enumNamespace); + return path + `/${kebab(enumName)}.enum`; +} + +export function relativePathToModel(namespace: string, modelNamespace: string) { + const path = calculateRelativePath(namespace, modelNamespace); + return path + '/models'; +} + +function calculateRelativePath(ns1: string, ns2: string) { + if (ns1 === ns2) return '.'; + + const parts1 = ns1 ? ns1.split('.') : []; + const parts2 = ns2 ? ns2.split('.') : []; + + while (parts1.length && parts2.length) { + if (parts1[0] !== parts2[0]) break; + + parts1.shift(); + parts2.shift(); + } + + const up = '../'.repeat(parts1.length) || '.'; + const down = parts2.reduce((acc, p) => acc + '/' + strings.dasherize(p), ''); + + return removeTrailingSlash(removeDoubleSlash(up + down)); +} + +function removeDoubleSlash(path: string) { + return path.replace(/\/{2,}/g, '/'); +} + +function removeTrailingSlash(path: string) { + return path.replace(/\/+$/, ''); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/rule.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/rule.ts new file mode 100644 index 0000000000..bd6acdd646 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/rule.ts @@ -0,0 +1,35 @@ +import { + apply, + callRule, + forEach, + MergeStrategy, + mergeWith, + Rule, + SchematicContext, + Source, + Tree, +} from '@angular-devkit/schematics'; + +export function applyWithOverwrite(source: Source, rules: Rule[]): Rule { + return (tree: Tree, _context: SchematicContext) => { + const rule = mergeWith(apply(source, [...rules, overwriteFileIfExists(tree)])); + + return rule(tree, _context); + }; +} + +export function mergeAndAllowDelete(host: Tree, rule: Rule) { + return async (tree: Tree, context: SchematicContext) => { + const nextTree = await callRule(rule, tree, context).toPromise(); + host.merge(nextTree, MergeStrategy.AllowDeleteConflict); + }; +} + +export function overwriteFileIfExists(tree: Tree): Rule { + return forEach(fileEntry => { + if (!tree.exists(fileEntry.path)) return fileEntry; + + tree.overwrite(fileEntry.path, fileEntry.content); + return null; + }); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/service.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/service.ts new file mode 100644 index 0000000000..70655c821d --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/service.ts @@ -0,0 +1,122 @@ +import { + Action, + Body, + Controller, + Import, + Method, + Property, + Service, + ServiceGeneratorParams, + Signature, + Type, + TypeWithEnum, +} from '../models'; +import { sortImports } from './import'; +import { parseNamespace } from './namespace'; +import { parseGenerics } from './tree'; +import { + createTypeAdapter, + createTypeParser, + createTypesToImportsReducer, + removeTypeModifiers, +} from './type'; + +export function serializeParameters(parameters: Property[]) { + return parameters.map(p => p.name + p.optional + ': ' + p.type + p.default, '').join(', '); +} + +export function createControllerToServiceMapper({ + solution, + types, + apiName, +}: ServiceGeneratorParams) { + const mapActionToMethod = createActionToMethodMapper(); + + return (controller: Controller) => { + const name = controller.controllerName; + const namespace = parseNamespace(solution, controller.type); + const actions = Object.values(controller.actions); + const imports = actions.reduce(createActionToImportsReducer(solution, types, namespace), []); + imports.push(new Import({ path: '@abp/ng.core', specifiers: ['RestService'] })); + imports.push(new Import({ path: '@angular/core', specifiers: ['Injectable'] })); + sortImports(imports); + const methods = actions.map(mapActionToMethod); + sortMethods(methods); + return new Service({ apiName, imports, methods, name, namespace }); + }; +} + +function sortMethods(methods: Method[]) { + methods.sort((a, b) => (a.signature.name > b.signature.name ? 1 : -1)); +} + +export function createActionToMethodMapper() { + const mapActionToBody = createActionToBodyMapper(); + const mapActionToSignature = createActionToSignatureMapper(); + + return (action: Action) => { + const body = mapActionToBody(action); + const signature = mapActionToSignature(action); + return new Method({ body, signature }); + }; +} + +export function createActionToBodyMapper() { + const adaptType = createTypeAdapter(); + + return ({ httpMethod, parameters, returnValue, url }: Action) => { + const responseType = adaptType(returnValue.typeSimple); + const body = new Body({ method: httpMethod, responseType, url }); + + parameters.forEach(body.registerActionParameter); + + return body; + }; +} + +export function createActionToSignatureMapper() { + const adaptType = createTypeAdapter(); + + return (action: Action) => { + const signature = new Signature({ name: getMethodNameFromAction(action) }); + + signature.parameters = action.parametersOnMethod.map(p => { + const type = adaptType(p.typeSimple); + const parameter = new Property({ name: p.name, type }); + parameter.setDefault(p.defaultValue); + parameter.setOptional(p.isOptional); + return parameter; + }); + + return signature; + }; +} + +function getMethodNameFromAction(action: Action): string { + return action.uniqueName.split('Async')[0]; +} + +function createActionToImportsReducer( + solution: string, + types: Record, + namespace: string, +) { + const mapTypesToImports = createTypesToImportsReducer(solution, namespace); + const parseType = createTypeParser(removeTypeModifiers); + + return (imports: Import[], { parametersOnMethod, returnValue }: Action) => + mapTypesToImports( + imports, + [returnValue, ...parametersOnMethod].reduce((acc: TypeWithEnum[], param) => { + parseType(param.type).forEach(paramType => + parseGenerics(paramType) + .toGenerics() + .forEach(type => { + if (types[type]) acc.push({ type, isEnum: types[type].isEnum }); + }), + ); + + return acc; + }, []), + ); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/source.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/source.ts new file mode 100644 index 0000000000..a5f0dd1232 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/source.ts @@ -0,0 +1,190 @@ +import { SchematicsException, Tree } from '@angular-devkit/schematics'; +import got from 'got'; +import { + API_DEFINITION_ENDPOINT, + PROXY_CONFIG_PATH, + PROXY_PATH, + PROXY_WARNING, + PROXY_WARNING_PATH, +} from '../constants'; +import { Exception } from '../enums'; +import { ApiDefinition, GenerateProxySchema, Project, ProxyConfig, WriteOp } from '../models'; +import { getAssignedPropertyFromObjectliteral } from './ast'; +import { interpolate } from './common'; +import { readEnvironment, resolveProject } from './workspace'; + +export function createApiDefinitionGetter(params: GenerateProxySchema) { + const apiName = params['api-name'] || 'default'; + + return async (host: Tree) => { + const source = await resolveProject(host, params.source!); + const sourceUrl = getSourceUrl(host, source, apiName); + return await getApiDefinition(sourceUrl); + }; +} + +async function getApiDefinition(sourceUrl: string) { + const url = sourceUrl + API_DEFINITION_ENDPOINT; + let body: ApiDefinition; + + try { + ({ body } = await got(url, { + responseType: 'json', + searchParams: { includeTypes: true }, + https: { rejectUnauthorized: false }, + })); + } catch ({ response }) { + // handle redirects + if (!response?.body || response.statusCode >= 400) + throw new SchematicsException(interpolate(Exception.NoApi, url)); + + body = response.body; + } + + return body; +} + +export function createRootNamespaceGetter(params: GenerateProxySchema) { + const apiName = params['api-name'] || 'default'; + + return async (tree: Tree) => { + const project = await resolveProject(tree, params.source!); + const environmentExpr = readEnvironment(tree, project.definition); + + if (!environmentExpr) + throw new SchematicsException(interpolate(Exception.NoEnvironment, project.name)); + + let assignment = getAssignedPropertyFromObjectliteral(environmentExpr, [ + 'apis', + apiName, + 'rootNamespace', + ]); + + if (!assignment) + assignment = getAssignedPropertyFromObjectliteral(environmentExpr, [ + 'apis', + 'default', + 'rootNamespace', + ]); + + if (!assignment) + throw new SchematicsException(interpolate(Exception.NoRootNamespace, project.name, apiName)); + + return assignment.replace(/[`'"]/g, ''); + }; +} + +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', apiName, 'url']); + + if (!assignment) + assignment = getAssignedPropertyFromObjectliteral(environmentExpr, ['apis', 'default', 'url']); + + if (!assignment) + throw new SchematicsException(interpolate(Exception.NoApiUrl, project.name, apiName)); + + return assignment.replace(/[`'"]/g, ''); +} + +export function createProxyConfigReader(targetPath: string) { + targetPath += PROXY_CONFIG_PATH; + + return (tree: Tree) => { + try { + const buffer = tree.read(targetPath); + return JSON.parse(buffer!.toString()) as ProxyConfig; + } catch (_) {} + + throw new SchematicsException(interpolate(Exception.NoProxyConfig, targetPath)); + }; +} + +export function createProxyClearer(targetPath: string) { + targetPath += PROXY_PATH; + const proxyIndexPath = `${targetPath}/index.ts`; + + return (tree: Tree) => { + try { + tree.getDir(targetPath).subdirs.forEach(dirName => { + const dirPath = `${targetPath}/${dirName}`; + tree.getDir(dirPath).visit(filePath => tree.delete(filePath)); + tree.delete(dirPath); + }); + + if (tree.exists(proxyIndexPath)) tree.delete(proxyIndexPath); + + return tree; + } catch (_) { + throw new SchematicsException(interpolate(Exception.DirRemoveFailed, targetPath)); + } + }; +} + +export function createProxyWarningSaver(targetPath: string) { + targetPath += PROXY_WARNING_PATH; + const createFileWriter = createFileWriterCreator(targetPath); + + return (tree: Tree) => { + const op = tree.exists(targetPath) ? 'overwrite' : 'create'; + const writeWarningMD = createFileWriter(op, PROXY_WARNING); + writeWarningMD(tree); + + return tree; + }; +} + +export function createProxyConfigSaver(apiDefinition: ApiDefinition, targetPath: string) { + const createProxyConfigJson = createProxyConfigJsonCreator(apiDefinition); + const readPreviousConfig = createProxyConfigReader(targetPath); + const createProxyConfigWriter = createProxyConfigWriterCreator(targetPath); + targetPath += PROXY_CONFIG_PATH; + + return (tree: Tree) => { + const generated: string[] = []; + let op: WriteOp = 'create'; + + if (tree.exists(targetPath)) { + op = 'overwrite'; + + try { + readPreviousConfig(tree).generated.forEach(m => generated.push(m)); + } catch (_) {} + } + + const json = createProxyConfigJson(generated); + const writeProxyConfig = createProxyConfigWriter(op, json); + writeProxyConfig(tree); + + return tree; + }; +} + +export function createProxyConfigWriterCreator(targetPath: string) { + targetPath += PROXY_CONFIG_PATH; + + return createFileWriterCreator(targetPath); +} + +export function createFileWriterCreator(targetPath: string) { + return (op: WriteOp, data: string) => (tree: Tree) => { + try { + tree[op](targetPath, data); + return tree; + } catch (_) {} + + throw new SchematicsException(interpolate(Exception.FileWriteFailed, targetPath)); + }; +} + +export function createProxyConfigJsonCreator(apiDefinition: ApiDefinition) { + return (generated: string[]) => generateProxyConfigJson({ generated, ...apiDefinition }); +} + +export function generateProxyConfigJson(proxyConfig: ProxyConfig) { + return JSON.stringify(proxyConfig, null, 2); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/text.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/text.ts new file mode 100644 index 0000000000..e24129beff --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/text.ts @@ -0,0 +1,56 @@ +import { strings } from '@angular-devkit/core'; + +export const lower = (text: string) => text.toLowerCase(); +export const upper = (text: string) => text.toUpperCase(); +export const camel = (text: string) => toCamelCase(_(text)); +export const pascal = (text: string) => strings.classify(_(text)); +export const kebab = (text: string) => strings.dasherize(_(text)); +export const snake = (text: string) => strings.underscore(_(text)); +export const macro = (text: string) => upper(snake(text)); +export const dir = (text: string) => + strings.dasherize(text.replace(/\./g, '/').replace(/\/\//g, '/')); + +export const quote = (value: number | string) => + typeof value === 'string' ? `'${value.replace(/'/g, '\\\'')}'` : value; + +function _(text: string): string { + return text.replace(/\./g, '_'); +} + +// https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Utilities/StringUtils.cs#L155 +function toCamelCase(str: string) { + if (!str || !isUpperCase(str[0])) return str; + + const chars = str.split(''); + const { length } = chars; + + for (let i = 0; i < length; i++) { + if (i === 1 && !isUpperCase(chars[i])) break; + + const hasNext = i + 1 < length; + + if (i > 0 && hasNext && !isUpperCase(chars[i + 1])) { + if (isSeparator(chars[i + 1])) { + chars[i] = toLowerCase(chars[i]); + } + + break; + } + + chars[i] = toLowerCase(chars[i]); + } + + return chars.join(''); +} + +function isSeparator(str = '') { + return /[\s\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]+/.test(str); +} + +function isUpperCase(str = '') { + return /[A-Z]+/.test(str); +} + +function toLowerCase(str = '') { + return str.toLowerCase(); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/tree.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/tree.ts new file mode 100644 index 0000000000..5fd8414f0c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/tree.ts @@ -0,0 +1,71 @@ +export class TypeNode { + children: TypeNode[] = []; + + index = 0; + + constructor( + public data: string, + public parent: TypeNode | null, + public mapperFn = (node: TypeNode) => node.data, + ) {} + + toGenerics(): string[] { + const generics = this.children.length ? `<${this.children.map(n => `T${n.index}`)}>` : ''; + return [this.data + generics].concat( + this.children.reduce((acc: string[], node) => acc.concat(node.toGenerics()), []), + ); + } + + toString() { + const self = this.mapperFn(this); + + if (!self) return ''; + + const representation = self + this.children.filter(String).join(', '); + + if (!this.parent) return representation; + + const siblings = this.parent.children; + + return ( + (siblings[0] === this ? '<' : '') + + representation + + (siblings[siblings.length - 1] === this ? '>' : '') + ); + } + + valueOf() { + return this.toString(); + } +} + +export function parseGenerics(type: string, mapperFn?: TypeNodeMapperFn) { + const [rootType, ...types] = type.split('<'); + const root = new TypeNode(rootType, null, mapperFn); + + types.reduce((parent, t) => { + const [left, right] = t.split(/>+,?\s*/); + + const leftNode = new TypeNode(left, parent, mapperFn); + leftNode.index = parent.children.length; + parent.children.push(leftNode); + parent = leftNode; + + let { length } = t.match(/>/g) || []; + while (length--) parent = parent.parent!; + + if (right) { + parent = parent.parent!; + const rightNode = new TypeNode(right, parent, mapperFn); + rightNode.index = parent.children.length; + parent.children.push(rightNode); + parent = rightNode; + } + + return parent; + }, root); + + return root; +} + +export type TypeNodeMapperFn = (node: TypeNode) => string; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/type.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/type.ts new file mode 100644 index 0000000000..dbae0c55db --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/type.ts @@ -0,0 +1,114 @@ +import { SYSTEM_TYPES, VOLO_REGEX } from '../constants'; +import { eImportKeyword } from '../enums'; +import { Import, TypeWithEnum } from '../models'; +import { extractSimpleGenerics } from './generics'; +import { parseNamespace } from './namespace'; +import { relativePathToEnum, relativePathToModel } from './path'; +import { parseGenerics } from './tree'; + +export function createTypeSimplifier() { + const parseType = createTypeParser(t => { + let type = t.replace( + /(? SYSTEM_TYPES.get(match) ?? 'any', + ); + + type = /any` : identifier; + }); + + return (type: string) => { + const parsed = parseType(type); + const last = parsed.pop()!; + return parsed.reduceRight((record, tKey) => `Record<${tKey}, ${record}>`, last); + }; +} + +export function createTypeParser(replacerFn = (t: string) => t) { + const normalizeType = createTypeNormalizer(replacerFn); + + return (originalType: string) => flattenDictionaryTypes([], originalType).map(normalizeType); +} + +export function createTypeNormalizer(replacerFn = (t: string) => t) { + return (type: string) => { + return replacerFn(normalizeTypeAnnotations(type)); + }; +} + +export function flattenDictionaryTypes(types: string[], type: string) { + type + .replace(/[}{]/g, '') + .split(':') + .forEach(t => types.push(t)); + + return types; +} + +export function normalizeTypeAnnotations(type: string) { + return type.replace(/\[(.+)+\]/g, '$1[]').replace(/\?/g, ''); +} + +export function removeGenerics(type: string) { + return type.replace(/<.+>/g, ''); +} + +export function removeTypeModifiers(type: string) { + return type.replace(/\[\]/g, ''); +} + +export function createTypesToImportsReducer(solution: string, namespace: string) { + const mapTypeToImport = createTypeToImportMapper(solution, namespace); + + return (imports: Import[], types: TypeWithEnum[]) => { + types.forEach(({ type, isEnum }) => { + const newImport = mapTypeToImport(type, isEnum); + if (!newImport) return; + + const existingImport = imports.find( + ({ keyword, path }) => keyword === newImport.keyword && path === newImport.path, + ); + if (!existingImport) return imports.push(newImport); + + existingImport.refs = [...new Set([...existingImport.refs, ...newImport.refs])]; + existingImport.specifiers = [ + ...new Set([...existingImport.specifiers, ...newImport.specifiers]), + ].sort(); + }); + + return imports; + }; +} + +export function createTypeToImportMapper(solution: string, namespace: string) { + const adaptType = createTypeAdapter(); + const simplifyType = createTypeSimplifier(); + + return (type: string, isEnum: boolean) => { + if (!type || type.startsWith('System')) return; + + const modelNamespace = parseNamespace(solution, type); + const refs = [removeTypeModifiers(type)]; + const specifiers = [adaptType(simplifyType(refs[0]).split('<')[0])]; + const path = VOLO_REGEX.test(type) + ? '@abp/ng.core' + : isEnum + ? relativePathToEnum(namespace, modelNamespace, specifiers[0]) + : relativePathToModel(namespace, modelNamespace); + + return new Import({ keyword: eImportKeyword.Type, path, refs, specifiers }); + }; +} + +export function createTypeAdapter() { + const simplifyType = createTypeSimplifier(); + return (type: string) => parseGenerics(type, node => simplifyType(node.data)).toString(); +} + +// naming here is depictive only +export function extendsSelf(type: string, base: string) { + return removeGenerics(base) === removeGenerics(type); +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/workspace.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/workspace.ts new file mode 100644 index 0000000000..84d186cb55 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/workspace.ts @@ -0,0 +1,66 @@ +import { strings, workspaces } from '@angular-devkit/core'; +import { SchematicsException, Tree } from '@angular-devkit/schematics'; +import { Exception } from '../enums'; +import { Project } from '../models'; +import { getWorkspace, getWorkspaceSchema, ProjectType, WorkspaceSchema } from './angular'; +import { findEnvironmentExpression } from './ast'; +import { readFileInTree } from './common'; + +export function isLibrary(project: workspaces.ProjectDefinition): boolean { + return project.extensions['projectType'] === ProjectType.Library; +} + +export function readEnvironment(tree: Tree, project: workspaces.ProjectDefinition) { + if (isLibrary(project)) return undefined; + + const srcPath = project.sourceRoot || `${project.root}/src`; + const envPath = srcPath + '/environments/environment.ts'; + const source = readFileInTree(tree, envPath); + return findEnvironmentExpression(source); +} + +export function readWorkspaceSchema(tree: Tree) { + if (!tree.exists('/angular.json')) throw new SchematicsException(Exception.NoWorkspace); + + let workspaceSchema: WorkspaceSchema; + + try { + workspaceSchema = getWorkspaceSchema(tree); + } catch (_) { + throw new SchematicsException(Exception.InvalidWorkspace); + } + + return workspaceSchema; +} + +export async function resolveProject(tree: Tree, name: string): Promise { + name = name || readWorkspaceSchema(tree).defaultProject!; + const workspace = await getWorkspace(tree); + let definition: Project['definition'] | undefined; + + try { + definition = workspace.projects.get(name); + } catch (_) {} + + if (!definition) + try { + name = strings.dasherize(name); + definition = workspace.projects.get(name); + } catch (_) {} + + if (!definition) + try { + name = strings.camelize(name); + definition = workspace.projects.get(name); + } catch (_) {} + + if (!definition) + try { + name = strings.classify(name); + definition = workspace.projects.get(name); + } catch (_) {} + + if (!definition) throw new SchematicsException(Exception.NoProject); + + return { name, definition }; +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/schematics/tsconfig.json new file mode 100644 index 0000000000..dd80972b48 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "baseUrl": "tsconfig", + "lib": ["es2018", "dom"], + "declaration": true, + "module": "commonjs", + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitThis": true, + "noUnusedParameters": true, + "noUnusedLocals": true, + "rootDir": "src/", + "skipDefaultLibCheck": true, + "skipLibCheck": true, + "sourceMap": true, + "strictNullChecks": true, + "target": "es2017", + "types": ["jest", "node"] + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "src/*/files/**/*", "**/*.spec.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/schematics/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index e472bc62e4..edae640cd1 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -32,15 +32,17 @@ "@abp/ng.setting-management/config": [ "dist/packages/setting-management/config" ], + "@abp/ng.tenant-management": ["dist/packages/tenant-management"], + "@abp/ng.tenant-management/config": [ + "dist/packages/tenant-management/config" + ], "@abp/ng.theme.basic": ["dist/packages/theme-basic"], "@abp/ng.theme.basic/testing": ["dist/packages/theme-basic/testing"], "@abp/ng.theme.shared": ["dist/packages/theme-shared"], "@abp/ng.theme.shared/extensions": [ "dist/packages/theme-shared/extensions" ], - "@abp/ng.theme.shared/testing": ["dist/packages/theme-shared/testing"], - "@abp/ng.tenant-management": ["dist/packages/tenant-management"], - "@abp/ng.tenant-management/config": ["dist/packages/tenant-management/config"] + "@abp/ng.theme.shared/testing": ["dist/packages/theme-shared/testing"] } }, "exclude": ["node_modules", "tmp"] From c1ddc41c4127e5f4460a7e4117534b5f180d4198 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 16 Aug 2021 11:23:40 +0300 Subject: [PATCH 16/56] copy dev-app to nx workspace --- npm/ng-packs/nx/ng-packs/angular.json | 42 ++- .../dev-app/src/app/app-routing.module.ts | 34 ++ .../apps/dev-app/src/app/app.component.html | 138 -------- .../apps/dev-app/src/app/app.component.scss | 133 ------- .../dev-app/src/app/app.component.spec.ts | 31 -- .../apps/dev-app/src/app/app.component.ts | 12 +- .../apps/dev-app/src/app/app.module.ts | 39 +- .../src/app/home/home-routing.module.ts | 11 + .../dev-app/src/app/home/home.component.html | 333 ++++++++++++++++++ .../dev-app/src/app/home/home.component.ts | 19 + .../apps/dev-app/src/app/home/home.module.ts | 10 + .../apps/dev-app/src/app/route.provider.ts | 20 ++ .../dev-app/src/app/shared/shared.module.ts | 23 ++ .../src/environments/environment.prod.ts | 24 +- .../environments/environment.regression.ts | 43 +++ .../dev-app/src/environments/environment.ts | 55 ++- .../nx/ng-packs/apps/dev-app/src/favicon.ico | Bin 15086 -> 102968 bytes .../nx/ng-packs/apps/dev-app/src/index.html | 8 +- .../nx/ng-packs/apps/dev-app/src/styles.scss | 25 ++ npm/ng-packs/nx/ng-packs/package.json | 7 +- .../packages/account-core/tsconfig.json | 2 +- .../forgot-password.component.ts | 7 +- .../ng-packs/packages/account/tsconfig.json | 2 +- .../packages/components/tsconfig.json | 2 +- .../nx/ng-packs/packages/core/tsconfig.json | 2 +- .../packages/feature-management/tsconfig.json | 2 +- .../ng-packs/packages/identity/tsconfig.json | 2 +- .../permission-management/tsconfig.json | 2 +- .../src/lib/setting-management.module.ts | 2 +- .../packages/setting-management/tsconfig.json | 2 +- .../packages/tenant-management/tsconfig.json | 2 +- .../packages/theme-basic/tsconfig.json | 2 +- .../packages/theme-shared/tsconfig.json | 2 +- npm/ng-packs/nx/ng-packs/tsconfig.base.json | 44 +-- .../nx/ng-packs/tsconfig.lib.base.json | 49 +++ npm/ng-packs/nx/ng-packs/tsconfig.prod.json | 23 ++ npm/ng-packs/nx/ng-packs/yarn.lock | 33 +- 37 files changed, 798 insertions(+), 389 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app-routing.module.ts delete mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.html delete mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.scss delete mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.spec.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home-routing.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home.component.html create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home.component.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/route.provider.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/shared/shared.module.ts create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.regression.ts create mode 100644 npm/ng-packs/nx/ng-packs/tsconfig.lib.base.json create mode 100644 npm/ng-packs/nx/ng-packs/tsconfig.prod.json diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index 42eb653191..aabe80328e 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -169,7 +169,7 @@ "projectType": "application", "root": "apps/dev-app", "sourceRoot": "apps/dev-app/src", - "prefix": "abp", + "prefix": "app", "architect": { "build": { "builder": "@angular-devkit/build-angular:browser", @@ -181,11 +181,49 @@ "polyfills": "apps/dev-app/src/polyfills.ts", "tsConfig": "apps/dev-app/tsconfig.app.json", "inlineStyleLanguage": "scss", + "allowedCommonJsDependencies": ["chart.js", "js-sha256"], "assets": [ "apps/dev-app/src/favicon.ico", "apps/dev-app/src/assets" ], - "styles": ["apps/dev-app/src/styles.scss"], + "styles": [ + { + "input": "node_modules/@abp/ng.theme.shared/styles/bootstrap-rtl.min.css", + "inject": false, + "bundleName": "bootstrap-rtl.min" + }, + { + "input": "node_modules/bootstrap/dist/css/bootstrap.min.css", + "inject": true, + "bundleName": "bootstrap-ltr.min" + }, + { + "input": "node_modules/@fortawesome/fontawesome-free/css/all.min.css", + "inject": true, + "bundleName": "fontawesome-all.min" + }, + { + "input": "node_modules/@fortawesome/fontawesome-free/css/v4-shims.min.css", + "inject": true, + "bundleName": "fontawesome-v4-shims.min" + }, + { + "input": "node_modules/@swimlane/ngx-datatable/index.css", + "inject": true, + "bundleName": "ngx-datatable-index" + }, + { + "input": "node_modules/@swimlane/ngx-datatable/assets/icons.css", + "inject": true, + "bundleName": "ngx-datatable-icons" + }, + { + "input": "node_modules/@swimlane/ngx-datatable/themes/material.css", + "inject": true, + "bundleName": "ngx-datatable-material" + }, + "apps/dev-app/src/styles.scss" + ], "scripts": [] }, "configurations": { diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app-routing.module.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app-routing.module.ts new file mode 100644 index 0000000000..178c182324 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app-routing.module.ts @@ -0,0 +1,34 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +const routes: Routes = [ + { + path: '', + pathMatch: 'full', + loadChildren: () => import('./home/home.module').then(m => m.HomeModule), + }, + { + path: 'account', + loadChildren: () => import('@abp/ng.account').then(m => m.AccountModule.forLazy()), + }, + { + path: 'identity', + loadChildren: () => import('@abp/ng.identity').then(m => m.IdentityModule.forLazy()), + }, + { + path: 'tenant-management', + loadChildren: () => + import('@abp/ng.tenant-management').then(m => m.TenantManagementModule.forLazy()), + }, + { + path: 'setting-management', + loadChildren: () => + import('@abp/ng.setting-management').then(m => m.SettingManagementModule.forLazy()), + }, +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes, { relativeLinkResolution: 'legacy' })], + exports: [RouterModule], +}) +export class AppRoutingModule {} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.html b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.html deleted file mode 100644 index 6d75a0402d..0000000000 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.html +++ /dev/null @@ -1,138 +0,0 @@ -
- - - - - - - - -

Welcome to {{ title }}!

-
-
-

Resources & Tools

-

Thank you for using and showing some ♥ for Nx.

- -

Here are some links to help you get started.

- -

Next Steps

-

Here are some things you can do with Nx.

-
- Add UI library -
-  # Generate UI lib
-  nx g @nrwl/angular:lib ui
-  
-  # Add a component
-  nx g @nrwl/angular:component xyz --project ui
-
-
- View dependency graph -
nx dep-graph
-
-
- Run affected commands -
-  # see what's been affected by changes
-  nx affected:dep-graph
-  
-  # run tests for current changes
-  nx affected:test
-  
-  # run e2e tests for current changes
-  nx affected:e2e
-  
-
-
diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.scss b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.scss deleted file mode 100644 index cf89c35ba7..0000000000 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.scss +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Remove template code below - */ -:host { - display: block; - font-family: sans-serif; - min-width: 300px; - max-width: 600px; - margin: 50px auto; -} - -.gutter-left { - margin-left: 9px; -} - -.col-span-2 { - grid-column: span 2; -} - -.flex { - display: flex; - align-items: center; - justify-content: center; -} - -header { - background-color: #143055; - color: white; - padding: 5px; - border-radius: 3px; -} - -main { - padding: 0 36px; -} - -p { - text-align: center; -} - -h1 { - text-align: center; - margin-left: 18px; - font-size: 24px; -} - -h2 { - text-align: center; - font-size: 20px; - margin: 40px 0 10px 0; -} - -.resources { - text-align: center; - list-style: none; - padding: 0; - display: grid; - grid-gap: 9px; - grid-template-columns: 1fr 1fr; -} - -.resource { - color: #0094ba; - height: 36px; - background-color: rgba(0, 0, 0, 0); - border: 1px solid rgba(0, 0, 0, 0.12); - border-radius: 4px; - padding: 3px 9px; - text-decoration: none; -} - -.resource:hover { - background-color: rgba(68, 138, 255, 0.04); -} - -pre { - padding: 9px; - border-radius: 4px; - background-color: black; - color: #eee; -} - -details { - border-radius: 4px; - color: #333; - background-color: rgba(0, 0, 0, 0); - border: 1px solid rgba(0, 0, 0, 0.12); - padding: 3px 9px; - margin-bottom: 9px; -} - -summary { - cursor: pointer; - outline: none; - height: 36px; - line-height: 36px; -} - -.github-star-container { - margin-top: 12px; - line-height: 20px; -} - -.github-star-container a { - display: flex; - align-items: center; - text-decoration: none; - color: #333; -} - -.github-star-badge { - color: #24292e; - display: flex; - align-items: center; - font-size: 12px; - padding: 3px 10px; - border: 1px solid rgba(27, 31, 35, 0.2); - border-radius: 3px; - background-image: linear-gradient(-180deg, #fafbfc, #eff3f6 90%); - margin-left: 4px; - font-weight: 600; -} - -.github-star-badge:hover { - background-image: linear-gradient(-180deg, #f0f3f6, #e6ebf1 90%); - border-color: rgba(27, 31, 35, 0.35); - background-position: -0.5em; -} -.github-star-badge .material-icons { - height: 16px; - width: 16px; - margin-right: 4px; -} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.spec.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.spec.ts deleted file mode 100644 index b3c0270527..0000000000 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.spec.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { TestBed } from '@angular/core/testing'; -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [AppComponent], - }).compileComponents(); - }); - - it('should create the app', () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); - - it(`should have as title 'dev-app'`, () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app.title).toEqual('dev-app'); - }); - - it('should render title', () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('h1')?.textContent).toContain( - 'Welcome to dev-app!' - ); - }); -}); diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.ts index b785115d47..a26e745334 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.ts +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.component.ts @@ -1,10 +1,10 @@ import { Component } from '@angular/core'; @Component({ - selector: 'abp-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'], + selector: 'app-root', + template: ` + + + `, }) -export class AppComponent { - title = 'dev-app'; -} +export class AppComponent {} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.module.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.module.ts index 7bcb9e9a51..e859df2232 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.module.ts +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/app.module.ts @@ -1,12 +1,45 @@ +import { AccountConfigModule } from '@abp/ng.account/config'; +import { CoreModule } from '@abp/ng.core'; +import { registerLocale } from '@abp/ng.core/locale'; +import { IdentityConfigModule } from '@abp/ng.identity/config'; +import { SettingManagementConfigModule } from '@abp/ng.setting-management/config'; +import { TenantManagementConfigModule } from '@abp/ng.tenant-management/config'; +import { ThemeBasicModule } from '@abp/ng.theme.basic'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; - +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { NgxsLoggerPluginModule } from '@ngxs/logger-plugin'; +import { NgxsModule } from '@ngxs/store'; +import { environment } from '../environments/environment'; +import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; +import { APP_ROUTE_PROVIDER } from './route.provider'; + +const INSPECTION_TOOLS = [NgxsLoggerPluginModule.forRoot({ disabled: true })]; @NgModule({ + imports: [ + BrowserModule, + BrowserAnimationsModule, + AppRoutingModule, + CoreModule.forRoot({ + environment, + registerLocaleFn: registerLocale(), + sendNullsAsQueryParam: false, + skipGetAppConfiguration: false, + }), + ThemeSharedModule.forRoot(), + AccountConfigModule.forRoot(), + IdentityConfigModule.forRoot(), + TenantManagementConfigModule.forRoot(), + SettingManagementConfigModule.forRoot(), + NgxsModule.forRoot(), + ThemeBasicModule.forRoot(), + ...(environment.production || environment.test ? [] : INSPECTION_TOOLS), + ], + providers: [APP_ROUTE_PROVIDER], declarations: [AppComponent], - imports: [BrowserModule], - providers: [], bootstrap: [AppComponent], }) export class AppModule {} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home-routing.module.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home-routing.module.ts new file mode 100644 index 0000000000..7089990134 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { HomeComponent } from './home.component'; + +const routes: Routes = [{ path: '', component: HomeComponent }]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class HomeRoutingModule {} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home.component.html b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home.component.html new file mode 100644 index 0000000000..677ee2e37f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home.component.html @@ -0,0 +1,333 @@ +
+
+ +

{{ '::Welcome' | abpLocalization }}

+ +

{{ '::LongWelcomeMessage' | abpLocalization }}

+ + {{ 'AbpAccount::Login' | abpLocalization }} +
+
+

Let's improve your application!

+

Here are some links to help you get started:

+
+
+
+
+ + + + + +
+
+ + + +

+ + + + +

+
+ + + + +
+
+
+ +
+

Meet the ABP Commercial

+

A Complete Web Application Platform Built on the ABP Framework

+
+ +
+
+

+ ABP Commercial is a platform based + on the open source ABP framework. It provides pre-built application modules, rapid + application development tooling, professional UI themes, premium support and more. +

+ +
+ + + + + + + + + + + +
+
+
+ +
+ + +
+
+
+ {{ context.title }} +
+

+ + {{ link.label }} +
+
+
+ + +
+
+
+ + + Details +
+
+
+
+ + diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home.component.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home.component.ts new file mode 100644 index 0000000000..c0b4602ee2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home.component.ts @@ -0,0 +1,19 @@ +import { AuthService } from '@abp/ng.core'; +import { Component } from '@angular/core'; +import { OAuthService } from 'angular-oauth2-oidc'; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', +}) +export class HomeComponent { + get hasLoggedIn(): boolean { + return this.oAuthService.hasValidAccessToken(); + } + + constructor(private oAuthService: OAuthService, private authService: AuthService) {} + + login() { + this.authService.navigateToLogin(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home.module.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home.module.ts new file mode 100644 index 0000000000..72d20ccc65 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/home/home.module.ts @@ -0,0 +1,10 @@ +import { NgModule } from '@angular/core'; +import { SharedModule } from '../shared/shared.module'; +import { HomeRoutingModule } from './home-routing.module'; +import { HomeComponent } from './home.component'; + +@NgModule({ + declarations: [HomeComponent], + imports: [SharedModule, HomeRoutingModule], +}) +export class HomeModule {} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/route.provider.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/route.provider.ts new file mode 100644 index 0000000000..a03945ada0 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/route.provider.ts @@ -0,0 +1,20 @@ +import { eLayoutType, RoutesService } from '@abp/ng.core'; +import { APP_INITIALIZER } from '@angular/core'; + +export const APP_ROUTE_PROVIDER = [ + { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, +]; + +function configureRoutes(routesService: RoutesService) { + return () => { + routesService.add([ + { + path: '/', + name: '::Menu:Home', + iconClass: 'fas fa-home', + order: 1, + layout: eLayoutType.application, + }, + ]); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/shared/shared.module.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/shared/shared.module.ts new file mode 100644 index 0000000000..58e820f816 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/shared/shared.module.ts @@ -0,0 +1,23 @@ +import { CoreModule } from '@abp/ng.core'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgModule } from '@angular/core'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; + +@NgModule({ + declarations: [], + imports: [ + CoreModule, + ThemeSharedModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], + exports: [ + CoreModule, + ThemeSharedModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], + providers: [], +}) +export class SharedModule {} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.prod.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.prod.ts index c9669790be..70af33346f 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.prod.ts +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.prod.ts @@ -1,3 +1,25 @@ +import { Config } from '@abp/ng.core'; + +const baseUrl = 'http://localhost:4200'; + export const environment = { production: true, -}; + hmr: false, + application: { + baseUrl, + name: 'MyProjectName', + logoUrl: '', + }, + oAuthConfig: { + issuer: 'https://localhost:44305', + redirectUri: baseUrl, + clientId: 'MyProjectName_App', + responseType: 'code', + scope: 'offline_access MyProjectName', + }, + apis: { + default: { + url: 'https://localhost:44305', + }, + }, +} as Config.Environment; diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.regression.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.regression.ts new file mode 100644 index 0000000000..1ce44bfc74 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.regression.ts @@ -0,0 +1,43 @@ +import { Config } from '@abp/ng.core'; + +const baseUrl = 'http://localhost:4200'; + +export const environment = { + test: true, + production: false, + hmr: false, + application: { + baseUrl, + name: 'MyProjectName', + logoUrl: '', + }, + oAuthConfig: { + issuer: 'https://localhost:44305', + redirectUri: baseUrl, + clientId: 'MyProjectName_App', + responseType: 'code', + scope: 'offline_access MyProjectName', + }, + apis: { + default: { + url: 'https://localhost:44305', + rootNamespace: 'MyCompanyName.MyProjectName', + }, + AbpFeatureManagement: { + url: 'https://localhost:44305', + rootNamespace: 'Volo.Abp', + }, + AbpPermissionManagement: { + url: 'https://localhost:44305', + rootNamespace: 'Volo.Abp.PermissionManagement', + }, + AbpTenantManagement: { + url: 'https://localhost:44305', + rootNamespace: 'Volo.Abp.TenantManagement', + }, + AbpIdentity: { + url: 'https://localhost:44305', + rootNamespace: 'Volo.Abp', + }, + }, +} as Config.Environment; diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.ts index 66998ae9a7..d92bd9747a 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.ts +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.ts @@ -1,16 +1,45 @@ -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. +import { Environment } from '@abp/ng.core'; + +const baseUrl = 'http://localhost:4200'; export const environment = { production: false, -}; - -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. + hmr: false, + application: { + baseUrl, + name: 'MyProjectName', + logoUrl: '', + }, + oAuthConfig: { + issuer: 'https://localhost:44305', + clientId: 'MyProjectName_App', + dummyClientSecret: '1q2w3e*', + scope: 'offline_access MyProjectName', + responseType: 'code', + redirectUri: baseUrl, + }, + apis: { + default: { + url: 'https://localhost:44305', + rootNamespace: 'MyCompanyName.MyProjectName', + }, + AbpAccount: { + rootNamespace: 'Volo.Abp', + }, + AbpFeatureManagement: { + rootNamespace: 'Volo.Abp', + }, + AbpPermissionManagement: { + rootNamespace: 'Volo.Abp.PermissionManagement', + }, + AbpTenantManagement: { + rootNamespace: 'Volo.Abp.TenantManagement', + }, + AbpIdentity: { + rootNamespace: 'Volo.Abp', + }, + AbpSettingManagement: { + rootNamespace: 'Volo.Abp.SettingManagement', + }, + }, +} as Environment; diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/favicon.ico b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/favicon.ico index 317ebcb2336e0833a22dddf0ab287849f26fda57..39695854d21146f87f3c65b27b9baef29b609255 100644 GIT binary patch literal 102968 zcmeI537pq+{>Q&#(w&J=Nlo~pW0Qn59Wxb$bSNuPvRT%hqf4s;ZCSZ(OWK-7Y)i-r zZEQ`BWU(4$h17J>bWX=~%{0yb`I^3;@t%*GgB-i_?eTc}yx-r?{dphX@9!Ex5EGOS z^e-l;AAC?X2(CpQHEO@!pkhpLdbJ=(N(%M%L2%hITswWg{Go3(h~chiXMdP2K1AzcFXkM=vQ{WM`>iK5IQHnHPQRzt zxkvx;s7jSiY*7E1QRg0e@=fmruisv=!i!UmiT(7r-c?Q>^;)%O7fpC5@2#Ahhc^GJ zc5>$0C7GKhH6QZVg@0M|&$Vr0QyMMH=rZ<+jg^Mi%Dysf$mp&MT9hAtOjga5#7eo% zGP;fLU+3RXrM>z31*vgKJ@U>8o_Y89phy2Bf`-j1jQZ1)u}K$x6jT4?v(qwTGiKeA zHD<-h+f$OuP5Lb6qfu?Y7@Ji-V?ffhLFHz3NS$`{((5kWxw^xI2B+jSed3wQ-T>bO zj~sPJaQ+{=WDg3KW!zk;Y3|K(S*CgxBl++`JUy(6z(p?=ty|YGk=d|n7^S(%X_z(L|&WIn=HLt>ZQ_|ydUtr;T zdSyLY#Igrv4-by~9>>cSTZimE4LMSznFLY?oLkyLnpE zd)n5`UYXYPwE4GW&AoEptxvsn@modAv*ozES`5p2szyqSw75|tnh*SPR_=#sv+f=d zlXd;YV<*Sw)yg_Kt>4{U6VqF!?Yg&ZTtb^&qtfoEaN6A?nq)0b=~sSu#q5NPDi{9! z!EeU=ZAI;GUCnMqo>=FOrrDd*)+MxBwy?{Rtv608KRhmDU~0~B8C6pH#SZWN_11rn z?wXu8krq2UO-Zga>9YxGcN}@zg9(ZE&aIL)qusQ%NBpJl{mU}iT*ApMeBzBF40H2G z38NlQ!Drq%XJp*HX>X3t?6zw|a)sPpY3pXk^lG0TpRjB|w++Fi?MIf&ZaO77Cih_~ zf>*n)XrIxoL*9`Czsy{9b=vilKB#oog0)3#D0W%KC)=0CkLtRx6MnPg?*s0>vemnn zcIX%69+C08c0|)_Ip6GBS~+82-MnELucp8AHIBA#e%ix#cU`h>#+a@f`qUdcVqn8z z zM)uCMkrjuR%dVETwq4@k2`~0+d3<)8w1s23F8q4R+S86s9a&VAocr!uTb^o|+xGnn z2PS5}mbUAj5vL7&-B{#mbYdu#lR?GJbS)#w?iUH<*n!yS+Bz5aLay}D}9?muk3bnEOYGy6Z@ zb7l3m<#Ge|wW5+X*D50`@5Yu{ucgfz)ppj=ZDRK)!vpN}g&O~yvHRQ><#Uh8SUhF% zpewiC)UaNyp1sCrUsrC~!hVA$jXde-8CTDE`0rO=IK21XS^tRC@TPE39dpFAupXU`D>FR$?OHATD0(0;eI&zqdx0K0YTc=oF1e_Qv=(7HqZuYc^` z-)G;IU9D|;myCx$`qKw9x+TZ&_%c23^4Au0yFWd-hzJ^V&#t=Dawe@CapN2P_6)-D z&fK&ieZc$;FVC9)^s0ohjaUC;)g7@XuBw>P>XLeSiJfnoS?eEjKHYU+!#C&UWL|ma zT}_jwrDw)nG9q_YO6tXX_Put0k#RKXzRN1jm{4ibOWPL@${3k6ZNuMQTQWQ6hFhxE zTvF+#nmucd&whUB+R;7w#b2F#cZUYc7bYGZJLJ#VE4N<0b?vP4s`iQLH}Z&qU&gH( zl6HOK*oQmS&Cctvul0Ry}q` z&$tESI{i8O%UZvm`)RNDGIrhg(15{JH($QKL$fV4hK^hK>k;R6o{}CjJTW8Zf$dvA zNw|Acqtv#&FE3`Y`CE>ABl$0zXSJ=Bu&n8bnpqtdti0pSrk~_)K6U)6Z<^hD{&Shf zPg*s1-&-TgebYYuuiJ7)*2~_L)~iEejqHIL8>ZyF!EO2e#PnOT?$2pgu63^ych9c< z@SmP8(uA1{Mpnx1N=itN&mJ%(x$^KW%kDb;@%LZ&;L01zWv@=Pdx|7uYZ4VcE^iy-bk;Sdwj;kc6n!Kt(u#m z`)j>{Q#&o}HEr#}#ko62Prf24XL)9jdw9mH@rTXHTTXK9nseSGPoyj!wC@kh@pg+T zi$~OaHU8ZlX-{-KyodxeeR+-4I&zLVn=)eAxcH@#tX@fTZzVX8|nk=}s?{h<@ zwy3c@d2^@a7@jC!xM%KR*%Q;oPKghO$7H=TrQ3rEBkvv2zv1hjwC=lS$MmB1k-jA6 zkq1BTw&M1?#%;~5x-T~Owv1OZbCXk2E9SoVLFRzY8F!=*tkpA;|JJ(gD>2z8W~}`) zPrZ+iU(n*E)(6kUH@!V0wmvuO+%0R95)aS*Z1}!ouTQ<_KWR(aPfNf1-znYh?Ygi_ ztpSZw`c=q%UVi!7!t{Q}6k*MYSsQ}$TMVl^^k1zrlE-$<`FP>oZFgTe@{}4MRm`e6 zB{9hDm@z+R$I|OM=4_ep&)*fXu#I^m>L$H-OV-(ccw%Gu+@5K1qxW5$k$G?1OZFU@ zHsY{>iFiBL2s8X>i?H{?P;NzOnTT##iEi18 zZplOcImuyu%QAG!pU^F5qFZ9o3;59v{ueSZdo6et3guRmmWk*VYkSGo_L6^2+iUI| z4{LkL*7lOE?Ijo3Uh*%*Oh4K(*kfe>!afk$KZ^eXANbJ%?`ImAc(3d65V~a}y5)!F z^PP-m$w0R(N4KP-Th^glcA;B-==$thB#-u}gYx|JsnlCK zqFaWcTjru$wxe5$+g~p2EpyN<&Cm<@iOl%Dr(vy;{UiHZA9xR+u-Mp_TwHua@gK#% z^?@k=fA8#k=sOa>=Xoqew-guO_O-fX``NnWB#(;d1^7Fn?nsZ*&@FAzEp5;(_PYj> zYk0(;faEG3H=|qDqFa1_*h9Ug z3wi;5JpR}^b4T`%>~DP_ivKA7tq=J5%h#j)|6i2<$@g_V=A&DD`}+D4+FShB^Y*p0 zbkErwSFQ0ME;?MUq^%np2|4`~J{`ap3Q*Rl9Zn5tjNPfp-8@k0` zpRcc>y`>+z#eW{Kww1ivqcggt5xV7ObW5S}{qy&A`bPFI{Qgm7|H9wb^Znb`qxdhJ zBW>(Uwy`g{P<*0C@gL=X>jOV^{`X(6uE!@We!TCZ-tt>?OF48)C3MS4=$19;7Joi_ z@0T3o;m4D&m#2ME_~TWky`=-XWd^#%zE>~VUwP0%fA=$6yb z3-IsvzE0c7{)K(Y+Fr7?y<}^9$&vk|__sa~#ebCltq<7TFWKgP$val0kGO#PqNq>3#oqfR`*S|cHH&}0?n=GoS#--hbW19_WeU2bFS?}$x}^%b z_)5#|4%Hvj*M^S7j^+ooN>~DR*#=c}5`;u+!OSZ8uIo@Lpy2bZD`|K~-k2f3plKuXr)uZ??e1_Kc zk|X>7cjtfq{bk?Z{djp3n_DWOTl%A0{QF&R>Mil;790DL{rO89|C<=Y@&UT#BXr9K zbc;W~udkrJ#g7O7{bT!DNwPnl{VYXtPfH2z|8}pE{qy(p@6EKaMD~yDZ+*b`PaFG^ zZR|_7u`k*8KO6g!<2|DIFZ_9G6#s>DWR(BSO@P?3ul*#KHvhjsAB!LFzCMihmc!94 zucBN0{)amL?c9>PTUrIDHM5)()T~w%t%9a!SQsnC!_Q~_{_L}bMj0w zpHpw~pC_77Z`p`$@yA<0y~WyIvfnE-ULv`X zM>}-OPISvYbju-)fAdyIzStvJ*Un=#x+M?2D88b;fS$p&Gc2uwCXFoYt+?lvS7>AL zU$2a#-r}FX{VZQ{bC1U87T;d}cq?gdv9_1&xA(`3>~DO4^NQ>r#lQ6dKYncNOOE3I z5Ptp}<^MvtU-tn&U;F-ObHC)>9)5fOc|M-@mS3Y=_M%&I(Jepp{-45l1tbNR#aOs^ zPw*(}USEQ`^<#N1Ea0pls9<3&`V7?KpI;jFmN;~a{p?+`-`}^7|Ne`;_m{-}>zTvi zkMGYP**~(s^#L3El5Oluwy`hS#=hhz{-gM}KH&S4eU_5!=c9t$PhE=5{gS=huX{lW za(q#3zRmr*57^u+;o+}$4)qrM+gQnCJ^cP#skfYoZfT8f z$wIgI<1M4!64}4-{lCEW@&jvo$=3FgIm^iYg>yhIXJYaF&&IxF8~c)N>`V6h7sNhw zAKTcMTsZcX3kt=)@<0^-QT!L>17$7#7ZOJnKi&@Y{r`F9v-qEfJxaaBUr#pmmK)Iv zxFlE;Yv~beAO~2!^ZtPMdBMgca!3K^1^32Un9KkEyUlfy{q>IGn#I5W&!*nu_g_lA zr8c_dDs+qgev3ceT-sZ#?Iru|Bl{a4;Cv$c7k&*;+UI{8`;w#hkK*6@fX)4q{d{C| zzvP14FWKgP$%S*j?gLT&=bUW*Pe!-+=Y6R2|JTfC(P!3{v(PPT(JlV^?0ebBEv~bi z6P$8{#s9vDueS^u9%*6j+dYbVe?6V{mWJq-7U-5u=oWu})2X+VN4GqQZt?s3`UAAL zB%@pW_L2Py`#@y>A9nw@u`k)izGNHwl5Olu_Wd)8|0w>A4@CL@05M`?#^!#>S9(MR#_=j5e&*OULx0FY>+<?e1>lE_iJr0+1g%mWdF$i)(3ol^mQBil5Oluj^aOxf9nG__e-|9U$XCChg$dZ zq0Rl0ZSI$BbHC)B9{&1l?w4$Hzhs;HCEMID*&om5e#tiXAM3yWP5l@T|MwV&I{*9Y z_22LF^MTIPat^xXNp#C1bc;X!H`H7F&%^!KC(USYseo>|4&Aa5-Qw?e1ND}U=$7Nr zErq`SM4dmLuNR6J-`>8?cw;;w`xkzX%GzGCwY_9(d&$=Jl70JF+e@~#muzh>IkJBg z|JDb5fAaMx{-gX~-~)cX_jU41Bac*cOMP_9W#|_B>@Rt*#{zVV{jR!X-+#Ap%`zU{ z(gfY&=i{TOx15A-IT79BKW|l}-f{-IWiq;D2fD@IkFAqDz@rknR*}v%Dt8C*;E#uKGHufb)@gK#%^?{@C z35(7Bl5OsnT-Nh{3};}m_jbwt>k<3ewB+LM|5ww-G6dbS72V?JPhVe4d&^7cmSO0Y z-=JIiqg#ffTV|qL)}vee_4vB~`p?hz{{7_^#>uTS>jVE&@$bi{uM>;KJ^vMX|EGUB zj~eKfW6&-3y#vXwdaOdX>_E3zTOCODKaW^Jf6L40mOki~BhfAPvl7V@Jp9-1#pSEl z>2Em>y#U`nKeo=?k^Lk4TOaV_-Pa55{rHaLDEf?$tQUXM7JzK zx9mf=__nrnlKtnKLg($<>t_R`al%_QT$sUs7H>lMESq4fBd5J zzkk2+Y$>}=_UMUj@$cvU_s#dw-m)Cs@>g`r?dX=S=$0h(qUcV&We~b$I=W>gy2a)? z$^QM_*RyD28INwMg^@86F&kE$MV=#~@EE%v>8$^QMaw7UO! z;ZDXZioMiZN;{w5-k;z9JhK<`Sqgn0&_B=rHl4ji_AmUIb!7i2{;dz#*q0o|f8oz> z{d`(l-Os;8<$l%K+%LJb^ZD)l`K|3G|4-Y$xce3RujFwpx+N9evI*T%+UG6bKBd+D z`Rs22B+vHvExM&9dI80q&;NQoXA#-|f8EGM>@Tu^5rcy#mQ? zJO-m%o<+C3jc)k_-I9iGnTKwfif-}WUusFcr5btxKVa)oS5APljO<^AJt4Ax88&_t z|3A9%^Z2)A|15Em^{e)C>I4t)RGi*RIT##rmmtf`0p-?cj=8m%q**TX(tNoky{H9x-e7kXLHGP=eDP z#7(WTv^w1j^)HETR-b#6l{Qv$a|KWN5@Q@~y;?|ItD8-i{TPa1h#};()dC2pW;)ak0l%kyYQ8w`d24ziU zYX8m-l&wN0QVRFI8TWZxX+MYY+q=)%mNB;YQ^=W=B3AqW(|xb5%$e_plx1rF?6+>n zLzH4;h;KJvcc0H@&|bLjdZiL~ltM#0PaObUOaq-&_XHWP2u9LVfoLyW$XMdL; zoSj@*o<0`Wt}@p}hmaYR!sT^0ekRw%RUvL%XJ_{u*@SwL7IHe}>CW!1mcaQ-q5d7QC(S>OM!I1iB?;_U9u*~Q^e)Qh)5`cR7akb~LZ<%{QNC*1f4 zE8YG3UD}GI5I2sykNEju7VSiwF!pVVE}Z?{eX2g!L|Naz%a`ulon7AKY(%Ay{*=O< zdv9b>TKjLJkN6-&F! z^AheHT{(5h_#5qCDYL-?((=!BZQbL@a+(X^8ZGz3D<4{vMB5OU&0v(cP=iD-1E~3)QQz0u3d@j-!h1g5xs-F ze0m0%Ek%!D{e2;$DM$AVwl@=Pg4R_9b4?6!^X)?yH-)&oG#6dCcAp~)=O;~&g={Ze zy9LOitnYs_XCU0UxN~a6HPJ3)C#7(9D3SeL9_|sWYZtPbQsjAjh5l8~VA~m@RnVl7 zV7@gWZhfzy3zt{&pXbnBy}Qph=bC67;`Zg*t>n5W>-*o$83=bSF3#h*CVm~_KF`ZV z7sc5>g*GWk!DTT5+fE4a?e6L8$C3}mo)rWY1Y@}85Vt<}Ixdbn;qKqA-tEWbuY=it zJ$;31@A{Xu{kwec_P>fV5%oeYqZH2WF8=#+P1Ff-&uMO)Xa=c6#ql zR15ilQn>n$kw0!3)T<$S1RKxa&$Jy$XCU0Ul+^xT(?_`b>siQRZHOB$%(E@7YaO(>?wsJ1BZPY{bY;t+;gN#Aw}<%o zI-TpHVMq%~u_?sOHyvG+4|$SOxO!JUz%`K^;;xsq{a?xc#h#Fo?%$o)WAqd5yzf93 z{(aTy?@=e5U7kV~ABMPfxbe4hU0f65;y(ZRl54J=a*gO6;^O}^bm7`ls5h|GEKL>#(Hn2@r%|3>Uzq=wX| z6n^}>cv?W6@Sm%57#=c{QmhYgUHmH~hf+AZecv*hF~r*;F3-Dozm4m{{~XB8H<3C~S-ABctfWnu-oJk? zoQEI(h3rp#xsV!^;+PPZA6`Wlt3q7fc6N28yN|4(op?E<52ZLV#NC%BpbHn@&fczk zojP%x@b^_xoxWv#|0i$;Vor#&zdINAoaoNm<>7eRiz*?`ZmrS9MIH(0!j0$px#xs| z)QKe_`zVF8x6|coB7fZ_we!K+xp64VnmxGn=xxhWAxpFUKiG%fX*Ij@2oY9LuBL6wit@Fn!nWs$e-#=H*!##&xi!4$@ z-21Wzi(6;UgO#qIdmS*Fam8;#YEstp*Yi{Btf5Tr-#>58!{voG$YOBFvy{R;$A5w> z(n97@im4&)e$f(LR1^MuzcigS{#WfkFK=ED#OhB9gymkHXkuQTEA#(s0)Ifkl{Cxm z;L0G7q`ys&U*>m1cV+lj7u?^sh?}?nm)fxfC7t;fJ1@To-0!%((o?_FY=7s2{5Kpr ze|-mOQmV@ZYjpz`)jMqC_wn_(uwC5t{mU#U!@mKM=#}68Er|S%7|@l@POi-FDEkKd zQ%QyUdl;1ZI}xYDRZ#GEBK{BM5d0$+V&QPmdw|{GR(J{Cg)d<%=>DG_qSuC7;B$Bj zo`)OY0%!nwt$ElXSlU5{VEh=(0eaqR0eU7K3(4?0ECD_1=>E1Fw03u|lB{cbk7@<{ z2WEoaf4CR)nx{D&2bv@1pbPn)72&u#r&e$yXl^}2XF^Gyul)P5p0~80W$-7^{r60e zZ4ap}7_Tl|3J-zilyCU!k*+nVE(2D>a!7|Yunu;C+8n5_UMr~IXwYksAN*Q@F_iPQ zcHOi70`Gy=Cx6fy|ukL~2A@Y&?AQ==Vb3psjS?mFgrBZuPeEbv~KzKKG0ka#iV?BHVlTo&;d??6QE9rsXa=>v&-&?i9y|g|!H%!OH>Egz9T^aka=`cMm$HyS|?co@dR zQ!oJ@hX>&f_ziT2#-R4vLqGT<%!KW*2Q=q5pmnq=sSRjb7vwWKcei$prM0hw{-E=$ z2-V?u&_2q+MWD5+t=1u1?Eu{m8r+f#N!ZvVos9XaYqaSE3%2itPYIp*4E{#Cf zQNv4L5++o(*nYTBqtXr(#sO;zYO?4z&Jb zxUP1Wz!h+Hh}Lj1oC!@qe$W@j!EDeT0_9^d7FK}#t7+&DvB+Iv z0%+Zi>ByQ_adUw|WbPLMxo51RXHcoeku zs&FLeT(tg&K{nF9JBI8374jHJ2ldxD8m|L1hNIvuP~Scf4+mPme54mV2O8%jOY(`5 ztbZr%G@j1#n^2Z-=7Q#51&@I2`+v|5?uSKS*U$_-|M`K^t$#Ce1}GmWU)&6@g3d;L zwbnO5u`1v14>}i}Yi}sY`nC42-~;$5lyxo|-yu6Z2C}o_T4ysIRIjxt7J5RX&`-4f zhd^U%J!&g|cmZS&H|`wdVQ@I~1?^3BYFE_y)xI(0{}wMHXc+H)hnEmEs&9US_ix&0 zevK*nXpgl(ew+wfK(Va)XFz*U?vnpM2pd6lAHf888*~=BrhUHzSAk+|0H~enUVtLj zekBE(-pc)IIpTbN67$1s4TxwCNN)at8esAMzWmSz~U4HP9ZKgM3N8 z>ufa_`5LGO{`x=X+RI?u%Vx=-e0u`i1FNCf_3O8A7X%L%{1%SyLjUI5-@$FX!u33XP!F`v1GjjfKxXurrJk9)mOXsh7Ujg~Dd{Fbx2VGaJE0@YP^34Z8 zYgC>5Y$a?5=Z}hO<re0hEmB4c)_HTd_T6UvJCWJL#=c#G zclZs$skP~&errK%c?+%u#qnJr8|Zo#JPB>UU%&RQ+_oF`g4)X_cSAh<8kBQXmkUL$ zKP6m$7uKoo&AW5=%JpL}4wiQ^zn@yhxSCgcxfSBzW_TTRU297Q`Ln-%<>U1r-%;GE z{VEs*_24qlnzeSFzv8+t)PWJ;Vtz65wEe#Y`ldT;*YAP6bvu3ixQl~T=bPXEd`Vx; zy9jOv-D_`x1Fc{F{}9OE)kn5j2U|h=ENcC#Qy#qmj)p<-AJBE3;hX#>rAqhUi$r4f zcGkZGvduo^OWTO)tGfjY6IurKtJ6oZ=W@gQ$QrvED0lx8G`7xo0fVIGpgD9#AAqjQhx31r(}#=<+`)~Gd~39aEt(7CHlcF@@^1Q$m|tzYN;JSazWhDSl;z@r@fvztFwN<=d1v9|)Nk^Uwvq0_C zzNq!fR3Z%mG~&ikW928Ds-pD{B49S6_qj!08}=l-;xk z_0^ouncs3$&^;<*ezBTVPAit3fQb2Xi zC$;vLP#Zpj4WN3RMt7d?z#m`H}on`ECcum$V1@ z+7kE({taJ%Y^SwrubTfQxE;<0t??dEd(GowQ#O`gC4ubgVs{y`;`|JVhu?$tr#UoE zQR`RUng)G9=avYAz~(Wx*8`PWyXLtb&H>r+29RIv1oc?~^PoB?X08S8eIKY^aX0{u zm48xpfH6>#^H+b_UcRqA$PQYA)^Z&@35!5yq&DBcQc#RN2K_;ODuC;=5!tO>J~9D1 z!ttQ9`55e3=vu*ha>&1e%RuuEh4@f+{-b?w0r^EXXfEwRc98#ch33!>y2I^o7yJQ6 zgWB8*&R@?!?g{c$#fiq-4I2AJkUbheFGvQRgVrzqksn5BV5q1gW5T>Vx*< z)-T(wf(4*4G>^vH2JganXadK9&h;p$11G_WP#da){H-o%{gdGX*Z~?#V@j4^w1!IX zD9Be-FSPbW5D(S&uReeMG3Y{TP5{}hH`w*RjD9r?0p)MSfg4w)&ger>Tn>X<;5Q(D z(U}Z~nIJz}54NxTNBy*R?NL6j{<2FBsIB5&w(0NI?Mkl623mhph=(KKa&YUeeW+gkq_|uHbKrH*p8pQBU@m+C+NaK0eKKJs$lq@Sjok(Y!wk^c)lTdG z7mR|l-MamfI>llBhr*Ov{|li0LUR81k|`U)#h@|eSMH27Pf5w9?Q(b<6sz+0N^l!! z&s)HbH4$AgQ|xz*wJ+LP|0!5M*ULdwr~$`-&P;wKpOXJ*KRRC*k6Nc}ueezO@@Ltl z543$p$Z%eI!oE)T(~GiYfJ$3mCe-lBvAc8SOObhA2^?pESug4`R{!n zY^?{oPQN(NoRi^BkpF3|_kdzob8Lp?@K<;MZilX*ed&zF`OqB(!6PsoR)XT!owZxH z{A@mqhg$GMK7Uj$(;j{eI>Tn5^VRxSgXWaKY8{K=J(vy8!W5Vol0vEdy#ez7|G*Yd zU!8&WuoZMBYBvnJK~*S!u=6eH^>CacD76>)mDaxs+?n~Me0UG+43WGS{B}-PdyS`j z)(cLDg1@m{(sh=k9pfs;odefGDtrc;Kxe44bZa_T>CRjCFx^XKuirvj_|d<&#~g>l z@z5N82O~hfD&LU*Xif5M`9emBi5@w1ktO#5vucUwYo|Ac*HXMEk!cX39}~Z;0#r)M(_l z<=&t^Un2|uA3~;Fp>|~FQ7ZXlZIqs_RED|=>G}U$nH1`N8D1`2)Gw@-T8kM~RG0ip zv))3w+ZW{;MI~ka_u%+zl!Z#p!#}S)2GTk1|9X}wX*iPW4H&LIBtgOVvr^=`8hlfx(7CZAN>E^(HPJQl&=+gMddn|SCsRX!Jptva9;*2 z#g6lzv+B}UakCNJ*sfImRSsAV>97uT&v5mwRGZOIs_zWZJ^_?-loQ=pI%DNT#d8Nx zeAfv%m9ir!@63hm;QA^5&VdsBKQ3r@9xMgdUwf5ZlfZrEcO>#@&=%T&e4_@$KxNP~ z!Yi;F+&GJni~PO|_1d?cTQ=_x6`?xh`xWKmp!3k$c7SZO7$(C-pfyy1n_(?z4Z2qz z^!pyv$=>t9t#=8s_N+a%hg6sdiUpmAYv-3*(@fA_4ucC}Ipl!Wro9x(t?02JUvpz= z-|ghElv>wkVcpY|iix2h{~ioOK0$m&ZXeHc*t7odQe~a z@oz!%=$?KOXe`xfew~NL6y-y7tul0g8KARP`%JhB)K+uKN98MNps$f?f3YwD)L!Tr zQfG8QNPS9w{;phm7Un@JOo6^o17!C*!JWm|$nw#ua16+AwXXcX=}h@6NC(ZWKH9@k z@D}uec(C*9T%H59x5&QlLK3KrY~;>i7IOaI7^Z9rnqM~6-gGYNtFhh$oq2yy-`;Sr z`8QGb0el1-z^!Ekvi2Z*=qzC&23P+IQx6e;d^NP0;+m1h5Fj)z}^?sK`|&mVrCcc9Pm_Wun;`pAbgo?VSMoZNksv4)j^v{=dOTo7cj&izs!UkR9y& zI)8WO>yWjE1I@2%%5T*`{v>N^TF|Ljm-N?9AO0-dee%!TAo zKG6JMQzv_!1@1n^neG3(Sn@^vGoPWjb4{mxLudh;Kyyt8s$cNS9MrR`zh324w_%M_hm0e{uktcTgSml`P$o{GuOUv19uNn zpNVkL_gblQ`_G>rUH9@Da17`?bZ=Cw=xjBYkd0Qr%g_go1le)|xR}x0uS1c4TY&l# zU=C=0twlbmemcW=r~(?hHCz;uK&f`BlTQqUC9n@PuS%`^1ZVT2O4@0x$qEi&6ve!A!2V*O1tf!f!^PnWWW{%L(3-#V zkLx6g(u+w(3slOC{SPJvO%zH|97kM zzf-ka-=X5#YPbRZ2@^nT-wI2?^;es=z?dy>)pu(2T^jTuunRQKI=CL@z#`B%cZ23v zyx$4KKk{p#CRA0P&#y zvcoN)ed(F!b(jS@JK69?7!0{E%K4y5blF4p(|$GgtuPtn9~x8Fo&oip3cM@%?LTzg z&pUwjsQtbNQy>N22VK*;w6}wPMnc{3Fap$H_ZRUls9(XeiJN%^tI%(NN0s#5JfeS| Kp#2tJdH+9GLJime literal 15086 zcmeI332;U^%p|z7g|#(P)qFEA@4f!_@qOK2 z_lJl}!lhL!VT_U|uN7%8B2iKH??xhDa;*`g{yjTFWHvXn;2s{4R7kH|pKGdy(7z!K zgftM+Ku7~24TLlh(!g)gz|foI94G^t2^IO$uvX$3(OR0<_5L2sB)lMAMy|+`xodJ{ z_Uh_1m)~h?a;2W{dmhM;u!YGo=)OdmId_B<%^V^{ovI@y`7^g1_V9G}*f# zNzAtvou}I!W1#{M^@ROc(BZ! z+F!!_aR&Px3_reO(EW+TwlW~tv*2zr?iP7(d~a~yA|@*a89IUke+c472NXM0wiX{- zl`UrZC^1XYyf%1u)-Y)jj9;MZ!SLfd2Hl?o|80Su%Z?To_=^g_Jt0oa#CT*tjx>BI z16wec&AOWNK<#i0Qd=1O$fymLRoUR*%;h@*@v7}wApDl^w*h}!sYq%kw+DKDY)@&A z@9$ULEB3qkR#85`lb8#WZw=@})#kQig9oqy^I$dj&k4jU&^2(M3q{n1AKeGUKPFbr z1^<)aH;VsG@J|B&l>UtU#Ejv3GIqERzYgL@UOAWtW<{p#zy`WyJgpCy8$c_e%wYJL zyGHRRx38)HyjU3y{-4z6)pzb>&Q1pR)B&u01F-|&Gx4EZWK$nkUkOI|(D4UHOXg_- zw{OBf!oWQUn)Pe(=f=nt=zkmdjpO^o8ZZ9o_|4tW1ni+Un9iCW47*-ut$KQOww!;u z`0q)$s6IZO!~9$e_P9X!hqLxu`fpcL|2f^I5d4*a@Dq28;@2271v_N+5HqYZ>x;&O z05*7JT)mUe&%S0@UD)@&8SmQrMtsDfZT;fkdA!r(S=}Oz>iP)w=W508=Rc#nNn7ym z1;42c|8($ALY8#a({%1#IXbWn9-Y|0eDY$_L&j{63?{?AH{);EzcqfydD$@-B`Y3<%IIj7S7rK_N}je^=dEk%JQ4c z!tBdTPE3Tse;oYF>cnrapWq*o)m47X1`~6@(!Y29#>-#8zm&LXrXa(3=7Z)ElaQqj z-#0JJy3Fi(C#Rx(`=VXtJ63E2_bZGCz+QRa{W0e2(m3sI?LOcUBx)~^YCqZ{XEPX)C>G>U4tfqeH8L(3|pQR*zbL1 zT9e~4Tb5p9_G}$y4t`i*4t_Mr9QYvL9C&Ah*}t`q*}S+VYh0M6GxTTSXI)hMpMpIq zD1ImYqJLzbj0}~EpE-aH#VCH_udYEW#`P2zYmi&xSPs_{n6tBj=MY|-XrA;SGA_>y zGtU$?HXm$gYj*!N)_nQ59%lQdXtQZS3*#PC-{iB_sm+ytD*7j`D*k(P&IH2GHT}Eh z5697eQECVIGQAUe#eU2I!yI&%0CP#>%6MWV z@zS!p@+Y1i1b^QuuEF*13CuB zu69dve5k7&Wgb+^s|UB08Dr3u`h@yM0NTj4h7MnHo-4@xmyr7(*4$rpPwsCDZ@2be zRz9V^GnV;;?^Lk%ynzq&K(Aix`mWmW`^152Hoy$CTYVehpD-S1-W^#k#{0^L`V6CN+E z!w+xte;2vu4AmVNEFUOBmrBL>6MK@!O2*N|2=d|Y;oN&A&qv=qKn73lDD zI(+oJAdgv>Yr}8(&@ZuAZE%XUXmX(U!N+Z_sjL<1vjy1R+1IeHt`79fnYdOL{$ci7 z%3f0A*;Zt@ED&Gjm|OFTYBDe%bbo*xXAQsFz+Q`fVBH!N2)kaxN8P$c>sp~QXnv>b zwq=W3&Mtmih7xkR$YA)1Yi?avHNR6C99!u6fh=cL|KQ&PwF!n@ud^n(HNIImHD!h87!i*t?G|p0o+eelJ?B@A64_9%SBhNaJ64EvKgD&%LjLCYnNfc; znj?%*p@*?dq#NqcQFmmX($wms@CSAr9#>hUR^=I+=0B)vvGX%T&#h$kmX*s=^M2E!@N9#m?LhMvz}YB+kd zG~mbP|D(;{s_#;hsKK9lbVK&Lo734x7SIFJ9V_}2$@q?zm^7?*XH94w5Qae{7zOMUF z^?%F%)c1Y)Q?Iy?I>knw*8gYW#ok|2gdS=YYZLiD=CW|Nj;n^x!=S#iJ#`~Ld79+xXpVmUK^B(xO_vO!btA9y7w3L3-0j-y4 z?M-V{%z;JI`bk7yFDcP}OcCd*{Q9S5$iGA7*E1@tfkyjAi!;wP^O71cZ^Ep)qrQ)N z#wqw0_HS;T7x3y|`P==i3hEwK%|>fZ)c&@kgKO1~5<5xBSk?iZV?KI6&i72H6S9A* z=U(*e)EqEs?Oc04)V-~K5AUmh|62H4*`UAtItO$O(q5?6jj+K^oD!04r=6#dsxp?~}{`?&sXn#q2 zGuY~7>O2=!u@@Kfu7q=W*4egu@qPMRM>(eyYyaIE<|j%d=iWNdGsx%c!902v#ngNg z@#U-O_4xN$s_9?(`{>{>7~-6FgWpBpqXb`Ydc3OFL#&I}Irse9F_8R@4zSS*Y*o*B zXL?6*Aw!AfkNCgcr#*yj&p3ZDe2y>v$>FUdKIy_2N~}6AbHc7gA3`6$g@1o|dE>vz z4pl(j9;kyMsjaw}lO?(?Xg%4k!5%^t#@5n=WVc&JRa+XT$~#@rldvN3S1rEpU$;XgxVny7mki3 z-Hh|jUCHrUXuLr!)`w>wgO0N%KTB-1di>cj(x3Bav`7v z3G7EIbU$z>`Nad7Rk_&OT-W{;qg)-GXV-aJT#(ozdmnA~Rq3GQ_3mby(>q6Ocb-RgTUhTN)))x>m&eD;$J5Bg zo&DhY36Yg=J=$Z>t}RJ>o|@hAcwWzN#r(WJ52^g$lh^!63@hh+dR$&_dEGu&^CR*< z!oFqSqO@>xZ*nC2oiOd0eS*F^IL~W-rsrO`J`ej{=ou_q^_(<$&-3f^J z&L^MSYWIe{&pYq&9eGaArA~*kA - DevApp + ABP Dev - - + + +
+
diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/styles.scss b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/styles.scss index 90d4ee0072..efe57bd8c3 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/styles.scss +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/styles.scss @@ -1 +1,26 @@ /* You can add global styles to this file, and also import other style files */ + +@keyframes donut-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.donut { + display: inline-block; + border: 4px solid rgba(0, 0, 0, 0.1); + border-left-color: #7983ff; + border-radius: 50%; + width: 30px; + height: 30px; + animation: donut-spin 1.2s linear infinite; + + &.centered { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } +} diff --git a/npm/ng-packs/nx/ng-packs/package.json b/npm/ng-packs/nx/ng-packs/package.json index 184de83209..1f9256d836 100644 --- a/npm/ng-packs/nx/ng-packs/package.json +++ b/npm/ng-packs/nx/ng-packs/package.json @@ -4,7 +4,6 @@ "license": "MIT", "scripts": { "ng": "nx", - "postinstall": "node ./decorate-angular-cli.js && ngcc --properties es2015 browser module main", "nx": "nx", "start": "ng serve", "build": "ng build", @@ -26,7 +25,9 @@ "workspace-generator": "nx workspace-generator", "dep-graph": "nx dep-graph", "help": "nx help", - "build-all-packages": "nx run-many --target=build --all --exclude=dev-app" + "build-all-packages": "nx run-many --target=build --all --exclude=dev-app,schematics", + "compile:ivy": "yarn ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points --tsconfig './tsconfig.prod.json' --source node_modules", + "postinstall": "node ./decorate-angular-cli.js && yarn compile:ivy" }, "private": true, "devDependencies": { @@ -74,7 +75,7 @@ "@nrwl/tao": "12.6.5", "@nrwl/workspace": "12.6.5", "@schematics/angular": "~12.2.0", - "@swimlane/ngx-datatable": "^19.0.0", + "@swimlane/ngx-datatable": "^17.1.0", "@types/jest": "26.0.24", "@types/node": "14.14.33", "@typescript-eslint/eslint-plugin": "~4.28.3", diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.json index 62ebbd9464..89d2f8f919 100644 --- a/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.lib.base.json", "files": [], "include": [], "references": [ diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.ts index 3b1a49b89c..830749ac21 100644 --- a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { finalize } from 'rxjs/operators'; import { AccountService } from '../../proxy/account/account.service'; @@ -26,7 +26,10 @@ export class ForgotPasswordComponent { this.inProgress = true; this.accountService - .sendPasswordResetCode({ email: this.form.get('email').value, appName: 'Angular' }) + .sendPasswordResetCode({ + email: this.form.get('email').value, + appName: 'Angular', + }) .pipe(finalize(() => (this.inProgress = false))) .subscribe(() => { this.isEmailSent = true; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.json index 62ebbd9464..89d2f8f919 100644 --- a/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.lib.base.json", "files": [], "include": [], "references": [ diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.json index 62ebbd9464..89d2f8f919 100644 --- a/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.lib.base.json", "files": [], "include": [], "references": [ diff --git a/npm/ng-packs/nx/ng-packs/packages/core/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/core/tsconfig.json index 692cc17b32..6ead5a6a59 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/packages/core/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.lib.base.json", "files": [], "include": [], "references": [ diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.json index 62ebbd9464..89d2f8f919 100644 --- a/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.lib.base.json", "files": [], "include": [], "references": [ diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.json index 62ebbd9464..89d2f8f919 100644 --- a/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.lib.base.json", "files": [], "include": [], "references": [ diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.json index 62ebbd9464..89d2f8f919 100644 --- a/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.lib.base.json", "files": [], "include": [], "references": [ diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/setting-management.module.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/setting-management.module.ts index c0df97dc22..d27ae0b0a2 100644 --- a/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/setting-management.module.ts +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/src/lib/setting-management.module.ts @@ -1,8 +1,8 @@ +import { PageModule } from '@abp/ng.components/page'; import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; import { NgxsModule } from '@ngxs/store'; -import { PageModule } from '@abp/ng.components/page'; import { SettingManagementComponent } from './components/setting-management.component'; import { SettingManagementRoutingModule } from './setting-management-routing.module'; import { SettingManagementState } from './states/setting-management.state'; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.json index 62ebbd9464..89d2f8f919 100644 --- a/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.lib.base.json", "files": [], "include": [], "references": [ diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.json index 62ebbd9464..89d2f8f919 100644 --- a/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.lib.base.json", "files": [], "include": [], "references": [ diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.json index 692cc17b32..6ead5a6a59 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.lib.base.json", "files": [], "include": [], "references": [ diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.json b/npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.json index 692cc17b32..6ead5a6a59 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.json +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.lib.base.json", "files": [], "include": [], "references": [ diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index edae640cd1..7aa4976345 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -15,34 +15,34 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { - "@abp/ng.account": ["dist/packages/account"], - "@abp/ng.account.core": ["dist/packages/account-core"], - "@abp/ng.account/config": ["dist/packages/account/config"], - "@abp/ng.components": ["dist/packages/components"], - "@abp/ng.components/page": ["dist/packages/components/page"], - "@abp/ng.components/tree": ["dist/packages/components/tree"], - "@abp/ng.core": ["dist/packages/core"], - "@abp/ng.core/locale": ["dist/packages/core/locale"], - "@abp/ng.core/testing": ["dist/packages/core/testing"], - "@abp/ng.feature-management": ["dist/packages/feature-management"], - "@abp/ng.identity": ["dist/packages/identity/"], - "@abp/ng.identity/config": ["dist/packages/identity/config"], - "@abp/ng.permission-management": ["dist/packages/permission-management"], - "@abp/ng.setting-management": ["dist/packages/setting-management"], + "@abp/ng.account": ["packages/account/src/public-api.ts"], + "@abp/ng.account.core": ["packages/account-core/src/public-api.ts"], + "@abp/ng.account/config": ["packages/account/config/src/public-api.ts"], + "@abp/ng.components": ["packages/components/src/public-api.ts"], + "@abp/ng.components/page": ["packages/components/page/src/public-api.ts"], + "@abp/ng.components/tree": ["packages/components/tree/src/public-api.ts"], + "@abp/ng.core": ["packages/core/src/public-api.ts"], + "@abp/ng.core/locale": ["packages/core/locale/src/public-api.ts"], + "@abp/ng.core/testing": ["packages/core/testing/src/public-api.ts"], + "@abp/ng.feature-management": ["packages/feature-management/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.permission-management": ["packages/permission-management/src/public-api.ts"], + "@abp/ng.setting-management": ["packages/setting-management/src/public-api.ts"], "@abp/ng.setting-management/config": [ - "dist/packages/setting-management/config" + "packages/setting-management/config" ], - "@abp/ng.tenant-management": ["dist/packages/tenant-management"], + "@abp/ng.tenant-management": ["packages/tenant-management/src/public-api.ts"], "@abp/ng.tenant-management/config": [ - "dist/packages/tenant-management/config" + "packages/tenant-management/config" ], - "@abp/ng.theme.basic": ["dist/packages/theme-basic"], - "@abp/ng.theme.basic/testing": ["dist/packages/theme-basic/testing"], - "@abp/ng.theme.shared": ["dist/packages/theme-shared"], + "@abp/ng.theme.basic": ["packages/theme-basic/src/public-api.ts"], + "@abp/ng.theme.basic/testing": ["packages/theme-basic/testing/src/public-api.ts"], + "@abp/ng.theme.shared": ["packages/theme-shared/src/public-api.ts"], "@abp/ng.theme.shared/extensions": [ - "dist/packages/theme-shared/extensions" + "packages/theme-shared/extensions" ], - "@abp/ng.theme.shared/testing": ["dist/packages/theme-shared/testing"] + "@abp/ng.theme.shared/testing": ["packages/theme-shared/testing/src/public-api.ts"] } }, "exclude": ["node_modules", "tmp"] diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.lib.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.lib.base.json new file mode 100644 index 0000000000..edae640cd1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/tsconfig.lib.base.json @@ -0,0 +1,49 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "rootDir": ".", + "sourceMap": true, + "declaration": false, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "es2015", + "module": "esnext", + "lib": ["es2017", "dom"], + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "baseUrl": ".", + "paths": { + "@abp/ng.account": ["dist/packages/account"], + "@abp/ng.account.core": ["dist/packages/account-core"], + "@abp/ng.account/config": ["dist/packages/account/config"], + "@abp/ng.components": ["dist/packages/components"], + "@abp/ng.components/page": ["dist/packages/components/page"], + "@abp/ng.components/tree": ["dist/packages/components/tree"], + "@abp/ng.core": ["dist/packages/core"], + "@abp/ng.core/locale": ["dist/packages/core/locale"], + "@abp/ng.core/testing": ["dist/packages/core/testing"], + "@abp/ng.feature-management": ["dist/packages/feature-management"], + "@abp/ng.identity": ["dist/packages/identity/"], + "@abp/ng.identity/config": ["dist/packages/identity/config"], + "@abp/ng.permission-management": ["dist/packages/permission-management"], + "@abp/ng.setting-management": ["dist/packages/setting-management"], + "@abp/ng.setting-management/config": [ + "dist/packages/setting-management/config" + ], + "@abp/ng.tenant-management": ["dist/packages/tenant-management"], + "@abp/ng.tenant-management/config": [ + "dist/packages/tenant-management/config" + ], + "@abp/ng.theme.basic": ["dist/packages/theme-basic"], + "@abp/ng.theme.basic/testing": ["dist/packages/theme-basic/testing"], + "@abp/ng.theme.shared": ["dist/packages/theme-shared"], + "@abp/ng.theme.shared/extensions": [ + "dist/packages/theme-shared/extensions" + ], + "@abp/ng.theme.shared/testing": ["dist/packages/theme-shared/testing"] + } + }, + "exclude": ["node_modules", "tmp"] +} diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.prod.json b/npm/ng-packs/nx/ng-packs/tsconfig.prod.json new file mode 100644 index 0000000000..25390144ad --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/tsconfig.prod.json @@ -0,0 +1,23 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "module": "esnext", + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "typeRoots": ["node_modules/@types"], + "lib": ["es2018", "dom"], + "types": ["jest"] + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true + } +} diff --git a/npm/ng-packs/nx/ng-packs/yarn.lock b/npm/ng-packs/nx/ng-packs/yarn.lock index 6bb96703d1..a2baf774c8 100644 --- a/npm/ng-packs/nx/ng-packs/yarn.lock +++ b/npm/ng-packs/nx/ng-packs/yarn.lock @@ -3127,13 +3127,6 @@ resolved "https://registry.yarnpkg.com/@swimlane/ngx-datatable/-/ngx-datatable-17.1.0.tgz#ef2f91c3783526e7e89ac7a62a53e7bc9e1c90d5" integrity sha512-zYUS7uNO9OJ5UQZFuuTRjlPu6vdKA+FHYLfeEs7PgSuUiDCcbl2SWoUdS/3zIoWn/qQyws767ueWiAvvWUbpEw== -"@swimlane/ngx-datatable@^19.0.0": - version "19.0.0" - resolved "https://registry.yarnpkg.com/@swimlane/ngx-datatable/-/ngx-datatable-19.0.0.tgz#7eed84ba276ebb9e4761233f8ac95d38fdff45b7" - integrity sha512-S8eknIQeZtr5aPZgBUItHmt+aQwrI32Hm3jvrxqJXK9J43oDzhIKT2qR1rre3s0XlBn6Zl8LAbmlKotQ5nnxnQ== - dependencies: - tslib "^2.0.0" - "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" @@ -5325,9 +5318,9 @@ color-support@^1.1.3: integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== colord@^2.0.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.6.0.tgz#6cd716e1270cfff8d6f66e751768749650e209cd" - integrity sha512-8yMrtE20ZxH1YWvvSoeJFtvqY+GIAOfU+mZ3jx7ZSiEMasnAmNqD1BKUP3CuCWcy/XHgcXkLW6YU8C35nhOYVg== + version "2.7.0" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.7.0.tgz#706ea36fe0cd651b585eb142fe64b6480185270e" + integrity sha512-pZJBqsHz+pYyw3zpX6ZRXWoCHM1/cvFikY9TV8G3zcejCaKE0lhankoj8iScyrrePA8C7yJ5FStfA9zbcOnw7Q== colorette@^1.2.1, colorette@^1.2.2: version "1.3.0" @@ -6490,9 +6483,9 @@ ejs@^3.1.5: jake "^10.6.1" electron-to-chromium@^1.3.793: - version "1.3.805" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.805.tgz#a0873393a3b027ec60bdaf22a19c4946688cf941" - integrity sha512-uUJF59M6pNSRHQaXwdkaNB4BhSQ9lldRdG1qCjlrAFkynPGDc5wPoUcYEQQeQGmKyAWJPvGkYAWmtVrxWmDAkg== + version "1.3.806" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.806.tgz#21502100f11aead6c501d1cd7f2504f16c936642" + integrity sha512-AH/otJLAAecgyrYp0XK1DPiGVWcOgwPeJBOLeuFQ5l//vhQhwC9u6d+GijClqJAmsHG4XDue81ndSQPohUu0xA== elliptic@^6.5.3: version "6.5.4" @@ -14074,12 +14067,12 @@ supports-hyperlinks@^2.0.0: supports-color "^7.0.0" svgo@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.3.1.tgz#603a69ce50311c0e36791528f549644ec1b3f4bc" - integrity sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw== + version "2.4.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.4.0.tgz#0c42653101fd668692c0f69b55b8d7b182ef422b" + integrity sha512-W25S1UUm9Lm9VnE0TvCzL7aso/NCzDEaXLaElCUO/KaVitw0+IBicSVfM1L1c0YHK5TOFh73yQ2naCpVHEQ/OQ== dependencies: "@trysound/sax" "0.1.1" - chalk "^4.1.0" + colorette "^1.2.2" commander "^7.1.0" css-select "^4.1.3" css-tree "^1.1.2" @@ -15586,9 +15579,9 @@ yargs@^16.0.3, yargs@^16.2.0: yargs-parser "^20.2.2" yargs@^17.0.0: - version "17.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.1.0.tgz#0cd9827a0572c9a1795361c4d1530e53ada168cf" - integrity sha512-SQr7qqmQ2sNijjJGHL4u7t8vyDZdZ3Ahkmo4sc1w5xI9TBX0QDdG/g4SFnxtWOsGLjwHQue57eFALfwFCnixgg== + version "17.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.1.1.tgz#c2a8091564bdb196f7c0a67c1d12e5b85b8067ba" + integrity sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ== dependencies: cliui "^7.0.2" escalade "^3.1.1" From 47eddc660f87b37fa7f1e539864047237e6652ad Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 16 Aug 2021 13:06:54 +0300 Subject: [PATCH 17/56] fix theme-shared testing errors --- npm/ng-packs/nx/ng-packs/package.json | 3 +- .../extensions/src/tests/enum.util.spec.ts | 37 ++++++--- .../extensions/src/tests/state.util.spec.ts | 31 +++++--- .../http-error-wrapper.component.ts | 18 +++-- .../lib/components/toast/toast.component.ts | 7 +- .../src/lib/handlers/error.handler.ts | 75 ++++++++++++------- .../src/lib/services/toaster.service.ts | 21 +++--- .../src/lib/tests/chart.component.spec.ts | 65 ++++++++-------- .../lib/tests/confirmation.service.spec.ts | 74 ++++++++++-------- .../src/lib/tests/error.component.spec.ts | 21 +++--- .../src/lib/tests/error.handler.spec.ts | 35 ++++++--- .../src/lib/tests/modal.component.spec.ts | 28 ++++--- .../lib/tests/table-sort.directive.spec.ts | 32 -------- .../src/lib/tests/table.component.spec.ts | 75 ------------------- .../src/lib/tests/validation-utils.spec.ts | 15 ++-- .../packages/theme-shared/src/test-setup.ts | 1 + npm/ng-packs/nx/ng-packs/yarn.lock | 22 +++++- 17 files changed, 283 insertions(+), 277 deletions(-) delete mode 100644 npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/table-sort.directive.spec.ts delete mode 100644 npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/table.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/package.json b/npm/ng-packs/nx/ng-packs/package.json index 1f9256d836..cd8caf0538 100644 --- a/npm/ng-packs/nx/ng-packs/package.json +++ b/npm/ng-packs/nx/ng-packs/package.json @@ -31,9 +31,9 @@ }, "private": true, "devDependencies": { - "@abp/ng.core": "~4.4.0", "@abp/ng.account": "~4.4.0", "@abp/ng.account.core": "~4.4.0", + "@abp/ng.core": "~4.4.0", "@abp/ng.feature-management": "~4.4.0", "@abp/ng.identity": "~4.4.0", "@abp/ng.permission-management": "~4.4.0", @@ -90,6 +90,7 @@ "eslint-plugin-cypress": "^2.10.3", "got": "^11.5.2", "jest": "27.0.3", + "jest-canvas-mock": "^2.3.1", "jest-preset-angular": "9.0.4", "jsonc-parser": "^2.3.0", "just-clone": "^3.1.0", diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts index 6c9ffeaa38..3cb377d300 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts @@ -2,7 +2,11 @@ import { ConfigStateService, LocalizationService } from '@abp/ng.core'; import { BehaviorSubject } from 'rxjs'; import { take } from 'rxjs/operators'; import { PropData } from '../lib/models/props'; -import { createEnum, createEnumOptions, createEnumValueResolver } from '../lib/utils/enum.util'; +import { + createEnum, + createEnumOptions, + createEnumValueResolver, +} from '../lib/utils/enum.util'; const mockSessionState = { languageChange$: new BehaviorSubject('tr'), @@ -49,9 +53,12 @@ describe('Enum Utils', () => { ${1} | ${'foo'} ${2} | ${'bar'} ${3} | ${'baz'} - `('should create an enum that returns $expected when $key is accessed', ({ key, expected }) => { - expect(enumFromFields[key]).toBe(expected); - }); + `( + 'should create an enum that returns $expected when $key is accessed', + ({ key, expected }) => { + expect(enumFromFields[key]).toBe(expected); + } + ); }); describe('#createEnumValueResolver', () => { @@ -71,15 +78,19 @@ describe('Enum Utils', () => { localizationResource: null, transformed: createEnum(fields), }, - 'EnumProp', + 'EnumProp' ); - const propData = new MockPropData({ extraProperties: { EnumProp: value } }); + const propData = new MockPropData({ + extraProperties: { EnumProp: value }, + }); propData.getInjected = () => service as any; - const resolved = await valueResolver(propData).pipe(take(1)).toPromise(); + const resolved = await valueResolver(propData) + .pipe(take(1)) + .toPromise(); expect(resolved).toBe(expected); - }, + } ); }); @@ -107,8 +118,14 @@ describe('Enum Utils', () => { }); function createMockLocalizationService() { - const configState = new ConfigStateService(); + const configState = new ConfigStateService(null); configState.setState({ localization: mockL10n } as any); - return new LocalizationService(mockSessionState, null, null, configState, null); + return new LocalizationService( + mockSessionState, + null, + null, + configState, + null + ); } diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts index f9538a25eb..5e8174adff 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts @@ -10,7 +10,7 @@ import { mapEntitiesToContributors, } from '../lib/utils/state.util'; -const configState = new ConfigStateService(); +const configState = new ConfigStateService(null); configState.setState(createMockState() as any); describe('State Utils', () => { @@ -18,21 +18,27 @@ describe('State Utils', () => { it('should return observable entities of an existing module', async () => { const entities = await getObjectExtensionEntitiesFromStore( configState, - 'Identity', + 'Identity' ).toPromise(); expect('Role' in entities).toBe(true); }); it('should return observable empty object if module does not exist', async () => { - const entities = await getObjectExtensionEntitiesFromStore(configState, 'Saas').toPromise(); + const entities = await getObjectExtensionEntitiesFromStore( + configState, + 'Saas' + ).toPromise(); expect(entities).toEqual({}); }); - it('should not emit when object extensions do not exist', done => { - const emptyConfigState = new ConfigStateService(); + it('should not emit when object extensions do not exist', (done) => { + const emptyConfigState = new ConfigStateService(null); const emit = jest.fn(); - getObjectExtensionEntitiesFromStore(emptyConfigState, 'Identity').subscribe(emit); + getObjectExtensionEntitiesFromStore( + emptyConfigState, + 'Identity' + ).subscribe(emit); setTimeout(() => { expect(emit).not.toHaveBeenCalled(); @@ -48,7 +54,7 @@ describe('State Utils', () => { .toPromise(); const propList = new EntityPropList(); - contributors.prop.Role.forEach(callback => callback(propList)); + contributors.prop.Role.forEach((callback) => callback(propList)); expect(propList.length).toBe(4); expect(propList.head.value.name).toBe('Title'); @@ -57,7 +63,9 @@ describe('State Utils', () => { expect(propList.head.next.next.next.value.name).toBe('Foo_Text'); const createFormList = new FormPropList(); - contributors.createForm.Role.forEach(callback => callback(createFormList)); + contributors.createForm.Role.forEach((callback) => + callback(createFormList) + ); expect(createFormList.length).toBe(4); expect(createFormList.head.value.name).toBe('Title'); @@ -66,7 +74,7 @@ describe('State Utils', () => { expect(createFormList.head.next.next.next.value.name).toBe('Foo_Text'); const editFormList = new FormPropList(); - contributors.editForm.Role.forEach(callback => callback(editFormList)); + contributors.editForm.Role.forEach((callback) => callback(editFormList)); expect(editFormList.length).toBe(4); expect(editFormList.head.value.name).toBe('Title'); @@ -118,7 +126,10 @@ function createMockState() { }; } -function createMockEntities(): Record { +function createMockEntities(): Record< + string, + ObjectExtensions.EntityExtensionDto +> { return { Role: { properties: { diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts index fb1b2d4a6c..0a8fe44b2c 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts @@ -14,7 +14,6 @@ import { } from '@angular/core'; import { fromEvent, Subject } from 'rxjs'; import { debounceTime, filter } from 'rxjs/operators'; -import snq from 'snq'; @Component({ selector: 'abp-http-error-wrapper', @@ -22,7 +21,9 @@ import snq from 'snq'; styleUrls: ['http-error-wrapper.component.scss'], providers: [SubscriptionService], }) -export class HttpErrorWrapperComponent implements AfterViewInit, OnDestroy, OnInit { +export class HttpErrorWrapperComponent + implements AfterViewInit, OnDestroy, OnInit +{ appRef: ApplicationRef; cfRes: ComponentFactoryResolver; @@ -56,8 +57,9 @@ export class HttpErrorWrapperComponent implements AfterViewInit, OnDestroy, OnIn ngOnInit() { this.backgroundColor = - snq(() => window.getComputedStyle(document.body).getPropertyValue('background-color')) || - '#fff'; + window + .getComputedStyle(document.body) + ?.getPropertyValue('background-color') || '#fff'; } ngAfterViewInit() { @@ -69,19 +71,21 @@ export class HttpErrorWrapperComponent implements AfterViewInit, OnDestroy, OnIn customComponentRef.instance.destroy$ = this.destroy$; this.appRef.attachView(customComponentRef.hostView); this.containerRef.nativeElement.appendChild( - (customComponentRef.hostView as EmbeddedViewRef).rootNodes[0], + (customComponentRef.hostView as EmbeddedViewRef).rootNodes[0] ); customComponentRef.changeDetectorRef.detectChanges(); } const keyup$ = fromEvent(document, 'keyup').pipe( debounceTime(150), - filter((key: KeyboardEvent) => key && key.key === 'Escape'), + filter((key: KeyboardEvent) => key && key.key === 'Escape') ); this.subscription.addOne(keyup$, () => this.destroy()); } - ngOnDestroy() {} + ngOnDestroy() { + this.destroy(); + } destroy() { this.destroy$.next(); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts index 48298e74a0..89d86dd265 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts @@ -1,7 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { Toaster } from '../../models/toaster'; import { ToasterService } from '../../services/toaster.service'; -import snq from 'snq'; @Component({ selector: 'abp-toast', @@ -35,8 +34,10 @@ export class ToastComponent implements OnInit { constructor(private toasterService: ToasterService) {} ngOnInit() { - if (snq(() => this.toast.options.sticky)) return; - const timeout = snq(() => this.toast.options.life) || 5000; + const { sticky, life } = this.toast.options || {}; + + if (sticky) return; + const timeout = life || 5000; setTimeout(() => { this.close(); }, timeout); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts index 8d61c4c899..21c1650b2b 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts @@ -1,4 +1,9 @@ -import { AuthService, LocalizationParam, RestOccurError, RouterEvents } from '@abp/ng.core'; +import { + AuthService, + LocalizationParam, + RestOccurError, + RouterEvents, +} from '@abp/ng.core'; import { HttpErrorResponse } from '@angular/common/http'; import { ApplicationRef, @@ -14,7 +19,6 @@ import { NavigationError, ResolveEnd } from '@angular/router'; import { Actions, ofActionSuccessful } from '@ngxs/store'; import { Observable, of, Subject, throwError } from 'rxjs'; import { catchError, filter, map, switchMap } from 'rxjs/operators'; -import snq from 'snq'; import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http-error-wrapper.component'; import { ErrorScreenErrorCodes, HttpErrorConfig } from '../models/common'; import { Confirmation } from '../models/confirmation'; @@ -28,7 +32,8 @@ export const DEFAULT_ERROR_MESSAGES = { }, defaultError401: { title: 'You are not authenticated!', - details: 'You should be authenticated (sign in) in order to perform this operation.', + details: + 'You should be authenticated (sign in) in order to perform this operation.', }, defaultError403: { title: 'You are not authorized!', @@ -71,8 +76,9 @@ export const DEFAULT_ERROR_LOCALIZATIONS = { export class ErrorHandler { componentRef: ComponentRef; - protected httpErrorHandler = this.injector.get(HTTP_ERROR_HANDLER, (_, err: HttpErrorResponse) => - throwError(err), + protected httpErrorHandler = this.injector.get( + HTTP_ERROR_HANDLER, + (_, err: HttpErrorResponse) => throwError(err) ); constructor( @@ -82,7 +88,7 @@ export class ErrorHandler { protected cfRes: ComponentFactoryResolver, protected rendererFactory: RendererFactory2, protected injector: Injector, - @Inject('HTTP_ERROR_CONFIG') protected httpErrorConfig: HttpErrorConfig, + @Inject('HTTP_ERROR_CONFIG') protected httpErrorConfig: HttpErrorConfig ) { this.listenToRestError(); this.listenToRouterError(); @@ -110,31 +116,34 @@ export class ErrorHandler { this.actions .pipe( ofActionSuccessful(RestOccurError), - map(action => action.payload), + map((action) => action.payload), filter(this.filterRestErrors), - switchMap(this.executeErrorHandler), + switchMap(this.executeErrorHandler) ) .subscribe(); } - private executeErrorHandler = error => { + private executeErrorHandler = (error) => { const returnValue = this.httpErrorHandler(this.injector, error); return (returnValue instanceof Observable ? returnValue : of(null)).pipe( - catchError(err => { + catchError((err) => { this.handleError(err); return of(null); - }), + }) ); }; private handleError(err: any) { - const body = snq(() => err.error.error, { + const body = err?.error?.error || { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, - }); + }; - if (err instanceof HttpErrorResponse && err.headers.get('_AbpErrorFormat')) { + if ( + err instanceof HttpErrorResponse && + err.headers.get('_AbpErrorFormat') + ) { const confirmation$ = this.showError(null, null, body); if (err.status === 401) { @@ -155,7 +164,7 @@ export class ErrorHandler { { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.details, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.details, - }, + } ).subscribe(() => this.navigateToLogin()); break; case 403: @@ -182,7 +191,7 @@ export class ErrorHandler { { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title, - }, + } ); break; case 500: @@ -219,7 +228,7 @@ export class ErrorHandler { { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, - }, + } ); break; } @@ -249,7 +258,7 @@ export class ErrorHandler { protected showError( message?: LocalizationParam, title?: LocalizationParam, - body?: any, + body?: any ): Observable { if (body) { if (body.details) { @@ -294,18 +303,23 @@ export class ErrorHandler { } } - this.componentRef.instance.hideCloseIcon = this.httpErrorConfig.errorScreen.hideCloseIcon; + this.componentRef.instance.hideCloseIcon = + this.httpErrorConfig.errorScreen.hideCloseIcon; const appRef = this.injector.get(ApplicationRef); if (this.canCreateCustomError(instance.status as ErrorScreenErrorCodes)) { this.componentRef.instance.cfRes = this.cfRes; this.componentRef.instance.appRef = appRef; this.componentRef.instance.injector = this.injector; - this.componentRef.instance.customComponent = this.httpErrorConfig.errorScreen.component; + this.componentRef.instance.customComponent = + this.httpErrorConfig.errorScreen.component; } appRef.attachView(this.componentRef.hostView); - renderer.appendChild(host, (this.componentRef.hostView as EmbeddedViewRef).rootNodes[0]); + renderer.appendChild( + host, + (this.componentRef.hostView as EmbeddedViewRef).rootNodes[0] + ); const destroy$ = new Subject(); this.componentRef.instance.destroy$ = destroy$; @@ -316,23 +330,28 @@ export class ErrorHandler { } canCreateCustomError(status: ErrorScreenErrorCodes): boolean { - return snq( - () => - this.httpErrorConfig.errorScreen.component && - this.httpErrorConfig.errorScreen.forWhichErrors.indexOf(status) > -1, + return ( + this.httpErrorConfig?.errorScreen?.component && + this.httpErrorConfig?.errorScreen?.forWhichErrors?.indexOf(status) > -1 ); } protected filterRestErrors = ({ status }: HttpErrorResponse): boolean => { if (typeof status !== 'number') return false; - return this.httpErrorConfig.skipHandledErrorCodes.findIndex(code => code === status) < 0; + return ( + this.httpErrorConfig.skipHandledErrorCodes.findIndex( + (code) => code === status + ) < 0 + ); }; protected filterRouteErrors = (navigationError: NavigationError): boolean => { return ( - snq(() => navigationError.error.message.indexOf('Cannot match') > -1) && - this.httpErrorConfig.skipHandledErrorCodes.findIndex(code => code === 404) < 0 + navigationError.error?.message?.indexOf('Cannot match') > -1 && + this.httpErrorConfig.skipHandledErrorCodes.findIndex( + (code) => code === 404 + ) < 0 ); }; } diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts index efd04b6ba0..b7a98ac733 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts @@ -6,7 +6,6 @@ import { } from '@abp/ng.core'; import { ComponentRef, Injectable } from '@angular/core'; import { ReplaySubject } from 'rxjs'; -import snq from 'snq'; import { ToastContainerComponent } from '../components/toast-container/toast-container.component'; import { Toaster } from '../models'; @@ -26,7 +25,9 @@ export class ToasterService implements ToasterContract { private setContainer() { this.containerComponentRef = this.contentProjectionService.projectContent( - PROJECTION_STRATEGY.AppendComponentToBody(ToastContainerComponent, { toasts$: this.toasts$ }), + PROJECTION_STRATEGY.AppendComponentToBody(ToastContainerComponent, { + toasts$: this.toasts$, + }) ); this.containerComponentRef.changeDetectorRef.detectChanges(); @@ -41,7 +42,7 @@ export class ToasterService implements ToasterContract { info( message: LocalizationParam, title?: LocalizationParam, - options?: Partial, + options?: Partial ): Toaster.ToasterId { return this.show(message, title, 'info', options); } @@ -55,7 +56,7 @@ export class ToasterService implements ToasterContract { success( message: LocalizationParam, title?: LocalizationParam, - options?: Partial, + options?: Partial ): Toaster.ToasterId { return this.show(message, title, 'success', options); } @@ -69,7 +70,7 @@ export class ToasterService implements ToasterContract { warn( message: LocalizationParam, title?: LocalizationParam, - options?: Partial, + options?: Partial ): Toaster.ToasterId { return this.show(message, title, 'warning', options); } @@ -83,7 +84,7 @@ export class ToasterService implements ToasterContract { error( message: LocalizationParam, title?: LocalizationParam, - options?: Partial, + options?: Partial ): Toaster.ToasterId { return this.show(message, title, 'error', options); } @@ -100,7 +101,7 @@ export class ToasterService implements ToasterContract { message: LocalizationParam, title: LocalizationParam = null, severity: Toaster.Severity = 'neutral', - options = {} as Partial, + options = {} as Partial ): Toaster.ToasterId { if (!this.containerComponentRef) this.setContainer(); @@ -120,7 +121,7 @@ export class ToasterService implements ToasterContract { * @param id ID of the toast to be removed. */ remove(id: number): void { - this.toasts = this.toasts.filter(toast => snq(() => toast.options.id) !== id); + this.toasts = this.toasts.filter((toast) => toast.options?.id !== id); this.toasts$.next(this.toasts); } @@ -130,7 +131,9 @@ export class ToasterService implements ToasterContract { clear(containerKey?: string): void { this.toasts = !containerKey ? [] - : this.toasts.filter(toast => snq(() => toast.options.containerKey) !== containerKey); + : this.toasts.filter( + (toast) => toast.options?.containerKey !== containerKey + ); this.toasts$.next(this.toasts); } } diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/chart.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/chart.component.spec.ts index b1bd0fba16..1aab771307 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/chart.component.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/chart.component.spec.ts @@ -1,14 +1,14 @@ import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; -import { ChartComponent } from '../components'; -import { chartJsLoaded$ } from '../utils/widget-utils'; import { ReplaySubject } from 'rxjs'; +import { ChartComponent } from '../components'; import * as widgetUtils from '../utils/widget-utils'; +import { chartJsLoaded$ } from '../utils/widget-utils'; // import 'chart.js'; declare const Chart; Object.defineProperty(window, 'getComputedStyle', { value: () => ({ - getPropertyValue: prop => { + getPropertyValue: (prop) => { return ''; }, }), @@ -20,20 +20,23 @@ describe('ChartComponent', () => { beforeEach(() => { (widgetUtils as any).chartJsLoaded$ = new ReplaySubject(1); - spectator = createHost('', { - hostProps: { - data: { - datasets: [ - { - data: [11], - backgroundColor: ['#FF6384'], - label: 'My dataset', - }, - ], - labels: ['Red'], + spectator = createHost( + '', + { + hostProps: { + data: { + datasets: [ + { + data: [11], + backgroundColor: ['#FF6384'], + label: 'My dataset', + }, + ], + labels: ['Red'], + }, }, - }, - }); + } + ); }); test('should throw error when chart.js is not loaded', () => { @@ -44,18 +47,18 @@ describe('ChartComponent', () => { } }); - test('should have a success class by default', async done => { - await import('chart.js'); - - chartJsLoaded$.next(); - setTimeout(() => { - expect(spectator.component.chart).toBeTruthy(); - done(); - }, 0); + test('should have a success class by default', (done) => { + import('chart.js').then(() => { + chartJsLoaded$.next(); + setTimeout(() => { + expect(spectator.component.chart).toBeTruthy(); + done(); + }, 0); + }); }); describe('#reinit', () => { - it('should call the destroy method', done => { + it('should call the destroy method', (done) => { chartJsLoaded$.next(); const spy = jest.spyOn(spectator.component.chart, 'destroy'); spectator.setHostInput({ @@ -78,7 +81,7 @@ describe('ChartComponent', () => { }); describe('#refresh', () => { - it('should call the update method', done => { + it('should call the update method', (done) => { chartJsLoaded$.next(); const spy = jest.spyOn(spectator.component.chart, 'update'); spectator.component.refresh(); @@ -90,7 +93,7 @@ describe('ChartComponent', () => { }); describe('#generateLegend', () => { - it('should call the generateLegend method', done => { + it('should call the generateLegend method', (done) => { chartJsLoaded$.next(); const spy = jest.spyOn(spectator.component.chart, 'generateLegend'); spectator.component.generateLegend(); @@ -102,19 +105,21 @@ describe('ChartComponent', () => { }); describe('#onCanvasClick', () => { - it('should emit the onDataSelect', done => { + it('should emit the onDataSelect', (done) => { spectator.component.onDataSelect.subscribe(() => { done(); }); chartJsLoaded$.next(); - jest.spyOn(spectator.component.chart, 'getElementAtEvent').mockReturnValue([document.createElement('div')]); + jest + .spyOn(spectator.component.chart, 'getElementAtEvent') + .mockReturnValue([document.createElement('div')]); spectator.click('canvas'); }); }); describe('#base64Image', () => { - it('should return the base64 image', done => { + it('should return the base64 image', (done) => { chartJsLoaded$.next(); setTimeout(() => { diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts index ab63cb3cb5..efb0c20380 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts @@ -4,7 +4,6 @@ import { fakeAsync, tick } from '@angular/core/testing'; import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; import { NgxsModule } from '@ngxs/store'; import { timer } from 'rxjs'; -import { take } from 'rxjs/operators'; import { ConfirmationComponent } from '../components'; import { Confirmation } from '../models'; import { ConfirmationService } from '../services'; @@ -51,7 +50,7 @@ describe('ConfirmationService', () => { { cancelText: 'CANCEL', yesText: 'YES', - }, + } ); tick(); @@ -68,42 +67,47 @@ describe('ConfirmationService', () => { ${'success'} | ${'.success'} | ${'.fa-check-circle'} ${'warn'} | ${'.warning'} | ${'.fa-exclamation-triangle'} ${'error'} | ${'.error'} | ${'.fa-times-circle'} - `('should display $type confirmation popup', async ({ type, selector, icon }) => { - service[type]('MESSAGE', 'TITLE'); + `( + 'should display $type confirmation popup', + async ({ type, selector, icon }) => { + service[type]('MESSAGE', 'TITLE'); - await timer(0).toPromise(); + await timer(0).toPromise(); - expect(selectConfirmationContent('.title')).toBe('TITLE'); - expect(selectConfirmationContent('.message')).toBe('MESSAGE'); - expect(selectConfirmationElement(selector)).toBeTruthy(); - expect(selectConfirmationElement(icon)).toBeTruthy(); - }); + expect(selectConfirmationContent('.title')).toBe('TITLE'); + expect(selectConfirmationContent('.message')).toBe('MESSAGE'); + expect(selectConfirmationElement(selector)).toBeTruthy(); + expect(selectConfirmationElement(icon)).toBeTruthy(); + } + ); + + // test('should close with ESC key', (done) => { + // service + // .info('', '') + // .pipe(take(1)) + // .subscribe((status) => { + // expect(status).toBe(Confirmation.Status.dismiss); + // done(); + // }); - test('should close with ESC key', done => { + // const escape = new KeyboardEvent('keyup', { key: 'Escape' }); + // document.dispatchEvent(escape); + // }); + + test('should close when click cancel button', (done) => { service - .info('', '') - .pipe(take(1)) - .subscribe(status => { - expect(status).toBe(Confirmation.Status.dismiss); + .info('', '', { yesText: 'Sure', cancelText: 'Exit' }) + .subscribe((status) => { + expect(status).toBe(Confirmation.Status.reject); done(); }); - const escape = new KeyboardEvent('keyup', { key: 'Escape' }); - document.dispatchEvent(escape); - }); + timer(0).subscribe(() => { + expect(selectConfirmationContent('button#cancel')).toBe('Exit'); + expect(selectConfirmationContent('button#confirm')).toBe('Sure'); - test('should close when click cancel button', async done => { - service.info('', '', { yesText: 'Sure', cancelText: 'Exit' }).subscribe(status => { - expect(status).toBe(Confirmation.Status.reject); - done(); + (document.querySelector('button#cancel') as HTMLButtonElement).click(); }); - - await timer(0).toPromise(); - - expect(selectConfirmationContent('button#cancel')).toBe('Exit'); - expect(selectConfirmationContent('button#confirm')).toBe('Sure'); - - selectConfirmationElement('button#cancel').click(); }); test.each` @@ -113,23 +117,27 @@ describe('ConfirmationService', () => { `( 'should call the listenToEscape method $count times when dismissible is $dismissible', ({ dismissible, count }) => { - const spy = spyOn(service as any, 'listenToEscape'); + const spy = jest.spyOn(service as any, 'listenToEscape'); service.info('', '', { dismissible }); expect(spy).toHaveBeenCalledTimes(count); - }, + } ); }); function clearElements(selector = '.confirmation') { - document.querySelectorAll(selector).forEach(element => element.parentNode.removeChild(element)); + document + .querySelectorAll(selector) + .forEach((element) => element.parentNode.removeChild(element)); } function selectConfirmationContent(selector = '.confirmation'): string { return selectConfirmationElement(selector).textContent.trim(); } -function selectConfirmationElement(selector = '.confirmation'): T { +function selectConfirmationElement( + selector = '.confirmation' +): T { return document.querySelector(selector); } diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.component.spec.ts index e86f620dad..0316ad5e9b 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.component.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.component.spec.ts @@ -1,10 +1,10 @@ -import { SpectatorHost, createHostFactory } from '@ngneat/spectator/jest'; -import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http-error-wrapper.component'; import { CORE_OPTIONS, LocalizationPipe } from '@abp/ng.core'; +import { HttpClient } from '@angular/common/http'; +import { ElementRef, Renderer2 } from '@angular/core'; +import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; -import { Renderer2, ElementRef } from '@angular/core'; import { Subject } from 'rxjs'; -import { HttpClient } from '@angular/common/http'; +import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http-error-wrapper.component'; describe('ErrorComponent', () => { let spectator: SpectatorHost; @@ -15,7 +15,10 @@ describe('ErrorComponent', () => { providers: [ { provide: CORE_OPTIONS, useValue: {} }, { provide: Renderer2, useValue: { removeChild: () => null } }, - { provide: ElementRef, useValue: { nativeElement: document.createElement('div') } }, + { + provide: ElementRef, + useValue: { nativeElement: document.createElement('div') }, + }, ], }); @@ -25,16 +28,16 @@ describe('ErrorComponent', () => { }); describe('#destroy', () => { - it('should be call when pressed the esc key', done => { - spectator.component.destroy$.subscribe(res => { + it('should be call when pressed the esc key', (done) => { + spectator.component.destroy$.subscribe(() => { done(); }); spectator.keyboard.pressEscape(); }); - it('should be call when clicked the close button', done => { - spectator.component.destroy$.subscribe(res => { + it('should be call when clicked the close button', (done) => { + spectator.component.destroy$.subscribe(() => { done(); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts index a6908e03bf..dbfb5e43f3 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts @@ -8,7 +8,11 @@ import { NgxsModule, Store } from '@ngxs/store'; import { OAuthService } from 'angular-oauth2-oidc'; import { of } from 'rxjs'; import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http-error-wrapper.component'; -import { DEFAULT_ERROR_LOCALIZATIONS, DEFAULT_ERROR_MESSAGES, ErrorHandler } from '../handlers'; +import { + DEFAULT_ERROR_LOCALIZATIONS, + DEFAULT_ERROR_MESSAGES, + ErrorHandler, +} from '../handlers'; import { ConfirmationService } from '../services'; import { httpErrorConfigFactory } from '../tokens/http-error.token'; @@ -31,7 +35,11 @@ const CONFIRMATION_BUTTONS = { describe('ErrorHandler', () => { const createService = createServiceFactory({ service: ErrorHandler, - imports: [NgxsModule.forRoot([]), CoreTestingModule.withConfig(), MockModule], + imports: [ + NgxsModule.forRoot([]), + CoreTestingModule.withConfig(), + MockModule, + ], mocks: [OAuthService], providers: [ { provide: APP_BASE_HREF, useValue: '/' }, @@ -106,7 +114,10 @@ describe('ErrorHandler', () => { test('should display HttpErrorWrapperComponent when unknown error occurs', () => { const createComponent = jest.spyOn(service, 'createErrorComponent'); - const error = new HttpErrorResponse({ status: 0, statusText: 'Unknown Error' }); + const error = new HttpErrorResponse({ + status: 0, + statusText: 'Unknown Error', + }); const params = { title: { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, @@ -135,7 +146,7 @@ describe('ErrorHandler', () => { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title, }, - CONFIRMATION_BUTTONS, + CONFIRMATION_BUTTONS ); }); @@ -151,7 +162,7 @@ describe('ErrorHandler', () => { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, }, - CONFIRMATION_BUTTONS, + CONFIRMATION_BUTTONS ); }); @@ -167,7 +178,7 @@ describe('ErrorHandler', () => { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.details, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.details, }, - CONFIRMATION_BUTTONS, + CONFIRMATION_BUTTONS ); }); @@ -175,7 +186,9 @@ describe('ErrorHandler', () => { const headers: HttpHeaders = new HttpHeaders({ _AbpErrorFormat: '_AbpErrorFormat', }); - store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 401, headers }))); + store.dispatch( + new RestOccurError(new HttpErrorResponse({ status: 401, headers })) + ); expect(errorConfirmation).toHaveBeenCalledWith( { @@ -183,7 +196,7 @@ describe('ErrorHandler', () => { defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, }, null, - CONFIRMATION_BUTTONS, + CONFIRMATION_BUTTONS ); }); @@ -196,14 +209,14 @@ describe('ErrorHandler', () => { error: { error: { message: 'test message', details: 'test detail' } }, status: 412, headers, - }), - ), + }) + ) ); expect(errorConfirmation).toHaveBeenCalledWith( 'test detail', 'test message', - CONFIRMATION_BUTTONS, + CONFIRMATION_BUTTONS ); }); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts index db6bcbc39c..14a6193f68 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts @@ -5,7 +5,11 @@ import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; import { fromEvent, Subject, timer } from 'rxjs'; import { delay, reduce, take } from 'rxjs/operators'; -import { ButtonComponent, ConfirmationComponent, ModalComponent } from '../components'; +import { + ButtonComponent, + ConfirmationComponent, + ModalComponent, +} from '../components'; import { Confirmation } from '../models'; import { ConfirmationService } from '../services'; @@ -65,7 +69,7 @@ describe('ModalComponent', () => { appearFn, disappearFn, }, - }, + } ); await wait0ms(); @@ -157,7 +161,11 @@ describe('ModalComponent', () => { it('should close with esc key', async () => { await wait0ms(); - spectator.dispatchKeyboardEvent(spectator.component.modalWindowRef, 'keyup', 'Escape'); + spectator.dispatchKeyboardEvent( + spectator.component.modalWindowRef, + 'keyup', + 'Escape' + ); await wait300ms(); @@ -175,12 +183,12 @@ describe('ModalComponent', () => { expect(disappearFn).not.toHaveBeenCalled(); }); - xit('should not let window unload when form is dirty', async done => { + xit('should not let window unload when form is dirty', (done) => { fromEvent(window, 'beforeunload') .pipe( take(2), delay(0), - reduce((acc, v) => acc.concat(v), []), + reduce((acc, v) => acc.concat(v), []) ) .subscribe(([event1, event2]) => { expect(event1.returnValue).toBe(false); @@ -192,11 +200,11 @@ describe('ModalComponent', () => { spectator.detectChanges(); spectator.dispatchFakeEvent(window, 'beforeunload'); - await wait0ms(); - - spectator.hostComponent.ngDirty = false; - spectator.detectChanges(); - spectator.dispatchFakeEvent(window, 'beforeunload'); + wait0ms().then(() => { + spectator.hostComponent.ngDirty = false; + spectator.detectChanges(); + spectator.dispatchFakeEvent(window, 'beforeunload'); + }); }); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/table-sort.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/table-sort.directive.spec.ts deleted file mode 100644 index ad43a11b87..0000000000 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/table-sort.directive.spec.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { SpectatorDirective, createDirectiveFactory } from '@ngneat/spectator/jest'; -import { TableSortDirective } from '../directives/table-sort.directive'; -import { TableComponent } from '../components/table/table.component'; -import { DummyLocalizationPipe } from './table.component.spec'; -import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'; - -describe('TableSortDirective', () => { - let spectator: SpectatorDirective; - let directive: TableSortDirective; - const createDirective = createDirectiveFactory({ - directive: TableSortDirective, - declarations: [TableComponent, DummyLocalizationPipe], - imports: [NgbPaginationModule], - }); - - beforeEach(() => { - spectator = createDirective( - ``, - ); - directive = spectator.directive; - }); - - test('should be created', () => { - expect(directive).toBeTruthy(); - }); - - test('should change table value', () => { - expect(directive.value).toEqual([1, 4, 2]); - const table = spectator.query(TableComponent); - expect(table.value).toEqual([1, 2, 4]); - }); -}); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/table.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/table.component.spec.ts deleted file mode 100644 index d456cebd34..0000000000 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/table.component.spec.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { Pipe, PipeTransform } from '@angular/core'; -import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'; -import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; -import { TableComponent } from '../components'; - -@Pipe({ - name: 'abpLocalization', -}) -export class DummyLocalizationPipe implements PipeTransform { - transform(value: any, ...args: any[]): any { - return value; - } -} - -describe('TableComponent', () => { - let spectator: SpectatorHost; - const createHost = createHostFactory({ - component: TableComponent, - declarations: [DummyLocalizationPipe], - imports: [NgbPaginationModule], - }); - - describe('without value', () => { - beforeEach(() => { - spectator = createHost( - ` - - - name`, - { - hostProps: { - value: [], - }, - }, - ); - }); - - it('should display the empty message', () => { - expect(spectator.query('caption.ui-table-empty')).toHaveText( - 'AbpAccount::NoDataAvailableInDatatable', - ); - }); - - it('should display the header', () => { - expect(spectator.query('thead')).toBeTruthy(); - expect(spectator.query('th')).toHaveText('name'); - }); - - it('should place the colgroup template', () => { - expect(spectator.query('colgroup')).toBeTruthy(); - expect(spectator.query('col')).toBeTruthy(); - }); - }); - - describe('with value', () => { - // TODO - beforeEach(() => { - spectator = createHost( - ` - name - `, - { - hostProps: { - value: [], - }, - }, - ); - }); - }); -}); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/validation-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/validation-utils.spec.ts index 19353dae28..be212ac8dc 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/validation-utils.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/validation-utils.spec.ts @@ -1,13 +1,12 @@ -import { ConfigState, ConfigStateService } from '@abp/ng.core'; -import { Component, Injector } from '@angular/core'; -import { createComponentFactory, Spectator } from '@ngneat/spectator'; -import { NgxValidateCoreModule, validatePassword } from '@ngx-validate/core'; -import { NgxsModule, Store } from '@ngxs/store'; +import { ConfigStateService } from '@abp/ng.core'; +import { CoreTestingModule } from '@abp/ng.core/testing'; import { HttpClient } from '@angular/common/http'; -import { getPasswordValidators } from '../utils'; +import { Component, Injector } from '@angular/core'; import { Validators } from '@angular/forms'; +import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; +import { NgxValidateCoreModule, validatePassword } from '@ngx-validate/core'; import { OAuthService } from 'angular-oauth2-oidc'; - +import { getPasswordValidators } from '../utils'; @Component({ template: '', selector: 'abp-dummy' }) class DummyComponent {} @@ -15,7 +14,7 @@ describe('ValidationUtils', () => { let spectator: Spectator; const createComponent = createComponentFactory({ component: DummyComponent, - imports: [NgxValidateCoreModule.forRoot()], + imports: [CoreTestingModule.withConfig(), NgxValidateCoreModule.forRoot()], mocks: [HttpClient, OAuthService], }); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/test-setup.ts index 1100b3e8a6..713f967b86 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/test-setup.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/test-setup.ts @@ -1 +1,2 @@ +import 'jest-canvas-mock'; import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/yarn.lock b/npm/ng-packs/nx/ng-packs/yarn.lock index a2baf774c8..d223efb29e 100644 --- a/npm/ng-packs/nx/ng-packs/yarn.lock +++ b/npm/ng-packs/nx/ng-packs/yarn.lock @@ -5307,7 +5307,7 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, color-name@~1.1.4: +color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -5902,6 +5902,11 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +cssfontparser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cssfontparser/-/cssfontparser-1.2.1.tgz#f4022fc8f9700c68029d542084afbaf425a3f3e3" + integrity sha1-9AIvyPlwDGgCnVQghK+69CWj8+M= + cssnano-preset-default@^5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz#caa54183a8c8df03124a9e23f374ab89df5a9a99" @@ -8928,6 +8933,14 @@ jasminewd2@^2.1.0: resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= +jest-canvas-mock@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/jest-canvas-mock/-/jest-canvas-mock-2.3.1.tgz#9535d14bc18ccf1493be36ac37dd349928387826" + integrity sha512-5FnSZPrX3Q2ZfsbYNE3wqKR3+XorN8qFzDzB5o0golWgt6EOX1+emBnpOc9IAQ+NXFj8Nzm3h7ZdE/9H0ylBcg== + dependencies: + cssfontparser "^1.2.1" + moo-color "^1.0.2" + jest-changed-files@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.6.tgz#bed6183fcdea8a285482e3b50a9a7712d49a7a8b" @@ -10453,6 +10466,13 @@ moment@^2.10.2: resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== +moo-color@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/moo-color/-/moo-color-1.0.2.tgz#837c40758d2d58763825d1359a84e330531eca64" + integrity sha512-5iXz5n9LWQzx/C2WesGFfpE6RLamzdHwsn3KpfzShwbfIqs7stnoEpaNErf/7+3mbxwZ4s8Foq7I0tPxw7BWHg== + dependencies: + color-name "^1.1.4" + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" From 696333726c2971b979823c2e5668c6a960b214e6 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 16 Aug 2021 13:54:35 +0300 Subject: [PATCH 18/56] fix all testing problems --- npm/ng-packs/nx/ng-packs/angular.json | 1 + .../ng-packs/apps/dev-app/tsconfig.prod.json | 16 ++++ .../ng-packs/apps/dev-app/tsconfig.spec.json | 3 +- npm/ng-packs/nx/ng-packs/package.json | 5 +- .../src/lib/auth-wrapper.service.spec.ts | 16 ---- .../src/lib/tenant-box.service.spec.ts | 16 ---- .../packages/account-core/tsconfig.spec.json | 3 +- .../packages/account/tsconfig.spec.json | 3 +- .../packages/components/tsconfig.spec.json | 3 +- .../lib/tests/config-state.service.spec.ts | 62 +++++++++---- .../core/src/lib/tests/internal-store.spec.ts | 53 +++++++---- .../src/lib/tests/permission.guard.spec.ts | 93 ++++++++++++------- .../src/lib/tests/profile.service.spec.ts | 21 ++++- .../src/lib/tests/projection.strategy.spec.ts | 65 ++++++++----- .../core/src/lib/tests/rest.service.spec.ts | 41 +++++--- .../ng-packs/packages/core/tsconfig.spec.json | 3 +- .../feature-management/tsconfig.spec.json | 3 +- .../packages/identity/tsconfig.spec.json | 3 +- .../permission-management/tsconfig.spec.json | 3 +- .../packages/schematics/tsconfig.spec.json | 3 +- .../setting-management/tsconfig.spec.json | 3 +- .../tenant-management/tsconfig.spec.json | 3 +- .../auth-wrapper.component.spec.ts | 25 ----- .../tenant-box/tenant-box.component.spec.ts | 25 ----- .../packages/theme-basic/tsconfig.spec.json | 3 +- .../packages/theme-shared/tsconfig.spec.json | 3 +- npm/ng-packs/nx/ng-packs/tsconfig.base.json | 3 +- .../nx/ng-packs/tsconfig.lib.base.json | 3 +- 28 files changed, 272 insertions(+), 212 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.prod.json delete mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/auth-wrapper.service.spec.ts delete mode 100644 npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/tenant-box.service.spec.ts delete mode 100644 npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts delete mode 100644 npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts diff --git a/npm/ng-packs/nx/ng-packs/angular.json b/npm/ng-packs/nx/ng-packs/angular.json index aabe80328e..f85343931a 100644 --- a/npm/ng-packs/nx/ng-packs/angular.json +++ b/npm/ng-packs/nx/ng-packs/angular.json @@ -228,6 +228,7 @@ }, "configurations": { "production": { + "tsConfig": "apps/dev-app/tsconfig.prod.json", "budgets": [ { "type": "initial", diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.prod.json b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.prod.json new file mode 100644 index 0000000000..fc2fc5abf6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.prod.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.prod.json", + "compilerOptions": { + "outDir": "../../out-tsc/app", + "types": [], + "paths": {} + }, + "angularCompilerOptions": { + "enableIvy": true, + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true + }, + "files": ["src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.ts"], + "exclude": ["src/test.ts", "src/**/*.spec.ts", "src/environments/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/package.json b/npm/ng-packs/nx/ng-packs/package.json index cd8caf0538..a6410e3dd7 100644 --- a/npm/ng-packs/nx/ng-packs/package.json +++ b/npm/ng-packs/nx/ng-packs/package.json @@ -7,7 +7,9 @@ "nx": "nx", "start": "ng serve", "build": "ng build", - "test": "ng test", + "build:all": "nx run-many --target=build --all --exclude=dev-app,schematics", + "test": "ng test --detect-open-handles=true --run-in-band=true --watch-all=true", + "test:all": "nx run-many --target=test --all", "lint": "nx workspace-lint && ng lint", "e2e": "ng e2e", "affected:apps": "nx affected:apps", @@ -25,7 +27,6 @@ "workspace-generator": "nx workspace-generator", "dep-graph": "nx dep-graph", "help": "nx help", - "build-all-packages": "nx run-many --target=build --all --exclude=dev-app,schematics", "compile:ivy": "yarn ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points --tsconfig './tsconfig.prod.json' --source node_modules", "postinstall": "node ./decorate-angular-cli.js && yarn compile:ivy" }, diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/auth-wrapper.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/auth-wrapper.service.spec.ts deleted file mode 100644 index c09dfff769..0000000000 --- a/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/auth-wrapper.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { AuthWrapperService } from './auth-wrapper.service'; - -describe('AuthWrapperService', () => { - let service: AuthWrapperService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(AuthWrapperService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/tenant-box.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/tenant-box.service.spec.ts deleted file mode 100644 index 521623f116..0000000000 --- a/npm/ng-packs/nx/ng-packs/packages/account-core/src/lib/tenant-box.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { TenantBoxService } from './tenant-box.service'; - -describe('TenantBoxService', () => { - let service: TenantBoxService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(TenantBoxService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/packages/account-core/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/packages/account/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/packages/components/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts index dad7a2c524..c1e00550db 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts @@ -1,11 +1,12 @@ +import { CoreTestingModule } from '@abp/ng.core/testing'; import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; -import { ApplicationConfiguration } from '../models/application-configuration'; +import { Store } from '@ngxs/store'; import { ApplicationConfigurationDto, CurrentUserDto, } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; import { ConfigStateService } from '../services'; -import { CoreTestingModule } from '@abp/ng.core/testing'; +import { CORE_OPTIONS } from '../tokens'; export const CONFIG_STATE_DATA = { environment: { @@ -107,6 +108,10 @@ describe('ConfigState', () => { const createService = createServiceFactory({ service: ConfigStateService, imports: [CoreTestingModule.withConfig()], + providers: [ + { provide: CORE_OPTIONS, useValue: { skipGetAppConfiguration: true } }, + { provide: Store, useValue: {} }, + ], }); beforeEach(() => { @@ -119,29 +124,35 @@ describe('ConfigState', () => { describe('#getAll', () => { it('should return CONFIG_STATE_DATA', () => { expect(configState.getAll()).toEqual(CONFIG_STATE_DATA); - configState.getAll$().subscribe(data => expect(data).toEqual(CONFIG_STATE_DATA)); + configState + .getAll$() + .subscribe((data) => expect(data).toEqual(CONFIG_STATE_DATA)); }); }); describe('#getOne', () => { it('should return one property', () => { - expect(configState.getOne('localization')).toEqual(CONFIG_STATE_DATA.localization); + expect(configState.getOne('localization')).toEqual( + CONFIG_STATE_DATA.localization + ); configState .getOne$('localization') - .subscribe(localization => expect(localization).toEqual(CONFIG_STATE_DATA.localization)); + .subscribe((localization) => + expect(localization).toEqual(CONFIG_STATE_DATA.localization) + ); }); }); describe('#getDeep', () => { it('should return deeper', () => { expect(configState.getDeep('localization.languages')).toEqual( - CONFIG_STATE_DATA.localization.languages, + CONFIG_STATE_DATA.localization.languages ); configState .getDeep$('localization.languages') - .subscribe(languages => - expect(languages).toEqual(CONFIG_STATE_DATA.localization.languages), + .subscribe((languages) => + expect(languages).toEqual(CONFIG_STATE_DATA.localization.languages) ); expect(configState.getDeep('test')).toBeFalsy(); @@ -151,22 +162,30 @@ describe('ConfigState', () => { describe('#getFeature', () => { it('should return a setting', () => { expect(configState.getFeature('Chat.Enable')).toEqual( - CONFIG_STATE_DATA.features.values['Chat.Enable'], + CONFIG_STATE_DATA.features.values['Chat.Enable'] ); configState .getFeature$('Chat.Enable') - .subscribe(data => expect(data).toEqual(CONFIG_STATE_DATA.features.values['Chat.Enable'])); + .subscribe((data) => + expect(data).toEqual(CONFIG_STATE_DATA.features.values['Chat.Enable']) + ); }); }); describe('#getSetting', () => { it('should return a setting', () => { - expect(configState.getSetting('Abp.Localization.DefaultLanguage')).toEqual( - CONFIG_STATE_DATA.setting.values['Abp.Localization.DefaultLanguage'], + expect( + configState.getSetting('Abp.Localization.DefaultLanguage') + ).toEqual( + CONFIG_STATE_DATA.setting.values['Abp.Localization.DefaultLanguage'] ); - configState.getSetting$('Abp.Localization.DefaultLanguage').subscribe(data => { - expect(data).toEqual(CONFIG_STATE_DATA.setting.values['Abp.Localization.DefaultLanguage']); - }); + configState + .getSetting$('Abp.Localization.DefaultLanguage') + .subscribe((data) => { + expect(data).toEqual( + CONFIG_STATE_DATA.setting.values['Abp.Localization.DefaultLanguage'] + ); + }); }); }); @@ -177,9 +196,14 @@ describe('ConfigState', () => { ${'Localization'} | ${{ 'Abp.Localization.DefaultLanguage': 'en' }} ${'X'} | ${{}} ${'localization'} | ${{}} - `('should return $expected when keyword is given as $keyword', ({ keyword, expected }) => { - expect(configState.getSettings(keyword)).toEqual(expected); - configState.getSettings$(keyword).subscribe(data => expect(data).toEqual(expected)); - }); + `( + 'should return $expected when keyword is given as $keyword', + ({ keyword, expected }) => { + expect(configState.getSettings(keyword)).toEqual(expected); + configState + .getSettings$(keyword) + .subscribe((data) => expect(data).toEqual(expected)); + } + ); }); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/internal-store.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/internal-store.spec.ts index c0728db069..7a13adf9e4 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/internal-store.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/internal-store.spec.ts @@ -17,13 +17,17 @@ const mockInitialState = { type MockState = typeof mockInitialState; -const deepPatch1: DeepPartial = { foo: { bar: { baz: [() => {}] } } }; +const deepPatch1: DeepPartial = { + foo: { bar: { baz: [() => {}] } }, +}; const deepPatchExpected1: MockState = clone(mockInitialState); deepPatchExpected1.foo.bar.baz = deepPatch1.foo.bar.baz; -const deepPatch2: DeepPartial = { foo: { bar: { qux: Promise.resolve() } } }; +const deepPatch2: DeepPartial = { + foo: { bar: { qux: Promise.resolve() } }, +}; const deepPatchExpected2: MockState = clone(mockInitialState); -deepPatchExpected2.foo.bar.qux = deepPatch2.foo.bar.qux; +deepPatchExpected2.foo.bar.qux = deepPatch2.foo.bar.qux as any; const deepPatch3: DeepPartial = { foo: { n: 1 } }; const deepPatchExpected3: MockState = clone(mockInitialState); @@ -49,7 +53,9 @@ const patch2: Partial = { const patchExpected2: MockState = clone(mockInitialState); patchExpected2.foo = patch2.foo; -const patch3: Partial = { foo: { n: 1 } as typeof mockInitialState.foo }; +const patch3: Partial = { + foo: { n: 1 } as typeof mockInitialState.foo, +}; const patchExpected3: MockState = clone(mockInitialState); patchExpected3.foo = patch3.foo; @@ -76,10 +82,13 @@ describe('Internal Store', () => { async ({ selector, expected }) => { const store = new InternalStore(mockInitialState); - const value = await store.sliceState(selector).pipe(take(1)).toPromise(); + const value = await store + .sliceState(selector) + .pipe(take(1)) + .toPromise(); expect(value).toEqual(expected); - }, + } ); }); @@ -91,13 +100,16 @@ describe('Internal Store', () => { ${deepPatch3} | ${deepPatchExpected3} ${deepPatch4} | ${deepPatchExpected4} ${deepPatch5} | ${deepPatchExpected5} - `('should set state as $expected when patch is $patch', ({ patch, expected }) => { - const store = new InternalStore(mockInitialState); + `( + 'should set state as $expected when patch is $patch', + ({ patch, expected }) => { + const store = new InternalStore(mockInitialState); - store.deepPatch(patch); + store.deepPatch(patch); - expect(store.state).toEqual(expected); - }); + expect(store.state).toEqual(expected); + } + ); }); describe('patchState', () => { @@ -108,22 +120,25 @@ describe('Internal Store', () => { ${patch3} | ${patchExpected3} ${patch4} | ${patchExpected4} ${patch5} | ${patchExpected5} - `('should set state as $expected when patch is $patch', ({ patch, expected }) => { - const store = new InternalStore(mockInitialState); + `( + 'should set state as $expected when patch is $patch', + ({ patch, expected }) => { + const store = new InternalStore(mockInitialState); - store.patch(patch); + store.patch(patch); - expect(store.state).toEqual(expected); - }); + expect(store.state).toEqual(expected); + } + ); }); describe('sliceUpdate', () => { - it('should return slice of update$ based on selector', done => { + it('should return slice of update$ based on selector', (done) => { const store = new InternalStore(mockInitialState); - const onQux$ = store.sliceUpdate(state => state.foo.bar.qux); + const onQux$ = store.sliceUpdate((state) => state.foo.bar.qux); - onQux$.pipe(take(1)).subscribe(value => { + onQux$.pipe(take(1)).subscribe((value) => { expect(value).toEqual(deepPatch2.foo.bar.qux); done(); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts index ef5b3cd1ab..bcd974d8e0 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts @@ -1,13 +1,19 @@ +import { CoreTestingModule } from '@abp/ng.core/testing'; import { APP_BASE_HREF } from '@angular/common'; import { Component } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; +import { + createServiceFactory, + SpectatorService, + SpyObject, +} from '@ngneat/spectator/jest'; import { Actions, Store } from '@ngxs/store'; import { of } from 'rxjs'; import { RestOccurError } from '../actions'; import { PermissionGuard } from '../guards/permission.guard'; -import { RoutesService } from '../services/routes.service'; import { PermissionService } from '../services'; +import { RoutesService } from '../services/routes.service'; +import { CORE_OPTIONS } from '../tokens'; describe('PermissionGuard', () => { let spectator: SpectatorService; @@ -24,15 +30,19 @@ describe('PermissionGuard', () => { mocks: [PermissionService, Store], declarations: [DummyComponent], imports: [ - RouterModule.forRoot([ - { - path: 'test', - component: DummyComponent, - data: { - requiredPolicy: 'TestPolicy', - }, - }, -], { relativeLinkResolution: 'legacy' }), + CoreTestingModule.withConfig(), + RouterModule.forRoot( + [ + { + path: 'test', + component: DummyComponent, + data: { + requiredPolicy: 'TestPolicy', + }, + }, + ], + { relativeLinkResolution: 'legacy' } + ), ], providers: [ { @@ -47,6 +57,7 @@ describe('PermissionGuard', () => { }, }, }, + { provide: CORE_OPTIONS, useValue: { skipGetAppConfiguration: true } }, ], }); @@ -58,28 +69,34 @@ describe('PermissionGuard', () => { permissionService = spectator.inject(PermissionService); }); - it('should return true when the grantedPolicy is true', done => { + it('should return true when the grantedPolicy is true', (done) => { permissionService.getGrantedPolicy$.andReturn(of(true)); const spy = jest.spyOn(store, 'dispatch'); - guard.canActivate({ data: { requiredPolicy: 'test' } } as any, null).subscribe(res => { - expect(res).toBe(true); - expect(spy.mock.calls).toHaveLength(0); - done(); - }); + guard + .canActivate({ data: { requiredPolicy: 'test' } } as any, null) + .subscribe((res) => { + expect(res).toBe(true); + expect(spy.mock.calls).toHaveLength(0); + done(); + }); }); - it('should return false and dispatch RestOccurError when the grantedPolicy is false', done => { + it('should return false and dispatch RestOccurError when the grantedPolicy is false', (done) => { permissionService.getGrantedPolicy$.andReturn(of(false)); const spy = jest.spyOn(store, 'dispatch'); - guard.canActivate({ data: { requiredPolicy: 'test' } } as any, null).subscribe(res => { - expect(res).toBe(false); - expect(spy.mock.calls[0][0] instanceof RestOccurError).toBeTruthy(); - expect((spy.mock.calls[0][0] as RestOccurError).payload).toEqual({ status: 403 }); - done(); - }); + guard + .canActivate({ data: { requiredPolicy: 'test' } } as any, null) + .subscribe((res) => { + expect(res).toBe(false); + expect(spy.mock.calls[0][0] instanceof RestOccurError).toBeTruthy(); + expect((spy.mock.calls[0][0] as RestOccurError).payload).toEqual({ + status: 403, + }); + done(); + }); }); - it('should check the requiredPolicy from RoutesService', done => { + it('should check the requiredPolicy from RoutesService', (done) => { routes.add([ { path: '/test', @@ -87,23 +104,29 @@ describe('PermissionGuard', () => { requiredPolicy: 'TestPolicy', }, ]); - permissionService.getGrantedPolicy$.mockImplementation(policy => of(policy === 'TestPolicy')); - guard.canActivate({ data: {} } as any, { url: 'test' } as any).subscribe(result => { - expect(result).toBe(true); - done(); - }); + permissionService.getGrantedPolicy$.mockImplementation((policy) => + of(policy === 'TestPolicy') + ); + guard + .canActivate({ data: {} } as any, { url: 'test' } as any) + .subscribe((result) => { + expect(result).toBe(true); + done(); + }); }); - it('should return Observable if RoutesService does not have requiredPolicy for given URL', done => { + it('should return Observable if RoutesService does not have requiredPolicy for given URL', (done) => { routes.add([ { path: '/test', name: 'Test', }, ]); - guard.canActivate({ data: {} } as any, { url: 'test' } as any).subscribe(result => { - expect(result).toBe(true); - done(); - }); + guard + .canActivate({ data: {} } as any, { url: 'test' } as any) + .subscribe((result) => { + expect(result).toBe(true); + done(); + }); }); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile.service.spec.ts index 33106e0e29..32dcf030d7 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile.service.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile.service.spec.ts @@ -1,4 +1,9 @@ -import { createHttpFactory, HttpMethod, SpectatorHttp, SpyObject } from '@ngneat/spectator/jest'; +import { + createHttpFactory, + HttpMethod, + SpectatorHttp, + SpyObject, +} from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; import { EnvironmentService, ProfileService, RestService } from '../services'; import { CORE_OPTIONS } from '../tokens'; @@ -8,7 +13,7 @@ describe('ProfileService', () => { let environmentService: SpyObject; const createHttp = createHttpFactory({ - dataService: ProfileService, + service: ProfileService, providers: [ RestService, { provide: CORE_OPTIONS, useValue: {} }, @@ -26,7 +31,10 @@ describe('ProfileService', () => { it('should send a GET to my-profile API', () => { spectator.service.get().subscribe(); - spectator.expectOne('https://abp.io/api/identity/my-profile', HttpMethod.GET); + spectator.expectOne( + 'https://abp.io/api/identity/my-profile', + HttpMethod.GET + ); }); it('should send a POST to change-password API', () => { @@ -34,7 +42,7 @@ describe('ProfileService', () => { spectator.service.changePassword(mock).subscribe(); const req = spectator.expectOne( 'https://abp.io/api/identity/my-profile/change-password', - HttpMethod.POST, + HttpMethod.POST ); expect(req.request.body).toEqual(mock); }); @@ -50,7 +58,10 @@ describe('ProfileService', () => { hasPassword: false, }; spectator.service.update(mock).subscribe(); - const req = spectator.expectOne('https://abp.io/api/identity/my-profile', HttpMethod.PUT); + const req = spectator.expectOne( + 'https://abp.io/api/identity/my-profile', + HttpMethod.PUT + ); expect(req.request.body).toEqual(mock); }); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts index a0b3bb61bb..8c5cf1fc3a 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts @@ -46,7 +46,9 @@ describe('ComponentProjectionStrategy', () => { beforeEach(() => { spectator = createComponent({}); - containerStrategy = CONTAINER_STRATEGY.Clear(spectator.component.containerRef); + containerStrategy = CONTAINER_STRATEGY.Clear( + spectator.component.containerRef + ); }); afterEach(() => { @@ -56,8 +58,11 @@ describe('ComponentProjectionStrategy', () => { describe('#injectContent', () => { it('should should insert content into container and return a ComponentRef', () => { - const strategy = new ComponentProjectionStrategy(TestComponent, containerStrategy); - componentRef = strategy.injectContent(spectator); + const strategy = new ComponentProjectionStrategy( + TestComponent, + containerStrategy + ); + componentRef = strategy.injectContent({ get: spectator.inject }); spectator.detectChanges(); const div = spectator.query('div.foo'); @@ -70,9 +75,9 @@ describe('ComponentProjectionStrategy', () => { const strategy = new ComponentProjectionStrategy( TestComponent, containerStrategy, - contextStrategy, + contextStrategy ); - componentRef = strategy.injectContent(spectator); + componentRef = strategy.injectContent({ get: spectator.inject }); spectator.detectChanges(); const div = spectator.query('div.foo'); @@ -114,7 +119,7 @@ describe('RootComponentProjectionStrategy', () => { describe('#injectContent', () => { it('should should insert content into body and return a ComponentRef', () => { const strategy = new RootComponentProjectionStrategy(TestComponent); - componentRef = strategy.injectContent(spectator); + componentRef = strategy.injectContent({ get: spectator.inject }); spectator.detectChanges(); const div = document.querySelector('body > ng-component > div.foo'); @@ -126,8 +131,11 @@ describe('RootComponentProjectionStrategy', () => { it('should be able to map context to projected component', () => { const contextStrategy = CONTEXT_STRATEGY.Component({ bar: 'bar' }); - const strategy = new RootComponentProjectionStrategy(TestComponent, contextStrategy); - componentRef = strategy.injectContent(spectator); + const strategy = new RootComponentProjectionStrategy( + TestComponent, + contextStrategy + ); + componentRef = strategy.injectContent({ get: spectator.inject }); spectator.detectChanges(); const div = document.querySelector('body > ng-component > div.foo'); @@ -166,7 +174,9 @@ describe('TemplateProjectionStrategy', () => { beforeEach(() => { spectator = createComponent({}); - containerStrategy = CONTAINER_STRATEGY.Clear(spectator.component.containerRef); + containerStrategy = CONTAINER_STRATEGY.Clear( + spectator.component.containerRef + ); }); afterEach(() => { @@ -177,7 +187,10 @@ describe('TemplateProjectionStrategy', () => { describe('#injectContent', () => { it('should should insert content into container and return an EmbeddedViewRef', () => { const templateRef = spectator.component.templateRef; - const strategy = new TemplateProjectionStrategy(templateRef, containerStrategy); + const strategy = new TemplateProjectionStrategy( + templateRef, + containerStrategy + ); embeddedViewRef = strategy.injectContent(); spectator.detectChanges(); @@ -194,11 +207,13 @@ describe('TemplateProjectionStrategy', () => { it('should be able to map context to projected template', () => { const templateRef = spectator.component.templateRef; - const contextStrategy = CONTEXT_STRATEGY.Template({ $implicit: 'bar' }); + const contextStrategy = CONTEXT_STRATEGY.Template({ + $implicit: 'bar', + }); const strategy = new TemplateProjectionStrategy( templateRef, containerStrategy, - contextStrategy, + contextStrategy ); embeddedViewRef = strategy.injectContent(); spectator.detectChanges(); @@ -212,7 +227,7 @@ describe('TemplateProjectionStrategy', () => { describe('PROJECTION_STRATEGY', () => { const content = undefined; - const containerRef = ({ length: 0 } as any) as ViewContainerRef; + const containerRef = { length: 0 } as any as ViewContainerRef; let context: any; test.each` @@ -227,9 +242,13 @@ describe('PROJECTION_STRATEGY', () => { 'should successfully map $name to $Strategy.name with $containerStrategy.name container strategy and $contextStrategy.name context strategy', ({ name, Strategy, containerStrategy }) => { expect(PROJECTION_STRATEGY[name](content, containerRef, context)).toEqual( - new Strategy(content, containerStrategy(containerRef), CONTEXT_STRATEGY.None()), + new Strategy( + content, + containerStrategy(containerRef), + CONTEXT_STRATEGY.None() + ) ); - }, + } ); test.each` name | Strategy | domStrategy @@ -238,9 +257,9 @@ describe('PROJECTION_STRATEGY', () => { 'should successfully map $name to $Strategy.name with $domStrategy.name dom strategy', ({ name, Strategy, domStrategy }) => { expect(PROJECTION_STRATEGY[name](content, context)).toEqual( - new Strategy(content, CONTEXT_STRATEGY.None(), domStrategy()), + new Strategy(content, CONTEXT_STRATEGY.None(), domStrategy()) ); - }, + } ); test.each` @@ -256,9 +275,13 @@ describe('PROJECTION_STRATEGY', () => { ({ name, Strategy, containerStrategy, contextStrategy }) => { context = { x: true }; expect(PROJECTION_STRATEGY[name](content, containerRef, context)).toEqual( - new Strategy(content, containerStrategy(containerRef), contextStrategy(context)), + new Strategy( + content, + containerStrategy(containerRef), + contextStrategy(context) + ) ); - }, + } ); test.each` @@ -269,8 +292,8 @@ describe('PROJECTION_STRATEGY', () => { ({ name, Strategy, domStrategy, contextStrategy }) => { context = { x: true }; expect(PROJECTION_STRATEGY[name](content, context)).toEqual( - new Strategy(content, contextStrategy(context), domStrategy()), + new Strategy(content, contextStrategy(context), domStrategy()) ); - }, + } ); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts index e9d0ab5ebc..881f85a3c4 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts @@ -1,4 +1,9 @@ -import { createHttpFactory, HttpMethod, SpectatorHttp, SpyObject } from '@ngneat/spectator/jest'; +import { + createHttpFactory, + HttpMethod, + SpectatorHttp, + SpyObject, +} from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; import { OAuthService } from 'angular-oauth2-oidc'; import { of, throwError } from 'rxjs'; @@ -15,8 +20,11 @@ describe('HttpClient testing', () => { const api = 'https://abp.io'; const createHttp = createHttpFactory({ - dataService: RestService, - providers: [EnvironmentService, { provide: CORE_OPTIONS, useValue: { environment: {} } }], + service: RestService, + providers: [ + EnvironmentService, + { provide: CORE_OPTIONS, useValue: { environment: {} } }, + ], mocks: [OAuthService, Store], }); @@ -57,7 +65,11 @@ describe('HttpClient testing', () => { test('should use the specific api', () => { spectator.service - .request({ method: HttpMethod.GET, url: '/test' }, null, 'http://test.api') + .request( + { method: HttpMethod.GET, url: '/test' }, + null, + 'http://test.api' + ) .subscribe(); spectator.expectOne('http://test.api' + '/test', HttpMethod.GET); }); @@ -70,10 +82,12 @@ describe('HttpClient testing', () => { spectator.expectOne('bar' + '/test', HttpMethod.GET); }); - test('should complete upon successful request', done => { + test('should complete upon successful request', (done) => { const complete = jest.fn(done); - spectator.service.request({ method: HttpMethod.GET, url: '/test' }).subscribe({ complete }); + spectator.service + .request({ method: HttpMethod.GET, url: '/test' }) + .subscribe({ complete }); const req = spectator.expectOne(api + '/test', HttpMethod.GET); spectator.flushAll([req], [{}]); @@ -83,13 +97,16 @@ describe('HttpClient testing', () => { const spy = jest.spyOn(store, 'dispatch'); spectator.service - .request({ method: HttpMethod.GET, url: '/test' }, { observe: Rest.Observe.Events }) + .request( + { method: HttpMethod.GET, url: '/test' }, + { observe: Rest.Observe.Events } + ) .pipe( - catchError(err => { + catchError((err) => { expect(err).toBeTruthy(); expect(spy).toHaveBeenCalled(); return of(null); - }), + }) ) .subscribe(); @@ -103,14 +120,14 @@ describe('HttpClient testing', () => { spectator.service .request( { method: HttpMethod.GET, url: '/test' }, - { observe: Rest.Observe.Events, skipHandleError: true }, + { observe: Rest.Observe.Events, skipHandleError: true } ) .pipe( - catchError(err => { + catchError((err) => { expect(err).toBeTruthy(); expect(spy).toHaveBeenCalledTimes(0); return of(null); - }), + }) ) .subscribe(); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/core/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/packages/core/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/packages/identity/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/schematics/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts deleted file mode 100644 index a5c69d2301..0000000000 --- a/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AuthWrapperComponent } from './auth-wrapper.component'; - -describe('AuthWrapperComponent', () => { - let component: AuthWrapperComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ AuthWrapperComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(AuthWrapperComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts deleted file mode 100644 index 86dd8a0cf5..0000000000 --- a/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { TenantBoxComponent } from './tenant-box.component'; - -describe('TenantBoxComponent', () => { - let component: TenantBoxComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ TenantBoxComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(TenantBoxComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/packages/theme-basic/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.spec.json index cfff29a544..a42c4b02fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.spec.json +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/tsconfig.spec.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["jest", "node"], + "esModuleInterop": true }, "files": ["src/test-setup.ts"], "include": ["**/*.spec.ts", "**/*.d.ts"] diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index 7aa4976345..9db2d0c66a 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -11,9 +11,8 @@ "target": "es2015", "module": "esnext", "lib": ["es2017", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, "baseUrl": ".", + "allowSyntheticDefaultImports": true, "paths": { "@abp/ng.account": ["packages/account/src/public-api.ts"], "@abp/ng.account.core": ["packages/account-core/src/public-api.ts"], diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.lib.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.lib.base.json index edae640cd1..452f037f59 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.lib.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.lib.base.json @@ -11,8 +11,7 @@ "target": "es2015", "module": "esnext", "lib": ["es2017", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, + "allowSyntheticDefaultImports": true, "baseUrl": ".", "paths": { "@abp/ng.account": ["dist/packages/account"], From 1d0fc5b26d175c8102f504a62d6897757697cc31 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 16 Aug 2021 20:34:02 +0800 Subject: [PATCH 19/56] Rename IgnoreMultiTenancyAttribute .cs to IgnoreMultiTenancyAttribute.cs --- .../{IgnoreMultiTenancy.cs => IgnoreMultiTenancyAttribute.cs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/{IgnoreMultiTenancy.cs => IgnoreMultiTenancyAttribute.cs} (100%) diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/IgnoreMultiTenancy.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/IgnoreMultiTenancyAttribute.cs similarity index 100% rename from framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/IgnoreMultiTenancy.cs rename to framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/IgnoreMultiTenancyAttribute.cs From 682d8ab184587bafb85b90ad8db012103d352ad3 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 16 Aug 2021 16:12:44 +0300 Subject: [PATCH 20/56] fix all lint errors --- npm/ng-packs/nx/ng-packs/.eslintignore | 1 + npm/ng-packs/nx/ng-packs/.eslintrc.json | 7 +- npm/ng-packs/nx/ng-packs/.prettierrc | 5 +- .../nx/ng-packs/apps/dev-app/.eslintrc.json | 2 +- npm/ng-packs/nx/ng-packs/package.json | 1 + .../manage-profile.component.html | 2 +- .../account/src/lib/models/account.ts | 4 +- .../src/lib/abstracts/ng-model.component.ts | 19 +- .../src/lib/directives/autofocus.directive.ts | 6 +- .../src/lib/directives/debounce.directive.ts | 20 +- .../core/src/lib/directives/for.directive.ts | 85 ++- .../lib/directives/form-submit.directive.ts | 19 +- .../replaceable-template.directive.ts | 17 +- .../directives/stop-propagation.directive.ts | 26 +- .../lib/directives/visibility.directive.ts | 3 +- .../packages/core/src/lib/models/dtos.ts | 29 +- .../src/lib/models/replaceable-components.ts | 10 +- .../packages/core/src/lib/models/utility.ts | 1 + .../object-extending/models.ts | 1 + .../proxy/volo/abp/http/modeling/models.ts | 1 + .../core/src/lib/services/list.service.ts | 8 +- .../core/src/lib/services/routes.service.ts | 1 + .../core/src/lib/services/track-by.service.ts | 15 +- .../lib/tests/config-state.service.spec.ts | 57 +- .../src/lib/tests/permission.guard.spec.ts | 72 +-- .../replaceable-template.directive.spec.ts | 6 +- .../core/src/lib/tests/routes.service.spec.ts | 2 +- .../packages/core/src/lib/utils/rxjs-utils.ts | 40 +- .../packages/core/src/lib/utils/tree-utils.ts | 1 + .../directives/free-text-input.directive.ts | 3 +- .../proxy/validation/string-values/models.ts | 1 + .../identity/src/lib/proxy/identity/models.ts | 12 +- .../packages/schematics/.eslintrc.json | 15 +- .../schematics/src/commands/api/index.ts | 3 +- .../src/commands/proxy-index/index.ts | 3 +- .../src/commands/proxy-remove/index.ts | 3 +- .../packages/schematics/src/models/method.ts | 2 + .../packages/schematics/src/models/util.ts | 2 +- .../schematics/src/utils/angular/ast-utils.ts | 247 +++++--- .../schematics/src/utils/angular/config.ts | 571 +++++++++--------- .../src/utils/angular/find-module.ts | 58 +- .../src/utils/angular/workspace-models.ts | 1 + .../packages/schematics/src/utils/enum.ts | 4 +- .../packages/schematics/src/utils/generics.ts | 2 +- .../packages/schematics/src/utils/model.ts | 1 + .../packages/schematics/src/utils/source.ts | 1 + .../packages/schematics/src/utils/text.ts | 3 +- .../schematics/src/utils/workspace.ts | 1 + .../tenant-management/src/lib/proxy/models.ts | 11 +- .../auth-wrapper/auth-wrapper.component.ts | 6 +- .../tenant-box/tenant-box.component.ts | 6 +- .../lib/components/button/button.component.ts | 11 +- .../lib/components/chart/chart.component.ts | 4 +- .../components/loading/loading.component.ts | 8 +- .../table-empty-message.component.ts | 6 +- .../ngx-datatable-default.directive.ts | 2 +- .../ngx-datatable-list.directive.ts | 2 +- .../src/lib/handlers/error.handler.ts | 63 +- .../lib/tests/breadcrumb.component.spec.ts | 1 + 59 files changed, 811 insertions(+), 703 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/.eslintignore diff --git a/npm/ng-packs/nx/ng-packs/.eslintignore b/npm/ng-packs/nx/ng-packs/.eslintignore new file mode 100644 index 0000000000..191ae4cc94 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/.eslintignore @@ -0,0 +1 @@ +*.d.ts \ No newline at end of file diff --git a/npm/ng-packs/nx/ng-packs/.eslintrc.json b/npm/ng-packs/nx/ng-packs/.eslintrc.json index 06cc47d9a2..873a32dce0 100644 --- a/npm/ng-packs/nx/ng-packs/.eslintrc.json +++ b/npm/ng-packs/nx/ng-packs/.eslintrc.json @@ -20,11 +20,14 @@ } ] } - }, + }, { "files": ["*.ts", "*.tsx"], "extends": ["plugin:@nrwl/nx/typescript"], - "rules": {} + "rules": { + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/no-empty-function": ["warn"] + } }, { "files": ["*.js", "*.jsx"], diff --git a/npm/ng-packs/nx/ng-packs/.prettierrc b/npm/ng-packs/nx/ng-packs/.prettierrc index 544138be45..8aa45f90c0 100644 --- a/npm/ng-packs/nx/ng-packs/.prettierrc +++ b/npm/ng-packs/nx/ng-packs/.prettierrc @@ -1,3 +1,6 @@ { - "singleQuote": true + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "arrowParens": "avoid" } diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/.eslintrc.json b/npm/ng-packs/nx/ng-packs/apps/dev-app/.eslintrc.json index dc85568938..fd1ac7ecb9 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/.eslintrc.json +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/.eslintrc.json @@ -21,7 +21,7 @@ "error", { "type": "element", - "prefix": "abp", + "prefix": "app", "style": "kebab-case" } ] diff --git a/npm/ng-packs/nx/ng-packs/package.json b/npm/ng-packs/nx/ng-packs/package.json index a6410e3dd7..911ebe9212 100644 --- a/npm/ng-packs/nx/ng-packs/package.json +++ b/npm/ng-packs/nx/ng-packs/package.json @@ -11,6 +11,7 @@ "test": "ng test --detect-open-handles=true --run-in-band=true --watch-all=true", "test:all": "nx run-many --target=test --all", "lint": "nx workspace-lint && ng lint", + "lint:all": "nx run-many --target=lint --all", "e2e": "ng e2e", "affected:apps": "nx affected:apps", "affected:libs": "nx affected:libs", diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html index 91b635c080..76c4d102ad 100644 --- a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html @@ -1,6 +1,6 @@
-
+
diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/account.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/account.ts index ef5ad926a2..97c8c3649e 100644 --- a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/account.ts +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/models/account.ts @@ -1,12 +1,10 @@ -import { TemplateRef } from '@angular/core'; +/* eslint-disable @typescript-eslint/no-empty-interface */ export namespace Account { - //tslint:disable export interface TenantBoxComponentInputs {} export interface TenantBoxComponentOutputs {} export interface PersonalSettingsComponentInputs {} export interface PersonalSettingsComponentOutputs {} export interface ChangePasswordComponentInputs {} export interface ChangePasswordComponentOutputs {} - // tslint:enable } diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts index 7176803b74..93225990d5 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts @@ -1,14 +1,16 @@ -import { ControlValueAccessor } from '@angular/forms'; import { ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { ControlValueAccessor } from '@angular/forms'; // Not an abstract class on purpose. Do not change! // tslint:disable-next-line: use-component-selector @Component({ template: '' }) -export class AbstractNgModelComponent implements ControlValueAccessor { +export class AbstractNgModelComponent + implements ControlValueAccessor +{ protected _value: T; protected cdRef: ChangeDetectorRef; - onChange: (value: T) => {}; - onTouched: () => {}; + onChange: (value: T) => void; + onTouched: () => void; @Input() disabled: boolean; @@ -17,16 +19,17 @@ export class AbstractNgModelComponent implements ControlValueAcc readonly: boolean; @Input() - valueFn: (value: U, previousValue?: T) => T = value => (value as any) as T; + valueFn: (value: U, previousValue?: T) => T = (value) => value as any as T; @Input() - valueLimitFn: (value: T, previousValue?: T) => any = value => false; + valueLimitFn: (value: T, previousValue?: T) => any = (value) => false; @Input() set value(value: T) { - value = this.valueFn((value as any) as U, this._value); + value = this.valueFn(value as any as U, this._value); - if (this.valueLimitFn(value, this._value) !== false || this.readonly) return; + if (this.valueLimitFn(value, this._value) !== false || this.readonly) + return; this._value = value; this.notifyValueChange(); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/autofocus.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/autofocus.directive.ts index 7fb7de34d1..40b0fe0b0b 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/autofocus.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/autofocus.directive.ts @@ -1,8 +1,8 @@ -import { Directive, ElementRef, Input, AfterViewInit } from '@angular/core'; +import { AfterViewInit, Directive, ElementRef, Input } from '@angular/core'; @Directive({ - // tslint:disable-next-line: directive-selector - selector: '[autofocus]' + // eslint-disable-next-line @angular-eslint/directive-selector + selector: '[autofocus]', }) export class AutofocusDirective implements AfterViewInit { @Input('autofocus') diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/debounce.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/debounce.directive.ts index f35b0c6768..16bcb07590 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/debounce.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/debounce.directive.ts @@ -1,10 +1,17 @@ -import { Directive, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { + Directive, + ElementRef, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; import { fromEvent } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; import { SubscriptionService } from '../services/subscription.service'; @Directive({ - // tslint:disable-next-line: directive-selector + // eslint-disable-next-line @angular-eslint/directive-selector selector: '[input.debounce]', providers: [SubscriptionService], }) @@ -13,10 +20,15 @@ export class InputEventDebounceDirective implements OnInit { @Output('input.debounce') readonly debounceEvent = new EventEmitter(); - constructor(private el: ElementRef, private subscription: SubscriptionService) {} + constructor( + private el: ElementRef, + private subscription: SubscriptionService + ) {} ngOnInit(): void { - const input$ = fromEvent(this.el.nativeElement, 'input').pipe(debounceTime(this.debounce)); + const input$ = fromEvent(this.el.nativeElement, 'input').pipe( + debounceTime(this.debounce) + ); this.subscription.addOne(input$, (event: Event) => { this.debounceEvent.emit(event); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/for.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/for.directive.ts index ba3efd7c21..b9bd04f0fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/for.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/for.directive.ts @@ -11,23 +11,32 @@ import { TrackByFunction, ViewContainerRef, } from '@angular/core'; -import compare from 'just-compare'; import clone from 'just-clone'; +import compare from 'just-compare'; export type CompareFn = (value: T, comparison: T) => boolean; class AbpForContext { - constructor(public $implicit: any, public index: number, public count: number, public list: any[]) {} + constructor( + public $implicit: any, + public index: number, + public count: number, + public list: any[] + ) {} } class RecordView { - constructor(public record: IterableChangeRecord, public view: EmbeddedViewRef) {} + constructor( + public record: IterableChangeRecord, + public view: EmbeddedViewRef + ) {} } @Directive({ selector: '[abpFor]', }) export class ForDirective implements OnChanges { + // eslint-disable-next-line @angular-eslint/no-input-rename @Input('abpForOf') items: any[]; @@ -61,36 +70,46 @@ export class ForDirective implements OnChanges { } get trackByFn(): TrackByFunction { - return this.trackBy || ((index: number, item: any) => (item as any).id || index); + return ( + this.trackBy || ((index: number, item: any) => (item as any).id || index) + ); } constructor( private tempRef: TemplateRef, private vcRef: ViewContainerRef, - private differs: IterableDiffers, + private differs: IterableDiffers ) {} private iterateOverAppliedOperations(changes: IterableChanges) { const rw: RecordView[] = []; - changes.forEachOperation((record: IterableChangeRecord, previousIndex: number, currentIndex: number) => { - if (record.previousIndex == null) { - const view = this.vcRef.createEmbeddedView( - this.tempRef, - new AbpForContext(null, -1, -1, this.items), - currentIndex, - ); - - rw.push(new RecordView(record, view)); - } else if (currentIndex == null) { - this.vcRef.remove(previousIndex); - } else { - const view = this.vcRef.get(previousIndex); - this.vcRef.move(view, currentIndex); - - rw.push(new RecordView(record, view as EmbeddedViewRef)); + changes.forEachOperation( + ( + record: IterableChangeRecord, + previousIndex: number, + currentIndex: number + ) => { + if (record.previousIndex == null) { + const view = this.vcRef.createEmbeddedView( + this.tempRef, + new AbpForContext(null, -1, -1, this.items), + currentIndex + ); + + rw.push(new RecordView(record, view)); + } else if (currentIndex == null) { + this.vcRef.remove(previousIndex); + } else { + const view = this.vcRef.get(previousIndex); + this.vcRef.move(view, currentIndex); + + rw.push( + new RecordView(record, view as EmbeddedViewRef) + ); + } } - }); + ); for (let i = 0, l = rw.length; i < l; i++) { rw[i].view.context.$implicit = rw[i].record.item; @@ -106,7 +125,9 @@ export class ForDirective implements OnChanges { } changes.forEachIdentityChange((record: IterableChangeRecord) => { - const viewRef = this.vcRef.get(record.currentIndex) as EmbeddedViewRef; + const viewRef = this.vcRef.get( + record.currentIndex + ) as EmbeddedViewRef; viewRef.context.$implicit = record.item; }); } @@ -143,7 +164,13 @@ export class ForDirective implements OnChanges { private sortItems(items: any[]) { if (this.orderBy) { - items.sort((a, b) => (a[this.orderBy] > b[this.orderBy] ? 1 : a[this.orderBy] < b[this.orderBy] ? -1 : 0)); + items.sort((a, b) => + a[this.orderBy] > b[this.orderBy] + ? 1 + : a[this.orderBy] < b[this.orderBy] + ? -1 + : 0 + ); } else { items.sort(); } @@ -155,8 +182,14 @@ export class ForDirective implements OnChanges { const compareFn = this.compareFn; - if (typeof this.filterBy !== 'undefined' && typeof this.filterVal !== 'undefined' && this.filterVal !== '') { - items = items.filter(item => compareFn(item[this.filterBy], this.filterVal)); + if ( + typeof this.filterBy !== 'undefined' && + typeof this.filterVal !== 'undefined' && + this.filterVal !== '' + ) { + items = items.filter((item) => + compareFn(item[this.filterBy], this.filterVal) + ); } switch (this.orderDir) { diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts index 5f42a65681..04e3269ce4 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts @@ -16,7 +16,7 @@ import { SubscriptionService } from '../services/subscription.service'; type Controls = { [key: string]: FormControl } | FormGroup[]; @Directive({ - // tslint:disable-next-line: directive-selector + // eslint-disable-next-line @angular-eslint/directive-selector selector: 'form[ngSubmit][formGroup]', providers: [SubscriptionService], }) @@ -35,7 +35,7 @@ export class FormSubmitDirective implements OnInit { @Self() private formGroupDirective: FormGroupDirective, private host: ElementRef, private cdRef: ChangeDetectorRef, - private subscription: SubscriptionService, + private subscription: SubscriptionService ) {} ngOnInit() { @@ -44,16 +44,19 @@ export class FormSubmitDirective implements OnInit { this.executedNgSubmit = true; }); - const keyup$ = fromEvent(this.host.nativeElement as HTMLElement, 'keyup').pipe( + const keyup$ = fromEvent( + this.host.nativeElement as HTMLElement, + 'keyup' + ).pipe( debounceTime(this.debounce), - filter(event => !(event.target instanceof HTMLTextAreaElement)), - filter((event: KeyboardEvent) => event && event.key === 'Enter'), + filter((event) => !(event.target instanceof HTMLTextAreaElement)), + filter((event: KeyboardEvent) => event && event.key === 'Enter') ); this.subscription.addOne(keyup$, () => { if (!this.executedNgSubmit) { this.host.nativeElement.dispatchEvent( - new Event('submit', { bubbles: true, cancelable: true }), + new Event('submit', { bubbles: true, cancelable: true }) ); } @@ -73,13 +76,13 @@ export class FormSubmitDirective implements OnInit { function setDirty(controls: Controls) { if (Array.isArray(controls)) { - controls.forEach(group => { + controls.forEach((group) => { setDirty(group.controls as { [key: string]: FormControl }); }); return; } - Object.keys(controls).forEach(key => { + Object.keys(controls).forEach((key) => { controls[key].markAsDirty(); controls[key].updateValueAndValidity(); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/replaceable-template.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/replaceable-template.directive.ts index 489d1afabc..0a5509aeec 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/replaceable-template.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/replaceable-template.directive.ts @@ -19,15 +19,18 @@ import { ReplaceableComponents } from '../models/replaceable-components'; import { ReplaceableComponentsService } from '../services/replaceable-components.service'; import { SubscriptionService } from '../services/subscription.service'; -@Directive({ selector: '[abpReplaceableTemplate]', providers: [SubscriptionService] }) +@Directive({ + selector: '[abpReplaceableTemplate]', + providers: [SubscriptionService], +}) export class ReplaceableTemplateDirective implements OnInit, OnChanges { @Input('abpReplaceableTemplate') data: ReplaceableComponents.ReplaceableTemplateDirectiveInput; - providedData = { inputs: {}, outputs: {} } as ReplaceableComponents.ReplaceableTemplateData< - any, - any - >; + providedData = { + inputs: {}, + outputs: {}, + } as ReplaceableComponents.ReplaceableTemplateData; context = {} as any; @@ -106,7 +109,7 @@ export class ReplaceableTemplateDirective implements OnInit, OnChanges { if (this.data.inputs) { for (const key in this.data.inputs) { - if (this.data.inputs.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(this.data.inputs, key)) { if (!compare(this.defaultComponentRef[key], this.data.inputs[key].value)) { this.defaultComponentRef[key] = this.data.inputs[key].value; } @@ -116,7 +119,7 @@ export class ReplaceableTemplateDirective implements OnInit, OnChanges { if (this.data.outputs) { for (const key in this.data.outputs) { - if (this.data.outputs.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(this.data.outputs, key)) { if (!this.defaultComponentSubscriptions[key]) { this.defaultComponentSubscriptions[key] = this.defaultComponentRef[key].subscribe( value => { diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts index 12c035cc19..c297bfd90d 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts @@ -1,21 +1,33 @@ -import { Directive, ElementRef, EventEmitter, OnInit, Output } from '@angular/core'; +import { + Directive, + ElementRef, + EventEmitter, + OnInit, + Output, +} from '@angular/core'; import { fromEvent } from 'rxjs'; import { SubscriptionService } from '../services/subscription.service'; @Directive({ - // tslint:disable-next-line: directive-selector + // eslint-disable-next-line @angular-eslint/directive-selector selector: '[click.stop]', providers: [SubscriptionService], }) export class StopPropagationDirective implements OnInit { @Output('click.stop') readonly stopPropEvent = new EventEmitter(); - constructor(private el: ElementRef, private subscription: SubscriptionService) {} + constructor( + private el: ElementRef, + private subscription: SubscriptionService + ) {} ngOnInit(): void { - this.subscription.addOne(fromEvent(this.el.nativeElement, 'click'), (event: MouseEvent) => { - event.stopPropagation(); - this.stopPropEvent.emit(event); - }); + this.subscription.addOne( + fromEvent(this.el.nativeElement, 'click'), + (event: MouseEvent) => { + event.stopPropagation(); + this.stopPropEvent.emit(event); + } + ); } } diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/visibility.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/visibility.directive.ts index 6cb341117d..b85440d486 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/visibility.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/visibility.directive.ts @@ -22,8 +22,7 @@ export class VisibilityDirective implements AfterViewInit { this.focusedElement = this.elRef.nativeElement; } - let observer: MutationObserver; - observer = new MutationObserver(mutations => { + const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { if (!mutation.target) return; diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/dtos.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/dtos.ts index 49c1d8e735..b9b349f513 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/dtos.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/dtos.ts @@ -5,7 +5,7 @@ export class ListResultDto { constructor(initialValues: Partial> = {}) { for (const key in initialValues) { - if (initialValues.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(initialValues, key)) { this[key] = initialValues[key]; } } @@ -25,7 +25,10 @@ export class LimitedResultRequestDto { constructor(initialValues: Partial = {}) { for (const key in initialValues) { - if (initialValues.hasOwnProperty(key) && initialValues[key] !== undefined) { + if ( + Object.prototype.hasOwnProperty.call(initialValues, key) && + initialValues[key] !== undefined + ) { this[key] = initialValues[key]; } } @@ -53,7 +56,7 @@ export class EntityDto { constructor(initialValues: Partial> = {}) { for (const key in initialValues) { - if (initialValues.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(initialValues, key)) { this[key] = initialValues[key]; } } @@ -71,7 +74,7 @@ export class CreationAuditedEntityDto extends EntityDto extends CreationAuditedEntityDto { creator?: TUserDto; @@ -93,7 +96,7 @@ export class AuditedEntityDto extends CreationAuditedEntit export class AuditedEntityWithUserDto< TUserDto, - TPrimaryKey = string + TPrimaryKey = string, > extends AuditedEntityDto { creator?: TUserDto; lastModifier?: TUserDto; @@ -115,7 +118,7 @@ export class FullAuditedEntityDto extends AuditedEntityDto export class FullAuditedEntityWithUserDto< TUserDto, - TPrimaryKey = string + TPrimaryKey = string, > extends FullAuditedEntityDto { creator?: TUserDto; lastModifier?: TUserDto; @@ -131,7 +134,7 @@ export class ExtensibleObject { constructor(initialValues: Partial = {}) { for (const key in initialValues) { - if (initialValues.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(initialValues, key)) { this[key] = initialValues[key]; } } @@ -147,7 +150,7 @@ export class ExtensibleEntityDto extends ExtensibleObject { } export class ExtensibleCreationAuditedEntityDto< - TPrimaryKey = string + TPrimaryKey = string, > extends ExtensibleEntityDto { creationTime: Date | string; creatorId?: string; @@ -158,7 +161,7 @@ export class ExtensibleCreationAuditedEntityDto< } export class ExtensibleAuditedEntityDto< - TPrimaryKey = string + TPrimaryKey = string, > extends ExtensibleCreationAuditedEntityDto { lastModificationTime?: Date | string; lastModifierId?: string; @@ -170,7 +173,7 @@ export class ExtensibleAuditedEntityDto< export class ExtensibleAuditedEntityWithUserDto< TPrimaryKey = string, - TUserDto = any + TUserDto = any, > extends ExtensibleAuditedEntityDto { creator: TUserDto; lastModifier: TUserDto; @@ -182,7 +185,7 @@ export class ExtensibleAuditedEntityWithUserDto< export class ExtensibleCreationAuditedEntityWithUserDto< TPrimaryKey = string, - TUserDto = any + TUserDto = any, > extends ExtensibleCreationAuditedEntityDto { creator: TUserDto; @@ -194,7 +197,7 @@ export class ExtensibleCreationAuditedEntityWithUserDto< } export class ExtensibleFullAuditedEntityDto< - TPrimaryKey = string + TPrimaryKey = string, > extends ExtensibleAuditedEntityDto { isDeleted: boolean; deleterId?: string; @@ -207,7 +210,7 @@ export class ExtensibleFullAuditedEntityDto< export class ExtensibleFullAuditedEntityWithUserDto< TPrimaryKey = string, - TUserDto = any + TUserDto = any, > extends ExtensibleFullAuditedEntityDto { creator: TUserDto; lastModifier: TUserDto; diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/replaceable-components.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/replaceable-components.ts index 1c59ff3a05..d20768e7ff 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/replaceable-components.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/replaceable-components.ts @@ -1,6 +1,6 @@ -import { Type, EventEmitter } from '@angular/core'; +import { EventEmitter, Type } from '@angular/core'; +import { Subject } from 'rxjs'; import { ABP } from './common'; -import { Subject, BehaviorSubject } from 'rxjs'; export namespace ReplaceableComponents { export interface State { @@ -14,7 +14,7 @@ export namespace ReplaceableComponents { export interface ReplaceableTemplateDirectiveInput< I, - O extends { [K in keyof O]: EventEmitter | Subject } + O extends { [K in keyof O]: EventEmitter | Subject }, > { inputs: { -readonly [K in keyof I]: { value: I[K]; twoWay?: boolean } }; outputs: { -readonly [K in keyof O]: (value: ABP.ExtractFromOutput) => void }; @@ -23,7 +23,7 @@ export namespace ReplaceableComponents { export interface ReplaceableTemplateData< I, - O extends { [K in keyof O]: EventEmitter | Subject } + O extends { [K in keyof O]: EventEmitter | Subject }, > { inputs: ReplaceableTemplateInputs; outputs: ReplaceableTemplateOutputs; @@ -35,7 +35,7 @@ export namespace ReplaceableComponents { }; export type ReplaceableTemplateOutputs< - T extends { [K in keyof T]: EventEmitter | Subject } + T extends { [K in keyof T]: EventEmitter | Subject }, > = { [K in keyof T]: (value: ABP.ExtractFromOutput) => void; }; diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/utility.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/utility.ts index 3f183d3944..f8fe95e5c2 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/utility.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/models/utility.ts @@ -10,6 +10,7 @@ export type DeepPartial = Partible extends never type Partible = T extends Primitive | Array | Node ? never : { + // eslint-disable-next-line @typescript-eslint/ban-types [K in keyof T]: T[K] extends Function ? never : T[K]; } extends T ? T diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts index c72a9abc9b..b16411f5a3 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/ban-types */ export interface EntityExtensionDto { properties: Record; diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/http/modeling/models.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/http/modeling/models.ts index b23c8e5a2d..c4b1e9b5ee 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/http/modeling/models.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/http/modeling/models.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/ban-types */ export interface ActionApiDescriptionModel { uniqueName?: string; diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/list.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/list.service.ts index c77ba9cdb4..dc79e67f66 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/list.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/list.service.ts @@ -82,6 +82,8 @@ export class ListService implements OnDes private destroy$ = new Subject(); + private delay: MonoTypeOperatorFunction; + get isLoading$(): Observable { return this._isLoading$.asObservable(); } @@ -95,8 +97,6 @@ export class ListService implements OnDes this.next(); }; - private delay: MonoTypeOperatorFunction; - constructor(injector: Injector) { const delay = injector.get(LIST_QUERY_DEBOUNCE_TIME, 300); this.delay = delay ? debounceTime(delay) : tap(); @@ -131,12 +131,12 @@ export class ListService implements OnDes } private next() { - this._query$.next(({ + this._query$.next({ filter: this._filter || undefined, maxResultCount: this._maxResultCount, skipCount: this._page * this._maxResultCount, sorting: this._sortOrder ? `${this._sortKey} ${this._sortOrder}` : undefined, - } as any) as QueryParamsType); + } as any as QueryParamsType); } } diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/routes.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/routes.service.ts index 02c88b4901..13461491e3 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/routes.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/routes.service.ts @@ -6,6 +6,7 @@ import { BaseTreeNode, createTreeFromList, TreeNode } from '../utils/tree-utils' import { ConfigStateService } from './config-state.service'; import { PermissionService } from './permission.service'; +// eslint-disable-next-line @typescript-eslint/ban-types export abstract class AbstractTreeService { abstract id: string; abstract parentId: string; diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/track-by.service.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/track-by.service.ts index aa72942ec0..5cce22d4a3 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/track-by.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/services/track-by.service.ts @@ -1,11 +1,18 @@ import { Injectable, TrackByFunction } from '@angular/core'; import { O } from 'ts-toolbelt'; -export const trackBy = (key: keyof T): TrackByFunction => (_, item) => item[key]; +export const trackBy = + (key: keyof T): TrackByFunction => + (_, item) => + item[key]; -export const trackByDeep = ( - ...keys: T extends object ? O.Paths : never -): TrackByFunction => (_, item) => keys.reduce((acc, key) => acc[key], item); +export const trackByDeep = + ( + // eslint-disable-next-line @typescript-eslint/ban-types + ...keys: T extends object ? O.Paths : never + ): TrackByFunction => + (_, item) => + keys.reduce((acc, key) => acc[key], item); @Injectable({ providedIn: 'root', diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts index c1e00550db..4cc69158ef 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts @@ -1,4 +1,4 @@ -import { CoreTestingModule } from '@abp/ng.core/testing'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; import { @@ -107,7 +107,7 @@ describe('ConfigState', () => { const createService = createServiceFactory({ service: ConfigStateService, - imports: [CoreTestingModule.withConfig()], + imports: [HttpClientTestingModule], providers: [ { provide: CORE_OPTIONS, useValue: { skipGetAppConfiguration: true } }, { provide: Store, useValue: {} }, @@ -124,35 +124,29 @@ describe('ConfigState', () => { describe('#getAll', () => { it('should return CONFIG_STATE_DATA', () => { expect(configState.getAll()).toEqual(CONFIG_STATE_DATA); - configState - .getAll$() - .subscribe((data) => expect(data).toEqual(CONFIG_STATE_DATA)); + configState.getAll$().subscribe(data => expect(data).toEqual(CONFIG_STATE_DATA)); }); }); describe('#getOne', () => { it('should return one property', () => { - expect(configState.getOne('localization')).toEqual( - CONFIG_STATE_DATA.localization - ); + expect(configState.getOne('localization')).toEqual(CONFIG_STATE_DATA.localization); configState .getOne$('localization') - .subscribe((localization) => - expect(localization).toEqual(CONFIG_STATE_DATA.localization) - ); + .subscribe(localization => expect(localization).toEqual(CONFIG_STATE_DATA.localization)); }); }); describe('#getDeep', () => { it('should return deeper', () => { expect(configState.getDeep('localization.languages')).toEqual( - CONFIG_STATE_DATA.localization.languages + CONFIG_STATE_DATA.localization.languages, ); configState .getDeep$('localization.languages') - .subscribe((languages) => - expect(languages).toEqual(CONFIG_STATE_DATA.localization.languages) + .subscribe(languages => + expect(languages).toEqual(CONFIG_STATE_DATA.localization.languages), ); expect(configState.getDeep('test')).toBeFalsy(); @@ -162,30 +156,22 @@ describe('ConfigState', () => { describe('#getFeature', () => { it('should return a setting', () => { expect(configState.getFeature('Chat.Enable')).toEqual( - CONFIG_STATE_DATA.features.values['Chat.Enable'] + CONFIG_STATE_DATA.features.values['Chat.Enable'], ); configState .getFeature$('Chat.Enable') - .subscribe((data) => - expect(data).toEqual(CONFIG_STATE_DATA.features.values['Chat.Enable']) - ); + .subscribe(data => expect(data).toEqual(CONFIG_STATE_DATA.features.values['Chat.Enable'])); }); }); describe('#getSetting', () => { it('should return a setting', () => { - expect( - configState.getSetting('Abp.Localization.DefaultLanguage') - ).toEqual( - CONFIG_STATE_DATA.setting.values['Abp.Localization.DefaultLanguage'] + expect(configState.getSetting('Abp.Localization.DefaultLanguage')).toEqual( + CONFIG_STATE_DATA.setting.values['Abp.Localization.DefaultLanguage'], ); - configState - .getSetting$('Abp.Localization.DefaultLanguage') - .subscribe((data) => { - expect(data).toEqual( - CONFIG_STATE_DATA.setting.values['Abp.Localization.DefaultLanguage'] - ); - }); + configState.getSetting$('Abp.Localization.DefaultLanguage').subscribe(data => { + expect(data).toEqual(CONFIG_STATE_DATA.setting.values['Abp.Localization.DefaultLanguage']); + }); }); }); @@ -196,14 +182,9 @@ describe('ConfigState', () => { ${'Localization'} | ${{ 'Abp.Localization.DefaultLanguage': 'en' }} ${'X'} | ${{}} ${'localization'} | ${{}} - `( - 'should return $expected when keyword is given as $keyword', - ({ keyword, expected }) => { - expect(configState.getSettings(keyword)).toEqual(expected); - configState - .getSettings$(keyword) - .subscribe((data) => expect(data).toEqual(expected)); - } - ); + `('should return $expected when keyword is given as $keyword', ({ keyword, expected }) => { + expect(configState.getSettings(keyword)).toEqual(expected); + configState.getSettings$(keyword).subscribe(data => expect(data).toEqual(expected)); + }); }); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts index bcd974d8e0..e654b9ef65 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts @@ -1,12 +1,8 @@ -import { CoreTestingModule } from '@abp/ng.core/testing'; import { APP_BASE_HREF } from '@angular/common'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; import { Component } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { - createServiceFactory, - SpectatorService, - SpyObject, -} from '@ngneat/spectator/jest'; +import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; import { Actions, Store } from '@ngxs/store'; import { of } from 'rxjs'; import { RestOccurError } from '../actions'; @@ -30,7 +26,7 @@ describe('PermissionGuard', () => { mocks: [PermissionService, Store], declarations: [DummyComponent], imports: [ - CoreTestingModule.withConfig(), + HttpClientTestingModule, RouterModule.forRoot( [ { @@ -41,7 +37,7 @@ describe('PermissionGuard', () => { }, }, ], - { relativeLinkResolution: 'legacy' } + { relativeLinkResolution: 'legacy' }, ), ], providers: [ @@ -69,34 +65,30 @@ describe('PermissionGuard', () => { permissionService = spectator.inject(PermissionService); }); - it('should return true when the grantedPolicy is true', (done) => { + it('should return true when the grantedPolicy is true', done => { permissionService.getGrantedPolicy$.andReturn(of(true)); const spy = jest.spyOn(store, 'dispatch'); - guard - .canActivate({ data: { requiredPolicy: 'test' } } as any, null) - .subscribe((res) => { - expect(res).toBe(true); - expect(spy.mock.calls).toHaveLength(0); - done(); - }); + guard.canActivate({ data: { requiredPolicy: 'test' } } as any, null).subscribe(res => { + expect(res).toBe(true); + expect(spy.mock.calls).toHaveLength(0); + done(); + }); }); - it('should return false and dispatch RestOccurError when the grantedPolicy is false', (done) => { + it('should return false and dispatch RestOccurError when the grantedPolicy is false', done => { permissionService.getGrantedPolicy$.andReturn(of(false)); const spy = jest.spyOn(store, 'dispatch'); - guard - .canActivate({ data: { requiredPolicy: 'test' } } as any, null) - .subscribe((res) => { - expect(res).toBe(false); - expect(spy.mock.calls[0][0] instanceof RestOccurError).toBeTruthy(); - expect((spy.mock.calls[0][0] as RestOccurError).payload).toEqual({ - status: 403, - }); - done(); + guard.canActivate({ data: { requiredPolicy: 'test' } } as any, null).subscribe(res => { + expect(res).toBe(false); + expect(spy.mock.calls[0][0] instanceof RestOccurError).toBeTruthy(); + expect((spy.mock.calls[0][0] as RestOccurError).payload).toEqual({ + status: 403, }); + done(); + }); }); - it('should check the requiredPolicy from RoutesService', (done) => { + it('should check the requiredPolicy from RoutesService', done => { routes.add([ { path: '/test', @@ -104,29 +96,23 @@ describe('PermissionGuard', () => { requiredPolicy: 'TestPolicy', }, ]); - permissionService.getGrantedPolicy$.mockImplementation((policy) => - of(policy === 'TestPolicy') - ); - guard - .canActivate({ data: {} } as any, { url: 'test' } as any) - .subscribe((result) => { - expect(result).toBe(true); - done(); - }); + permissionService.getGrantedPolicy$.mockImplementation(policy => of(policy === 'TestPolicy')); + guard.canActivate({ data: {} } as any, { url: 'test' } as any).subscribe(result => { + expect(result).toBe(true); + done(); + }); }); - it('should return Observable if RoutesService does not have requiredPolicy for given URL', (done) => { + it('should return Observable if RoutesService does not have requiredPolicy for given URL', done => { routes.add([ { path: '/test', name: 'Test', }, ]); - guard - .canActivate({ data: {} } as any, { url: 'test' } as any) - .subscribe((result) => { - expect(result).toBe(true); - done(); - }); + guard.canActivate({ data: {} } as any, { url: 'test' } as any).subscribe(result => { + expect(result).toBe(true); + done(); + }); }); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/replaceable-template.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/replaceable-template.directive.spec.ts index 300f9e64d7..38ebd34428 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/replaceable-template.directive.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/replaceable-template.directive.spec.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, Inject, Input, OnInit, Optional, Output } from '@angular/core'; +import { Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core'; import { Router } from '@angular/router'; import { createDirectiveFactory, SpectatorDirective } from '@ngneat/spectator/jest'; import { BehaviorSubject } from 'rxjs'; @@ -11,7 +11,7 @@ import { ReplaceableComponentsService } from '../services/replaceable-components template: '

default

', exportAs: 'abpDefaultComponent', }) -class DefaultComponent implements OnInit { +class DefaultComponent { @Input() oneWay; @@ -24,8 +24,6 @@ class DefaultComponent implements OnInit { @Output() readonly someOutput = new EventEmitter(); - ngOnInit() {} - setTwoWay(value) { this.twoWay = value; this.twoWayChange.emit(value); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/routes.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/routes.service.spec.ts index 8f68be56de..d8f482f9d9 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/routes.service.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/routes.service.spec.ts @@ -1,7 +1,7 @@ import { Subject } from 'rxjs'; import { take } from 'rxjs/operators'; import { RoutesService } from '../services'; -import { DummyInjector, mockActions } from './utils/common.utils'; +import { DummyInjector } from './utils/common.utils'; import { mockPermissionService } from './utils/permission-service.spec.utils'; const updateStream$ = new Subject(); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts index 7e77bddba5..0ce8ea9b68 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/rxjs-utils.ts @@ -9,24 +9,24 @@ function isFunction(value) { /** * @deprecated no longer working, please use SubscriptionService (https://docs.abp.io/en/abp/latest/UI/Angular/Subscription-Service) instead. */ -export const takeUntilDestroy = (componentInstance, destroyMethodName = 'ngOnDestroy') => ( - source: Observable, -) => { - const originalDestroy = componentInstance[destroyMethodName]; - if (isFunction(originalDestroy) === false) { - throw new Error( - `${componentInstance.constructor.name} is using untilDestroyed but doesn't implement ${destroyMethodName}`, - ); - } - if (!componentInstance['__takeUntilDestroy']) { - componentInstance['__takeUntilDestroy'] = new Subject(); +export const takeUntilDestroy = + (componentInstance, destroyMethodName = 'ngOnDestroy') => + (source: Observable) => { + const originalDestroy = componentInstance[destroyMethodName]; + if (isFunction(originalDestroy) === false) { + throw new Error( + `${componentInstance.constructor.name} is using untilDestroyed but doesn't implement ${destroyMethodName}`, + ); + } + if (!componentInstance['__takeUntilDestroy']) { + componentInstance['__takeUntilDestroy'] = new Subject(); - componentInstance[destroyMethodName] = function() { - // tslint:disable-next-line: no-unused-expression - isFunction(originalDestroy) && originalDestroy.apply(this, arguments); - componentInstance['__takeUntilDestroy'].next(true); - componentInstance['__takeUntilDestroy'].complete(); - }; - } - return source.pipe(takeUntil(componentInstance['__takeUntilDestroy'])); -}; + componentInstance[destroyMethodName] = function () { + // eslint-disable-next-line prefer-rest-params + isFunction(originalDestroy) && originalDestroy.apply(this, arguments); + componentInstance['__takeUntilDestroy'].next(true); + componentInstance['__takeUntilDestroy'].complete(); + }; + } + return source.pipe(takeUntil(componentInstance['__takeUntilDestroy'])); + }; diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/tree-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/tree-utils.ts index 235820abd6..6f8a6313d3 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/tree-utils.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/tree-utils.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/ban-types */ export class BaseTreeNode { children: TreeNode[] = []; isLeaf = true; diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/directives/free-text-input.directive.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/directives/free-text-input.directive.ts index f72729375a..6b6556dcfa 100644 --- a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/directives/free-text-input.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/directives/free-text-input.directive.ts @@ -1,4 +1,4 @@ -import { Directive, Input, HostBinding } from '@angular/core'; +import { Directive, HostBinding, Input } from '@angular/core'; // TODO: improve this type export interface FreeTextType { @@ -20,6 +20,7 @@ export const INPUT_TYPES = { }) export class FreeTextInputDirective { _feature: FreeTextType; + // eslint-disable-next-line @angular-eslint/no-input-rename @Input('abpFeatureManagementFreeText') set feature(val: FreeTextType) { this._feature = val; this.setInputType(); diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/string-values/models.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/string-values/models.ts index f4f9381611..215effbe2e 100644 --- a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/string-values/models.ts +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/validation/string-values/models.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/ban-types */ export interface IStringValueType { name: string; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/models.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/models.ts index 95f62fa77e..185fcc8b4a 100644 --- a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/models.ts +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/models.ts @@ -1,4 +1,9 @@ -import type { ExtensibleEntityDto, ExtensibleFullAuditedEntityDto, ExtensibleObject, PagedAndSortedResultRequestDto } from '@abp/ng.core'; +import type { + ExtensibleEntityDto, + ExtensibleFullAuditedEntityDto, + ExtensibleObject, + PagedAndSortedResultRequestDto, +} from '@abp/ng.core'; export interface ChangePasswordInput { currentPassword: string; @@ -9,9 +14,8 @@ export interface GetIdentityUsersInput extends PagedAndSortedResultRequestDto { filter: string; } -// tslint:disable-next-line: no-empty-interface -export interface IdentityRoleCreateDto extends IdentityRoleCreateOrUpdateDtoBase { -} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface IdentityRoleCreateDto extends IdentityRoleCreateOrUpdateDtoBase {} export interface IdentityRoleCreateOrUpdateDtoBase extends ExtensibleObject { name: string; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/.eslintrc.json b/npm/ng-packs/nx/ng-packs/packages/schematics/.eslintrc.json index 9c51584494..788baa3bbf 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/.eslintrc.json +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/.eslintrc.json @@ -27,10 +27,23 @@ ] } }, + { + "files": ["*.ts", "*.tsx"], + "extends": ["plugin:@nrwl/nx/typescript"], + "rules": { + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-empty-function": ["warn"] + } + }, + { + "files": ["*.js", "*.jsx"], + "extends": ["plugin:@nrwl/nx/javascript"], + "rules": {} + }, { "files": ["*.html"], "extends": ["plugin:@nrwl/nx/angular-template"], "rules": {} } ] -} +} \ No newline at end of file diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/index.ts index f8954beb16..2f2f52a50c 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/index.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/api/index.ts @@ -31,7 +31,7 @@ import { } from '../../utils'; import * as cases from '../../utils/text'; -export default function(schema: GenerateProxySchema) { +export default function (schema: GenerateProxySchema) { const params = removeDefaultPlaceholders(schema); const moduleName = params.module || 'app'; @@ -40,6 +40,7 @@ export default function(schema: GenerateProxySchema) { const getRootNamespace = createRootNamespaceGetter(params); const solution = await getRootNamespace(tree); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const target = await resolveProject(tree, params.target!); const targetPath = buildDefaultPath(target.definition); const readProxyConfig = createProxyConfigReader(targetPath); diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-index/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-index/index.ts index 85c4707daa..498428c154 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-index/index.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-index/index.ts @@ -6,10 +6,11 @@ import { resolveProject, } from '../../utils'; -export default function(schema: { target?: string }) { +export default function (schema: { target?: string }) { const params = removeDefaultPlaceholders(schema); return async (host: Tree, _context: SchematicContext) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const target = await resolveProject(host, params.target!); const targetPath = buildDefaultPath(target.definition); diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-remove/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-remove/index.ts index abc6d72c81..900bd5f1a3 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-remove/index.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-remove/index.ts @@ -13,11 +13,12 @@ import { resolveProject, } from '../../utils'; -export default function(schema: GenerateProxySchema) { +export default function (schema: GenerateProxySchema) { const params = removeDefaultPlaceholders(schema); const moduleName = params.module || 'app'; return async (host: Tree, _context: SchematicContext) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const target = await resolveProject(host, params.target!); const targetPath = buildDefaultPath(target.definition); diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/method.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/method.ts index 7259a61884..b6ee494089 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/method.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/method.ts @@ -3,6 +3,7 @@ import { camel } from '../utils/text'; import { ParameterInBody } from './api-definition'; import { Property } from './model'; import { Omissible } from './util'; +// eslint-disable-next-line @typescript-eslint/no-var-requires const shouldQuote = require('should-quote'); export class Method { @@ -60,6 +61,7 @@ export class Body { this.body = value; break; case eBindingSourceId.Path: + // eslint-disable-next-line no-case-declarations const regex = new RegExp('{(' + paramName + '|' + camelName + '|' + name + ')}', 'g'); this.url = this.url.replace(regex, '${' + value + '}'); break; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/util.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/util.ts index 0588ed7d5b..4cbb8d9739 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/util.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/models/util.ts @@ -9,7 +9,7 @@ type ExcludeKeys = Exclude< never >; -// tslint:disable-next-line: ban-types +// eslint-disable-next-line @typescript-eslint/ban-types type ExcludeMethods = Pick>; // Options (methods will be omitted, given keys will become optional) diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/ast-utils.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/ast-utils.ts index 6883e73360..fdf9d3a4d7 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/ast-utils.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/ast-utils.ts @@ -8,7 +8,6 @@ import * as ts from 'typescript'; import { Change, InsertChange, NoopChange } from './change'; - /** * Add Import `import { symbolName } from fileName` if the import doesn't exit * already. Assumes fileToEdit can be resolved and accessed. @@ -18,15 +17,21 @@ import { Change, InsertChange, NoopChange } from './change'; * @param isDefault (if true, import follows style for importing default exports) * @return Change */ -export function insertImport(source: ts.SourceFile, fileToEdit: string, symbolName: string, - fileName: string, isDefault = false): Change { +export function insertImport( + source: ts.SourceFile, + fileToEdit: string, + symbolName: string, + fileName: string, + isDefault = false, +): Change { const rootNode = source; const allImports = findNodes(rootNode, ts.SyntaxKind.ImportDeclaration); // get nodes that map to import statements from the file fileName const relevantImports = allImports.filter(node => { // StringLiteral of the ImportDeclaration is the import file (fileName in this case). - const importFiles = node.getChildren() + const importFiles = node + .getChildren() .filter(ts.isStringLiteral) .map(n => n.text); @@ -64,8 +69,7 @@ export function insertImport(source: ts.SourceFile, fileToEdit: string, symbolNa } // no such import declaration exists - const useStrict = findNodes(rootNode, ts.isStringLiteral) - .filter((n) => n.text === 'use strict'); + const useStrict = findNodes(rootNode, ts.isStringLiteral).filter(n => n.text === 'use strict'); let fallbackPos = 0; if (useStrict.length > 0) { fallbackPos = useStrict[0].end; @@ -75,7 +79,8 @@ export function insertImport(source: ts.SourceFile, fileToEdit: string, symbolNa // if there are no imports or 'use strict' statement, insert import at beginning of file const insertAtBeginning = allImports.length === 0 && useStrict.length === 0; const separator = insertAtBeginning ? '' : ';\n'; - const toInsert = `${separator}import ${open}${symbolName}${close}` + + const toInsert = + `${separator}import ${open}${symbolName}${close}` + ` from '${fileName}'${insertAtBeginning ? ';\n' : ''}`; return insertAfterLastOccurrence( @@ -87,7 +92,6 @@ export function insertImport(source: ts.SourceFile, fileToEdit: string, symbolNa ); } - /** * Find all nodes from the AST in the subtree of node of SyntaxKind kind. * @param node @@ -97,7 +101,12 @@ export function insertImport(source: ts.SourceFile, fileToEdit: string, symbolNa * the last child even when node of kind has been found. * @return all nodes of kind, or [] if none is found */ -export function findNodes(node: ts.Node, kind: ts.SyntaxKind, max?: number, recursive?: boolean): ts.Node[]; +export function findNodes( + node: ts.Node, + kind: ts.SyntaxKind, + max?: number, + recursive?: boolean, +): ts.Node[]; /** * Find all nodes from the AST in the subtree that satisfy a type guard. @@ -108,7 +117,12 @@ export function findNodes(node: ts.Node, kind: ts.SyntaxKind, max?: number, recu * the last child even when node of kind has been found. * @return all nodes that satisfy the type guard, or [] if none is found */ -export function findNodes(node: ts.Node, guard: (node: ts.Node) => node is T, max?: number, recursive?: boolean): T[]; +export function findNodes( + node: ts.Node, + guard: (node: ts.Node) => node is T, + max?: number, + recursive?: boolean, +): T[]; export function findNodes( node: ts.Node, @@ -132,7 +146,7 @@ export function findNodes( } if (max > 0 && (recursive || !test(node))) { for (const child of node.getChildren()) { - findNodes(child, test, max).forEach((node) => { + findNodes(child, test, max).forEach(node => { if (max > 0) { arr.push(node); } @@ -148,7 +162,6 @@ export function findNodes( return arr; } - /** * Get all the nodes from a source. * @param sourceFile The source file object. @@ -186,7 +199,6 @@ export function findNode(node: ts.Node, kind: ts.SyntaxKind, text: string): ts.N return foundNode; } - /** * Helper for sorting nodes. * @return function to sort nodes in increasing order of position in sourceFile @@ -195,7 +207,6 @@ function nodesByPosition(first: ts.Node, second: ts.Node): number { return first.getStart() - second.getStart(); } - /** * Insert `toInsert` after the last occurence of `ts.SyntaxKind[nodes[i].kind]` * or after the last of occurence of `syntaxKind` if the last occurence is a sub child @@ -209,11 +220,13 @@ function nodesByPosition(first: ts.Node, second: ts.Node): number { * @return Change instance * @throw Error if toInsert is first occurence but fall back is not set */ -export function insertAfterLastOccurrence(nodes: ts.Node[], - toInsert: string, - file: string, - fallbackPos: number, - syntaxKind?: ts.SyntaxKind): Change { +export function insertAfterLastOccurrence( + nodes: ts.Node[], + toInsert: string, + file: string, + fallbackPos: number, + syntaxKind?: ts.SyntaxKind, +): Change { let lastItem: ts.Node | undefined; for (const node of nodes) { if (!lastItem || lastItem.getStart() < node.getStart()) { @@ -231,7 +244,6 @@ export function insertAfterLastOccurrence(nodes: ts.Node[], return new InsertChange(file, lastItemPosition, toInsert); } - export function getContentOfKeyLiteral(_source: ts.SourceFile, node: ts.Node): string | null { if (node.kind == ts.SyntaxKind.Identifier) { return (node as ts.Identifier).text; @@ -242,9 +254,10 @@ export function getContentOfKeyLiteral(_source: ts.SourceFile, node: ts.Node): s } } - -function _angularImportsFromNode(node: ts.ImportDeclaration, - _sourceFile: ts.SourceFile): {[name: string]: string} { +function _angularImportsFromNode( + node: ts.ImportDeclaration, + _sourceFile: ts.SourceFile, +): { [name: string]: string } { const ms = node.moduleSpecifier; let modulePath: string; switch (ms.kind) { @@ -275,8 +288,8 @@ function _angularImportsFromNode(node: ts.ImportDeclaration, const namedImports = nb as ts.NamedImports; return namedImports.elements - .map((is: ts.ImportSpecifier) => is.propertyName ? is.propertyName.text : is.name.text) - .reduce((acc: {[name: string]: string}, curr: string) => { + .map((is: ts.ImportSpecifier) => (is.propertyName ? is.propertyName.text : is.name.text)) + .reduce((acc: { [name: string]: string }, curr: string) => { acc[curr] = modulePath; return acc; @@ -291,11 +304,13 @@ function _angularImportsFromNode(node: ts.ImportDeclaration, } } - -export function getDecoratorMetadata(source: ts.SourceFile, identifier: string, - module: string): ts.Node[] { +export function getDecoratorMetadata( + source: ts.SourceFile, + identifier: string, + module: string, +): ts.Node[] { const angularImports = findNodes(source, ts.isImportDeclaration) - .map((node) => _angularImportsFromNode(node, source)) + .map(node => _angularImportsFromNode(node, source)) .reduce((acc, current) => { for (const key of Object.keys(current)) { acc[key] = current[key]; @@ -306,8 +321,10 @@ export function getDecoratorMetadata(source: ts.SourceFile, identifier: string, return getSourceNodes(source) .filter(node => { - return node.kind == ts.SyntaxKind.Decorator - && (node as ts.Decorator).expression.kind == ts.SyntaxKind.CallExpression; + return ( + node.kind == ts.SyntaxKind.Decorator && + (node as ts.Decorator).expression.kind == ts.SyntaxKind.CallExpression + ); }) .map(node => (node as ts.Decorator).expression as ts.CallExpression) .filter(expr => { @@ -326,17 +343,18 @@ export function getDecoratorMetadata(source: ts.SourceFile, identifier: string, const id = paExpr.name.text; const moduleId = (paExpr.expression as ts.Identifier).text; - return id === identifier && (angularImports[moduleId + '.'] === module); + return id === identifier && angularImports[moduleId + '.'] === module; } return false; }) - .filter(expr => expr.arguments[0] - && expr.arguments[0].kind == ts.SyntaxKind.ObjectLiteralExpression) + .filter( + expr => expr.arguments[0] && expr.arguments[0].kind == ts.SyntaxKind.ObjectLiteralExpression, + ) .map(expr => expr.arguments[0] as ts.ObjectLiteralExpression); } -function findClassDeclarationParent(node: ts.Node): ts.ClassDeclaration|undefined { +function findClassDeclarationParent(node: ts.Node): ts.ClassDeclaration | undefined { if (ts.isClassDeclaration(node)) { return node; } @@ -350,7 +368,7 @@ function findClassDeclarationParent(node: ts.Node): ts.ClassDeclaration|undefine * @param source source file containing one or more @NgModule * @returns the name of the first @NgModule, or `undefined` if none is found */ -export function getFirstNgModuleName(source: ts.SourceFile): string|undefined { +export function getFirstNgModuleName(source: ts.SourceFile): string | undefined { // First, find the @NgModule decorators. const ngModulesMetadata = getDecoratorMetadata(source, 'NgModule', '@angular/core'); if (ngModulesMetadata.length === 0) { @@ -372,14 +390,17 @@ export function getMetadataField( node: ts.ObjectLiteralExpression, metadataField: string, ): ts.ObjectLiteralElement[] { - return node.properties - .filter(ts.isPropertyAssignment) - // Filter out every fields that's not "metadataField". Also handles string literals - // (but not expressions). - .filter(({ name }) => { - return (ts.isIdentifier(name) || ts.isStringLiteral(name)) - && name.getText() === metadataField; - }); + return ( + node.properties + .filter(ts.isPropertyAssignment) + // Filter out every fields that's not "metadataField". Also handles string literals + // (but not expressions). + .filter(({ name }) => { + return ( + (ts.isIdentifier(name) || ts.isStringLiteral(name)) && name.getText() === metadataField + ); + }) + ); } export function addSymbolToNgModuleMetadata( @@ -390,7 +411,7 @@ export function addSymbolToNgModuleMetadata( importPath: string | null = null, ): Change[] { const nodes = getDecoratorMetadata(source, 'NgModule', '@angular/core'); - let node: any = nodes[0]; // tslint:disable-line:no-any + let node: any = nodes[0]; // tslint:disable-line:no-any // Find the decorator declaration. if (!node) { @@ -398,10 +419,7 @@ export function addSymbolToNgModuleMetadata( } // Get all the children property assignment of object literals. - const matchingProperties = getMetadataField( - node as ts.ObjectLiteralExpression, - metadataField, - ); + const matchingProperties = getMetadataField(node as ts.ObjectLiteralExpression, metadataField); // Get the last node of the array literal. if (!matchingProperties) { @@ -459,6 +477,7 @@ export function addSymbolToNgModuleMetadata( } if (Array.isArray(node)) { + // eslint-disable-next-line @typescript-eslint/ban-types const nodeArray = node as {} as Array; const symbolsArray = nodeArray.map(node => node.getText()); if (symbolsArray.includes(symbolName)) { @@ -513,47 +532,66 @@ export function addSymbolToNgModuleMetadata( * Custom function to insert a declaration (component, pipe, directive) * into NgModule declarations. It also imports the component. */ -export function addDeclarationToModule(source: ts.SourceFile, - modulePath: string, classifiedName: string, - importPath: string): Change[] { +export function addDeclarationToModule( + source: ts.SourceFile, + modulePath: string, + classifiedName: string, + importPath: string, +): Change[] { return addSymbolToNgModuleMetadata( - source, modulePath, 'declarations', classifiedName, importPath); + source, + modulePath, + 'declarations', + classifiedName, + importPath, + ); } /** * Custom function to insert an NgModule into NgModule imports. It also imports the module. */ -export function addImportToModule(source: ts.SourceFile, - modulePath: string, classifiedName: string, - importPath: string): Change[] { - +export function addImportToModule( + source: ts.SourceFile, + modulePath: string, + classifiedName: string, + importPath: string, +): Change[] { return addSymbolToNgModuleMetadata(source, modulePath, 'imports', classifiedName, importPath); } /** * Custom function to insert a provider into NgModule. It also imports it. */ -export function addProviderToModule(source: ts.SourceFile, - modulePath: string, classifiedName: string, - importPath: string): Change[] { +export function addProviderToModule( + source: ts.SourceFile, + modulePath: string, + classifiedName: string, + importPath: string, +): Change[] { return addSymbolToNgModuleMetadata(source, modulePath, 'providers', classifiedName, importPath); } /** * Custom function to insert an export into NgModule. It also imports it. */ -export function addExportToModule(source: ts.SourceFile, - modulePath: string, classifiedName: string, - importPath: string): Change[] { +export function addExportToModule( + source: ts.SourceFile, + modulePath: string, + classifiedName: string, + importPath: string, +): Change[] { return addSymbolToNgModuleMetadata(source, modulePath, 'exports', classifiedName, importPath); } /** * Custom function to insert an export into NgModule. It also imports it. */ -export function addBootstrapToModule(source: ts.SourceFile, - modulePath: string, classifiedName: string, - importPath: string): Change[] { +export function addBootstrapToModule( + source: ts.SourceFile, + modulePath: string, + classifiedName: string, + importPath: string, +): Change[] { return addSymbolToNgModuleMetadata(source, modulePath, 'bootstrap', classifiedName, importPath); } @@ -561,33 +599,41 @@ export function addBootstrapToModule(source: ts.SourceFile, * Custom function to insert an entryComponent into NgModule. It also imports it. * @deprecated - Since version 9.0.0 with Ivy, entryComponents is no longer necessary. */ -export function addEntryComponentToModule(source: ts.SourceFile, - modulePath: string, classifiedName: string, - importPath: string): Change[] { +export function addEntryComponentToModule( + source: ts.SourceFile, + modulePath: string, + classifiedName: string, + importPath: string, +): Change[] { return addSymbolToNgModuleMetadata( - source, modulePath, - 'entryComponents', classifiedName, importPath, + source, + modulePath, + 'entryComponents', + classifiedName, + importPath, ); } /** * Determine if an import already exists. */ -export function isImported(source: ts.SourceFile, - classifiedName: string, - importPath: string): boolean { +export function isImported( + source: ts.SourceFile, + classifiedName: string, + importPath: string, +): boolean { const allNodes = getSourceNodes(source); const matchingNodes = allNodes .filter(ts.isImportDeclaration) .filter( - (imp) => ts.isStringLiteral(imp.moduleSpecifier) && imp.moduleSpecifier.text === importPath, + imp => ts.isStringLiteral(imp.moduleSpecifier) && imp.moduleSpecifier.text === importPath, ) - .filter((imp) => { + .filter(imp => { if (!imp.importClause) { return false; } const nodes = findNodes(imp.importClause, ts.isImportSpecifier).filter( - (n) => n.getText() === classifiedName, + n => n.getText() === classifiedName, ); return nodes.length > 0; @@ -611,11 +657,11 @@ export function getEnvironmentExportName(source: ts.SourceFile): string | null { allNodes .filter(ts.isImportDeclaration) .filter( - (declaration) => + declaration => declaration.moduleSpecifier.kind === ts.SyntaxKind.StringLiteral && declaration.importClause !== undefined, ) - .map((declaration) => + .map(declaration => // If `importClause` property is defined then the first // child will be `NamedImports` object (or `namedBindings`). (declaration.importClause as ts.ImportClause).getChildAt(0), @@ -623,8 +669,8 @@ export function getEnvironmentExportName(source: ts.SourceFile): string | null { // Find those `NamedImports` object that contains `environment` keyword // in its text. E.g. `{ environment as env }`. .filter(ts.isNamedImports) - .filter((namedImports) => namedImports.getText().includes('environment')) - .forEach((namedImports) => { + .filter(namedImports => namedImports.getText().includes('environment')) + .forEach(namedImports => { for (const specifier of namedImports.elements) { // `propertyName` is defined if the specifier // has an aliased import. @@ -682,8 +728,7 @@ export function addRouteDeclarationToModule( if (!scopeConfigMethodArgs.length) { const { line } = source.getLineAndCharacterOfPosition(routerModuleExpr.getStart()); throw new Error( - `The router module method doesn't have arguments ` + - `at line ${line} in ${fileToAdd}`, + `The router module method doesn't have arguments ` + `at line ${line} in ${fileToAdd}`, ); } @@ -698,22 +743,24 @@ export function addRouteDeclarationToModule( const routesVarName = routesArg.getText(); let routesVar; if (routesArg.kind === ts.SyntaxKind.Identifier) { - routesVar = source.statements - .filter(ts.isVariableStatement) - .find((v) => { - return v.declarationList.declarations[0].name.getText() === routesVarName; - }); + routesVar = source.statements.filter(ts.isVariableStatement).find(v => { + return v.declarationList.declarations[0].name.getText() === routesVarName; + }); } if (!routesVar) { const { line } = source.getLineAndCharacterOfPosition(routesArg.getStart()); throw new Error( `No route declaration array was found that corresponds ` + - `to router module at line ${line} in ${fileToAdd}`, + `to router module at line ${line} in ${fileToAdd}`, ); } - routesArr = findNodes(routesVar, ts.SyntaxKind.ArrayLiteralExpression, 1)[0] as ts.ArrayLiteralExpression; + routesArr = findNodes( + routesVar, + ts.SyntaxKind.ArrayLiteralExpression, + 1, + )[0] as ts.ArrayLiteralExpression; } const occurrencesCount = routesArr.elements.length; @@ -724,16 +771,16 @@ export function addRouteDeclarationToModule( if (occurrencesCount > 0) { const lastRouteLiteral = [...routesArr.elements].pop() as ts.Expression; - const lastRouteIsWildcard = ts.isObjectLiteralExpression(lastRouteLiteral) - && lastRouteLiteral - .properties - .some(n => ( - ts.isPropertyAssignment(n) - && ts.isIdentifier(n.name) - && n.name.text === 'path' - && ts.isStringLiteral(n.initializer) - && n.initializer.text === '**' - )); + const lastRouteIsWildcard = + ts.isObjectLiteralExpression(lastRouteLiteral) && + lastRouteLiteral.properties.some( + n => + ts.isPropertyAssignment(n) && + ts.isIdentifier(n.name) && + n.name.text === 'path' && + ts.isStringLiteral(n.initializer) && + n.initializer.text === '**', + ); const indentation = text.match(/\r?\n(\r?)\s*/) || []; const routeText = `${indentation[0] || ' '}${routeLiteral}`; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/config.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/config.ts index ce0d15320b..7cf157cacc 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/config.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/config.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/ban-types */ /** * @license * Copyright Google Inc. All Rights Reserved. @@ -31,20 +32,23 @@ export interface AppConfig { /** * List of application assets. */ - assets?: (string | { - /** - * The pattern to match. - */ - glob?: string; - /** - * The dir to search within. - */ - input?: string; - /** - * The output path (relative to the outDir). - */ - output?: string; - })[]; + assets?: ( + | string + | { + /** + * The pattern to match. + */ + glob?: string; + /** + * The dir to search within. + */ + input?: string; + /** + * The output path (relative to the outDir). + */ + output?: string; + } + )[]; /** * URL where files will be deployed. */ @@ -56,7 +60,7 @@ export interface AppConfig { /** * The runtime platform of the app. */ - platform?: ('browser' | 'server'); + platform?: 'browser' | 'server'; /** * The name of the start HTML file. */ @@ -92,26 +96,32 @@ export interface AppConfig { /** * Global styles to be included in the build. */ - styles?: (string | { - input?: string; - [name: string]: any; // tslint:disable-line:no-any - })[]; + styles?: ( + | string + | { + input?: string; + [name: string]: any; // tslint:disable-line:no-any + } + )[]; /** * Options to pass to style preprocessors */ stylePreprocessorOptions?: { - /** - * Paths to include. Paths will be resolved to project root. - */ - includePaths?: string[]; + /** + * Paths to include. Paths will be resolved to project root. + */ + includePaths?: string[]; }; /** * Global scripts to be included in the build. */ - scripts?: (string | { - input: string; - [name: string]: any; // tslint:disable-line:no-any - })[]; + scripts?: ( + | string + | { + input: string; + [name: string]: any; // tslint:disable-line:no-any + } + )[]; /** * Source file for environment config. */ @@ -120,7 +130,7 @@ export interface AppConfig { * Name and corresponding file for environment config. */ environments?: { - [name: string]: any; // tslint:disable-line:no-any + [name: string]: any; // tslint:disable-line:no-any }; appShell?: { app: string; @@ -130,7 +140,7 @@ export interface AppConfig { /** * The type of budget */ - type?: ('bundle' | 'initial' | 'allScript' | 'all' | 'anyScript' | 'any' | 'anyComponentStyle'); + type?: 'bundle' | 'initial' | 'allScript' | 'all' | 'anyScript' | 'any' | 'anyComponentStyle'; /** * The name of the bundle */ @@ -172,14 +182,14 @@ export interface CliConfig { * The global configuration of the project. */ project?: { - /** - * The name of the project. - */ - name?: string; - /** - * Whether or not this project was ejected. - */ - ejected?: boolean; + /** + * The name of the project. + */ + name?: string; + /** + * Whether or not this project was ejected. + */ + ejected?: boolean; }; /** * Properties of the different applications in this project. @@ -189,278 +199,278 @@ export interface CliConfig { * Configuration for end-to-end tests. */ e2e?: { - protractor?: { - /** - * Path to the config file. - */ - config?: string; - }; + protractor?: { + /** + * Path to the config file. + */ + config?: string; + }; }; /** * Properties to be passed to TSLint. */ lint?: { - /** - * File glob(s) to lint. - */ - files?: (string | string[]); - /** - * Location of the tsconfig.json project file. - * Will also use as files to lint if 'files' property not present. - */ - project: string; - /** - * Location of the tslint.json configuration. - */ - tslintConfig?: string; - /** - * File glob(s) to ignore. - */ - exclude?: (string | string[]); + /** + * File glob(s) to lint. + */ + files?: string | string[]; + /** + * Location of the tsconfig.json project file. + * Will also use as files to lint if 'files' property not present. + */ + project: string; + /** + * Location of the tslint.json configuration. + */ + tslintConfig?: string; + /** + * File glob(s) to ignore. + */ + exclude?: string | string[]; }[]; /** * Configuration for unit tests. */ test?: { - karma?: { - /** - * Path to the karma config file. - */ - config?: string; - }; - codeCoverage?: { - /** - * Globs to exclude from code coverage. - */ - exclude?: string[]; - }; + karma?: { + /** + * Path to the karma config file. + */ + config?: string; + }; + codeCoverage?: { + /** + * Globs to exclude from code coverage. + */ + exclude?: string[]; + }; }; /** * Specify the default values for generating. */ defaults?: { + /** + * The file extension to be used for style files. + */ + styleExt?: string; + /** + * How often to check for file updates. + */ + poll?: number; + /** + * Use lint to fix files after generation + */ + lintFix?: boolean; + /** + * Options for generating a class. + */ + class?: { + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + }; + /** + * Options for generating a component. + */ + component?: { /** - * The file extension to be used for style files. + * Flag to indicate if a directory is created. */ - styleExt?: string; + flat?: boolean; /** - * How often to check for file updates. + * Specifies if a spec file is generated. + */ + spec?: boolean; + /** + * Specifies if the style will be in the ts file. + */ + inlineStyle?: boolean; + /** + * Specifies if the template will be in the ts file. + */ + inlineTemplate?: boolean; + /** + * Specifies the view encapsulation strategy. + */ + viewEncapsulation?: 'Emulated' | 'Native' | 'None'; + /** + * Specifies the change detection strategy. + */ + changeDetection?: 'Default' | 'OnPush'; + }; + /** + * Options for generating a directive. + */ + directive?: { + /** + * Flag to indicate if a directory is created. + */ + flat?: boolean; + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + }; + /** + * Options for generating a guard. + */ + guard?: { + /** + * Flag to indicate if a directory is created. + */ + flat?: boolean; + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + }; + /** + * Options for generating an interface. + */ + interface?: { + /** + * Prefix to apply to interface names. (i.e. I) + */ + prefix?: string; + }; + /** + * Options for generating a module. + */ + module?: { + /** + * Flag to indicate if a directory is created. + */ + flat?: boolean; + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + }; + /** + * Options for generating a pipe. + */ + pipe?: { + /** + * Flag to indicate if a directory is created. + */ + flat?: boolean; + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + }; + /** + * Options for generating a service. + */ + service?: { + /** + * Flag to indicate if a directory is created. + */ + flat?: boolean; + /** + * Specifies if a spec file is generated. + */ + spec?: boolean; + }; + /** + * Properties to be passed to the build command. + */ + build?: { + /** + * Output sourcemaps. + */ + sourcemaps?: boolean; + /** + * Base url for the application being built. + */ + baseHref?: string; + /** + * The ssl key used by the server. + */ + progress?: boolean; + /** + * Enable and define the file watching poll time period (milliseconds). */ poll?: number; /** - * Use lint to fix files after generation - */ - lintFix?: boolean; - /** - * Options for generating a class. - */ - class?: { - /** - * Specifies if a spec file is generated. - */ - spec?: boolean; - }; - /** - * Options for generating a component. - */ - component?: { - /** - * Flag to indicate if a directory is created. - */ - flat?: boolean; - /** - * Specifies if a spec file is generated. - */ - spec?: boolean; - /** - * Specifies if the style will be in the ts file. - */ - inlineStyle?: boolean; - /** - * Specifies if the template will be in the ts file. - */ - inlineTemplate?: boolean; - /** - * Specifies the view encapsulation strategy. - */ - viewEncapsulation?: ('Emulated' | 'Native' | 'None'); - /** - * Specifies the change detection strategy. - */ - changeDetection?: ('Default' | 'OnPush'); - }; - /** - * Options for generating a directive. - */ - directive?: { - /** - * Flag to indicate if a directory is created. - */ - flat?: boolean; - /** - * Specifies if a spec file is generated. - */ - spec?: boolean; - }; - /** - * Options for generating a guard. - */ - guard?: { - /** - * Flag to indicate if a directory is created. - */ - flat?: boolean; - /** - * Specifies if a spec file is generated. - */ - spec?: boolean; - }; - /** - * Options for generating an interface. - */ - interface?: { - /** - * Prefix to apply to interface names. (i.e. I) - */ - prefix?: string; - }; - /** - * Options for generating a module. - */ - module?: { - /** - * Flag to indicate if a directory is created. - */ - flat?: boolean; - /** - * Specifies if a spec file is generated. - */ - spec?: boolean; - }; - /** - * Options for generating a pipe. - */ - pipe?: { - /** - * Flag to indicate if a directory is created. - */ - flat?: boolean; - /** - * Specifies if a spec file is generated. - */ - spec?: boolean; - }; - /** - * Options for generating a service. - */ - service?: { - /** - * Flag to indicate if a directory is created. - */ - flat?: boolean; - /** - * Specifies if a spec file is generated. - */ - spec?: boolean; - }; - /** - * Properties to be passed to the build command. - */ - build?: { - /** - * Output sourcemaps. - */ - sourcemaps?: boolean; - /** - * Base url for the application being built. - */ - baseHref?: string; - /** - * The ssl key used by the server. - */ - progress?: boolean; - /** - * Enable and define the file watching poll time period (milliseconds). - */ - poll?: number; - /** - * Delete output path before build. - */ - deleteOutputPath?: boolean; - /** - * Do not use the real path when resolving modules. - */ - preserveSymlinks?: boolean; - /** - * Show circular dependency warnings on builds. - */ - showCircularDependencies?: boolean; - /** - * Use a separate bundle containing code used across multiple bundles. - */ - commonChunk?: boolean; - /** - * Use file name for lazy loaded chunks. - */ - namedChunks?: boolean; - }; - /** - * Properties to be passed to the serve command. - */ - serve?: { - /** - * The port the application will be served on. - */ - port?: number; - /** - * The host the application will be served on. - */ - host?: string; - /** - * Enables ssl for the application. - */ - ssl?: boolean; - /** - * The ssl key used by the server. - */ - sslKey?: string; - /** - * The ssl certificate used by the server. - */ - sslCert?: string; - /** - * Proxy configuration file. - */ - proxyConfig?: string; - }; - /** - * Properties about schematics. - */ - schematics?: { - /** - * The schematics collection to use. - */ - collection?: string; - /** - * The new app schematic. - */ - newApp?: string; - }; + * Delete output path before build. + */ + deleteOutputPath?: boolean; + /** + * Do not use the real path when resolving modules. + */ + preserveSymlinks?: boolean; + /** + * Show circular dependency warnings on builds. + */ + showCircularDependencies?: boolean; + /** + * Use a separate bundle containing code used across multiple bundles. + */ + commonChunk?: boolean; + /** + * Use file name for lazy loaded chunks. + */ + namedChunks?: boolean; + }; + /** + * Properties to be passed to the serve command. + */ + serve?: { + /** + * The port the application will be served on. + */ + port?: number; + /** + * The host the application will be served on. + */ + host?: string; + /** + * Enables ssl for the application. + */ + ssl?: boolean; + /** + * The ssl key used by the server. + */ + sslKey?: string; + /** + * The ssl certificate used by the server. + */ + sslCert?: string; + /** + * Proxy configuration file. + */ + proxyConfig?: string; + }; + /** + * Properties about schematics. + */ + schematics?: { + /** + * The schematics collection to use. + */ + collection?: string; + /** + * The new app schematic. + */ + newApp?: string; + }; }; /** * Specify which package manager tool to use. */ - packageManager?: ('npm' | 'cnpm' | 'yarn' | 'default'); + packageManager?: 'npm' | 'cnpm' | 'yarn' | 'default'; /** * Allow people to disable console warnings. */ warnings?: { - versionMismatch?: boolean; + versionMismatch?: boolean; }; } export function getWorkspacePath(host: Tree): string { - const possibleFiles = [ '/angular.json', '/.angular.json' ]; + const possibleFiles = ['/angular.json', '/.angular.json']; const path = possibleFiles.filter(path => host.exists(path))[0]; return path; @@ -483,7 +493,6 @@ export function addProjectToWorkspace, ): Rule { return (_host: Tree, _context: SchematicContext) => { - if (workspace.projects[name]) { throw new Error(`Project '${name}' already exists in workspace.`); } @@ -501,9 +510,9 @@ export function addProjectToWorkspace { - host.overwrite(getWorkspacePath(host), JSON.stringify(workspace, null, 2)); - }; + return (host: Tree, _context: SchematicContext) => { + host.overwrite(getWorkspacePath(host), JSON.stringify(workspace, null, 2)); + }; } export const configPath = '/.angular-cli.json'; @@ -528,5 +537,5 @@ export function getAppFromConfig(config: CliConfig, appIndexOrName: string): App return config.apps[parseInt(appIndexOrName)]; } - return config.apps.filter((app) => app.name === appIndexOrName)[0]; + return config.apps.filter(app => app.name === appIndexOrName)[0]; } diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/find-module.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/find-module.ts index cf2a50379a..d8602244ce 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/find-module.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/find-module.ts @@ -5,23 +5,16 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import { - dirname, - join, - normalize, NormalizedRoot, - Path, - relative -} from '@angular-devkit/core'; +import { dirname, join, normalize, NormalizedRoot, Path, relative } from '@angular-devkit/core'; import { DirEntry, Tree } from '@angular-devkit/schematics'; - export interface ModuleOptions { - project?: string; // added this + project?: string; // added this module?: string; name: string; flat?: boolean; path?: string; - route?: string; // added this + route?: string; // added this selector?: string; // added this skipImport?: boolean; moduleExt?: string; @@ -35,7 +28,7 @@ export const ROUTING_MODULE_EXT = '-routing.module.ts'; * Find the module referred by a set of options passed to the schematics. */ export function findModuleFromOptions(host: Tree, options: ModuleOptions): Path | undefined { - if (options.hasOwnProperty('skipImport') && options.skipImport) { + if (Object.prototype.hasOwnProperty.call(options, 'skipImport') && options.skipImport) { return undefined; } @@ -51,9 +44,7 @@ export function findModuleFromOptions(host: Tree, options: ModuleOptions): Path const componentPath = normalize(`/${options.path}/${options.name}`); const moduleBaseName = normalize(modulePath).split('/').pop(); - const candidateSet = new Set([ - normalize(options.path || '/'), - ]); + const candidateSet = new Set([normalize(options.path || '/')]); for (let dir = modulePath; dir != NormalizedRoot; dir = dirname(dir)) { candidateSet.add(dir); @@ -64,11 +55,9 @@ export function findModuleFromOptions(host: Tree, options: ModuleOptions): Path const candidatesDirs = [...candidateSet].sort((a, b) => b.length - a.length); for (const c of candidatesDirs) { - const candidateFiles = [ - '', - `${moduleBaseName}.ts`, - `${moduleBaseName}${moduleExt}`, - ].map(x => join(c, x)); + const candidateFiles = ['', `${moduleBaseName}.ts`, `${moduleBaseName}${moduleExt}`].map(x => + join(c, x), + ); for (const sc of candidateFiles) { if (host.exists(sc)) { @@ -78,8 +67,8 @@ export function findModuleFromOptions(host: Tree, options: ModuleOptions): Path } throw new Error( - `Specified module '${options.module}' does not exist.\n` - + `Looked in the following directories:\n ${candidatesDirs.join('\n ')}`, + `Specified module '${options.module}' does not exist.\n` + + `Looked in the following directories:\n ${candidatesDirs.join('\n ')}`, ); } } @@ -87,9 +76,12 @@ export function findModuleFromOptions(host: Tree, options: ModuleOptions): Path /** * Function to find the "closest" module to a generated file's path. */ -export function findModule(host: Tree, generateDir: string, - moduleExt = MODULE_EXT, routingModuleExt = ROUTING_MODULE_EXT): Path { - +export function findModule( + host: Tree, + generateDir: string, + moduleExt = MODULE_EXT, + routingModuleExt = ROUTING_MODULE_EXT, +): Path { let dir: DirEntry | null = host.getDir('/' + generateDir); let foundRoutingModule = false; @@ -103,16 +95,18 @@ export function findModule(host: Tree, generateDir: string, return join(dir.path, filteredMatches[0]); } else if (filteredMatches.length > 1) { throw new Error( - 'More than one module matches. Use the skip-import option to skip importing ' + - 'the component into the closest module or use the module option to specify a module.'); + 'More than one module matches. Use the skip-import option to skip importing ' + + 'the component into the closest module or use the module option to specify a module.', + ); } dir = dir.parent; } - const errorMsg = foundRoutingModule ? 'Could not find a non Routing NgModule.' - + `\nModules with suffix '${routingModuleExt}' are strictly reserved for routing.` - + '\nUse the skip-import option to skip importing in NgModule.' + const errorMsg = foundRoutingModule + ? 'Could not find a non Routing NgModule.' + + `\nModules with suffix '${routingModuleExt}' are strictly reserved for routing.` + + '\nUse the skip-import option to skip importing in NgModule.' : 'Could not find an NgModule. Use the skip-import option to skip importing in NgModule.'; throw new Error(errorMsg); @@ -133,8 +127,10 @@ export function buildRelativePath(from: string, to: string): string { fromParts.pop(); const toFileName = toParts.pop(); - const relativePath = relative(normalize(fromParts.join('/') || '/'), - normalize(toParts.join('/') || '/')); + const relativePath = relative( + normalize(fromParts.join('/') || '/'), + normalize(toParts.join('/') || '/'), + ); let pathPrefix = ''; // Set the path prefix for same dir or child dir, parent dir starts with `..` diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace-models.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace-models.ts index d4e050d317..22cf00b866 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace-models.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace-models.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/ban-types */ /** * @license * Copyright Google Inc. All Rights Reserved. diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/enum.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/enum.ts index 78b1ad355d..e0a4a12fd9 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/enum.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/enum.ts @@ -3,6 +3,7 @@ import { Exception } from '../enums'; import { Type } from '../models'; import { interpolate } from './common'; import { parseNamespace } from './namespace'; +// eslint-disable-next-line @typescript-eslint/no-var-requires const shouldQuote = require('should-quote'); export interface EnumGeneratorParams { @@ -33,13 +34,14 @@ export function createImportRefToEnumMapper({ solution, types }: EnumGeneratorPa throw new SchematicsException(interpolate(Exception.NoTypeDefinition, ref)); const namespace = parseNamespace(solution, ref); - const members = enumNames!.map((key, i) => ({ + const members = enumNames.map((key, i) => ({ key: shouldQuote(key) ? `'${key}'` : key, value: enumValues[i], })); return { namespace, + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion name: ref.split('.').pop()!, members, }; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/generics.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/generics.ts index 8dc7fb2629..193c62b1a5 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/generics.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/generics.ts @@ -58,9 +58,9 @@ export class GenericsCollector { } export function generateRefWithPlaceholders(sourceType: string) { + // eslint-disable-next-line prefer-const let { identifier, generics } = extractGenerics(sourceType); - identifier = identifier; generics = generics.map((_, i) => `T${i}`); return generics.length ? `${identifier}<${generics}>` : identifier; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/model.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/model.ts index 0924524392..4ef8a4cb97 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/model.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/model.ts @@ -17,6 +17,7 @@ import { extendsSelf, removeTypeModifiers, } from './type'; +// eslint-disable-next-line @typescript-eslint/no-var-requires const shouldQuote = require('should-quote'); export interface ModelGeneratorParams { diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/source.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/source.ts index a5f0dd1232..313b8addf2 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/source.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/source.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-empty */ import { SchematicsException, Tree } from '@angular-devkit/schematics'; import got from 'got'; import { diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/text.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/text.ts index e24129beff..b7a8def0f4 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/text.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/text.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-useless-escape */ import { strings } from '@angular-devkit/core'; export const lower = (text: string) => text.toLowerCase(); @@ -11,7 +12,7 @@ export const dir = (text: string) => strings.dasherize(text.replace(/\./g, '/').replace(/\/\//g, '/')); export const quote = (value: number | string) => - typeof value === 'string' ? `'${value.replace(/'/g, '\\\'')}'` : value; + typeof value === 'string' ? `'${value.replace(/'/g, "\\'")}'` : value; function _(text: string): string { return text.replace(/\./g, '_'); diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/workspace.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/workspace.ts index 84d186cb55..81bfdc7307 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/workspace.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/workspace.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-empty */ import { strings, workspaces } from '@angular-devkit/core'; import { SchematicsException, Tree } from '@angular-devkit/schematics'; import { Exception } from '../enums'; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/models.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/models.ts index c084037c5b..46d2ee830a 100644 --- a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/models.ts +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/models.ts @@ -1,4 +1,8 @@ -import type { ExtensibleEntityDto, ExtensibleObject, PagedAndSortedResultRequestDto } from '@abp/ng.core'; +import type { + ExtensibleEntityDto, + ExtensibleObject, + PagedAndSortedResultRequestDto, +} from '@abp/ng.core'; export interface GetTenantsInput extends PagedAndSortedResultRequestDto { filter: string; @@ -17,6 +21,5 @@ export interface TenantDto extends ExtensibleEntityDto { name: string; } -// tslint:disable-next-line: no-empty-interface -export interface TenantUpdateDto extends TenantCreateOrUpdateDtoBase { -} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface TenantUpdateDto extends TenantCreateOrUpdateDtoBase {} diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts index 0023c74e78..d864afb4af 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts @@ -1,13 +1,11 @@ -import { Component, OnInit } from '@angular/core'; import { AuthWrapperService } from '@abp/ng.account.core'; +import { Component } from '@angular/core'; @Component({ selector: 'abp-auth-wrapper', templateUrl: './auth-wrapper.component.html', providers: [AuthWrapperService], }) -export class AuthWrapperComponent implements OnInit { +export class AuthWrapperComponent { constructor(public service: AuthWrapperService) {} - - ngOnInit(): void {} } diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts index 1aba2fbc6c..9ed450f9fb 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts @@ -1,13 +1,11 @@ -import { Component, OnInit } from '@angular/core'; import { TenantBoxService } from '@abp/ng.account.core'; +import { Component } from '@angular/core'; @Component({ selector: 'abp-tenant-box', templateUrl: './tenant-box.component.html', providers: [TenantBoxService], }) -export class TenantBoxComponent implements OnInit { +export class TenantBoxComponent { constructor(public service: TenantBoxService) {} - - ngOnInit(): void {} } diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts index 83bef06f26..33e8307824 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts @@ -1,14 +1,15 @@ +/* eslint-disable @angular-eslint/no-output-native */ +import { ABP } from '@abp/ng.core'; import { Component, + ElementRef, EventEmitter, Input, + OnInit, Output, - ViewChild, - ElementRef, Renderer2, - OnInit, + ViewChild, } from '@angular/core'; -import { ABP } from '@abp/ng.core'; @Component({ selector: 'abp-button', @@ -49,13 +50,11 @@ export class ButtonComponent implements OnInit { @Input() attributes: ABP.Dictionary; - // tslint:disable @Output() readonly click = new EventEmitter(); @Output() readonly focus = new EventEmitter(); @Output() readonly blur = new EventEmitter(); - // tslint:enable @Output() readonly abpClick = new EventEmitter(); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/chart/chart.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/chart/chart.component.ts index e019840b7c..41634932ae 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/chart/chart.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/chart/chart.component.ts @@ -1,12 +1,12 @@ import { AfterViewInit, + ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnDestroy, Output, - ChangeDetectorRef, } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { chartJsLoaded$ } from '../../utils/widget-utils'; @@ -29,7 +29,7 @@ export class ChartComponent implements AfterViewInit, OnDestroy { @Input() responsive = true; - // tslint:disable-next-line: no-output-on-prefix + // eslint-disable-next-line @angular-eslint/no-output-on-prefix @Output() readonly onDataSelect: EventEmitter = new EventEmitter(); @Output() readonly initialized = new BehaviorSubject(this); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts index c68757b4a0..d923a43998 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; +import { Component, ViewEncapsulation } from '@angular/core'; @Component({ selector: 'abp-loading', @@ -33,8 +33,4 @@ import { Component, OnInit, ViewEncapsulation } from '@angular/core'; `, ], }) -export class LoadingComponent implements OnInit { - constructor() {} - - ngOnInit() {} -} +export class LoadingComponent {} diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts index 5924a9f187..d5e20cf568 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/table-empty-message/table-empty-message.component.ts @@ -1,13 +1,13 @@ -import { Component, OnInit, Input } from '@angular/core'; +import { Component, Input } from '@angular/core'; @Component({ - // tslint:disable-next-line: component-selector + // eslint-disable-next-line @angular-eslint/component-selector selector: '[abp-table-empty-message]', template: ` {{ emptyMessage | abpLocalization }} - ` + `, }) export class TableEmptyMessageComponent { @Input() diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts index e8b9ffac85..b41be45343 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts @@ -5,7 +5,7 @@ import { fromEvent, Subscription } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; @Directive({ - // tslint:disable-next-line + // eslint-disable-next-line @angular-eslint/directive-selector selector: 'ngx-datatable[default]', exportAs: 'ngxDatatableDefault', }) diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts index cf800db556..2a6c23c8a7 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts @@ -19,7 +19,7 @@ import { } from '../tokens/ngx-datatable-messages.token'; @Directive({ - // tslint:disable-next-line + // eslint-disable-next-line @angular-eslint/directive-selector selector: 'ngx-datatable[list]', exportAs: 'ngxDatatableList', }) diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts index 21c1650b2b..07fd098d2e 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts @@ -1,9 +1,4 @@ -import { - AuthService, - LocalizationParam, - RestOccurError, - RouterEvents, -} from '@abp/ng.core'; +import { AuthService, LocalizationParam, RestOccurError, RouterEvents } from '@abp/ng.core'; import { HttpErrorResponse } from '@angular/common/http'; import { ApplicationRef, @@ -32,8 +27,7 @@ export const DEFAULT_ERROR_MESSAGES = { }, defaultError401: { title: 'You are not authenticated!', - details: - 'You should be authenticated (sign in) in order to perform this operation.', + details: 'You should be authenticated (sign in) in order to perform this operation.', }, defaultError403: { title: 'You are not authorized!', @@ -76,9 +70,8 @@ export const DEFAULT_ERROR_LOCALIZATIONS = { export class ErrorHandler { componentRef: ComponentRef; - protected httpErrorHandler = this.injector.get( - HTTP_ERROR_HANDLER, - (_, err: HttpErrorResponse) => throwError(err) + protected httpErrorHandler = this.injector.get(HTTP_ERROR_HANDLER, (_, err: HttpErrorResponse) => + throwError(err), ); constructor( @@ -88,7 +81,7 @@ export class ErrorHandler { protected cfRes: ComponentFactoryResolver, protected rendererFactory: RendererFactory2, protected injector: Injector, - @Inject('HTTP_ERROR_CONFIG') protected httpErrorConfig: HttpErrorConfig + @Inject('HTTP_ERROR_CONFIG') protected httpErrorConfig: HttpErrorConfig, ) { this.listenToRestError(); this.listenToRouterError(); @@ -116,21 +109,21 @@ export class ErrorHandler { this.actions .pipe( ofActionSuccessful(RestOccurError), - map((action) => action.payload), + map(action => action.payload), filter(this.filterRestErrors), - switchMap(this.executeErrorHandler) + switchMap(this.executeErrorHandler), ) .subscribe(); } - private executeErrorHandler = (error) => { + private executeErrorHandler = error => { const returnValue = this.httpErrorHandler(this.injector, error); return (returnValue instanceof Observable ? returnValue : of(null)).pipe( - catchError((err) => { + catchError(err => { this.handleError(err); return of(null); - }) + }), ); }; @@ -140,10 +133,7 @@ export class ErrorHandler { defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, }; - if ( - err instanceof HttpErrorResponse && - err.headers.get('_AbpErrorFormat') - ) { + if (err instanceof HttpErrorResponse && err.headers.get('_AbpErrorFormat')) { const confirmation$ = this.showError(null, null, body); if (err.status === 401) { @@ -164,7 +154,7 @@ export class ErrorHandler { { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.details, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.details, - } + }, ).subscribe(() => this.navigateToLogin()); break; case 403: @@ -191,7 +181,7 @@ export class ErrorHandler { { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title, - } + }, ); break; case 500: @@ -228,7 +218,7 @@ export class ErrorHandler { { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, - } + }, ); break; } @@ -258,7 +248,7 @@ export class ErrorHandler { protected showError( message?: LocalizationParam, title?: LocalizationParam, - body?: any + body?: any, ): Observable { if (body) { if (body.details) { @@ -298,28 +288,23 @@ export class ErrorHandler { for (const key in instance) { /* istanbul ignore else */ - if (this.componentRef.instance.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(this.componentRef.instance, key)) { this.componentRef.instance[key] = instance[key]; } } - this.componentRef.instance.hideCloseIcon = - this.httpErrorConfig.errorScreen.hideCloseIcon; + this.componentRef.instance.hideCloseIcon = this.httpErrorConfig.errorScreen.hideCloseIcon; const appRef = this.injector.get(ApplicationRef); if (this.canCreateCustomError(instance.status as ErrorScreenErrorCodes)) { this.componentRef.instance.cfRes = this.cfRes; this.componentRef.instance.appRef = appRef; this.componentRef.instance.injector = this.injector; - this.componentRef.instance.customComponent = - this.httpErrorConfig.errorScreen.component; + this.componentRef.instance.customComponent = this.httpErrorConfig.errorScreen.component; } appRef.attachView(this.componentRef.hostView); - renderer.appendChild( - host, - (this.componentRef.hostView as EmbeddedViewRef).rootNodes[0] - ); + renderer.appendChild(host, (this.componentRef.hostView as EmbeddedViewRef).rootNodes[0]); const destroy$ = new Subject(); this.componentRef.instance.destroy$ = destroy$; @@ -339,19 +324,13 @@ export class ErrorHandler { protected filterRestErrors = ({ status }: HttpErrorResponse): boolean => { if (typeof status !== 'number') return false; - return ( - this.httpErrorConfig.skipHandledErrorCodes.findIndex( - (code) => code === status - ) < 0 - ); + return this.httpErrorConfig.skipHandledErrorCodes.findIndex(code => code === status) < 0; }; protected filterRouteErrors = (navigationError: NavigationError): boolean => { return ( navigationError.error?.message?.indexOf('Cannot match') > -1 && - this.httpErrorConfig.skipHandledErrorCodes.findIndex( - (code) => code === 404 - ) < 0 + this.httpErrorConfig.skipHandledErrorCodes.findIndex(code => code === 404) < 0 ); }; } diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/breadcrumb.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/breadcrumb.component.spec.ts index 87487f9b04..b9574d02db 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/breadcrumb.component.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/breadcrumb.component.spec.ts @@ -9,6 +9,7 @@ import { HttpClient } from '@angular/common/http'; import { RouterModule } from '@angular/router'; import { createRoutingFactory, SpectatorRouting, SpyObject } from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; +// eslint-disable-next-line @nrwl/nx/enforce-module-boundaries import { mockRoutesService } from '../../../../core/src/lib/tests/routes.service.spec'; import { BreadcrumbComponent } from '../components/breadcrumb/breadcrumb.component'; From c4eab6766bb122aa3ad96f299da4650468075519 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 16 Aug 2021 16:13:59 +0300 Subject: [PATCH 21/56] reformat all files --- .../dev-app/src/app/shared/shared.module.ts | 14 +- .../nx/ng-packs/apps/dev-app/src/main.ts | 2 +- .../change-password.component.ts | 3 +- .../personal-settings.component.ts | 3 +- .../src/lib/proxy/account/account.service.ts | 42 +++--- .../account/controllers/account.service.ts | 40 +++--- .../page/src/page-parts.component.ts | 12 +- .../src/lib/abstracts/ng-model.component.ts | 11 +- .../replaceable-route-container.component.ts | 5 +- .../lib/components/router-outlet.component.ts | 4 +- .../src/lib/directives/debounce.directive.ts | 18 +-- .../src/lib/directives/ellipsis.directive.ts | 9 +- .../core/src/lib/directives/for.directive.ts | 38 ++--- .../lib/directives/form-submit.directive.ts | 17 +-- .../directives/stop-propagation.directive.ts | 24 +--- .../packages/core/src/lib/pipes/sort.pipe.ts | 6 +- .../asp-net-core/mvc/multi-tenancy/models.ts | 1 - .../lib/proxy/volo/abp/localization/models.ts | 1 - .../core/src/lib/proxy/volo/abp/models.ts | 1 - .../core/src/lib/states/config.state.ts | 15 +- .../src/lib/strategies/context.strategy.ts | 2 +- .../src/lib/tests/container.strategy.spec.ts | 12 +- .../src/lib/tests/environment.service.spec.ts | 4 +- .../core/src/lib/tests/for.directive.spec.ts | 9 +- .../core/src/lib/tests/internal-store.spec.ts | 39 ++--- .../src/lib/tests/lazy-load-utils.spec.ts | 4 +- .../src/lib/tests/profile.service.spec.ts | 19 +-- .../src/lib/tests/projection.strategy.spec.ts | 51 ++----- .../core/src/lib/tests/rest.service.spec.ts | 39 ++--- .../core/src/lib/tests/route-utils.spec.ts | 2 +- .../lib/tests/router-outlet.component.spec.ts | 9 +- .../core/src/lib/tests/routes.handler.spec.ts | 6 +- .../core/src/lib/tests/sort.pipe.spec.ts | 8 +- .../core/src/lib/tests/utils/common.utils.ts | 4 +- .../core/src/lib/utils/common-utils.ts | 2 +- .../core/src/lib/utils/date-extensions.ts | 2 +- .../core/src/lib/utils/lazy-load-utils.ts | 2 +- .../feature-management.component.ts | 3 +- .../feature-management/features.service.ts | 30 ++-- .../proxy/identity/identity-role.service.ts | 82 ++++++----- .../identity/identity-user-lookup.service.ts | 57 +++++--- .../proxy/identity/identity-user.service.ts | 136 +++++++++++------- .../src/lib/proxy/identity/profile.service.ts | 40 +++--- .../identity/src/lib/proxy/users/models.ts | 1 - .../src/lib/tokens/extensions.token.ts | 5 +- .../permission-management.component.ts | 7 +- .../src/lib/proxy/models.ts | 1 - .../src/lib/proxy/permissions.service.ts | 30 ++-- .../src/commands/proxy-add/index.ts | 2 +- .../src/commands/proxy-refresh/index.ts | 2 +- .../schematics/src/utils/angular/change.ts | 17 +-- .../src/utils/angular/dependencies.ts | 18 ++- .../schematics/src/utils/angular/json-file.ts | 40 +++--- .../src/utils/angular/json-utils.ts | 31 ++-- .../schematics/src/utils/angular/lint-fix.ts | 17 ++- .../src/utils/angular/parse-name.ts | 1 - .../schematics/src/utils/angular/tsconfig.ts | 14 +- .../src/utils/angular/validation.ts | 6 +- .../schematics/src/utils/angular/workspace.ts | 11 +- .../schematics/src/utils/namespace.ts | 5 +- .../src/proxy/email-settings.service.ts | 26 ++-- .../config/src/proxy/models.ts | 1 - .../src/lib/proxy/tenant.service.ts | 111 ++++++++------ .../src/lib/tokens/extensions.token.ts | 25 ++-- .../src/lib/adapters/date-time.adapter.ts | 2 +- .../src/lib/adapters/time.adapter.ts | 2 +- .../abstract-actions.component.ts | 2 +- .../src/lib/directives/prop-data.directive.ts | 6 +- .../extensions/src/lib/utils/state.util.ts | 2 +- .../extensions/src/tests/actions.util.spec.ts | 4 +- .../extensions/src/tests/enum.util.spec.ts | 31 ++-- .../extensions/src/tests/props.util.spec.ts | 4 +- .../extensions/src/tests/state.util.spec.ts | 27 ++-- .../src/lib/animations/bounce.animations.ts | 12 +- .../src/lib/animations/fade.animations.ts | 49 +++++-- .../http-error-wrapper.component.ts | 12 +- .../lib/components/modal/modal.component.ts | 2 +- .../src/lib/services/toaster.service.ts | 18 ++- .../src/lib/tests/button.component.spec.ts | 9 +- .../src/lib/tests/chart.component.spec.ts | 43 +++--- .../lib/tests/confirmation.service.spec.ts | 43 +++--- .../src/lib/tests/error.component.spec.ts | 4 +- .../src/lib/tests/error.handler.spec.ts | 30 ++-- .../src/lib/tests/lazy-style.handler.spec.ts | 2 +- .../src/lib/tests/modal.component.spec.ts | 18 +-- .../src/lib/utils/date-parser-formatter.ts | 5 +- 86 files changed, 747 insertions(+), 779 deletions(-) diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/shared/shared.module.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/shared/shared.module.ts index 58e820f816..964170499d 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/shared/shared.module.ts +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/app/shared/shared.module.ts @@ -6,18 +6,8 @@ import { NgxValidateCoreModule } from '@ngx-validate/core'; @NgModule({ declarations: [], - imports: [ - CoreModule, - ThemeSharedModule, - NgbDropdownModule, - NgxValidateCoreModule, - ], - exports: [ - CoreModule, - ThemeSharedModule, - NgbDropdownModule, - NgxValidateCoreModule, - ], + imports: [CoreModule, ThemeSharedModule, NgbDropdownModule, NgxValidateCoreModule], + exports: [CoreModule, ThemeSharedModule, NgbDropdownModule, NgxValidateCoreModule], providers: [], }) export class SharedModule {} diff --git a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/main.ts b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/main.ts index d9a2e7e4a5..fa4e0aef33 100644 --- a/npm/ng-packs/nx/ng-packs/apps/dev-app/src/main.ts +++ b/npm/ng-packs/nx/ng-packs/apps/dev-app/src/main.ts @@ -10,4 +10,4 @@ if (environment.production) { platformBrowserDynamic() .bootstrapModule(AppModule) - .catch((err) => console.error(err)); + .catch(err => console.error(err)); diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts index d18bd8b165..47b02e4b6e 100644 --- a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts @@ -18,7 +18,8 @@ const PASSWORD_FIELDS = ['newPassword', 'repeatNewPassword']; exportAs: 'abpChangePasswordForm', }) export class ChangePasswordComponent - implements OnInit, Account.ChangePasswordComponentInputs, Account.ChangePasswordComponentOutputs { + implements OnInit, Account.ChangePasswordComponentInputs, Account.ChangePasswordComponentOutputs +{ form: FormGroup; inProgress: boolean; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts index dd7789220f..67db73a5a6 100644 --- a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts @@ -17,7 +17,8 @@ export class PersonalSettingsComponent implements OnInit, Account.PersonalSettingsComponentInputs, - Account.PersonalSettingsComponentOutputs { + Account.PersonalSettingsComponentOutputs +{ form: FormGroup; inProgress: boolean; diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/account.service.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/account.service.ts index adeb2ee5c9..4d62086f7f 100644 --- a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/account.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/account.service.ts @@ -10,28 +10,34 @@ export class AccountService { apiName = 'AbpAccount'; register = (input: RegisterDto) => - this.restService.request({ - method: 'POST', - url: '/api/account/register', - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'POST', + url: '/api/account/register', + body: input, + }, + { apiName: this.apiName }, + ); resetPassword = (input: ResetPasswordDto) => - this.restService.request({ - method: 'POST', - url: '/api/account/reset-password', - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'POST', + url: '/api/account/reset-password', + body: input, + }, + { apiName: this.apiName }, + ); sendPasswordResetCode = (input: SendPasswordResetCodeDto) => - this.restService.request({ - method: 'POST', - url: '/api/account/send-password-reset-code', - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'POST', + url: '/api/account/send-password-reset-code', + body: input, + }, + { apiName: this.apiName }, + ); constructor(private restService: RestService) {} } diff --git a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/account.service.ts b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/account.service.ts index 8adf5385b0..75b07bf963 100644 --- a/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/account.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/account.service.ts @@ -9,27 +9,33 @@ export class AccountService { apiName = 'AbpAccount'; checkPasswordByLogin = (login: UserLoginInfo) => - this.restService.request({ - method: 'POST', - url: '/api/account/check-password', - body: login, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'POST', + url: '/api/account/check-password', + body: login, + }, + { apiName: this.apiName }, + ); loginByLogin = (login: UserLoginInfo) => - this.restService.request({ - method: 'POST', - url: '/api/account/login', - body: login, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'POST', + url: '/api/account/login', + body: login, + }, + { apiName: this.apiName }, + ); logout = () => - this.restService.request({ - method: 'GET', - url: '/api/account/logout', - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: '/api/account/logout', + }, + { apiName: this.apiName }, + ); constructor(private restService: RestService) {} } diff --git a/npm/ng-packs/nx/ng-packs/packages/components/page/src/page-parts.component.ts b/npm/ng-packs/nx/ng-packs/packages/components/page/src/page-parts.component.ts index 8438593268..720a14c4a9 100644 --- a/npm/ng-packs/nx/ng-packs/packages/components/page/src/page-parts.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/components/page/src/page-parts.component.ts @@ -8,27 +8,21 @@ export enum PageParts { @Component({ selector: 'abp-page-title-container', - template: ` - - `, + template: ` `, encapsulation: ViewEncapsulation.None, }) export class PageTitleContainerComponent {} @Component({ selector: 'abp-page-breadcrumb-container', - template: ` - - `, + template: ` `, encapsulation: ViewEncapsulation.None, }) export class PageBreadcrumbContainerComponent {} @Component({ selector: 'abp-page-toolbar-container', - template: ` - - `, + template: ` `, encapsulation: ViewEncapsulation.None, }) export class PageToolbarContainerComponent {} diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts index 93225990d5..9c22741693 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts @@ -4,9 +4,7 @@ import { ControlValueAccessor } from '@angular/forms'; // Not an abstract class on purpose. Do not change! // tslint:disable-next-line: use-component-selector @Component({ template: '' }) -export class AbstractNgModelComponent - implements ControlValueAccessor -{ +export class AbstractNgModelComponent implements ControlValueAccessor { protected _value: T; protected cdRef: ChangeDetectorRef; onChange: (value: T) => void; @@ -19,17 +17,16 @@ export class AbstractNgModelComponent readonly: boolean; @Input() - valueFn: (value: U, previousValue?: T) => T = (value) => value as any as T; + valueFn: (value: U, previousValue?: T) => T = value => value as any as T; @Input() - valueLimitFn: (value: T, previousValue?: T) => any = (value) => false; + valueLimitFn: (value: T, previousValue?: T) => any = value => false; @Input() set value(value: T) { value = this.valueFn(value as any as U, this._value); - if (this.valueLimitFn(value, this._value) !== false || this.readonly) - return; + if (this.valueLimitFn(value, this._value) !== false || this.readonly) return; this._value = value; this.notifyValueChange(); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts index 6c0dabd511..9d60fcda84 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts @@ -27,8 +27,9 @@ export class ReplaceableRouteContainerComponent implements OnInit { ngOnInit() { this.defaultComponent = this.route.snapshot.data.replaceableComponent.defaultComponent; - this.componentKey = (this.route.snapshot.data - .replaceableComponent as ReplaceableComponents.RouteData).key; + this.componentKey = ( + this.route.snapshot.data.replaceableComponent as ReplaceableComponents.RouteData + ).key; const component$ = this.replaceableComponents .get$(this.componentKey) diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/router-outlet.component.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/router-outlet.component.ts index 1fc5d002ac..fee29d9dd8 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/router-outlet.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/components/router-outlet.component.ts @@ -2,8 +2,6 @@ import { Component } from '@angular/core'; @Component({ selector: 'abp-router-outlet', - template: ` - - `, + template: ` `, }) export class RouterOutletComponent {} diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/debounce.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/debounce.directive.ts index 16bcb07590..431305738a 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/debounce.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/debounce.directive.ts @@ -1,11 +1,4 @@ -import { - Directive, - ElementRef, - EventEmitter, - Input, - OnInit, - Output, -} from '@angular/core'; +import { Directive, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { fromEvent } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; import { SubscriptionService } from '../services/subscription.service'; @@ -20,15 +13,10 @@ export class InputEventDebounceDirective implements OnInit { @Output('input.debounce') readonly debounceEvent = new EventEmitter(); - constructor( - private el: ElementRef, - private subscription: SubscriptionService - ) {} + constructor(private el: ElementRef, private subscription: SubscriptionService) {} ngOnInit(): void { - const input$ = fromEvent(this.el.nativeElement, 'input').pipe( - debounceTime(this.debounce) - ); + const input$ = fromEvent(this.el.nativeElement, 'input').pipe(debounceTime(this.debounce)); this.subscription.addOne(input$, (event: Event) => { this.debounceEvent.emit(event); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/ellipsis.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/ellipsis.directive.ts index 1837d1d8e1..1c178da1af 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/ellipsis.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/ellipsis.directive.ts @@ -1,4 +1,11 @@ -import { AfterViewInit, ChangeDetectorRef, Directive, ElementRef, HostBinding, Input } from '@angular/core'; +import { + AfterViewInit, + ChangeDetectorRef, + Directive, + ElementRef, + HostBinding, + Input, +} from '@angular/core'; @Directive({ selector: '[abpEllipsis]', diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/for.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/for.directive.ts index b9bd04f0fb..913fff3a5a 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/for.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/for.directive.ts @@ -21,14 +21,14 @@ class AbpForContext { public $implicit: any, public index: number, public count: number, - public list: any[] + public list: any[], ) {} } class RecordView { constructor( public record: IterableChangeRecord, - public view: EmbeddedViewRef + public view: EmbeddedViewRef, ) {} } @@ -70,31 +70,25 @@ export class ForDirective implements OnChanges { } get trackByFn(): TrackByFunction { - return ( - this.trackBy || ((index: number, item: any) => (item as any).id || index) - ); + return this.trackBy || ((index: number, item: any) => (item as any).id || index); } constructor( private tempRef: TemplateRef, private vcRef: ViewContainerRef, - private differs: IterableDiffers + private differs: IterableDiffers, ) {} private iterateOverAppliedOperations(changes: IterableChanges) { const rw: RecordView[] = []; changes.forEachOperation( - ( - record: IterableChangeRecord, - previousIndex: number, - currentIndex: number - ) => { + (record: IterableChangeRecord, previousIndex: number, currentIndex: number) => { if (record.previousIndex == null) { const view = this.vcRef.createEmbeddedView( this.tempRef, new AbpForContext(null, -1, -1, this.items), - currentIndex + currentIndex, ); rw.push(new RecordView(record, view)); @@ -104,11 +98,9 @@ export class ForDirective implements OnChanges { const view = this.vcRef.get(previousIndex); this.vcRef.move(view, currentIndex); - rw.push( - new RecordView(record, view as EmbeddedViewRef) - ); + rw.push(new RecordView(record, view as EmbeddedViewRef)); } - } + }, ); for (let i = 0, l = rw.length; i < l; i++) { @@ -125,9 +117,7 @@ export class ForDirective implements OnChanges { } changes.forEachIdentityChange((record: IterableChangeRecord) => { - const viewRef = this.vcRef.get( - record.currentIndex - ) as EmbeddedViewRef; + const viewRef = this.vcRef.get(record.currentIndex) as EmbeddedViewRef; viewRef.context.$implicit = record.item; }); } @@ -165,11 +155,7 @@ export class ForDirective implements OnChanges { private sortItems(items: any[]) { if (this.orderBy) { items.sort((a, b) => - a[this.orderBy] > b[this.orderBy] - ? 1 - : a[this.orderBy] < b[this.orderBy] - ? -1 - : 0 + a[this.orderBy] > b[this.orderBy] ? 1 : a[this.orderBy] < b[this.orderBy] ? -1 : 0, ); } else { items.sort(); @@ -187,9 +173,7 @@ export class ForDirective implements OnChanges { typeof this.filterVal !== 'undefined' && this.filterVal !== '' ) { - items = items.filter((item) => - compareFn(item[this.filterBy], this.filterVal) - ); + items = items.filter(item => compareFn(item[this.filterBy], this.filterVal)); } switch (this.orderDir) { diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts index 04e3269ce4..2ca2b9757d 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts @@ -35,7 +35,7 @@ export class FormSubmitDirective implements OnInit { @Self() private formGroupDirective: FormGroupDirective, private host: ElementRef, private cdRef: ChangeDetectorRef, - private subscription: SubscriptionService + private subscription: SubscriptionService, ) {} ngOnInit() { @@ -44,19 +44,16 @@ export class FormSubmitDirective implements OnInit { this.executedNgSubmit = true; }); - const keyup$ = fromEvent( - this.host.nativeElement as HTMLElement, - 'keyup' - ).pipe( + const keyup$ = fromEvent(this.host.nativeElement as HTMLElement, 'keyup').pipe( debounceTime(this.debounce), - filter((event) => !(event.target instanceof HTMLTextAreaElement)), - filter((event: KeyboardEvent) => event && event.key === 'Enter') + filter(event => !(event.target instanceof HTMLTextAreaElement)), + filter((event: KeyboardEvent) => event && event.key === 'Enter'), ); this.subscription.addOne(keyup$, () => { if (!this.executedNgSubmit) { this.host.nativeElement.dispatchEvent( - new Event('submit', { bubbles: true, cancelable: true }) + new Event('submit', { bubbles: true, cancelable: true }), ); } @@ -76,13 +73,13 @@ export class FormSubmitDirective implements OnInit { function setDirty(controls: Controls) { if (Array.isArray(controls)) { - controls.forEach((group) => { + controls.forEach(group => { setDirty(group.controls as { [key: string]: FormControl }); }); return; } - Object.keys(controls).forEach((key) => { + Object.keys(controls).forEach(key => { controls[key].markAsDirty(); controls[key].updateValueAndValidity(); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts index c297bfd90d..52722e95a9 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts @@ -1,10 +1,4 @@ -import { - Directive, - ElementRef, - EventEmitter, - OnInit, - Output, -} from '@angular/core'; +import { Directive, ElementRef, EventEmitter, OnInit, Output } from '@angular/core'; import { fromEvent } from 'rxjs'; import { SubscriptionService } from '../services/subscription.service'; @@ -16,18 +10,12 @@ import { SubscriptionService } from '../services/subscription.service'; export class StopPropagationDirective implements OnInit { @Output('click.stop') readonly stopPropEvent = new EventEmitter(); - constructor( - private el: ElementRef, - private subscription: SubscriptionService - ) {} + constructor(private el: ElementRef, private subscription: SubscriptionService) {} ngOnInit(): void { - this.subscription.addOne( - fromEvent(this.el.nativeElement, 'click'), - (event: MouseEvent) => { - event.stopPropagation(); - this.stopPropEvent.emit(event); - } - ); + this.subscription.addOne(fromEvent(this.el.nativeElement, 'click'), (event: MouseEvent) => { + event.stopPropagation(); + this.stopPropEvent.emit(event); + }); } } diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts index 4d634f33c7..c44ca6f075 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts @@ -5,11 +5,7 @@ export type SortOrder = 'asc' | 'desc'; name: 'abpSort', }) export class SortPipe implements PipeTransform { - transform( - value: any[], - sortOrder: SortOrder | string = 'asc', - sortKey?: string, - ): any { + transform(value: any[], sortOrder: SortOrder | string = 'asc', sortKey?: string): any { sortOrder = sortOrder && (sortOrder.toLowerCase() as any); if (!value || (sortOrder !== 'asc' && sortOrder !== 'desc')) return value; diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts index 2c948099b4..a88493c5c7 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.ts @@ -1,4 +1,3 @@ - export interface FindTenantResultDto { success: boolean; tenantId?: string; diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/localization/models.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/localization/models.ts index c881e7da2b..e46e9b6d3c 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/localization/models.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/localization/models.ts @@ -1,4 +1,3 @@ - export interface LanguageInfo { cultureName?: string; uiCultureName?: string; diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/models.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/models.ts index 5f16437958..f6f19c97ad 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/models.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/proxy/volo/abp/models.ts @@ -1,4 +1,3 @@ - export interface NameValue { name?: string; value: T; diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/states/config.state.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/states/config.state.ts index 4cc2dc741d..412759667e 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/states/config.state.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/states/config.state.ts @@ -143,11 +143,16 @@ export class ConfigState { } static getLocalizationResource(resourceName: string) { - const selector = createSelector([ConfigState], (state: Config.State): { - [key: string]: string; - } => { - return state.localization.values[resourceName]; - }); + const selector = createSelector( + [ConfigState], + ( + state: Config.State, + ): { + [key: string]: string; + } => { + return state.localization.values[resourceName]; + }, + ); return selector; } diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/context.strategy.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/context.strategy.ts index 21007eae1c..06cceee54c 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/context.strategy.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/strategies/context.strategy.ts @@ -11,7 +11,7 @@ export abstract class ContextStrategy { } export class NoContextStrategy< - T extends Type | TemplateRef = any + T extends Type | TemplateRef = any, > extends ContextStrategy { constructor() { super(undefined); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/container.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/container.strategy.spec.ts index e85e7b5a50..d34de7d6ec 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/container.strategy.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/container.strategy.spec.ts @@ -6,10 +6,10 @@ import { } from '../strategies'; describe('ClearContainerStrategy', () => { - const containerRef = ({ + const containerRef = { clear: jest.fn(), length: 7, - } as any) as ViewContainerRef; + } as any as ViewContainerRef; describe('#getIndex', () => { it('should return 0', () => { @@ -29,10 +29,10 @@ describe('ClearContainerStrategy', () => { }); describe('InsertIntoContainerStrategy', () => { - const containerRef = ({ + const containerRef = { clear: jest.fn(), length: 7, - } as any) as ViewContainerRef; + } as any as ViewContainerRef; describe('#getIndex', () => { test.each` @@ -61,10 +61,10 @@ describe('InsertIntoContainerStrategy', () => { }); describe('CONTAINER_STRATEGY', () => { - const containerRef = ({ + const containerRef = { clear: jest.fn(), length: 7, - } as any) as ViewContainerRef; + } as any as ViewContainerRef; test.each` name | Strategy | index diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/environment.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/environment.service.spec.ts index 95c2b58a6c..a1c44d8a7b 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/environment.service.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/environment.service.spec.ts @@ -3,7 +3,7 @@ import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; import { Environment } from '../models'; import { EnvironmentService } from '../services'; -export const ENVIRONMENT_DATA = ({ +export const ENVIRONMENT_DATA = { production: false, application: { name: 'MyProjectName', @@ -23,7 +23,7 @@ export const ENVIRONMENT_DATA = ({ localization: { defaultResourceName: 'MyProjectName', }, -} as any) as Environment; +} as any as Environment; describe('ConfigState', () => { let spectator: SpectatorService; diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/for.directive.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/for.directive.spec.ts index 1405935b62..d83be2ff0e 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/for.directive.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/for.directive.spec.ts @@ -51,9 +51,12 @@ describe('ForDirective', () => { describe('trackBy', () => { const trackByFn = (_, item) => item; beforeEach(() => { - spectator = createDirective('
  • {{ item }}
', { - hostProps: { items, trackByFn }, - }); + spectator = createDirective( + '
  • {{ item }}
', + { + hostProps: { items, trackByFn }, + }, + ); directive = spectator.directive; }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/internal-store.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/internal-store.spec.ts index 7a13adf9e4..3fb3cb5f02 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/internal-store.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/internal-store.spec.ts @@ -82,13 +82,10 @@ describe('Internal Store', () => { async ({ selector, expected }) => { const store = new InternalStore(mockInitialState); - const value = await store - .sliceState(selector) - .pipe(take(1)) - .toPromise(); + const value = await store.sliceState(selector).pipe(take(1)).toPromise(); expect(value).toEqual(expected); - } + }, ); }); @@ -100,16 +97,13 @@ describe('Internal Store', () => { ${deepPatch3} | ${deepPatchExpected3} ${deepPatch4} | ${deepPatchExpected4} ${deepPatch5} | ${deepPatchExpected5} - `( - 'should set state as $expected when patch is $patch', - ({ patch, expected }) => { - const store = new InternalStore(mockInitialState); + `('should set state as $expected when patch is $patch', ({ patch, expected }) => { + const store = new InternalStore(mockInitialState); - store.deepPatch(patch); + store.deepPatch(patch); - expect(store.state).toEqual(expected); - } - ); + expect(store.state).toEqual(expected); + }); }); describe('patchState', () => { @@ -120,25 +114,22 @@ describe('Internal Store', () => { ${patch3} | ${patchExpected3} ${patch4} | ${patchExpected4} ${patch5} | ${patchExpected5} - `( - 'should set state as $expected when patch is $patch', - ({ patch, expected }) => { - const store = new InternalStore(mockInitialState); + `('should set state as $expected when patch is $patch', ({ patch, expected }) => { + const store = new InternalStore(mockInitialState); - store.patch(patch); + store.patch(patch); - expect(store.state).toEqual(expected); - } - ); + expect(store.state).toEqual(expected); + }); }); describe('sliceUpdate', () => { - it('should return slice of update$ based on selector', (done) => { + it('should return slice of update$ based on selector', done => { const store = new InternalStore(mockInitialState); - const onQux$ = store.sliceUpdate((state) => state.foo.bar.qux); + const onQux$ = store.sliceUpdate(state => state.foo.bar.qux); - onQux$.pipe(take(1)).subscribe((value) => { + onQux$.pipe(take(1)).subscribe(value => { expect(value).toEqual(deepPatch2.foo.bar.qux); done(); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts index 7afb343e80..4d4d55caf7 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts @@ -55,7 +55,7 @@ describe('Lazy Load Utils', () => { it('should emit error event on fail and clear callbacks', done => { const error = new CustomEvent('error'); const parentNode = { removeChild: jest.fn() }; - const element = ({ parentNode } as any) as HTMLLinkElement; + const element = { parentNode } as any as HTMLLinkElement; fromLazyLoad( element, @@ -84,7 +84,7 @@ describe('Lazy Load Utils', () => { it('should emit load event on success and clear callbacks', done => { const success = new CustomEvent('load'); const parentNode = { removeChild: jest.fn() }; - const element = ({ parentNode } as any) as HTMLLinkElement; + const element = { parentNode } as any as HTMLLinkElement; fromLazyLoad( element, diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile.service.spec.ts index 32dcf030d7..894a7c20cf 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile.service.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/profile.service.spec.ts @@ -1,9 +1,4 @@ -import { - createHttpFactory, - HttpMethod, - SpectatorHttp, - SpyObject, -} from '@ngneat/spectator/jest'; +import { createHttpFactory, HttpMethod, SpectatorHttp, SpyObject } from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; import { EnvironmentService, ProfileService, RestService } from '../services'; import { CORE_OPTIONS } from '../tokens'; @@ -31,10 +26,7 @@ describe('ProfileService', () => { it('should send a GET to my-profile API', () => { spectator.service.get().subscribe(); - spectator.expectOne( - 'https://abp.io/api/identity/my-profile', - HttpMethod.GET - ); + spectator.expectOne('https://abp.io/api/identity/my-profile', HttpMethod.GET); }); it('should send a POST to change-password API', () => { @@ -42,7 +34,7 @@ describe('ProfileService', () => { spectator.service.changePassword(mock).subscribe(); const req = spectator.expectOne( 'https://abp.io/api/identity/my-profile/change-password', - HttpMethod.POST + HttpMethod.POST, ); expect(req.request.body).toEqual(mock); }); @@ -58,10 +50,7 @@ describe('ProfileService', () => { hasPassword: false, }; spectator.service.update(mock).subscribe(); - const req = spectator.expectOne( - 'https://abp.io/api/identity/my-profile', - HttpMethod.PUT - ); + const req = spectator.expectOne('https://abp.io/api/identity/my-profile', HttpMethod.PUT); expect(req.request.body).toEqual(mock); }); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts index 8c5cf1fc3a..1f1927366a 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts @@ -46,9 +46,7 @@ describe('ComponentProjectionStrategy', () => { beforeEach(() => { spectator = createComponent({}); - containerStrategy = CONTAINER_STRATEGY.Clear( - spectator.component.containerRef - ); + containerStrategy = CONTAINER_STRATEGY.Clear(spectator.component.containerRef); }); afterEach(() => { @@ -58,10 +56,7 @@ describe('ComponentProjectionStrategy', () => { describe('#injectContent', () => { it('should should insert content into container and return a ComponentRef', () => { - const strategy = new ComponentProjectionStrategy( - TestComponent, - containerStrategy - ); + const strategy = new ComponentProjectionStrategy(TestComponent, containerStrategy); componentRef = strategy.injectContent({ get: spectator.inject }); spectator.detectChanges(); @@ -75,7 +70,7 @@ describe('ComponentProjectionStrategy', () => { const strategy = new ComponentProjectionStrategy( TestComponent, containerStrategy, - contextStrategy + contextStrategy, ); componentRef = strategy.injectContent({ get: spectator.inject }); spectator.detectChanges(); @@ -131,10 +126,7 @@ describe('RootComponentProjectionStrategy', () => { it('should be able to map context to projected component', () => { const contextStrategy = CONTEXT_STRATEGY.Component({ bar: 'bar' }); - const strategy = new RootComponentProjectionStrategy( - TestComponent, - contextStrategy - ); + const strategy = new RootComponentProjectionStrategy(TestComponent, contextStrategy); componentRef = strategy.injectContent({ get: spectator.inject }); spectator.detectChanges(); @@ -174,9 +166,7 @@ describe('TemplateProjectionStrategy', () => { beforeEach(() => { spectator = createComponent({}); - containerStrategy = CONTAINER_STRATEGY.Clear( - spectator.component.containerRef - ); + containerStrategy = CONTAINER_STRATEGY.Clear(spectator.component.containerRef); }); afterEach(() => { @@ -187,10 +177,7 @@ describe('TemplateProjectionStrategy', () => { describe('#injectContent', () => { it('should should insert content into container and return an EmbeddedViewRef', () => { const templateRef = spectator.component.templateRef; - const strategy = new TemplateProjectionStrategy( - templateRef, - containerStrategy - ); + const strategy = new TemplateProjectionStrategy(templateRef, containerStrategy); embeddedViewRef = strategy.injectContent(); spectator.detectChanges(); @@ -213,7 +200,7 @@ describe('TemplateProjectionStrategy', () => { const strategy = new TemplateProjectionStrategy( templateRef, containerStrategy, - contextStrategy + contextStrategy, ); embeddedViewRef = strategy.injectContent(); spectator.detectChanges(); @@ -242,13 +229,9 @@ describe('PROJECTION_STRATEGY', () => { 'should successfully map $name to $Strategy.name with $containerStrategy.name container strategy and $contextStrategy.name context strategy', ({ name, Strategy, containerStrategy }) => { expect(PROJECTION_STRATEGY[name](content, containerRef, context)).toEqual( - new Strategy( - content, - containerStrategy(containerRef), - CONTEXT_STRATEGY.None() - ) + new Strategy(content, containerStrategy(containerRef), CONTEXT_STRATEGY.None()), ); - } + }, ); test.each` name | Strategy | domStrategy @@ -257,9 +240,9 @@ describe('PROJECTION_STRATEGY', () => { 'should successfully map $name to $Strategy.name with $domStrategy.name dom strategy', ({ name, Strategy, domStrategy }) => { expect(PROJECTION_STRATEGY[name](content, context)).toEqual( - new Strategy(content, CONTEXT_STRATEGY.None(), domStrategy()) + new Strategy(content, CONTEXT_STRATEGY.None(), domStrategy()), ); - } + }, ); test.each` @@ -275,13 +258,9 @@ describe('PROJECTION_STRATEGY', () => { ({ name, Strategy, containerStrategy, contextStrategy }) => { context = { x: true }; expect(PROJECTION_STRATEGY[name](content, containerRef, context)).toEqual( - new Strategy( - content, - containerStrategy(containerRef), - contextStrategy(context) - ) + new Strategy(content, containerStrategy(containerRef), contextStrategy(context)), ); - } + }, ); test.each` @@ -292,8 +271,8 @@ describe('PROJECTION_STRATEGY', () => { ({ name, Strategy, domStrategy, contextStrategy }) => { context = { x: true }; expect(PROJECTION_STRATEGY[name](content, context)).toEqual( - new Strategy(content, contextStrategy(context), domStrategy()) + new Strategy(content, contextStrategy(context), domStrategy()), ); - } + }, ); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts index 881f85a3c4..15c20aee18 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts @@ -1,9 +1,4 @@ -import { - createHttpFactory, - HttpMethod, - SpectatorHttp, - SpyObject, -} from '@ngneat/spectator/jest'; +import { createHttpFactory, HttpMethod, SpectatorHttp, SpyObject } from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; import { OAuthService } from 'angular-oauth2-oidc'; import { of, throwError } from 'rxjs'; @@ -21,10 +16,7 @@ describe('HttpClient testing', () => { const createHttp = createHttpFactory({ service: RestService, - providers: [ - EnvironmentService, - { provide: CORE_OPTIONS, useValue: { environment: {} } }, - ], + providers: [EnvironmentService, { provide: CORE_OPTIONS, useValue: { environment: {} } }], mocks: [OAuthService, Store], }); @@ -65,11 +57,7 @@ describe('HttpClient testing', () => { test('should use the specific api', () => { spectator.service - .request( - { method: HttpMethod.GET, url: '/test' }, - null, - 'http://test.api' - ) + .request({ method: HttpMethod.GET, url: '/test' }, null, 'http://test.api') .subscribe(); spectator.expectOne('http://test.api' + '/test', HttpMethod.GET); }); @@ -82,12 +70,10 @@ describe('HttpClient testing', () => { spectator.expectOne('bar' + '/test', HttpMethod.GET); }); - test('should complete upon successful request', (done) => { + test('should complete upon successful request', done => { const complete = jest.fn(done); - spectator.service - .request({ method: HttpMethod.GET, url: '/test' }) - .subscribe({ complete }); + spectator.service.request({ method: HttpMethod.GET, url: '/test' }).subscribe({ complete }); const req = spectator.expectOne(api + '/test', HttpMethod.GET); spectator.flushAll([req], [{}]); @@ -97,16 +83,13 @@ describe('HttpClient testing', () => { const spy = jest.spyOn(store, 'dispatch'); spectator.service - .request( - { method: HttpMethod.GET, url: '/test' }, - { observe: Rest.Observe.Events } - ) + .request({ method: HttpMethod.GET, url: '/test' }, { observe: Rest.Observe.Events }) .pipe( - catchError((err) => { + catchError(err => { expect(err).toBeTruthy(); expect(spy).toHaveBeenCalled(); return of(null); - }) + }), ) .subscribe(); @@ -120,14 +103,14 @@ describe('HttpClient testing', () => { spectator.service .request( { method: HttpMethod.GET, url: '/test' }, - { observe: Rest.Observe.Events, skipHandleError: true } + { observe: Rest.Observe.Events, skipHandleError: true }, ) .pipe( - catchError((err) => { + catchError(err => { expect(err).toBeTruthy(); expect(spy).toHaveBeenCalledTimes(0); return of(null); - }) + }), ) .subscribe(); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/route-utils.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/route-utils.spec.ts index 3945a6527d..e6da7d4a0e 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/route-utils.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/route-utils.spec.ts @@ -23,7 +23,7 @@ describe('Route Utils', () => { 'should find $expected in $count turns when path is $path', async ({ path, expected, count }) => { const find = jest.fn(cb => (cb(node) ? node : null)); - const routes = ({ find } as any) as RoutesService; + const routes = { find } as any as RoutesService; const route = findRoute(routes, path); expect(route).toBe(expected); expect(find).toHaveBeenCalledTimes(count); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/router-outlet.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/router-outlet.component.spec.ts index b7e79b9c08..1de681bc60 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/router-outlet.component.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/router-outlet.component.spec.ts @@ -4,11 +4,16 @@ import { RouterOutletComponent } from '../components/router-outlet.component'; describe('RouterOutletComponent', () => { let spectator: Spectator; - const createHost = createHostFactory({ component: RouterOutletComponent, imports: [RouterTestingModule] }); + const createHost = createHostFactory({ + component: RouterOutletComponent, + imports: [RouterTestingModule], + }); it('should have a router-outlet element', () => { spectator = createHost(''); expect((spectator.debugElement.nativeElement as HTMLElement).children.length).toBe(1); - expect((spectator.debugElement.nativeElement as HTMLElement).children[0].tagName).toBe('ROUTER-OUTLET'); + expect((spectator.debugElement.nativeElement as HTMLElement).children[0].tagName).toBe( + 'ROUTER-OUTLET', + ); }); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/routes.handler.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/routes.handler.spec.ts index 777df39c60..a8c5d92734 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/routes.handler.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/routes.handler.spec.ts @@ -18,8 +18,8 @@ describe('Routes Handler', () => { const routes = []; const add = jest.fn(routes.push.bind(routes)); - const mockRoutesService = ({ add } as unknown) as RoutesService; - const mockRouter = ({ config } as unknown) as Router; + const mockRoutesService = { add } as unknown as RoutesService; + const mockRouter = { config } as unknown as Router; const handler = new RoutesHandler(mockRoutesService, mockRouter); @@ -30,7 +30,7 @@ describe('Routes Handler', () => { it('should not add routes when there is no router', () => { const routes = []; const add = jest.fn(routes.push.bind(routes)); - const mockRoutesService = ({ add } as unknown) as RoutesService; + const mockRoutesService = { add } as unknown as RoutesService; const handler = new RoutesHandler(mockRoutesService, null); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/sort.pipe.spec.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/sort.pipe.spec.ts index b69d139091..0d60ab0b21 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/sort.pipe.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/sort.pipe.spec.ts @@ -17,13 +17,7 @@ describe('SortPipe', () => { }); test('should sort object array in given order with given key', () => { - const array = [ - { key: 5 }, - { key: 'b' }, - { key: 1 }, - { key: 'a' }, - { key: null }, - ]; + const array = [{ key: 5 }, { key: 'b' }, { key: 1 }, { key: 'a' }, { key: null }]; expect(pipe.transform(array, 'asc', 'key')).toEqual([ { key: 1 }, diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/utils/common.utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/utils/common.utils.ts index ba05659736..327119bb00 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/utils/common.utils.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/tests/utils/common.utils.ts @@ -3,14 +3,14 @@ import { Store } from '@ngxs/store'; import { AbstractType, InjectFlags, InjectionToken, Injector, Type } from '@angular/core'; export const mockActions = new Subject(); -export const mockStore = ({ +export const mockStore = { selectSnapshot() { return true; }, select(): Observable { return of(null); }, -} as unknown) as Store; +} as unknown as Store; export class DummyInjector extends Injector { constructor(public payload: { [key: string]: any }) { diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/common-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/common-utils.ts index 3b0446240b..41ce2e1141 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/common-utils.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/common-utils.ts @@ -1,6 +1,6 @@ export function noop() { // tslint:disable-next-line: only-arrow-functions - const fn = function() {}; + const fn = function () {}; return fn; } diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/date-extensions.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/date-extensions.ts index 8f0d17504d..6c6c1453ad 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/date-extensions.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/date-extensions.ts @@ -6,7 +6,7 @@ declare global { } } -Date.prototype.toLocalISOString = function(this: Date): string { +Date.prototype.toLocalISOString = function (this: Date): string { const timezoneOffset = this.getTimezoneOffset(); return new Date(this.getTime() - timezoneOffset * 60000).toISOString(); diff --git a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts index f602bf06ef..6f9154f98d 100644 --- a/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts +++ b/npm/ng-packs/nx/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts @@ -34,7 +34,7 @@ export function fromLazyLoad( function createErrorHandler(observer: Observer, element: HTMLElement) { /* tslint:disable-next-line:only-arrow-functions */ - return function(event: Event | string) { + return function (event: Event | string) { clearCallbacks(element); element.parentNode.removeChild(element); observer.error(event); diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts index 4bda77b4fb..65cf5d91d6 100644 --- a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts @@ -29,7 +29,8 @@ enum ValueTypes { export class FeatureManagementComponent implements FeatureManagement.FeatureManagementComponentInputs, - FeatureManagement.FeatureManagementComponentOutputs { + FeatureManagement.FeatureManagementComponentOutputs +{ @Input() providerKey: string; diff --git a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/features.service.ts b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/features.service.ts index c1ff025b1b..cdc12ad36d 100644 --- a/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/features.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/feature-management/src/lib/proxy/feature-management/features.service.ts @@ -9,21 +9,25 @@ export class FeaturesService { apiName = 'AbpFeatureManagement'; get = (providerName: string, providerKey: string) => - this.restService.request({ - method: 'GET', - url: '/api/feature-management/features', - params: { providerName, providerKey }, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: '/api/feature-management/features', + params: { providerName, providerKey }, + }, + { apiName: this.apiName }, + ); update = (providerName: string, providerKey: string, input: UpdateFeaturesDto) => - this.restService.request({ - method: 'PUT', - url: '/api/feature-management/features', - params: { providerName, providerKey }, - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'PUT', + url: '/api/feature-management/features', + params: { providerName, providerKey }, + body: input, + }, + { apiName: this.apiName }, + ); constructor(private restService: RestService) {} } diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-role.service.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-role.service.ts index 5fd029c43d..edbc094037 100644 --- a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-role.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-role.service.ts @@ -10,49 +10,65 @@ export class IdentityRoleService { apiName = 'AbpIdentity'; create = (input: IdentityRoleCreateDto) => - this.restService.request({ - method: 'POST', - url: '/api/identity/roles', - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'POST', + url: '/api/identity/roles', + body: input, + }, + { apiName: this.apiName }, + ); delete = (id: string) => - this.restService.request({ - method: 'DELETE', - url: `/api/identity/roles/${id}`, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'DELETE', + url: `/api/identity/roles/${id}`, + }, + { apiName: this.apiName }, + ); get = (id: string) => - this.restService.request({ - method: 'GET', - url: `/api/identity/roles/${id}`, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: `/api/identity/roles/${id}`, + }, + { apiName: this.apiName }, + ); getAllList = () => - this.restService.request>({ - method: 'GET', - url: '/api/identity/roles/all', - }, - { apiName: this.apiName }); + this.restService.request>( + { + method: 'GET', + url: '/api/identity/roles/all', + }, + { apiName: this.apiName }, + ); getList = (input: PagedAndSortedResultRequestDto) => - this.restService.request>({ - method: 'GET', - url: '/api/identity/roles', - params: { sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount }, - }, - { apiName: this.apiName }); + this.restService.request>( + { + method: 'GET', + url: '/api/identity/roles', + params: { + sorting: input.sorting, + skipCount: input.skipCount, + maxResultCount: input.maxResultCount, + }, + }, + { apiName: this.apiName }, + ); update = (id: string, input: IdentityRoleUpdateDto) => - this.restService.request({ - method: 'PUT', - url: `/api/identity/roles/${id}`, - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'PUT', + url: `/api/identity/roles/${id}`, + body: input, + }, + { apiName: this.apiName }, + ); constructor(private restService: RestService) {} } diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user-lookup.service.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user-lookup.service.ts index af4583aa28..50eeef604e 100644 --- a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user-lookup.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user-lookup.service.ts @@ -11,34 +11,47 @@ export class IdentityUserLookupService { apiName = 'AbpIdentity'; findById = (id: string) => - this.restService.request({ - method: 'GET', - url: `/api/identity/users/lookup/${id}`, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: `/api/identity/users/lookup/${id}`, + }, + { apiName: this.apiName }, + ); findByUserName = (userName: string) => - this.restService.request({ - method: 'GET', - url: `/api/identity/users/lookup/by-username/${userName}`, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: `/api/identity/users/lookup/by-username/${userName}`, + }, + { apiName: this.apiName }, + ); getCount = (input: UserLookupCountInputDto) => - this.restService.request({ - method: 'GET', - url: '/api/identity/users/lookup/count', - params: { filter: input.filter }, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: '/api/identity/users/lookup/count', + params: { filter: input.filter }, + }, + { apiName: this.apiName }, + ); search = (input: UserLookupSearchInputDto) => - this.restService.request>({ - method: 'GET', - url: '/api/identity/users/lookup/search', - params: { filter: input.filter, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount }, - }, - { apiName: this.apiName }); + this.restService.request>( + { + method: 'GET', + url: '/api/identity/users/lookup/search', + params: { + filter: input.filter, + sorting: input.sorting, + skipCount: input.skipCount, + maxResultCount: input.maxResultCount, + }, + }, + { apiName: this.apiName }, + ); constructor(private restService: RestService) {} } diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user.service.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user.service.ts index fe69946ff1..7e3b22a96a 100644 --- a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/identity-user.service.ts @@ -4,7 +4,8 @@ import type { IdentityUserCreateDto, IdentityUserDto, IdentityUserUpdateDto, - IdentityUserUpdateRolesDto } from './models'; + IdentityUserUpdateRolesDto, +} from './models'; import { RestService } from '@abp/ng.core'; import type { ListResultDto, PagedResultDto } from '@abp/ng.core'; import { Injectable } from '@angular/core'; @@ -16,78 +17,103 @@ export class IdentityUserService { apiName = 'AbpIdentity'; create = (input: IdentityUserCreateDto) => - this.restService.request({ - method: 'POST', - url: '/api/identity/users', - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'POST', + url: '/api/identity/users', + body: input, + }, + { apiName: this.apiName }, + ); delete = (id: string) => - this.restService.request({ - method: 'DELETE', - url: `/api/identity/users/${id}`, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'DELETE', + url: `/api/identity/users/${id}`, + }, + { apiName: this.apiName }, + ); findByEmail = (email: string) => - this.restService.request({ - method: 'GET', - url: `/api/identity/users/by-email/${email}`, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: `/api/identity/users/by-email/${email}`, + }, + { apiName: this.apiName }, + ); findByUsername = (username: string) => - this.restService.request({ - method: 'GET', - url: '/api/identity/users/by-username/{userName}', - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: '/api/identity/users/by-username/{userName}', + }, + { apiName: this.apiName }, + ); get = (id: string) => - this.restService.request({ - method: 'GET', - url: `/api/identity/users/${id}`, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: `/api/identity/users/${id}`, + }, + { apiName: this.apiName }, + ); getAssignableRoles = () => - this.restService.request>({ - method: 'GET', - url: '/api/identity/users/assignable-roles', - }, - { apiName: this.apiName }); + this.restService.request>( + { + method: 'GET', + url: '/api/identity/users/assignable-roles', + }, + { apiName: this.apiName }, + ); getList = (input: GetIdentityUsersInput) => - this.restService.request>({ - method: 'GET', - url: '/api/identity/users', - params: { filter: input.filter, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount }, - }, - { apiName: this.apiName }); + this.restService.request>( + { + method: 'GET', + url: '/api/identity/users', + params: { + filter: input.filter, + sorting: input.sorting, + skipCount: input.skipCount, + maxResultCount: input.maxResultCount, + }, + }, + { apiName: this.apiName }, + ); getRoles = (id: string) => - this.restService.request>({ - method: 'GET', - url: `/api/identity/users/${id}/roles`, - }, - { apiName: this.apiName }); + this.restService.request>( + { + method: 'GET', + url: `/api/identity/users/${id}/roles`, + }, + { apiName: this.apiName }, + ); update = (id: string, input: IdentityUserUpdateDto) => - this.restService.request({ - method: 'PUT', - url: `/api/identity/users/${id}`, - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'PUT', + url: `/api/identity/users/${id}`, + body: input, + }, + { apiName: this.apiName }, + ); updateRoles = (id: string, input: IdentityUserUpdateRolesDto) => - this.restService.request({ - method: 'PUT', - url: `/api/identity/users/${id}/roles`, - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'PUT', + url: `/api/identity/users/${id}/roles`, + body: input, + }, + { apiName: this.apiName }, + ); constructor(private restService: RestService) {} } diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/profile.service.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/profile.service.ts index 4b8460d03b..d40f7d9aca 100644 --- a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/profile.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/identity/profile.service.ts @@ -9,27 +9,33 @@ export class ProfileService { apiName = 'AbpIdentity'; changePassword = (input: ChangePasswordInput) => - this.restService.request({ - method: 'POST', - url: '/api/identity/my-profile/change-password', - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'POST', + url: '/api/identity/my-profile/change-password', + body: input, + }, + { apiName: this.apiName }, + ); get = () => - this.restService.request({ - method: 'GET', - url: '/api/identity/my-profile', - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: '/api/identity/my-profile', + }, + { apiName: this.apiName }, + ); update = (input: UpdateProfileDto) => - this.restService.request({ - method: 'PUT', - url: '/api/identity/my-profile', - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'PUT', + url: '/api/identity/my-profile', + body: input, + }, + { apiName: this.apiName }, + ); constructor(private restService: RestService) {} } diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/users/models.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/users/models.ts index 5201620e29..5273ed9522 100644 --- a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/users/models.ts +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/proxy/users/models.ts @@ -1,4 +1,3 @@ - export interface UserData { id: string; tenantId?: string; diff --git a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tokens/extensions.token.ts b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tokens/extensions.token.ts index 14e506da0a..771f896aea 100644 --- a/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tokens/extensions.token.ts +++ b/npm/ng-packs/nx/ng-packs/packages/identity/src/lib/tokens/extensions.token.ts @@ -60,9 +60,8 @@ export const IDENTITY_ENTITY_PROP_CONTRIBUTORS = new InjectionToken( - 'IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS', -); +export const IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS = + new InjectionToken('IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS'); export const IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS = new InjectionToken( 'IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS', diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts index 67a48cb507..c1f1ccda95 100644 --- a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts @@ -39,7 +39,8 @@ type PermissionWithStyle = PermissionGrantInfoDto & { export class PermissionManagementComponent implements PermissionManagement.PermissionManagementComponentInputs, - PermissionManagement.PermissionManagementComponentOutputs { + PermissionManagement.PermissionManagementComponentOutputs +{ @Input() readonly providerName: string; @@ -105,11 +106,11 @@ export class PermissionManagementComponent map(permissions => permissions.map( permission => - (({ + ({ ...permission, style: { [margin]: findMargin(permissions, permission) }, isGranted: this.permissions.find(per => per.name === permission.name).isGranted, - } as any) as PermissionWithStyle), + } as any as PermissionWithStyle), ), ), ); diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/models.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/models.ts index c366b2c315..36b6a89bd9 100644 --- a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/models.ts +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/models.ts @@ -1,4 +1,3 @@ - export interface GetPermissionListResultDto { entityDisplayName: string; groups: PermissionGroupDto[]; diff --git a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/permissions.service.ts b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/permissions.service.ts index 45ac0b40e1..381fd952f5 100644 --- a/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/permissions.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/permission-management/src/lib/proxy/permissions.service.ts @@ -9,21 +9,25 @@ export class PermissionsService { apiName = 'AbpPermissionManagement'; get = (providerName: string, providerKey: string) => - this.restService.request({ - method: 'GET', - url: '/api/permission-management/permissions', - params: { providerName, providerKey }, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: '/api/permission-management/permissions', + params: { providerName, providerKey }, + }, + { apiName: this.apiName }, + ); update = (providerName: string, providerKey: string, input: UpdatePermissionsDto) => - this.restService.request({ - method: 'PUT', - url: '/api/permission-management/permissions', - params: { providerName, providerKey }, - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'PUT', + url: '/api/permission-management/permissions', + params: { providerName, providerKey }, + body: input, + }, + { apiName: this.apiName }, + ); constructor(private restService: RestService) {} } diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-add/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-add/index.ts index a8387045f9..4a6b4cf92e 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-add/index.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-add/index.ts @@ -14,7 +14,7 @@ import { resolveProject, } from '../../utils'; -export default function(schema: GenerateProxySchema) { +export default function (schema: GenerateProxySchema) { const params = removeDefaultPlaceholders(schema); const moduleName = params.module || 'app'; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-refresh/index.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-refresh/index.ts index 1a0a5ea3be..9428b9ae4d 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-refresh/index.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/commands/proxy-refresh/index.ts @@ -13,7 +13,7 @@ import { resolveProject, } from '../../utils'; -export default function(schema: GenerateProxySchema) { +export default function (schema: GenerateProxySchema) { const params = removeDefaultPlaceholders(schema); return async (host: Tree, _context: SchematicContext) => { diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/change.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/change.ts index 12556352ab..543e41427b 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/change.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/change.ts @@ -10,7 +10,6 @@ export interface Host { read(path: string): Promise; } - export interface Change { apply(host: Host): Promise; @@ -26,7 +25,6 @@ export interface Change { readonly description: string; } - /** * An operation that does nothing. */ @@ -34,15 +32,15 @@ export class NoopChange implements Change { description = 'No operation.'; order = Infinity; path = null; - apply() { return Promise.resolve(); } + apply() { + return Promise.resolve(); + } } - /** * Will add text to the source code. */ export class InsertChange implements Change { - order: number; description: string; @@ -71,7 +69,6 @@ export class InsertChange implements Change { * Will remove text from the source code. */ export class RemoveChange implements Change { - order: number; description: string; @@ -101,8 +98,12 @@ export class ReplaceChange implements Change { order: number; description: string; - constructor(public path: string, private pos: number, private oldText: string, - private newText: string) { + constructor( + public path: string, + private pos: number, + private oldText: string, + private newText: string, + ) { if (pos < 0) { throw new Error('Negative positions are invalid'); } diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/dependencies.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/dependencies.ts index 76a60f53e6..9298dba3b8 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/dependencies.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/dependencies.ts @@ -30,7 +30,11 @@ const ALL_DEPENDENCY_TYPE = [ NodeDependencyType.Peer, ]; -export function addPackageJsonDependency(tree: Tree, dependency: NodeDependency, pkgJsonPath = PKG_JSON_PATH): void { +export function addPackageJsonDependency( + tree: Tree, + dependency: NodeDependency, + pkgJsonPath = PKG_JSON_PATH, +): void { const json = new JSONFile(tree, pkgJsonPath); if (json.error) { throw json.error; @@ -43,7 +47,11 @@ export function addPackageJsonDependency(tree: Tree, dependency: NodeDependency, } } -export function removePackageJsonDependency(tree: Tree, name: string, pkgJsonPath = PKG_JSON_PATH): void { +export function removePackageJsonDependency( + tree: Tree, + name: string, + pkgJsonPath = PKG_JSON_PATH, +): void { const json = new JSONFile(tree, pkgJsonPath); if (json.error) { throw json.error; @@ -54,7 +62,11 @@ export function removePackageJsonDependency(tree: Tree, name: string, pkgJsonPat } } -export function getPackageJsonDependency(tree: Tree, name: string, pkgJsonPath = PKG_JSON_PATH): NodeDependency | null { +export function getPackageJsonDependency( + tree: Tree, + name: string, + pkgJsonPath = PKG_JSON_PATH, +): NodeDependency | null { const json = new JSONFile(tree, pkgJsonPath); if (json.error) { throw json.error; diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-file.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-file.ts index 1832f38c5c..25df010315 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-file.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-file.ts @@ -8,7 +8,14 @@ import { JsonValue } from '@angular-devkit/core'; import { Tree } from '@angular-devkit/schematics'; -import { Node, applyEdits, findNodeAtLocation, getNodeValue, modify, parseTree } from 'jsonc-parser'; +import { + Node, + applyEdits, + findNodeAtLocation, + getNodeValue, + modify, + parseTree, +} from 'jsonc-parser'; export type JSONPath = (string | number)[]; @@ -17,10 +24,7 @@ export class JSONFile { private content: string; error: undefined | Error; - constructor( - private readonly host: Tree, - private readonly path: string, - ) { + constructor(private readonly host: Tree, private readonly path: string) { const buffer = this.host.read(this.path); if (buffer) { this.content = buffer.toString(); @@ -50,24 +54,24 @@ export class JSONFile { return node === undefined ? undefined : getNodeValue(node); } - modify(jsonPath: JSONPath, value: JsonValue | undefined, getInsertionIndex?: (properties: string[]) => number): void { + modify( + jsonPath: JSONPath, + value: JsonValue | undefined, + getInsertionIndex?: (properties: string[]) => number, + ): void { if (!getInsertionIndex) { const property = jsonPath.slice(-1)[0]; - getInsertionIndex = properties => [...properties, property].sort().findIndex(p => p === property); + getInsertionIndex = properties => + [...properties, property].sort().findIndex(p => p === property); } - const edits = modify( - this.content, - jsonPath, - value, - { - getInsertionIndex, - formattingOptions: { - insertSpaces: true, - tabSize: 2, - }, + const edits = modify(this.content, jsonPath, value, { + getInsertionIndex, + formattingOptions: { + insertSpaces: true, + tabSize: 2, }, - ); + }); this.content = applyEdits(this.content, edits); this.host.overwrite(this.path, this.content); diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-utils.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-utils.ts index cf1754a9a4..8425032021 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-utils.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/json-utils.ts @@ -34,10 +34,10 @@ export function appendPropertyInAstObject( const content = _stringifyContent(value, indentStr); recorder.insertRight( index, - (node.properties.length === 0 && indent ? '\n' : '') - + ' '.repeat(indent) - + `"${propertyName}":${indent ? ' ' : ''}${content}` - + indentStr.slice(0, -indent), + (node.properties.length === 0 && indent ? '\n' : '') + + ' '.repeat(indent) + + `"${propertyName}":${indent ? ' ' : ''}${content}` + + indentStr.slice(0, -indent), ); } @@ -48,7 +48,6 @@ export function insertPropertyInAstObjectInOrder( value: JsonValue, indent: number, ) { - if (node.properties.length === 0) { appendPropertyInAstObject(recorder, node, propertyName, value, indent); @@ -81,15 +80,12 @@ export function insertPropertyInAstObjectInOrder( } const indentStr = _buildIndent(indent); - const insertIndex = insertAfterProp === null - ? node.start.offset + 1 - : insertAfterProp.end.offset + 1; + const insertIndex = + insertAfterProp === null ? node.start.offset + 1 : insertAfterProp.end.offset + 1; const content = _stringifyContent(value, indentStr); recorder.insertRight( insertIndex, - indentStr - + `"${propertyName}":${indent ? ' ' : ''}${content}` - + ',', + indentStr + `"${propertyName}":${indent ? ' ' : ''}${content}` + ',', ); } @@ -147,7 +143,6 @@ export function removePropertyInAstObject( } } - export function appendValueInAstArray( recorder: UpdateRecorder, node: JsonAstArray, @@ -167,10 +162,7 @@ export function appendValueInAstArray( if (isClosingOnSameLine && indent) { // Reformat the entire array recorder.remove(node.start.offset, node.end.offset - node.start.offset); - newNodes = [ - ...node.elements.map(({ value }) => value), - value, - ]; + newNodes = [...node.elements.map(({ value }) => value), value]; index = node.start.offset; // In case we are generating the entire node we need to reduce the spacing as // otherwise we'd end up having incorrect double spacing @@ -184,13 +176,12 @@ export function appendValueInAstArray( recorder.insertRight( index, - (newNodes ? '' : indentStr) - + _stringifyContent(newNodes || value, indentStr) - + (node.elements.length === 0 && indent ? indentStr.substr(0, -indent) + '\n' : ''), + (newNodes ? '' : indentStr) + + _stringifyContent(newNodes || value, indentStr) + + (node.elements.length === 0 && indent ? indentStr.substr(0, -indent) + '\n' : ''), ); } - export function findPropertyInAstObject( node: JsonAstObject, propertyName: string, diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/lint-fix.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/lint-fix.ts index f794bf681f..d0998db7ab 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/lint-fix.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/lint-fix.ts @@ -29,12 +29,13 @@ export function applyLintFix(path = '/'): Rule { if (dir === null) { throw new SchematicsException( - 'Asked to run lint fixes, but could not find a tslint.json or tslint.yaml config file.'); + 'Asked to run lint fixes, but could not find a tslint.json or tslint.yaml config file.', + ); } // Only include files that have been touched. const files = tree.actions.reduce((acc: Set, action) => { - const path = action.path.substr(1); // Remove the starting '/'. + const path = action.path.substr(1); // Remove the starting '/'. if (path.endsWith('.ts') && dir && action.path.startsWith(dir.path)) { acc.add(path); } @@ -42,10 +43,12 @@ export function applyLintFix(path = '/'): Rule { return acc; }, new Set()); - context.addTask(new TslintFixTask({ - ignoreErrors: true, - tsConfigPath: 'tsconfig.json', - files: [...files], - })); + context.addTask( + new TslintFixTask({ + ignoreErrors: true, + tsConfigPath: 'tsconfig.json', + files: [...files], + }), + ); }; } diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/parse-name.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/parse-name.ts index cac57b0868..65a45c21ee 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/parse-name.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/parse-name.ts @@ -1,4 +1,3 @@ - /** * @license * Copyright Google Inc. All Rights Reserved. diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/tsconfig.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/tsconfig.ts index 4d6679a1d8..290312f3f2 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/tsconfig.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/tsconfig.ts @@ -24,7 +24,9 @@ export function addTsConfigProjectReferences(paths: string[]): Rule { const source = host.read(SOLUTION_TSCONFIG_PATH); if (!source) { // Solution tsconfig doesn't exist. - logger.warn(`Cannot add reference '${path}' in '${SOLUTION_TSCONFIG_PATH}'. File doesn't exists.`); + logger.warn( + `Cannot add reference '${path}' in '${SOLUTION_TSCONFIG_PATH}'. File doesn't exists.`, + ); return; } @@ -45,14 +47,16 @@ export function addTsConfigProjectReferences(paths: string[]): Rule { filesAst.elements.length !== 0 || referencesAst?.kind !== 'array' ) { - logger.warn(`Cannot add reference '${path}' in '${SOLUTION_TSCONFIG_PATH}'. It appears to be an invalid solution style tsconfig.`); + logger.warn( + `Cannot add reference '${path}' in '${SOLUTION_TSCONFIG_PATH}'. It appears to be an invalid solution style tsconfig.`, + ); return; } // Append new paths const recorder = host.beginUpdate(SOLUTION_TSCONFIG_PATH); - appendValueInAstArray(recorder, referencesAst, { 'path': `./${path}` }, 4); + appendValueInAstArray(recorder, referencesAst, { path: `./${path}` }, 4); host.commitUpdate(recorder); } }; @@ -66,5 +70,7 @@ export function verifyBaseTsConfigExists(host: Tree): void { return; } - throw new SchematicsException(`Cannot find base TypeScript configuration file 'tsconfig.base.json'.`); + throw new SchematicsException( + `Cannot find base TypeScript configuration file 'tsconfig.base.json'.`, + ); } diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/validation.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/validation.ts index 923b819df9..4fa3182a10 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/validation.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/validation.ts @@ -26,7 +26,6 @@ export function validateHtmlSelector(selector: string): void { } } - export function validateProjectName(projectName: string) { const errorIndex = getRegExpFailPosition(projectName); const unsupportedProjectNames: string[] = []; @@ -45,7 +44,8 @@ export function validateProjectName(projectName: string) { throw new SchematicsException(msg); } else if (unsupportedProjectNames.indexOf(projectName) !== -1) { throw new SchematicsException( - `Project name ${JSON.stringify(projectName)} is not a supported name.`); + `Project name ${JSON.stringify(projectName)} is not a supported name.`, + ); } else if (!packageNameRegex.test(projectName)) { throw new SchematicsException(`Project name ${JSON.stringify(projectName)} is invalid.`); } @@ -73,5 +73,5 @@ function getRegExpFailPosition(str: string): number | null { const compare = matched.join('-'); - return (str !== compare) ? compare.length : null; + return str !== compare ? compare.length : null; } diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace.ts index 79dbfbb6ad..f2c3403ed9 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/angular/workspace.ts @@ -35,18 +35,16 @@ function createHost(tree: Tree): workspaces.WorkspaceHost { export function updateWorkspace( updater: (workspace: workspaces.WorkspaceDefinition) => void | PromiseLike, ): Rule; +export function updateWorkspace(workspace: workspaces.WorkspaceDefinition): Rule; export function updateWorkspace( - workspace: workspaces.WorkspaceDefinition, -): Rule; -export function updateWorkspace( - updaterOrWorkspace: workspaces.WorkspaceDefinition + updaterOrWorkspace: + | workspaces.WorkspaceDefinition | ((workspace: workspaces.WorkspaceDefinition) => void | PromiseLike), ): Rule { return async (tree: Tree) => { const host = createHost(tree); if (typeof updaterOrWorkspace === 'function') { - const { workspace } = await workspaces.readWorkspace('/', host); const result = updaterOrWorkspace(workspace); @@ -75,7 +73,8 @@ export async function getWorkspace(tree: Tree, path = '/') { */ export function buildDefaultPath(project: workspaces.ProjectDefinition): string { const root = project.sourceRoot ? `/${project.sourceRoot}/` : `/${project.root}/src/`; - const projectDirName = project.extensions['projectType'] === ProjectType.Application ? 'app' : 'lib'; + const projectDirName = + project.extensions['projectType'] === ProjectType.Application ? 'app' : 'lib'; return `${root}${projectDirName}`; } diff --git a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/namespace.ts b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/namespace.ts index 779c7b9770..b646e7ca2d 100644 --- a/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/namespace.ts +++ b/npm/ng-packs/nx/ng-packs/packages/schematics/src/utils/namespace.ts @@ -2,10 +2,7 @@ import { createTypeParser, removeGenerics } from './type'; export function parseNamespace(solution: string, type: string) { const parseType = createTypeParser(removeGenerics); - let namespace = parseType(type)[0] - .split('.') - .slice(0, -1) - .join('.'); + let namespace = parseType(type)[0].split('.').slice(0, -1).join('.'); if (solution === namespace) return ''; diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/email-settings.service.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/email-settings.service.ts index a9967ef6a4..a681a32c8d 100644 --- a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/email-settings.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/email-settings.service.ts @@ -9,19 +9,23 @@ export class EmailSettingsService { apiName = 'SettingManagement'; get = () => - this.restService.request({ - method: 'GET', - url: '/api/setting-management/emailing', - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: '/api/setting-management/emailing', + }, + { apiName: this.apiName }, + ); update = (input: UpdateEmailSettingsDto) => - this.restService.request({ - method: 'POST', - url: '/api/setting-management/emailing', - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'POST', + url: '/api/setting-management/emailing', + body: input, + }, + { apiName: this.apiName }, + ); constructor(private restService: RestService) {} } diff --git a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/models.ts b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/models.ts index 99e2268d0e..9a87f0d345 100644 --- a/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/models.ts +++ b/npm/ng-packs/nx/ng-packs/packages/setting-management/config/src/proxy/models.ts @@ -1,4 +1,3 @@ - export interface EmailSettingsDto { smtpHost?: string; smtpPort: number; diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/tenant.service.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/tenant.service.ts index 61d1667be4..1559bd3eb9 100644 --- a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/tenant.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/proxy/tenant.service.ts @@ -10,65 +10,86 @@ export class TenantService { apiName = 'AbpTenantManagement'; create = (input: TenantCreateDto) => - this.restService.request({ - method: 'POST', - url: '/api/multi-tenancy/tenants', - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'POST', + url: '/api/multi-tenancy/tenants', + body: input, + }, + { apiName: this.apiName }, + ); delete = (id: string) => - this.restService.request({ - method: 'DELETE', - url: `/api/multi-tenancy/tenants/${id}`, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'DELETE', + url: `/api/multi-tenancy/tenants/${id}`, + }, + { apiName: this.apiName }, + ); deleteDefaultConnectionString = (id: string) => - this.restService.request({ - method: 'DELETE', - url: `/api/multi-tenancy/tenants/${id}/default-connection-string`, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'DELETE', + url: `/api/multi-tenancy/tenants/${id}/default-connection-string`, + }, + { apiName: this.apiName }, + ); get = (id: string) => - this.restService.request({ - method: 'GET', - url: `/api/multi-tenancy/tenants/${id}`, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + url: `/api/multi-tenancy/tenants/${id}`, + }, + { apiName: this.apiName }, + ); getDefaultConnectionString = (id: string) => - this.restService.request({ - method: 'GET', - responseType: 'text', - url: `/api/multi-tenancy/tenants/${id}/default-connection-string`, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'GET', + responseType: 'text', + url: `/api/multi-tenancy/tenants/${id}/default-connection-string`, + }, + { apiName: this.apiName }, + ); getList = (input: GetTenantsInput) => - this.restService.request>({ - method: 'GET', - url: '/api/multi-tenancy/tenants', - params: { filter: input.filter, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount }, - }, - { apiName: this.apiName }); + this.restService.request>( + { + method: 'GET', + url: '/api/multi-tenancy/tenants', + params: { + filter: input.filter, + sorting: input.sorting, + skipCount: input.skipCount, + maxResultCount: input.maxResultCount, + }, + }, + { apiName: this.apiName }, + ); update = (id: string, input: TenantUpdateDto) => - this.restService.request({ - method: 'PUT', - url: `/api/multi-tenancy/tenants/${id}`, - body: input, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'PUT', + url: `/api/multi-tenancy/tenants/${id}`, + body: input, + }, + { apiName: this.apiName }, + ); updateDefaultConnectionString = (id: string, defaultConnectionString: string) => - this.restService.request({ - method: 'PUT', - url: `/api/multi-tenancy/tenants/${id}/default-connection-string`, - params: { defaultConnectionString }, - }, - { apiName: this.apiName }); + this.restService.request( + { + method: 'PUT', + url: `/api/multi-tenancy/tenants/${id}/default-connection-string`, + params: { defaultConnectionString }, + }, + { apiName: this.apiName }, + ); constructor(private restService: RestService) {} } diff --git a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tokens/extensions.token.ts b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tokens/extensions.token.ts index fb79b126d9..fec18d94fc 100644 --- a/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tokens/extensions.token.ts +++ b/npm/ng-packs/nx/ng-packs/packages/tenant-management/src/lib/tokens/extensions.token.ts @@ -36,25 +36,20 @@ export const DEFAULT_TENANT_MANAGEMENT_EDIT_FORM_PROPS = { [eTenantManagementComponents.Tenants]: DEFAULT_TENANTS_EDIT_FORM_PROPS, }; -export const TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS = new InjectionToken( - 'TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS', -); +export const TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS = + new InjectionToken('TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS'); -export const TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS = new InjectionToken( - 'TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS', -); +export const TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS = + new InjectionToken('TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS'); -export const TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS = new InjectionToken( - 'TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS', -); +export const TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS = + new InjectionToken('TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS'); -export const TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS = new InjectionToken( - 'TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS', -); +export const TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS = + new InjectionToken('TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS'); -export const TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS = new InjectionToken( - 'TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS', -); +export const TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS = + new InjectionToken('TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS'); // Fix for TS4023 -> https://github.com/microsoft/TypeScript/issues/9944#issuecomment-254693497 type EntityActionContributors = Partial<{ diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts index 11da774d1b..10b39627e3 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date-time.adapter.ts @@ -10,7 +10,7 @@ export class DateTimeAdapter { const date = new Date(value); - if (isNaN((date as unknown) as number)) return null; + if (isNaN(date as unknown as number)) return null; this.value = { year: date.getFullYear(), diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/time.adapter.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/time.adapter.ts index 33c25ddd8c..704d2b6167 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/time.adapter.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/adapters/time.adapter.ts @@ -11,7 +11,7 @@ export class TimeAdapter extends NgbTimeAdapter { ? new Date(0, 0, 1, ...value.split(':').map(Number)) : new Date(value); - if (isNaN((date as unknown) as number)) return null; + if (isNaN(date as unknown as number)) return null; return { hour: date.getHours(), diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts index 14d680059a..21399c56f5 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts @@ -24,7 +24,7 @@ export abstract class AbstractActionsComponent> extend const extensions = injector.get(ExtensionsService); const name = injector.get(EXTENSIONS_IDENTIFIER); const type = injector.get(EXTENSIONS_ACTION_TYPE); - this.actionList = (extensions[type].get(name).actions as unknown) as L; + this.actionList = extensions[type].get(name).actions as unknown as L; } } diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/directives/prop-data.directive.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/directives/prop-data.directive.ts index 8de502f14b..8f57dfda88 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/directives/prop-data.directive.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/directives/prop-data.directive.ts @@ -13,8 +13,10 @@ import { PropData, PropList } from '../models/props'; exportAs: 'abpPropData', selector: '[abpPropData]', }) -export class PropDataDirective> extends PropData> - implements OnChanges, OnDestroy { +export class PropDataDirective> + extends PropData> + implements OnChanges, OnDestroy +{ /* tslint:disable:no-input-rename */ @Input('abpPropDataFromList') readonly propList: L; diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/state.util.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/state.util.ts index 4920687077..96d83ba8f7 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/state.util.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/lib/utils/state.util.ts @@ -192,7 +192,7 @@ function createPropertiesToContributorsMapper( } function getTypeFromProperty(property: ObjectExtensions.ExtensionPropertyDto): ePropType { - return (property.typeSimple.replace(/\?$/, '') as string) as ePropType; + return property.typeSimple.replace(/\?$/, '') as string as ePropType; } function isUndefined(obj: any): obj is undefined { diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/actions.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/actions.util.spec.ts index fd3b27c564..5a79556071 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/actions.util.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/actions.util.spec.ts @@ -16,8 +16,8 @@ describe('Entity Action Utils', () => { it('should merge default actions with action contributors', () => { const defaults: EntityActionDefaults = { - x: [(1 as any) as EntityAction, (2 as any) as EntityAction, (3 as any) as EntityAction], - y: [(1 as any) as EntityAction, (2 as any) as EntityAction, (3 as any) as EntityAction], + x: [1 as any as EntityAction, 2 as any as EntityAction, 3 as any as EntityAction], + y: [1 as any as EntityAction, 2 as any as EntityAction, 3 as any as EntityAction], }; const contributors1: EntityActionContributorCallbacks = { diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts index 3cb377d300..e89efb5467 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/enum.util.spec.ts @@ -2,11 +2,7 @@ import { ConfigStateService, LocalizationService } from '@abp/ng.core'; import { BehaviorSubject } from 'rxjs'; import { take } from 'rxjs/operators'; import { PropData } from '../lib/models/props'; -import { - createEnum, - createEnumOptions, - createEnumValueResolver, -} from '../lib/utils/enum.util'; +import { createEnum, createEnumOptions, createEnumValueResolver } from '../lib/utils/enum.util'; const mockSessionState = { languageChange$: new BehaviorSubject('tr'), @@ -53,12 +49,9 @@ describe('Enum Utils', () => { ${1} | ${'foo'} ${2} | ${'bar'} ${3} | ${'baz'} - `( - 'should create an enum that returns $expected when $key is accessed', - ({ key, expected }) => { - expect(enumFromFields[key]).toBe(expected); - } - ); + `('should create an enum that returns $expected when $key is accessed', ({ key, expected }) => { + expect(enumFromFields[key]).toBe(expected); + }); }); describe('#createEnumValueResolver', () => { @@ -78,19 +71,17 @@ describe('Enum Utils', () => { localizationResource: null, transformed: createEnum(fields), }, - 'EnumProp' + 'EnumProp', ); const propData = new MockPropData({ extraProperties: { EnumProp: value }, }); propData.getInjected = () => service as any; - const resolved = await valueResolver(propData) - .pipe(take(1)) - .toPromise(); + const resolved = await valueResolver(propData).pipe(take(1)).toPromise(); expect(resolved).toBe(expected); - } + }, ); }); @@ -121,11 +112,5 @@ function createMockLocalizationService() { const configState = new ConfigStateService(null); configState.setState({ localization: mockL10n } as any); - return new LocalizationService( - mockSessionState, - null, - null, - configState, - null - ); + return new LocalizationService(mockSessionState, null, null, configState, null); } diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/props.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/props.util.spec.ts index 0c18d71eb5..fc2b9a3282 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/props.util.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/props.util.spec.ts @@ -35,8 +35,8 @@ describe('Entity Prop Utils', () => { it('should merge default props with prop contributors', () => { const defaults: EntityPropDefaults = { - x: [(1 as any) as EntityProp, (2 as any) as EntityProp, (3 as any) as EntityProp], - y: [(1 as any) as EntityProp, (2 as any) as EntityProp, (3 as any) as EntityProp], + x: [1 as any as EntityProp, 2 as any as EntityProp, 3 as any as EntityProp], + y: [1 as any as EntityProp, 2 as any as EntityProp, 3 as any as EntityProp], }; const contributors1: EntityPropContributorCallbacks = { diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts index 5e8174adff..000b4b4255 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/extensions/src/tests/state.util.spec.ts @@ -18,27 +18,21 @@ describe('State Utils', () => { it('should return observable entities of an existing module', async () => { const entities = await getObjectExtensionEntitiesFromStore( configState, - 'Identity' + 'Identity', ).toPromise(); expect('Role' in entities).toBe(true); }); it('should return observable empty object if module does not exist', async () => { - const entities = await getObjectExtensionEntitiesFromStore( - configState, - 'Saas' - ).toPromise(); + const entities = await getObjectExtensionEntitiesFromStore(configState, 'Saas').toPromise(); expect(entities).toEqual({}); }); - it('should not emit when object extensions do not exist', (done) => { + it('should not emit when object extensions do not exist', done => { const emptyConfigState = new ConfigStateService(null); const emit = jest.fn(); - getObjectExtensionEntitiesFromStore( - emptyConfigState, - 'Identity' - ).subscribe(emit); + getObjectExtensionEntitiesFromStore(emptyConfigState, 'Identity').subscribe(emit); setTimeout(() => { expect(emit).not.toHaveBeenCalled(); @@ -54,7 +48,7 @@ describe('State Utils', () => { .toPromise(); const propList = new EntityPropList(); - contributors.prop.Role.forEach((callback) => callback(propList)); + contributors.prop.Role.forEach(callback => callback(propList)); expect(propList.length).toBe(4); expect(propList.head.value.name).toBe('Title'); @@ -63,9 +57,7 @@ describe('State Utils', () => { expect(propList.head.next.next.next.value.name).toBe('Foo_Text'); const createFormList = new FormPropList(); - contributors.createForm.Role.forEach((callback) => - callback(createFormList) - ); + contributors.createForm.Role.forEach(callback => callback(createFormList)); expect(createFormList.length).toBe(4); expect(createFormList.head.value.name).toBe('Title'); @@ -74,7 +66,7 @@ describe('State Utils', () => { expect(createFormList.head.next.next.next.value.name).toBe('Foo_Text'); const editFormList = new FormPropList(); - contributors.editForm.Role.forEach((callback) => callback(editFormList)); + contributors.editForm.Role.forEach(callback => callback(editFormList)); expect(editFormList.length).toBe(4); expect(editFormList.head.value.name).toBe('Title'); @@ -126,10 +118,7 @@ function createMockState() { }; } -function createMockEntities(): Record< - string, - ObjectExtensions.EntityExtensionDto -> { +function createMockEntities(): Record { return { Role: { properties: { diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/bounce.animations.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/bounce.animations.ts index c539725a0a..f983be7fc5 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/bounce.animations.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/bounce.animations.ts @@ -8,16 +8,16 @@ export const bounceIn = animation( keyframes([ style({ opacity: '0', transform: '{{ transform }} scale(0.0)', offset: 0 }), style({ opacity: '0', transform: '{{ transform }} scale(0.8)', offset: 0.5 }), - style({ opacity: '1', transform: '{{ transform }} scale(1.0)', offset: 1 }) - ]) - ) + style({ opacity: '1', transform: '{{ transform }} scale(1.0)', offset: 1 }), + ]), + ), ], { params: { time: '350ms', easing: 'cubic-bezier(.7,.31,.72,1.47)', display: 'block', - transform: 'translate(-50%, -50%)' - } - } + transform: 'translate(-50%, -50%)', + }, + }, ); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/fade.animations.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/fade.animations.ts index 3321974a77..b1d9f876fc 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/fade.animations.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/animations/fade.animations.ts @@ -1,8 +1,11 @@ import { animate, animation, style } from '@angular/animations'; -export const fadeIn = animation([style({ opacity: '0' }), animate('{{ time}} {{ easing }}', style({ opacity: '1' }))], { - params: { time: '350ms', easing: 'ease' }, -}); +export const fadeIn = animation( + [style({ opacity: '0' }), animate('{{ time}} {{ easing }}', style({ opacity: '1' }))], + { + params: { time: '350ms', easing: 'ease' }, + }, +); export const fadeOut = animation( [style({ opacity: '1' }), animate('{{ time}} {{ easing }}', style({ opacity: '0' }))], @@ -12,7 +15,10 @@ export const fadeOut = animation( export const fadeInDown = animation( [ style({ opacity: '0', transform: '{{ transform }} translateY(-20px)' }), - animate('{{ time }} {{ easing }}', style({ opacity: '1', transform: '{{ transform }} translateY(0)' })), + animate( + '{{ time }} {{ easing }}', + style({ opacity: '1', transform: '{{ transform }} translateY(0)' }), + ), ], { params: { time: '350ms', easing: 'ease', transform: '' } }, ); @@ -20,7 +26,10 @@ export const fadeInDown = animation( export const fadeInUp = animation( [ style({ opacity: '0', transform: '{{ transform }} translateY(20px)' }), - animate('{{ time }} {{ easing }}', style({ opacity: '1', transform: '{{ transform }} translateY(0)' })), + animate( + '{{ time }} {{ easing }}', + style({ opacity: '1', transform: '{{ transform }} translateY(0)' }), + ), ], { params: { time: '350ms', easing: 'ease', transform: '' } }, ); @@ -28,7 +37,10 @@ export const fadeInUp = animation( export const fadeInLeft = animation( [ style({ opacity: '0', transform: '{{ transform }} translateX(20px)' }), - animate('{{ time }} {{ easing }}', style({ opacity: '1', transform: '{{ transform }} translateX(0)' })), + animate( + '{{ time }} {{ easing }}', + style({ opacity: '1', transform: '{{ transform }} translateX(0)' }), + ), ], { params: { time: '350ms', easing: 'ease', transform: '' } }, ); @@ -36,7 +48,10 @@ export const fadeInLeft = animation( export const fadeInRight = animation( [ style({ opacity: '0', transform: '{{ transform }} translateX(-20px)' }), - animate('{{ time }} {{ easing }}', style({ opacity: '1', transform: '{{ transform }} translateX(0)' })), + animate( + '{{ time }} {{ easing }}', + style({ opacity: '1', transform: '{{ transform }} translateX(0)' }), + ), ], { params: { time: '350ms', easing: 'ease', transform: '' } }, ); @@ -44,7 +59,10 @@ export const fadeInRight = animation( export const fadeOutDown = animation( [ style({ opacity: '1', transform: '{{ transform }} translateY(0)' }), - animate('{{ time }} {{ easing }}', style({ opacity: '0', transform: '{{ transform }} translateY(20px)' })), + animate( + '{{ time }} {{ easing }}', + style({ opacity: '0', transform: '{{ transform }} translateY(20px)' }), + ), ], { params: { time: '350ms', easing: 'ease', transform: '' } }, ); @@ -52,7 +70,10 @@ export const fadeOutDown = animation( export const fadeOutUp = animation( [ style({ opacity: '1', transform: '{{ transform }} translateY(0)' }), - animate('{{ time }} {{ easing }}', style({ opacity: '0', transform: '{{ transform }} translateY(-20px)' })), + animate( + '{{ time }} {{ easing }}', + style({ opacity: '0', transform: '{{ transform }} translateY(-20px)' }), + ), ], { params: { time: '350ms', easing: 'ease', transform: '' } }, ); @@ -60,7 +81,10 @@ export const fadeOutUp = animation( export const fadeOutLeft = animation( [ style({ opacity: '1', transform: '{{ transform }} translateX(0)' }), - animate('{{ time }} {{ easing }}', style({ opacity: '0', transform: '{{ transform }} translateX(20px)' })), + animate( + '{{ time }} {{ easing }}', + style({ opacity: '0', transform: '{{ transform }} translateX(20px)' }), + ), ], { params: { time: '350ms', easing: 'ease', transform: '' } }, ); @@ -68,7 +92,10 @@ export const fadeOutLeft = animation( export const fadeOutRight = animation( [ style({ opacity: '1', transform: '{{ transform }} translateX(0)' }), - animate('{{ time }} {{ easing }}', style({ opacity: '0', transform: '{{ transform }} translateX(-20px)' })), + animate( + '{{ time }} {{ easing }}', + style({ opacity: '0', transform: '{{ transform }} translateX(-20px)' }), + ), ], { params: { time: '350ms', easing: 'ease', transform: '' } }, ); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts index 0a8fe44b2c..234bad0825 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts @@ -21,9 +21,7 @@ import { debounceTime, filter } from 'rxjs/operators'; styleUrls: ['http-error-wrapper.component.scss'], providers: [SubscriptionService], }) -export class HttpErrorWrapperComponent - implements AfterViewInit, OnDestroy, OnInit -{ +export class HttpErrorWrapperComponent implements AfterViewInit, OnDestroy, OnInit { appRef: ApplicationRef; cfRes: ComponentFactoryResolver; @@ -57,9 +55,7 @@ export class HttpErrorWrapperComponent ngOnInit() { this.backgroundColor = - window - .getComputedStyle(document.body) - ?.getPropertyValue('background-color') || '#fff'; + window.getComputedStyle(document.body)?.getPropertyValue('background-color') || '#fff'; } ngAfterViewInit() { @@ -71,14 +67,14 @@ export class HttpErrorWrapperComponent customComponentRef.instance.destroy$ = this.destroy$; this.appRef.attachView(customComponentRef.hostView); this.containerRef.nativeElement.appendChild( - (customComponentRef.hostView as EmbeddedViewRef).rootNodes[0] + (customComponentRef.hostView as EmbeddedViewRef).rootNodes[0], ); customComponentRef.changeDetectorRef.detectChanges(); } const keyup$ = fromEvent(document, 'keyup').pipe( debounceTime(150), - filter((key: KeyboardEvent) => key && key.key === 'Escape') + filter((key: KeyboardEvent) => key && key.key === 'Escape'), ); this.subscription.addOne(keyup$, () => this.destroy()); } diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index feb4ba5fd8..44aea4d9f7 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -12,7 +12,7 @@ import { Optional, Output, TemplateRef, - ViewChild + ViewChild, } from '@angular/core'; import { NgbModal, NgbModalOptions, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; import { fromEvent, Subject } from 'rxjs'; diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts index b7a98ac733..ed4430aa92 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts @@ -27,7 +27,7 @@ export class ToasterService implements ToasterContract { this.containerComponentRef = this.contentProjectionService.projectContent( PROJECTION_STRATEGY.AppendComponentToBody(ToastContainerComponent, { toasts$: this.toasts$, - }) + }), ); this.containerComponentRef.changeDetectorRef.detectChanges(); @@ -42,7 +42,7 @@ export class ToasterService implements ToasterContract { info( message: LocalizationParam, title?: LocalizationParam, - options?: Partial + options?: Partial, ): Toaster.ToasterId { return this.show(message, title, 'info', options); } @@ -56,7 +56,7 @@ export class ToasterService implements ToasterContract { success( message: LocalizationParam, title?: LocalizationParam, - options?: Partial + options?: Partial, ): Toaster.ToasterId { return this.show(message, title, 'success', options); } @@ -70,7 +70,7 @@ export class ToasterService implements ToasterContract { warn( message: LocalizationParam, title?: LocalizationParam, - options?: Partial + options?: Partial, ): Toaster.ToasterId { return this.show(message, title, 'warning', options); } @@ -84,7 +84,7 @@ export class ToasterService implements ToasterContract { error( message: LocalizationParam, title?: LocalizationParam, - options?: Partial + options?: Partial, ): Toaster.ToasterId { return this.show(message, title, 'error', options); } @@ -101,7 +101,7 @@ export class ToasterService implements ToasterContract { message: LocalizationParam, title: LocalizationParam = null, severity: Toaster.Severity = 'neutral', - options = {} as Partial + options = {} as Partial, ): Toaster.ToasterId { if (!this.containerComponentRef) this.setContainer(); @@ -121,7 +121,7 @@ export class ToasterService implements ToasterContract { * @param id ID of the toast to be removed. */ remove(id: number): void { - this.toasts = this.toasts.filter((toast) => toast.options?.id !== id); + this.toasts = this.toasts.filter(toast => toast.options?.id !== id); this.toasts$.next(this.toasts); } @@ -131,9 +131,7 @@ export class ToasterService implements ToasterContract { clear(containerKey?: string): void { this.toasts = !containerKey ? [] - : this.toasts.filter( - (toast) => toast.options?.containerKey !== containerKey - ); + : this.toasts.filter(toast => toast.options?.containerKey !== containerKey); this.toasts$.next(this.toasts); } } diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/button.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/button.component.spec.ts index c272b665e7..32c75dafb1 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/button.component.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/button.component.spec.ts @@ -8,9 +8,12 @@ describe('ButtonComponent', () => { beforeEach( () => - (spectator = createHost('Button', { - hostProps: { attributes: { autofocus: '', name: 'abp-button' } }, - })), + (spectator = createHost( + 'Button', + { + hostProps: { attributes: { autofocus: '', name: 'abp-button' } }, + }, + )), ); it('should display the button', () => { diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/chart.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/chart.component.spec.ts index 1aab771307..083d810043 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/chart.component.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/chart.component.spec.ts @@ -8,7 +8,7 @@ declare const Chart; Object.defineProperty(window, 'getComputedStyle', { value: () => ({ - getPropertyValue: (prop) => { + getPropertyValue: prop => { return ''; }, }), @@ -20,23 +20,20 @@ describe('ChartComponent', () => { beforeEach(() => { (widgetUtils as any).chartJsLoaded$ = new ReplaySubject(1); - spectator = createHost( - '', - { - hostProps: { - data: { - datasets: [ - { - data: [11], - backgroundColor: ['#FF6384'], - label: 'My dataset', - }, - ], - labels: ['Red'], - }, + spectator = createHost('', { + hostProps: { + data: { + datasets: [ + { + data: [11], + backgroundColor: ['#FF6384'], + label: 'My dataset', + }, + ], + labels: ['Red'], }, - } - ); + }, + }); }); test('should throw error when chart.js is not loaded', () => { @@ -47,7 +44,7 @@ describe('ChartComponent', () => { } }); - test('should have a success class by default', (done) => { + test('should have a success class by default', done => { import('chart.js').then(() => { chartJsLoaded$.next(); setTimeout(() => { @@ -58,7 +55,7 @@ describe('ChartComponent', () => { }); describe('#reinit', () => { - it('should call the destroy method', (done) => { + it('should call the destroy method', done => { chartJsLoaded$.next(); const spy = jest.spyOn(spectator.component.chart, 'destroy'); spectator.setHostInput({ @@ -81,7 +78,7 @@ describe('ChartComponent', () => { }); describe('#refresh', () => { - it('should call the update method', (done) => { + it('should call the update method', done => { chartJsLoaded$.next(); const spy = jest.spyOn(spectator.component.chart, 'update'); spectator.component.refresh(); @@ -93,7 +90,7 @@ describe('ChartComponent', () => { }); describe('#generateLegend', () => { - it('should call the generateLegend method', (done) => { + it('should call the generateLegend method', done => { chartJsLoaded$.next(); const spy = jest.spyOn(spectator.component.chart, 'generateLegend'); spectator.component.generateLegend(); @@ -105,7 +102,7 @@ describe('ChartComponent', () => { }); describe('#onCanvasClick', () => { - it('should emit the onDataSelect', (done) => { + it('should emit the onDataSelect', done => { spectator.component.onDataSelect.subscribe(() => { done(); }); @@ -119,7 +116,7 @@ describe('ChartComponent', () => { }); describe('#base64Image', () => { - it('should return the base64 image', (done) => { + it('should return the base64 image', done => { chartJsLoaded$.next(); setTimeout(() => { diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts index efb0c20380..937da926d9 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts @@ -50,7 +50,7 @@ describe('ConfirmationService', () => { { cancelText: 'CANCEL', yesText: 'YES', - } + }, ); tick(); @@ -67,19 +67,16 @@ describe('ConfirmationService', () => { ${'success'} | ${'.success'} | ${'.fa-check-circle'} ${'warn'} | ${'.warning'} | ${'.fa-exclamation-triangle'} ${'error'} | ${'.error'} | ${'.fa-times-circle'} - `( - 'should display $type confirmation popup', - async ({ type, selector, icon }) => { - service[type]('MESSAGE', 'TITLE'); + `('should display $type confirmation popup', async ({ type, selector, icon }) => { + service[type]('MESSAGE', 'TITLE'); - await timer(0).toPromise(); + await timer(0).toPromise(); - expect(selectConfirmationContent('.title')).toBe('TITLE'); - expect(selectConfirmationContent('.message')).toBe('MESSAGE'); - expect(selectConfirmationElement(selector)).toBeTruthy(); - expect(selectConfirmationElement(icon)).toBeTruthy(); - } - ); + expect(selectConfirmationContent('.title')).toBe('TITLE'); + expect(selectConfirmationContent('.message')).toBe('MESSAGE'); + expect(selectConfirmationElement(selector)).toBeTruthy(); + expect(selectConfirmationElement(icon)).toBeTruthy(); + }); // test('should close with ESC key', (done) => { // service @@ -94,13 +91,11 @@ describe('ConfirmationService', () => { // document.dispatchEvent(escape); // }); - test('should close when click cancel button', (done) => { - service - .info('', '', { yesText: 'Sure', cancelText: 'Exit' }) - .subscribe((status) => { - expect(status).toBe(Confirmation.Status.reject); - done(); - }); + test('should close when click cancel button', done => { + service.info('', '', { yesText: 'Sure', cancelText: 'Exit' }).subscribe(status => { + expect(status).toBe(Confirmation.Status.reject); + done(); + }); timer(0).subscribe(() => { expect(selectConfirmationContent('button#cancel')).toBe('Exit'); @@ -122,22 +117,18 @@ describe('ConfirmationService', () => { service.info('', '', { dismissible }); expect(spy).toHaveBeenCalledTimes(count); - } + }, ); }); function clearElements(selector = '.confirmation') { - document - .querySelectorAll(selector) - .forEach((element) => element.parentNode.removeChild(element)); + document.querySelectorAll(selector).forEach(element => element.parentNode.removeChild(element)); } function selectConfirmationContent(selector = '.confirmation'): string { return selectConfirmationElement(selector).textContent.trim(); } -function selectConfirmationElement( - selector = '.confirmation' -): T { +function selectConfirmationElement(selector = '.confirmation'): T { return document.querySelector(selector); } diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.component.spec.ts index 0316ad5e9b..b9e1c0af9a 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.component.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.component.spec.ts @@ -28,7 +28,7 @@ describe('ErrorComponent', () => { }); describe('#destroy', () => { - it('should be call when pressed the esc key', (done) => { + it('should be call when pressed the esc key', done => { spectator.component.destroy$.subscribe(() => { done(); }); @@ -36,7 +36,7 @@ describe('ErrorComponent', () => { spectator.keyboard.pressEscape(); }); - it('should be call when clicked the close button', (done) => { + it('should be call when clicked the close button', done => { spectator.component.destroy$.subscribe(() => { done(); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts index dbfb5e43f3..2d2be39f59 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts @@ -8,11 +8,7 @@ import { NgxsModule, Store } from '@ngxs/store'; import { OAuthService } from 'angular-oauth2-oidc'; import { of } from 'rxjs'; import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http-error-wrapper.component'; -import { - DEFAULT_ERROR_LOCALIZATIONS, - DEFAULT_ERROR_MESSAGES, - ErrorHandler, -} from '../handlers'; +import { DEFAULT_ERROR_LOCALIZATIONS, DEFAULT_ERROR_MESSAGES, ErrorHandler } from '../handlers'; import { ConfirmationService } from '../services'; import { httpErrorConfigFactory } from '../tokens/http-error.token'; @@ -35,11 +31,7 @@ const CONFIRMATION_BUTTONS = { describe('ErrorHandler', () => { const createService = createServiceFactory({ service: ErrorHandler, - imports: [ - NgxsModule.forRoot([]), - CoreTestingModule.withConfig(), - MockModule, - ], + imports: [NgxsModule.forRoot([]), CoreTestingModule.withConfig(), MockModule], mocks: [OAuthService], providers: [ { provide: APP_BASE_HREF, useValue: '/' }, @@ -146,7 +138,7 @@ describe('ErrorHandler', () => { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title, }, - CONFIRMATION_BUTTONS + CONFIRMATION_BUTTONS, ); }); @@ -162,7 +154,7 @@ describe('ErrorHandler', () => { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, }, - CONFIRMATION_BUTTONS + CONFIRMATION_BUTTONS, ); }); @@ -178,7 +170,7 @@ describe('ErrorHandler', () => { key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.details, defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.details, }, - CONFIRMATION_BUTTONS + CONFIRMATION_BUTTONS, ); }); @@ -186,9 +178,7 @@ describe('ErrorHandler', () => { const headers: HttpHeaders = new HttpHeaders({ _AbpErrorFormat: '_AbpErrorFormat', }); - store.dispatch( - new RestOccurError(new HttpErrorResponse({ status: 401, headers })) - ); + store.dispatch(new RestOccurError(new HttpErrorResponse({ status: 401, headers }))); expect(errorConfirmation).toHaveBeenCalledWith( { @@ -196,7 +186,7 @@ describe('ErrorHandler', () => { defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, }, null, - CONFIRMATION_BUTTONS + CONFIRMATION_BUTTONS, ); }); @@ -209,14 +199,14 @@ describe('ErrorHandler', () => { error: { error: { message: 'test message', details: 'test detail' } }, status: 412, headers, - }) - ) + }), + ), ); expect(errorConfirmation).toHaveBeenCalledWith( 'test detail', 'test message', - CONFIRMATION_BUTTONS + CONFIRMATION_BUTTONS, ); }); }); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/lazy-style.handler.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/lazy-style.handler.spec.ts index 1c120db08f..ea02893f90 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/lazy-style.handler.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/lazy-style.handler.spec.ts @@ -50,7 +50,7 @@ describe('LazyStyleHandler', () => { describe('initLazyStyleHandler', () => { it('should return a LazyStyleHandler factory', () => { - const generator = (function*() { + const generator = (function* () { yield undefined; // LAZY_STYLES yield { loaded: new Map() }; // LazyLoadService yield { currentLang: 'en', languageChange$: EMPTY }; // LocalizationService diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts index 14a6193f68..3fdf0a6cb6 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/tests/modal.component.spec.ts @@ -5,11 +5,7 @@ import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; import { fromEvent, Subject, timer } from 'rxjs'; import { delay, reduce, take } from 'rxjs/operators'; -import { - ButtonComponent, - ConfirmationComponent, - ModalComponent, -} from '../components'; +import { ButtonComponent, ConfirmationComponent, ModalComponent } from '../components'; import { Confirmation } from '../models'; import { ConfirmationService } from '../services'; @@ -69,7 +65,7 @@ describe('ModalComponent', () => { appearFn, disappearFn, }, - } + }, ); await wait0ms(); @@ -161,11 +157,7 @@ describe('ModalComponent', () => { it('should close with esc key', async () => { await wait0ms(); - spectator.dispatchKeyboardEvent( - spectator.component.modalWindowRef, - 'keyup', - 'Escape' - ); + spectator.dispatchKeyboardEvent(spectator.component.modalWindowRef, 'keyup', 'Escape'); await wait300ms(); @@ -183,12 +175,12 @@ describe('ModalComponent', () => { expect(disappearFn).not.toHaveBeenCalled(); }); - xit('should not let window unload when form is dirty', (done) => { + xit('should not let window unload when form is dirty', done => { fromEvent(window, 'beforeunload') .pipe( take(2), delay(0), - reduce((acc, v) => acc.concat(v), []) + reduce((acc, v) => acc.concat(v), []), ) .subscribe(([event1, event2]) => { expect(event1.returnValue).toBe(false); diff --git a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts index cf8565435a..b095ae821c 100644 --- a/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts +++ b/npm/ng-packs/nx/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts @@ -44,9 +44,8 @@ export class DateParserFormatter extends NgbDateParserFormatter { format(date: NgbDateStruct): string { if (!date) return ''; - const localization: ApplicationLocalizationConfigurationDto = this.configState.getOne( - 'localization', - ); + const localization: ApplicationLocalizationConfigurationDto = + this.configState.getOne('localization'); const dateFormat = snq(() => localization.currentCulture.dateTimeFormat.shortDatePattern) || 'yyyy-MM-dd'; From b299c2e43135ecbabf5c8dd5cf23cc7eec6489a1 Mon Sep 17 00:00:00 2001 From: Jadyn Date: Mon, 16 Aug 2021 21:49:00 +0800 Subject: [PATCH 22/56] Fix JsTreeScriptContributor name --- ...{JQueryFormScriptContributor.cs => JsTreeScriptContributor.cs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/{JQueryFormScriptContributor.cs => JsTreeScriptContributor.cs} (100%) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JQueryFormScriptContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JsTreeScriptContributor.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JQueryFormScriptContributor.cs rename to framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JsTree/JsTreeScriptContributor.cs From fda882774349219579ba056e0073b2d46d74431d Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 17 Aug 2021 10:42:47 +0800 Subject: [PATCH 23/56] Keep the file name and class name the same --- ...are.cs => ApplicationBuilderAbpJwtTokenMiddlewareExtension.cs} | 0 .../Routing/{AbpBlazorRouterOptions.cs => AbpRouterOptions.cs} | 0 ...dleContributor.cs => ComponentsComponentsBundleContributor.cs} | 0 ...olveContributerBase.cs => HttpTenantResolveContributorBase.cs} | 0 ...cyOptionsExtensions.cs => AbpMultiTenancyOptionsExtensions.cs} | 0 .../{ObjectExtensionConfigurationDto.cs => ModuleExtensionDto.cs} | 0 .../Styles/{CssRelativePathAdjuster.cs => CssRelativePath.cs} | 0 .../{DropDownDemoModel.cs => DropDownDemoDemoModel.cs} | 0 ...dencyRegistrar.cs => AbpAspNetCoreMvcConventionalRegistrar.cs} | 0 ...s.cs => ObjectExtensionPropertyInfoAspNetCoreMvcExtensions.cs} | 0 ...etCoreUnitOfWorkOptions.cs => AbpAspNetCoreAuditingOptions.cs} | 0 ...kgroundWorkerContext.cs => PeriodicBackgroundWorkerContext.cs} | 0 .../Cli/Commands/{LoginInfoCommand..cs => LoginInfoCommand.cs} | 0 ...ryExtensions.cs => AbpCoreStringLocalizerFactoryExtensions.cs} | 0 .../{IServiceExposingArgs.cs => IOnServiceExposingContext.cs} | 0 .../{OnServiceExposingArgs.cs => OnServiceExposingContext.cs} | 0 ...ecycleContributerBase.cs => ModuleLifecycleContributorBase.cs} | 0 ...esolverExtensions.cs => ConnectionStringResolverExtensions.cs} | 0 ...tHandlerWithDisposeAction.cs => EventHandlerDisposeWrapper.cs} | 0 ...ettingValueProvider.cs => DefaultValueFeatureValueProvider.cs} | 0 ...{StringLocalizerHelper.cs => AbpInternalLocalizationHelper.cs} | 0 ...tyExtensions.cs => AbpMultiTenancyClaimsIdentityExtensions.cs} | 0 .../{IDynamicFileManager.cs => IDynamicFileProvider.cs} | 0 ...BlobStoringTestBase.cs => AbpBlobStoringFileSystemTestBase.cs} | 0 ...e.cs => AbpAspNetCoreComponentsWebAssemblyBasicThemeModule.cs} | 0 ...barToolsViewComponent.cs => MainNavbarToolbarViewComponent.cs} | 0 .../Pages/{PublicPageModel.cs => CmsKitPublicPageModelBase.cs} | 0 ...DocsHttpApiClientModule.cs => DocsAdminHttpApiClientModule.cs} | 0 .../MongoDB/{BloggingMongoDbModule.cs => DocsMongoDbModule.cs} | 0 .../{DocumentParseParamaters.cs => DocumentRenderParameters.cs} | 0 .../{IdentityUserLinkManager.cs => IdentityLinkUserManager.cs} | 0 ...pService.cs => HttpClientExternalUserLookupServiceProvider.cs} | 0 .../{IdentityUserExtensions.cs => IdentityUserDtoExtensions.cs} | 0 .../ApiScopes/{ApiResourceConsts.cs => ApiScopeConsts.cs} | 0 .../{PersistedGrantRepository.cs => PersistentGrantRepository.cs} | 0 ...sistedGrantRepository.cs => MongoPersistentGrantRepository.cs} | 0 ...dentityApplicationTestBase.cs => AbpIdentityServerTestBase.cs} | 0 ...licationModule.cs => AbpSettingManagementApplicationModule.cs} | 0 ...omainTestModule.cs => AbpSettingManagementDomainTestModule.cs} | 0 ...erMenuContributor.cs => VirtualFileExplorerMenuContributor.cs} | 0 40 files changed, 0 insertions(+), 0 deletions(-) rename framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/AspNetCore/Builder/{JwtTokenMiddleware.cs => ApplicationBuilderAbpJwtTokenMiddlewareExtension.cs} (100%) rename framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Routing/{AbpBlazorRouterOptions.cs => AbpRouterOptions.cs} (100%) rename framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/{ComponentsWebAssemblyBundleContributor.cs => ComponentsComponentsBundleContributor.cs} (100%) rename framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/{HttpTenantResolveContributerBase.cs => HttpTenantResolveContributorBase.cs} (100%) rename framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/MultiTenancy/{MultiTenancyOptionsExtensions.cs => AbpMultiTenancyOptionsExtensions.cs} (100%) rename framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/{ObjectExtensionConfigurationDto.cs => ModuleExtensionDto.cs} (100%) rename framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/Styles/{CssRelativePathAdjuster.cs => CssRelativePath.cs} (100%) rename framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/DropdownsDemo/{DropDownDemoModel.cs => DropDownDemoDemoModel.cs} (100%) rename framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DependencyInjection/{AbpAspNetCoreMvcConventionalDependencyRegistrar.cs => AbpAspNetCoreMvcConventionalRegistrar.cs} (100%) rename framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/ObjectExtending/{ObjectExtendingPropertyInfoExtensions.cs => ObjectExtensionPropertyInfoAspNetCoreMvcExtensions.cs} (100%) rename framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/{AbpAspNetCoreUnitOfWorkOptions.cs => AbpAspNetCoreAuditingOptions.cs} (100%) rename framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/{BackgroundWorkerContext.cs => PeriodicBackgroundWorkerContext.cs} (100%) rename framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/{LoginInfoCommand..cs => LoginInfoCommand.cs} (100%) rename framework/src/Volo.Abp.Core/Microsoft/Extensions/Localization/{AbpStringLocalizerFactoryExtensions.cs => AbpCoreStringLocalizerFactoryExtensions.cs} (100%) rename framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/{IServiceExposingArgs.cs => IOnServiceExposingContext.cs} (100%) rename framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/{OnServiceExposingArgs.cs => OnServiceExposingContext.cs} (100%) rename framework/src/Volo.Abp.Core/Volo/Abp/Modularity/{ModuleLifecycleContributerBase.cs => ModuleLifecycleContributorBase.cs} (100%) rename framework/src/Volo.Abp.Data/Volo/Abp/Data/{IConnectionStringResolverExtensions.cs => ConnectionStringResolverExtensions.cs} (100%) rename framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/{EventHandlerWithDisposeAction.cs => EventHandlerDisposeWrapper.cs} (100%) rename framework/src/Volo.Abp.Features/Volo/Abp/Features/{DefaultValueSettingValueProvider.cs => DefaultValueFeatureValueProvider.cs} (100%) rename framework/src/Volo.Abp.Localization/Volo/Abp/Localization/{StringLocalizerHelper.cs => AbpInternalLocalizationHelper.cs} (100%) rename framework/src/Volo.Abp.MultiTenancy/System/Security/Principal/{AbpClaimsIdentityExtensions.cs => AbpMultiTenancyClaimsIdentityExtensions.cs} (100%) rename framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/{IDynamicFileManager.cs => IDynamicFileProvider.cs} (100%) rename framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/{AbpBlobStoringTestBase.cs => AbpBlobStoringFileSystemTestBase.cs} (100%) rename modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/{AbpAspNetCoreComponentsWebAssemblyBasicTheme.cs => AbpAspNetCoreComponentsWebAssemblyBasicThemeModule.cs} (100%) rename modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/{MainNavbarToolsViewComponent.cs => MainNavbarToolbarViewComponent.cs} (100%) rename modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/{PublicPageModel.cs => CmsKitPublicPageModelBase.cs} (100%) rename modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo/Docs/Admin/{DocsHttpApiClientModule.cs => DocsAdminHttpApiClientModule.cs} (100%) rename modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/{BloggingMongoDbModule.cs => DocsMongoDbModule.cs} (100%) rename modules/docs/src/Volo.Docs.Web/HtmlConverting/{DocumentParseParamaters.cs => DocumentRenderParameters.cs} (100%) rename modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/{IdentityUserLinkManager.cs => IdentityLinkUserManager.cs} (100%) rename modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/{HttpClientIdentityUserLookupService.cs => HttpClientExternalUserLookupServiceProvider.cs} (100%) rename modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/{IdentityUserExtensions.cs => IdentityUserDtoExtensions.cs} (100%) rename modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/{ApiResourceConsts.cs => ApiScopeConsts.cs} (100%) rename modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/{PersistedGrantRepository.cs => PersistentGrantRepository.cs} (100%) rename modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/{MongoPersistedGrantRepository.cs => MongoPersistentGrantRepository.cs} (100%) rename modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/{AbpIdentityApplicationTestBase.cs => AbpIdentityServerTestBase.cs} (100%) rename modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/{SettingManagementApplicationModule.cs => AbpSettingManagementApplicationModule.cs} (100%) rename modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/{AbpTenantManagementDomainTestModule.cs => AbpSettingManagementDomainTestModule.cs} (100%) rename modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Navigation/{AbpVirtualFileExplorerMenuContributor.cs => VirtualFileExplorerMenuContributor.cs} (100%) diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/AspNetCore/Builder/JwtTokenMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/AspNetCore/Builder/ApplicationBuilderAbpJwtTokenMiddlewareExtension.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/AspNetCore/Builder/JwtTokenMiddleware.cs rename to framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/AspNetCore/Builder/ApplicationBuilderAbpJwtTokenMiddlewareExtension.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Routing/AbpBlazorRouterOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Routing/AbpRouterOptions.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Routing/AbpBlazorRouterOptions.cs rename to framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Routing/AbpRouterOptions.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/ComponentsWebAssemblyBundleContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/ComponentsComponentsBundleContributor.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/ComponentsWebAssemblyBundleContributor.cs rename to framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/ComponentsComponentsBundleContributor.cs diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributerBase.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributorBase.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributerBase.cs rename to framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributorBase.cs diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancyOptionsExtensions.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/MultiTenancy/AbpMultiTenancyOptionsExtensions.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancyOptionsExtensions.cs rename to framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/MultiTenancy/AbpMultiTenancyOptionsExtensions.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/ObjectExtensionConfigurationDto.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/ModuleExtensionDto.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/ObjectExtensionConfigurationDto.cs rename to framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/ModuleExtensionDto.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/Styles/CssRelativePathAdjuster.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/Styles/CssRelativePath.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/Styles/CssRelativePathAdjuster.cs rename to framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/Styles/CssRelativePath.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/DropdownsDemo/DropDownDemoModel.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/DropdownsDemo/DropDownDemoDemoModel.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/DropdownsDemo/DropDownDemoModel.cs rename to framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/DropdownsDemo/DropDownDemoDemoModel.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DependencyInjection/AbpAspNetCoreMvcConventionalDependencyRegistrar.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DependencyInjection/AbpAspNetCoreMvcConventionalRegistrar.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DependencyInjection/AbpAspNetCoreMvcConventionalDependencyRegistrar.cs rename to framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DependencyInjection/AbpAspNetCoreMvcConventionalRegistrar.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/ObjectExtending/ObjectExtendingPropertyInfoExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoAspNetCoreMvcExtensions.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/ObjectExtending/ObjectExtendingPropertyInfoExtensions.cs rename to framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoAspNetCoreMvcExtensions.cs diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAspNetCoreUnitOfWorkOptions.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAspNetCoreAuditingOptions.cs similarity index 100% rename from framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAspNetCoreUnitOfWorkOptions.cs rename to framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAspNetCoreAuditingOptions.cs diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerContext.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerContext.cs similarity index 100% rename from framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerContext.cs rename to framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerContext.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginInfoCommand..cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginInfoCommand.cs similarity index 100% rename from framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginInfoCommand..cs rename to framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginInfoCommand.cs diff --git a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Localization/AbpStringLocalizerFactoryExtensions.cs b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Localization/AbpCoreStringLocalizerFactoryExtensions.cs similarity index 100% rename from framework/src/Volo.Abp.Core/Microsoft/Extensions/Localization/AbpStringLocalizerFactoryExtensions.cs rename to framework/src/Volo.Abp.Core/Microsoft/Extensions/Localization/AbpCoreStringLocalizerFactoryExtensions.cs diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IServiceExposingArgs.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IOnServiceExposingContext.cs similarity index 100% rename from framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IServiceExposingArgs.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IOnServiceExposingContext.cs diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/OnServiceExposingArgs.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/OnServiceExposingContext.cs similarity index 100% rename from framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/OnServiceExposingArgs.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/OnServiceExposingContext.cs diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/ModuleLifecycleContributerBase.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/ModuleLifecycleContributorBase.cs similarity index 100% rename from framework/src/Volo.Abp.Core/Volo/Abp/Modularity/ModuleLifecycleContributerBase.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Modularity/ModuleLifecycleContributorBase.cs diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolverExtensions.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/ConnectionStringResolverExtensions.cs similarity index 100% rename from framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolverExtensions.cs rename to framework/src/Volo.Abp.Data/Volo/Abp/Data/ConnectionStringResolverExtensions.cs diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerWithDisposeAction.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerDisposeWrapper.cs similarity index 100% rename from framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerWithDisposeAction.cs rename to framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventHandlerDisposeWrapper.cs diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/DefaultValueSettingValueProvider.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/DefaultValueFeatureValueProvider.cs similarity index 100% rename from framework/src/Volo.Abp.Features/Volo/Abp/Features/DefaultValueSettingValueProvider.cs rename to framework/src/Volo.Abp.Features/Volo/Abp/Features/DefaultValueFeatureValueProvider.cs diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/StringLocalizerHelper.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpInternalLocalizationHelper.cs similarity index 100% rename from framework/src/Volo.Abp.Localization/Volo/Abp/Localization/StringLocalizerHelper.cs rename to framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpInternalLocalizationHelper.cs diff --git a/framework/src/Volo.Abp.MultiTenancy/System/Security/Principal/AbpClaimsIdentityExtensions.cs b/framework/src/Volo.Abp.MultiTenancy/System/Security/Principal/AbpMultiTenancyClaimsIdentityExtensions.cs similarity index 100% rename from framework/src/Volo.Abp.MultiTenancy/System/Security/Principal/AbpClaimsIdentityExtensions.cs rename to framework/src/Volo.Abp.MultiTenancy/System/Security/Principal/AbpMultiTenancyClaimsIdentityExtensions.cs diff --git a/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/IDynamicFileManager.cs b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/IDynamicFileProvider.cs similarity index 100% rename from framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/IDynamicFileManager.cs rename to framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/IDynamicFileProvider.cs diff --git a/framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/AbpBlobStoringTestBase.cs b/framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/AbpBlobStoringFileSystemTestBase.cs similarity index 100% rename from framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/AbpBlobStoringTestBase.cs rename to framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/AbpBlobStoringFileSystemTestBase.cs diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/AbpAspNetCoreComponentsWebAssemblyBasicTheme.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/AbpAspNetCoreComponentsWebAssemblyBasicThemeModule.cs similarity index 100% rename from modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/AbpAspNetCoreComponentsWebAssemblyBasicTheme.cs rename to modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/AbpAspNetCoreComponentsWebAssemblyBasicThemeModule.cs diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/MainNavbarToolsViewComponent.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/MainNavbarToolbarViewComponent.cs similarity index 100% rename from modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/MainNavbarToolsViewComponent.cs rename to modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/MainNavbarToolbarViewComponent.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/PublicPageModel.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitPublicPageModelBase.cs similarity index 100% rename from modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/PublicPageModel.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitPublicPageModelBase.cs diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo/Docs/Admin/DocsHttpApiClientModule.cs b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo/Docs/Admin/DocsAdminHttpApiClientModule.cs similarity index 100% rename from modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo/Docs/Admin/DocsHttpApiClientModule.cs rename to modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo/Docs/Admin/DocsAdminHttpApiClientModule.cs diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/BloggingMongoDbModule.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbModule.cs similarity index 100% rename from modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/BloggingMongoDbModule.cs rename to modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbModule.cs diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentParseParamaters.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentRenderParameters.cs similarity index 100% rename from modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentParseParamaters.cs rename to modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentRenderParameters.cs diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserManager.cs similarity index 100% rename from modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs rename to modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserManager.cs diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientIdentityUserLookupService.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientExternalUserLookupServiceProvider.cs similarity index 100% rename from modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientIdentityUserLookupService.cs rename to modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientExternalUserLookupServiceProvider.cs diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/IdentityUserExtensions.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/IdentityUserDtoExtensions.cs similarity index 100% rename from modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/IdentityUserExtensions.cs rename to modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/IdentityUserDtoExtensions.cs diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiResourceConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopeConsts.cs similarity index 100% rename from modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiResourceConsts.cs rename to modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopeConsts.cs diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistentGrantRepository.cs similarity index 100% rename from modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs rename to modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistentGrantRepository.cs diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistentGrantRepository.cs similarity index 100% rename from modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs rename to modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistentGrantRepository.cs diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityApplicationTestBase.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestBase.cs similarity index 100% rename from modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityApplicationTestBase.cs rename to modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestBase.cs diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/SettingManagementApplicationModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/AbpSettingManagementApplicationModule.cs similarity index 100% rename from modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/SettingManagementApplicationModule.cs rename to modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/AbpSettingManagementApplicationModule.cs diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/AbpTenantManagementDomainTestModule.cs b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/AbpSettingManagementDomainTestModule.cs similarity index 100% rename from modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/AbpTenantManagementDomainTestModule.cs rename to modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/AbpSettingManagementDomainTestModule.cs diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Navigation/AbpVirtualFileExplorerMenuContributor.cs b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Navigation/VirtualFileExplorerMenuContributor.cs similarity index 100% rename from modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Navigation/AbpVirtualFileExplorerMenuContributor.cs rename to modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Navigation/VirtualFileExplorerMenuContributor.cs From 762344b5f623f866bb1f39d3b4803cd9122d54d0 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 17 Aug 2021 09:27:24 +0300 Subject: [PATCH 24/56] remove tslint comments --- npm/ng-packs/nx/ng-packs/.gitignore | 15 +- npm/ng-packs/nx/ng-packs/CONTRIBUTING.md | 123 ++ npm/ng-packs/nx/ng-packs/README.md | 104 +- .../environments/environment.regression.ts | 43 - npm/ng-packs/nx/ng-packs/lerna.publish.json | 5 + npm/ng-packs/nx/ng-packs/lerna.version.json | 5 + npm/ng-packs/nx/ng-packs/package.json | 7 +- .../src/lib/abstracts/ng-model.component.ts | 2 - .../core/src/lib/directives/for.directive.ts | 1 - .../packages/core/src/lib/models/utility.ts | 1 - .../src/lib/strategies/context.strategy.ts | 1 - .../core/src/lib/tests/route-utils.spec.ts | 1 - .../core/src/lib/utils/common-utils.ts | 1 - .../core/src/lib/utils/generator-utils.ts | 2 - .../core/src/lib/utils/lazy-load-utils.ts | 1 - .../core/src/lib/utils/number-utils.ts | 1 - .../packages/core/src/lib/utils/rxjs-utils.ts | 1 - .../lib/validators/credit-card.validator.ts | 1 - .../schematics/src/utils/angular/ast-utils.ts | 3 +- .../schematics/src/utils/angular/config.ts | 6 +- .../src/utils/angular/json-utils.ts | 1 - .../src/utils/angular/workspace-models.ts | 1 - .../nav-items/languages.component.ts | 1 - .../abstract-actions.component.ts | 2 - .../extensible-table.component.ts | 17 +- .../src/lib/directives/prop-data.directive.ts | 4 +- .../extensions/src/lib/models/actions.ts | 1 - .../src/lib/models/entity-actions.ts | 1 - .../extensions/src/lib/models/entity-props.ts | 3 +- .../extensions/src/lib/models/form-props.ts | 2 - .../extensions/src/lib/models/props.ts | 1 - .../src/lib/models/toolbar-actions.ts | 1 - .../breadcrumb/breadcrumb.component.ts | 1 - .../lib/components/chart/chart.component.ts | 1 - .../nx/ng-packs/scripts/build-schematics.ts | 79 + npm/ng-packs/nx/ng-packs/scripts/build.ts | 101 ++ npm/ng-packs/nx/ng-packs/scripts/index.js | 0 npm/ng-packs/nx/ng-packs/scripts/package.json | 30 + .../nx/ng-packs/scripts/prod-build.ts | 33 + npm/ng-packs/nx/ng-packs/scripts/publish.ts | 90 + .../ng-packs/scripts/replace-with-preview.ts | 19 + .../nx/ng-packs/scripts/replace-with-tilde.ts | 29 + .../nx/ng-packs/scripts/tsconfig.json | 17 + .../source-code-requirements/README.md | 20 + .../source-code-requirements/karma.conf.js | 32 + .../tsconfig.lib.json | 18 + .../tsconfig.lib.prod.json | 6 + .../tsconfig.spec.json | 17 + .../source-code-requirements/tslint.json | 17 + npm/ng-packs/scripts/package-lock.json | 1565 ----------------- 50 files changed, 689 insertions(+), 1745 deletions(-) create mode 100644 npm/ng-packs/nx/ng-packs/CONTRIBUTING.md delete mode 100644 npm/ng-packs/nx/ng-packs/apps/dev-app/src/environments/environment.regression.ts create mode 100644 npm/ng-packs/nx/ng-packs/lerna.publish.json create mode 100644 npm/ng-packs/nx/ng-packs/lerna.version.json create mode 100644 npm/ng-packs/nx/ng-packs/scripts/build-schematics.ts create mode 100644 npm/ng-packs/nx/ng-packs/scripts/build.ts create mode 100644 npm/ng-packs/nx/ng-packs/scripts/index.js create mode 100644 npm/ng-packs/nx/ng-packs/scripts/package.json create mode 100644 npm/ng-packs/nx/ng-packs/scripts/prod-build.ts create mode 100644 npm/ng-packs/nx/ng-packs/scripts/publish.ts create mode 100644 npm/ng-packs/nx/ng-packs/scripts/replace-with-preview.ts create mode 100644 npm/ng-packs/nx/ng-packs/scripts/replace-with-tilde.ts create mode 100644 npm/ng-packs/nx/ng-packs/scripts/tsconfig.json create mode 100644 npm/ng-packs/nx/ng-packs/source-code-requirements/README.md create mode 100644 npm/ng-packs/nx/ng-packs/source-code-requirements/karma.conf.js create mode 100644 npm/ng-packs/nx/ng-packs/source-code-requirements/tsconfig.lib.json create mode 100644 npm/ng-packs/nx/ng-packs/source-code-requirements/tsconfig.lib.prod.json create mode 100644 npm/ng-packs/nx/ng-packs/source-code-requirements/tsconfig.spec.json create mode 100644 npm/ng-packs/nx/ng-packs/source-code-requirements/tslint.json delete mode 100644 npm/ng-packs/scripts/package-lock.json diff --git a/npm/ng-packs/nx/ng-packs/.gitignore b/npm/ng-packs/nx/ng-packs/.gitignore index ee5c9d8336..c2dcd7778e 100644 --- a/npm/ng-packs/nx/ng-packs/.gitignore +++ b/npm/ng-packs/nx/ng-packs/.gitignore @@ -1,13 +1,22 @@ # See http://help.github.com/ignore-files/ for more about ignoring files. +# generic ignore files +*.gitignore.* + # compiled output -/dist /tmp /out-tsc +/dist +# Only exists if Bazel was run +/bazel-out # dependencies /node_modules +# profiling files +chrome-profiler-events.json +speed-measure-plugin.json + # IDEs and editors /.idea .project @@ -23,6 +32,7 @@ !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json +.history/* # misc /.sass-cache @@ -37,3 +47,6 @@ testem.log # System Files .DS_Store Thumbs.db + +!**/[Pp]ackages/* +*.internal.* diff --git a/npm/ng-packs/nx/ng-packs/CONTRIBUTING.md b/npm/ng-packs/nx/ng-packs/CONTRIBUTING.md new file mode 100644 index 0000000000..da14dd623a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/CONTRIBUTING.md @@ -0,0 +1,123 @@ +# Contributing to ABP Angular UI + +We would love for you to contribute to ABP Angular UI and help make it even better than it is today. + +# Development + +Run `yarn` to install all dependencies, then run `yarn prepare:workspace` to prepare the ABP packages (might take 2 minutes). + +Run `yarn start` to start the `dev-app`. Navigate to http://localhost:4200/. + + +## Application + +The `dev-app` project is the same as the Angular UI template project. `dev-app` is used to see changes instantly. + +> Reminder! If you have developed the `dev-app` template, you should do the same for the application and module templates. + +For more information, see the [docs.abp.io](https://docs.abp.io) + +# Committing changes + +Before you commit, please ensure that your code passes the existing unit tests. + +New features should be accompanied by new tests. + +Every commit should contain only the changes related to the subject of that commit. + +## Commit message format + +Each commit message consists of a **header**, a **body** and a **footer**. The header has a special +format that includes a **type**, a **scope** and a **subject**: + +``` +(): + + + +