commit 6327960a60dc1cd84283b968fdb1d41c8424f239 Author: juetan Date: Mon Jul 10 20:05:03 2023 +0800 feat: 首次提交 diff --git a/.env b/.env new file mode 100644 index 0000000..4188cd4 --- /dev/null +++ b/.env @@ -0,0 +1,29 @@ +# 服务端口 +SERVER_PORT = 3030 +# 服务地址 +SERVER_HOST = 0.0.0.0 + +SERVER_URL = http://127.0.0.1 + +SERVER_OPENAPI_URL = /openapi + +APP_TITLE = 绝弹应用 + +APP_SUBTITLE = 快速构建NestJS应用的模板工具 + +# 数据库类型 +DB_TYPE = sqlite +# sqlite数据库地址 +DB_SQLITE_PATH = content/database/database.sqlite +# mysql数据库地址 +DB_MYSQL_HOST = 127.0.0.1 +# mysql数据库端口 +DB_MYSQL_PORT = 3306 +# mysql数据库用户名 +DB_MYSQL_USERNAME = test1 +# mysql数据库密码 +DB_MYSQL_PASSWORD = test1 +# mysql数据库名称 +DB_MYSQL_DATABASE = test1 + +UPLOAD_FOLDER = content/upload \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..ad6bf12 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,25 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + project: 'tsconfig.json', + tsconfigRootDir: __dirname, + sourceType: 'module', + }, + plugins: ['@typescript-eslint/eslint-plugin'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + ], + root: true, + env: { + node: true, + jest: true, + }, + ignorePatterns: ['.eslintrc.js'], + rules: { + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off' + }, +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..22f55ad --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +# compiled output +/dist +/node_modules + +# Logs +logs +*.log +npm-debug.log* +pnpm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# OS +.DS_Store + +# Tests +/coverage +/.nyc_output + +# 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 \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..7f082f2 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npmmirror.com \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..4ee89dc --- /dev/null +++ b/README.md @@ -0,0 +1,183 @@ +## 接口文档 + +1. 安装依赖 + +``` +pnpm i @nestjs/swagger +``` + +2. 修改`src/main.ts`文件 + +```typescript +import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; + +const config = new DocumentBuilder() + .setTitle('接口文档') + .setVersion('1.0') + .setDescription('Openapi 3.0文档') + .setExternalDoc('JSON数据', '/openapi-json') + .addTag('用户管理', 'user') + .build(); +const document = SwaggerModule.createDocument(app, config); +SwaggerModule.setup('openapi', app, document); +``` + +3. 修改`nest-cli.json`文件 + +```json +{ + "compilerOptions": { + "plugins": [ + { + "name": "@nestjs/swagger", + "options": { + "introspectComments": true + } + } + ] + } +} +``` + +## 配置文件 + +1. 安装依赖 + +```shell +pnpm i @nestjs/config +``` + +2. 修改`src/app.module.ts`文件 + +```typescript +import { ConfigModule } from '@nestjs/config'; + +ConfigModule.forRoot({ + envFilePath: '.env', + isGlobal: true +}), +``` + +## 源码分析 + +入口 + +```typescript +export const NestFactory = new NestFactoryStatic(); +``` + +创建 1 个 ApplicationConfig 实例,存放全局拦截器、管道、异常过滤器等。 + +```typescript +export class ApplicationConfig { + private globalPrefix = ''; + private globalPrefixOptions: GlobalPrefixOptions = {}; + private globalPipes: Array = []; + private globalFilters: Array = []; + private globalInterceptors: Array = []; + private globalGuards: Array = []; + private versioningOptions: VersioningOptions; + private readonly globalRequestPipes: InstanceWrapper[] = []; + private readonly globalRequestFilters: InstanceWrapper[] = []; + private readonly globalRequestInterceptors: InstanceWrapper[] = []; + private readonly globalRequestGuards: InstanceWrapper[] = []; + constructor(private ioAdapter: WebSocketAdapter | null = null) {} + // ... +} +``` + +创建 1 个 NestContainer 实例(即 IOC 容器), 并传入 applicationConfig,存放 modules(模块)等。 + +```typescript +export class NestContainer { + private readonly globalModules = new Set(); + private readonly moduleTokenFactory = new ModuleTokenFactory(); + private readonly moduleCompiler = new ModuleCompiler(this.moduleTokenFactory); + private readonly modules = new ModulesContainer(); + private readonly dynamicModulesMetadata = new Map>(); + private readonly internalProvidersStorage = new InternalProvidersStorage(); + private readonly _serializedGraph = new SerializedGraph(); + private internalCoreModule: Module; +} +``` + +执行 this.initialize 初始化,从根模块开始扫描: + +```typescript +private async initialize( + module: any, + container: NestContainer, + graphInspector: GraphInspector, + config = new ApplicationConfig(), + options: NestApplicationContextOptions = {}, + httpServer: HttpServer = null, +) { + const injector = new Injector({ preview: options.preview }); + const instanceLoader = new InstanceLoader(container,injector,graphInspector,); + const metadataScanner = new MetadataScanner(); + const dependenciesScanner = new DependenciesScanner(container,metadataScanner,graphInspector,config,); + const teardown = this.abortOnError === false ? rethrow : undefined; + + container.setHttpAdapter(httpServer); + await httpServer?.init(); + + try { + this.logger.log(MESSAGES.APPLICATION_START); + + await ExceptionsZone.asyncRun( + async () => { + await dependenciesScanner.scan(module); + await instanceLoader.createInstancesOfDependencies(); + dependenciesScanner.applyApplicationProviders(); + }, + teardown, + this.autoFlushLogs, + ); + } catch (e) { + this.handleInitializationError(e); + } +} +``` + +``` +NestFactory.create传入1到3个参数:根模块,HTTP适配器,参数, 执行以下过程 + + + + +1. 扫描到到controller的方法时,创建1个执行环境,注入管道、拦截器等内容 +nestjs/nest/packages/core/router/router-execution-context.ts + +2. 扫描到名为APP_PIPE等provider时,向application注入全局 +nestjs/nest/packages/core/scanner.ts + +创建1个NestApplication实例,包含对底层的一些封装,例如监听端口、使用全局拦截器等方法。 + +``` + +创建 1 个对 NestApplication 的代理(target),对所有方法包裹一层异常捕获,核心代码: + +```typescript +// file: nestjs/nest/packages/core/router/router-execution-context.ts +if (isFunction(receiver[prop])) { + return this.createExceptionZone(receiver, prop); +} +``` + +创建 1 个对 target 和 httpServer 的代理,如果 target 上调用的方法时,则尝试调用 httpServer 上的方法,核心代码: + +```typescript +// nestjs/nest/packages/core/nest-factory.ts +if (!(prop in receiver) && prop in adapter) { + return (...args: unknown[]) => { + const result = this.createExceptionZone(adapter, prop)(...args); + return mapToProxy(result); + }; +} +``` +## TODO +- media video image text audio +- name size author path +- user +- tag color place thing +- category \ No newline at end of file diff --git a/content/database/database.sqlite b/content/database/database.sqlite new file mode 100644 index 0000000..c8f4948 Binary files /dev/null and b/content/database/database.sqlite differ diff --git a/nest-cli.json b/nest-cli.json new file mode 100644 index 0000000..2c97420 --- /dev/null +++ b/nest-cli.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "sourceRoot": "src", + "compilerOptions": { + "plugins": [ + { + "name": "@nestjs/swagger", + "options": { + "introspectComments": true + } + } + ], + "webpack": false + }, + "generateOptions": { + "spec": false + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..083975a --- /dev/null +++ b/package.json @@ -0,0 +1,109 @@ +{ + "name": "template-nest", + "version": "0.0.1", + "description": "", + "author": "", + "private": true, + "license": "UNLICENSED", + "scripts": { + "prebuild": "rimraf dist", + "dev": "nest start --watch", + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "test": "jest", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json", + "orm": "typeorm-ts-node-esm -d ./src/features/typeorm/config/index.ts" + }, + "prettier": { + "printWidth": 120, + "singleQuote": true, + "trailingComma": "all", + "endOfLine": "auto" + }, + "dependencies": { + "@nestjs/common": "^9.0.0", + "@nestjs/core": "^9.0.0", + "@nestjs/platform-express": "^9.0.0", + "reflect-metadata": "^0.1.13", + "rimraf": "^3.0.2", + "rxjs": "^7.2.0" + }, + "devDependencies": { + "@nestjs/cli": "^9.0.0", + "@nestjs/config": "^2.3.1", + "@nestjs/devtools-integration": "^0.1.4", + "@nestjs/jwt": "^10.0.3", + "@nestjs/passport": "^9.0.3", + "@nestjs/schematics": "^9.0.0", + "@nestjs/serve-static": "^3.0.1", + "@nestjs/swagger": "^6.3.0", + "@nestjs/testing": "^9.0.0", + "@nestjs/typeorm": "^9.0.1", + "@types/express": "^4.17.13", + "@types/jest": "28.1.4", + "@types/lodash": "^4.14.192", + "@types/lodash-es": "^4.17.7", + "@types/mockjs": "^1.0.7", + "@types/multer": "^1.4.7", + "@types/node": "^16.0.0", + "@types/supertest": "^2.0.11", + "@types/uuid": "^9.0.1", + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.0", + "dayjs": "^1.11.7", + "dotenv": "^16.0.3", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "28.1.2", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "mockjs": "^1.1.0", + "multer": "1.4.5-lts.1", + "mysql2": "^3.2.0", + "nanoid": "^4.0.1", + "passport": "^0.6.0", + "passport-jwt": "^4.0.1", + "passport-local": "^1.0.0", + "prettier": "^2.3.2", + "source-map-support": "^0.5.20", + "sqlite3": "^5.1.6", + "supertest": "^6.1.3", + "ts-jest": "28.0.5", + "ts-loader": "^9.2.3", + "ts-node": "^10.0.0", + "tsconfig-paths": "4.0.0", + "typeorm": "^0.3.12", + "typeorm-naming-strategies": "^4.1.0", + "typescript": "^4.3.5", + "uuid": "^9.0.0", + "webpack": "5" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..a86da13 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,6255 @@ +lockfileVersion: 5.4 + +specifiers: + '@nestjs/cli': ^9.0.0 + '@nestjs/common': ^9.0.0 + '@nestjs/config': ^2.3.1 + '@nestjs/core': ^9.0.0 + '@nestjs/devtools-integration': ^0.1.4 + '@nestjs/jwt': ^10.0.3 + '@nestjs/passport': ^9.0.3 + '@nestjs/platform-express': ^9.0.0 + '@nestjs/schematics': ^9.0.0 + '@nestjs/serve-static': ^3.0.1 + '@nestjs/swagger': ^6.3.0 + '@nestjs/testing': ^9.0.0 + '@nestjs/typeorm': ^9.0.1 + '@types/express': ^4.17.13 + '@types/jest': 28.1.4 + '@types/lodash': ^4.14.192 + '@types/lodash-es': ^4.17.7 + '@types/mockjs': ^1.0.7 + '@types/multer': ^1.4.7 + '@types/node': ^16.0.0 + '@types/supertest': ^2.0.11 + '@types/uuid': ^9.0.1 + '@typescript-eslint/eslint-plugin': ^5.0.0 + '@typescript-eslint/parser': ^5.0.0 + class-transformer: ^0.5.1 + class-validator: ^0.14.0 + dayjs: ^1.11.7 + dotenv: ^16.0.3 + eslint: ^8.0.1 + eslint-config-prettier: ^8.3.0 + eslint-plugin-prettier: ^4.0.0 + jest: 28.1.2 + lodash: ^4.17.21 + lodash-es: ^4.17.21 + mockjs: ^1.1.0 + multer: 1.4.5-lts.1 + mysql2: ^3.2.0 + nanoid: ^4.0.1 + passport: ^0.6.0 + passport-jwt: ^4.0.1 + passport-local: ^1.0.0 + prettier: ^2.3.2 + reflect-metadata: ^0.1.13 + rimraf: ^3.0.2 + rxjs: ^7.2.0 + source-map-support: ^0.5.20 + sqlite3: ^5.1.6 + supertest: ^6.1.3 + ts-jest: 28.0.5 + ts-loader: ^9.2.3 + ts-node: ^10.0.0 + tsconfig-paths: 4.0.0 + typeorm: ^0.3.12 + typeorm-naming-strategies: ^4.1.0 + typescript: ^4.3.5 + uuid: ^9.0.0 + webpack: '5' + +dependencies: + '@nestjs/common': 9.4.3_j3td4gnlgk75ora6o6suo62byy + '@nestjs/core': 9.4.3_c4fgdp752ib7dsgrlnt7fswfce + '@nestjs/platform-express': 9.4.3_vw2vky2jc6gkm6gj7lzrgmojyi + reflect-metadata: 0.1.13 + rimraf: 3.0.2 + rxjs: 7.8.1 + +devDependencies: + '@nestjs/cli': 9.5.0 + '@nestjs/config': 2.3.4_7u4l2qzmnego2xuu7pwg7mz5xy + '@nestjs/devtools-integration': 0.1.5_rjmpvsq4jzhua44mzzdoty2seu + '@nestjs/jwt': 10.1.0_@nestjs+common@9.4.3 + '@nestjs/passport': 9.0.3_swdehgqxw2nt4jhhnqbb6yp354 + '@nestjs/schematics': 9.2.0_typescript@4.9.5 + '@nestjs/serve-static': 3.0.1_vw2vky2jc6gkm6gj7lzrgmojyi + '@nestjs/swagger': 6.3.0_ff6xh7k6m3kcxhzayktinvhdx4 + '@nestjs/testing': 9.4.3_c2suh6ay6qzrduk6sfgpcvxpvi + '@nestjs/typeorm': 9.0.1_nktyjm3hkn2boz7s6l2p266t2u + '@types/express': 4.17.17 + '@types/jest': 28.1.4 + '@types/lodash': 4.14.195 + '@types/lodash-es': 4.17.7 + '@types/mockjs': 1.0.7 + '@types/multer': 1.4.7 + '@types/node': 16.18.38 + '@types/supertest': 2.0.12 + '@types/uuid': 9.0.2 + '@typescript-eslint/eslint-plugin': 5.61.0_tiwiljqgmizmat2g4tqcn7wxxu + '@typescript-eslint/parser': 5.61.0_c6scop6gobf6637sntyzfiffg4 + class-transformer: 0.5.1 + class-validator: 0.14.0 + dayjs: 1.11.9 + dotenv: 16.3.1 + eslint: 8.44.0 + eslint-config-prettier: 8.8.0_eslint@8.44.0 + eslint-plugin-prettier: 4.2.1_qkgbdr345imkz5woyd5e5k6xse + jest: 28.1.2_734c4vwpoc3zmfagshlprrefne + lodash: 4.17.21 + lodash-es: 4.17.21 + mockjs: 1.1.0 + multer: 1.4.5-lts.1 + mysql2: 3.5.1 + nanoid: 4.0.2 + passport: 0.6.0 + passport-jwt: 4.0.1 + passport-local: 1.0.0 + prettier: 2.8.8 + source-map-support: 0.5.21 + sqlite3: 5.1.6 + supertest: 6.3.3 + ts-jest: 28.0.5_rv5warumbl7utqrnn4zdksbofm + ts-loader: 9.4.4_dhumxs7xcapy5ah5ryvaq7oilu + ts-node: 10.9.1_npeoqfxwgl5njwqojmpesqhar4 + tsconfig-paths: 4.0.0 + typeorm: 0.3.17_ucsizvblneazg3mzm3rghga4yy + typeorm-naming-strategies: 4.1.0_typeorm@0.3.17 + typescript: 4.9.5 + uuid: 9.0.0 + webpack: 5.88.1 + +packages: + + /@aashutoshrathi/word-wrap/1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@ampproject/remapping/2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@angular-devkit/core/16.0.1: + resolution: {integrity: sha512-2uz98IqkKJlgnHbWQ7VeL4pb+snGAZXIama2KXi+k9GsRntdcw+udX8rL3G9SdUGUF+m6+147Y1oRBMHsO/v4w==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^3.5.2 + peerDependenciesMeta: + chokidar: + optional: true + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1 + jsonc-parser: 3.2.0 + rxjs: 7.8.1 + source-map: 0.7.4 + dev: true + + /@angular-devkit/core/16.0.1_chokidar@3.5.3: + resolution: {integrity: sha512-2uz98IqkKJlgnHbWQ7VeL4pb+snGAZXIama2KXi+k9GsRntdcw+udX8rL3G9SdUGUF+m6+147Y1oRBMHsO/v4w==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^3.5.2 + peerDependenciesMeta: + chokidar: + optional: true + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1 + chokidar: 3.5.3 + jsonc-parser: 3.2.0 + rxjs: 7.8.1 + source-map: 0.7.4 + dev: true + + /@angular-devkit/schematics-cli/16.0.1_chokidar@3.5.3: + resolution: {integrity: sha512-6KLA125dpgd6oJGtiO2JpZAb92uOG3njQGIt7NFcuQGW/5GO7J41vMXH9cBAfdtbV8SIggSmR/cIEE9ijfj6YQ==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + hasBin: true + dependencies: + '@angular-devkit/core': 16.0.1_chokidar@3.5.3 + '@angular-devkit/schematics': 16.0.1_chokidar@3.5.3 + ansi-colors: 4.1.3 + inquirer: 8.2.4 + symbol-observable: 4.0.0 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - chokidar + dev: true + + /@angular-devkit/schematics/16.0.1: + resolution: {integrity: sha512-A9D0LTYmiqiBa90GKcSuWb7hUouGIbm/AHbJbjL85WLLRbQA2PwKl7P5Mpd6nS/ZC0kfG4VQY3VOaDvb3qpI9g==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + dependencies: + '@angular-devkit/core': 16.0.1 + jsonc-parser: 3.2.0 + magic-string: 0.30.0 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + dev: true + + /@angular-devkit/schematics/16.0.1_chokidar@3.5.3: + resolution: {integrity: sha512-A9D0LTYmiqiBa90GKcSuWb7hUouGIbm/AHbJbjL85WLLRbQA2PwKl7P5Mpd6nS/ZC0kfG4VQY3VOaDvb3qpI9g==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + dependencies: + '@angular-devkit/core': 16.0.1_chokidar@3.5.3 + jsonc-parser: 3.2.0 + magic-string: 0.30.0 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + dev: true + + /@babel/code-frame/7.22.5: + resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.5 + dev: true + + /@babel/compat-data/7.22.6: + resolution: {integrity: sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core/7.22.8: + resolution: {integrity: sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.7 + '@babel/helper-compilation-targets': 7.22.6_@babel+core@7.22.8 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + '@nicolo-ribaudo/semver-v6': 6.3.3 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator/7.22.7: + resolution: {integrity: sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + dev: true + + /@babel/helper-compilation-targets/7.22.6_@babel+core@7.22.8: + resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.6 + '@babel/core': 7.22.8 + '@babel/helper-validator-option': 7.22.5 + '@nicolo-ribaudo/semver-v6': 6.3.3 + browserslist: 4.21.9 + lru-cache: 5.1.1 + dev: true + + /@babel/helper-environment-visitor/7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name/7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-hoist-variables/7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-module-imports/7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-module-transforms/7.22.5: + resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-plugin-utils/7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-simple-access/7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-split-export-declaration/7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-string-parser/7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier/7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option/7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers/7.22.6: + resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight/7.22.5: + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser/7.22.7: + resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.22.8: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.22.8: + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.22.8: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.22.8: + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.22.8: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.22.8: + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.22.8: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.22.8: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.22.8: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.22.8: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.22.8: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.22.8: + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-typescript/7.22.5_@babel+core@7.22.8: + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/runtime/7.22.6: + resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: true + + /@babel/template/7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + dev: true + + /@babel/traverse/7.22.8: + resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.7 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types/7.22.5: + resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 + dev: true + + /@bcoe/v8-coverage/0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + + /@colors/colors/1.5.0: + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + requiresBuild: true + dev: true + optional: true + + /@cspotcode/source-map-support/0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@eslint-community/eslint-utils/4.4.0_eslint@8.44.0: + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.44.0 + eslint-visitor-keys: 3.4.1 + dev: true + + /@eslint-community/regexpp/4.5.1: + resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc/2.1.0: + resolution: {integrity: sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.0 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js/8.44.0: + resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@gar/promisify/1.1.3: + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + dev: true + optional: true + + /@humanwhocodes/config-array/0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer/1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@istanbuljs/load-nyc-config/1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + + /@istanbuljs/schema/0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jest/console/28.1.3: + resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 16.18.38 + chalk: 4.1.2 + jest-message-util: 28.1.3 + jest-util: 28.1.3 + slash: 3.0.0 + dev: true + + /@jest/core/28.1.3_ts-node@10.9.1: + resolution: {integrity: sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 28.1.3 + '@jest/reporters': 28.1.3 + '@jest/test-result': 28.1.3 + '@jest/transform': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 16.18.38 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.8.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 28.1.3 + jest-config: 28.1.3_734c4vwpoc3zmfagshlprrefne + jest-haste-map: 28.1.3 + jest-message-util: 28.1.3 + jest-regex-util: 28.0.2 + jest-resolve: 28.1.3 + jest-resolve-dependencies: 28.1.3 + jest-runner: 28.1.3 + jest-runtime: 28.1.3 + jest-snapshot: 28.1.3 + jest-util: 28.1.3 + jest-validate: 28.1.3 + jest-watcher: 28.1.3 + micromatch: 4.0.5 + pretty-format: 28.1.3 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + + /@jest/environment/28.1.3: + resolution: {integrity: sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/fake-timers': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 16.18.38 + jest-mock: 28.1.3 + dev: true + + /@jest/expect-utils/28.1.3: + resolution: {integrity: sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + jest-get-type: 28.0.2 + dev: true + + /@jest/expect/28.1.3: + resolution: {integrity: sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + expect: 28.1.3 + jest-snapshot: 28.1.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/fake-timers/28.1.3: + resolution: {integrity: sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@sinonjs/fake-timers': 9.1.2 + '@types/node': 16.18.38 + jest-message-util: 28.1.3 + jest-mock: 28.1.3 + jest-util: 28.1.3 + dev: true + + /@jest/globals/28.1.3: + resolution: {integrity: sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/environment': 28.1.3 + '@jest/expect': 28.1.3 + '@jest/types': 28.1.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/reporters/28.1.3: + resolution: {integrity: sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 28.1.3 + '@jest/test-result': 28.1.3 + '@jest/transform': 28.1.3 + '@jest/types': 28.1.3 + '@jridgewell/trace-mapping': 0.3.18 + '@types/node': 16.18.38 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.5 + jest-message-util: 28.1.3 + jest-util: 28.1.3 + jest-worker: 28.1.3 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + terminal-link: 2.1.1 + v8-to-istanbul: 9.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/schemas/28.1.3: + resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@sinclair/typebox': 0.24.51 + dev: true + + /@jest/source-map/28.1.2: + resolution: {integrity: sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jridgewell/trace-mapping': 0.3.18 + callsites: 3.1.0 + graceful-fs: 4.2.11 + dev: true + + /@jest/test-result/28.1.3: + resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/console': 28.1.3 + '@jest/types': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.4 + collect-v8-coverage: 1.0.2 + dev: true + + /@jest/test-sequencer/28.1.3: + resolution: {integrity: sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/test-result': 28.1.3 + graceful-fs: 4.2.11 + jest-haste-map: 28.1.3 + slash: 3.0.0 + dev: true + + /@jest/transform/28.1.3: + resolution: {integrity: sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@babel/core': 7.22.8 + '@jest/types': 28.1.3 + '@jridgewell/trace-mapping': 0.3.18 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.9.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 28.1.3 + jest-regex-util: 28.0.2 + jest-util: 28.1.3 + micromatch: 4.0.5 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/types/28.1.3: + resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 16.18.38 + '@types/yargs': 17.0.24 + chalk: 4.1.2 + dev: true + + /@jridgewell/gen-mapping/0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/resolve-uri/3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/source-map/0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/sourcemap-codec/1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping/0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/trace-mapping/0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@lukeed/csprng/1.1.0: + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + + /@mapbox/node-pre-gyp/1.0.10: + resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} + hasBin: true + dependencies: + detect-libc: 2.0.1 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.6.12 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.5.4 + tar: 6.1.15 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@nestjs/cli/9.5.0: + resolution: {integrity: sha512-Z7q+3vNsQSG2d2r2Hl/OOj5EpfjVx3OfnJ9+KuAsOdw1sKLm7+Zc6KbhMFTd/eIvfx82ww3Nk72xdmfPYCulWA==} + engines: {node: '>= 12.9.0'} + hasBin: true + dependencies: + '@angular-devkit/core': 16.0.1_chokidar@3.5.3 + '@angular-devkit/schematics': 16.0.1_chokidar@3.5.3 + '@angular-devkit/schematics-cli': 16.0.1_chokidar@3.5.3 + '@nestjs/schematics': 9.2.0_n7i3t5jmyrdrkypb5pvfihcmg4 + chalk: 4.1.2 + chokidar: 3.5.3 + cli-table3: 0.6.3 + commander: 4.1.1 + fork-ts-checker-webpack-plugin: 8.0.0_hybrf64lftnf5l2xwgg7goi2iu + inquirer: 8.2.5 + node-emoji: 1.11.0 + ora: 5.4.1 + os-name: 4.0.1 + rimraf: 4.4.1 + shelljs: 0.8.5 + source-map-support: 0.5.21 + tree-kill: 1.2.2 + tsconfig-paths: 4.2.0 + tsconfig-paths-webpack-plugin: 4.0.1 + typescript: 4.9.5 + webpack: 5.82.1 + webpack-node-externals: 3.0.0 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + dev: true + + /@nestjs/common/9.4.3_j3td4gnlgk75ora6o6suo62byy: + resolution: {integrity: sha512-Gd6D4IaYj01o14Bwv81ukidn4w3bPHCblMUq+SmUmWLyosK+XQmInCS09SbDDZyL8jy86PngtBLTdhJ2bXSUig==} + peerDependencies: + cache-manager: <=5 + class-transformer: '*' + class-validator: '*' + reflect-metadata: ^0.1.12 + rxjs: ^7.1.0 + peerDependenciesMeta: + cache-manager: + optional: true + class-transformer: + optional: true + class-validator: + optional: true + dependencies: + class-transformer: 0.5.1 + class-validator: 0.14.0 + iterare: 1.2.1 + reflect-metadata: 0.1.13 + rxjs: 7.8.1 + tslib: 2.5.3 + uid: 2.0.2 + + /@nestjs/config/2.3.4_7u4l2qzmnego2xuu7pwg7mz5xy: + resolution: {integrity: sha512-IGdSF+0F9MJO6dCRTEahdxPz4iVijjtolcFBxnY+2QYM3bXYQvAgzskGZi+WkAFJN/VzR3TEp60gN5sI74GxPA==} + peerDependencies: + '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 + reflect-metadata: ^0.1.13 + rxjs: ^6.0.0 || ^7.2.0 + dependencies: + '@nestjs/common': 9.4.3_j3td4gnlgk75ora6o6suo62byy + dotenv: 16.1.4 + dotenv-expand: 10.0.0 + lodash: 4.17.21 + reflect-metadata: 0.1.13 + rxjs: 7.8.1 + uuid: 9.0.0 + dev: true + + /@nestjs/core/9.4.3_c4fgdp752ib7dsgrlnt7fswfce: + resolution: {integrity: sha512-Qi63+wi55Jh4sDyaj5Hhx2jOpKqT386aeo+VOKsxnd+Ql9VvkO/FjmuwBGUyzkJt29ENYc+P0Sx/k5LtstNpPQ==} + requiresBuild: true + peerDependencies: + '@nestjs/common': ^9.0.0 + '@nestjs/microservices': ^9.0.0 + '@nestjs/platform-express': ^9.0.0 + '@nestjs/websockets': ^9.0.0 + reflect-metadata: ^0.1.12 + rxjs: ^7.1.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + '@nestjs/websockets': + optional: true + dependencies: + '@nestjs/common': 9.4.3_j3td4gnlgk75ora6o6suo62byy + '@nestjs/platform-express': 9.4.3_vw2vky2jc6gkm6gj7lzrgmojyi + '@nuxtjs/opencollective': 0.3.2 + fast-safe-stringify: 2.1.1 + iterare: 1.2.1 + path-to-regexp: 3.2.0 + reflect-metadata: 0.1.13 + rxjs: 7.8.1 + tslib: 2.5.3 + uid: 2.0.2 + transitivePeerDependencies: + - encoding + + /@nestjs/devtools-integration/0.1.5_rjmpvsq4jzhua44mzzdoty2seu: + resolution: {integrity: sha512-iwxvfxa3kzOulG/Fje82Ww80OVsA8rzYR+UAEKrdGExRRGQRGQ0+bHfG0XLlPG3XIuM5J2MRMo7x1bN8ZIs9Gg==} + peerDependencies: + '@nestjs/common': ^9.3.7 || ^10.0.0 + '@nestjs/core': ^9.3.7 || ^10.0.0 + reflect-metadata: ^0.1.12 + dependencies: + '@nestjs/common': 9.4.3_j3td4gnlgk75ora6o6suo62byy + '@nestjs/core': 9.4.3_c4fgdp752ib7dsgrlnt7fswfce + chalk: 4.1.2 + node-fetch: 2.6.12 + reflect-metadata: 0.1.13 + transitivePeerDependencies: + - encoding + dev: true + + /@nestjs/jwt/10.1.0_@nestjs+common@9.4.3: + resolution: {integrity: sha512-iLwCGS25ybUxGS7i5j/Mwuyzvp/WxJftHlm8aLEBv5GV92apz6L1QVjxLdZrqXbzo++C8gdJauhzil8qitY+6w==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + dependencies: + '@nestjs/common': 9.4.3_j3td4gnlgk75ora6o6suo62byy + '@types/jsonwebtoken': 9.0.2 + jsonwebtoken: 9.0.0 + dev: true + + /@nestjs/mapped-types/1.2.2_i7luks5ses66diusqohyeqc2yi: + resolution: {integrity: sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==} + peerDependencies: + '@nestjs/common': ^7.0.8 || ^8.0.0 || ^9.0.0 + class-transformer: ^0.2.0 || ^0.3.0 || ^0.4.0 || ^0.5.0 + class-validator: ^0.11.1 || ^0.12.0 || ^0.13.0 || ^0.14.0 + reflect-metadata: ^0.1.12 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + dependencies: + '@nestjs/common': 9.4.3_j3td4gnlgk75ora6o6suo62byy + class-transformer: 0.5.1 + class-validator: 0.14.0 + reflect-metadata: 0.1.13 + dev: true + + /@nestjs/passport/9.0.3_swdehgqxw2nt4jhhnqbb6yp354: + resolution: {integrity: sha512-HplSJaimEAz1IOZEu+pdJHHJhQyBOPAYWXYHfAPQvRqWtw4FJF1VXl1Qtk9dcXQX1eKytDtH+qBzNQc19GWNEg==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 + passport: ^0.4.0 || ^0.5.0 || ^0.6.0 + dependencies: + '@nestjs/common': 9.4.3_j3td4gnlgk75ora6o6suo62byy + passport: 0.6.0 + dev: true + + /@nestjs/platform-express/9.4.3_vw2vky2jc6gkm6gj7lzrgmojyi: + resolution: {integrity: sha512-FpdczWoRSC0zz2dNL9u2AQLXKXRVtq4HgHklAhbL59X0uy+mcxhlSThG7DHzDMkoSnuuHY8ojDVf7mDxk+GtCw==} + peerDependencies: + '@nestjs/common': ^9.0.0 + '@nestjs/core': ^9.0.0 + dependencies: + '@nestjs/common': 9.4.3_j3td4gnlgk75ora6o6suo62byy + '@nestjs/core': 9.4.3_c4fgdp752ib7dsgrlnt7fswfce + body-parser: 1.20.2 + cors: 2.8.5 + express: 4.18.2 + multer: 1.4.4-lts.1 + tslib: 2.5.3 + transitivePeerDependencies: + - supports-color + + /@nestjs/schematics/9.2.0_n7i3t5jmyrdrkypb5pvfihcmg4: + resolution: {integrity: sha512-wHpNJDPzM6XtZUOB3gW0J6mkFCSJilzCM3XrHI1o0C8vZmFE1snbmkIXNyoi1eV0Nxh1BMymcgz5vIMJgQtTqw==} + peerDependencies: + typescript: '>=4.3.5' + dependencies: + '@angular-devkit/core': 16.0.1_chokidar@3.5.3 + '@angular-devkit/schematics': 16.0.1_chokidar@3.5.3 + jsonc-parser: 3.2.0 + pluralize: 8.0.0 + typescript: 4.9.5 + transitivePeerDependencies: + - chokidar + dev: true + + /@nestjs/schematics/9.2.0_typescript@4.9.5: + resolution: {integrity: sha512-wHpNJDPzM6XtZUOB3gW0J6mkFCSJilzCM3XrHI1o0C8vZmFE1snbmkIXNyoi1eV0Nxh1BMymcgz5vIMJgQtTqw==} + peerDependencies: + typescript: '>=4.3.5' + dependencies: + '@angular-devkit/core': 16.0.1 + '@angular-devkit/schematics': 16.0.1 + jsonc-parser: 3.2.0 + pluralize: 8.0.0 + typescript: 4.9.5 + transitivePeerDependencies: + - chokidar + dev: true + + /@nestjs/serve-static/3.0.1_vw2vky2jc6gkm6gj7lzrgmojyi: + resolution: {integrity: sha512-i766UJPYOqvQ2BbRKh0/+Mmq5NkJnmKcShjWV1i5qpXyeM0KDZTn0n7g7ykWq/3LbQgjpMzrhYtGv35GX7GVQw==} + peerDependencies: + '@fastify/static': ^6.5.0 + '@nestjs/common': ^9.0.0 + '@nestjs/core': ^9.0.0 + express: ^4.18.1 + fastify: ^4.7.0 + peerDependenciesMeta: + '@fastify/static': + optional: true + express: + optional: true + fastify: + optional: true + dependencies: + '@nestjs/common': 9.4.3_j3td4gnlgk75ora6o6suo62byy + '@nestjs/core': 9.4.3_c4fgdp752ib7dsgrlnt7fswfce + path-to-regexp: 0.2.5 + dev: true + + /@nestjs/swagger/6.3.0_ff6xh7k6m3kcxhzayktinvhdx4: + resolution: {integrity: sha512-Gnig189oa1tD+h0BYIfUwhp/wvvmTn6iO3csR2E4rQrDTgCxSxZDlNdfZo3AC+Rmf8u0KX4ZAX1RZN1qXTtC7A==} + peerDependencies: + '@fastify/static': ^6.0.0 + '@nestjs/common': ^9.0.0 + '@nestjs/core': ^9.0.0 + class-transformer: '*' + class-validator: '*' + reflect-metadata: ^0.1.12 + peerDependenciesMeta: + '@fastify/static': + optional: true + class-transformer: + optional: true + class-validator: + optional: true + dependencies: + '@nestjs/common': 9.4.3_j3td4gnlgk75ora6o6suo62byy + '@nestjs/core': 9.4.3_c4fgdp752ib7dsgrlnt7fswfce + '@nestjs/mapped-types': 1.2.2_i7luks5ses66diusqohyeqc2yi + class-transformer: 0.5.1 + class-validator: 0.14.0 + js-yaml: 4.1.0 + lodash: 4.17.21 + path-to-regexp: 3.2.0 + reflect-metadata: 0.1.13 + swagger-ui-dist: 4.18.2 + dev: true + + /@nestjs/testing/9.4.3_c2suh6ay6qzrduk6sfgpcvxpvi: + resolution: {integrity: sha512-LDT8Ai2eKnTzvnPaJwWOK03qTaFap5uHHsJCv6dL0uKWk6hyF9jms8DjyVaGsaujCaXDG8izl1mDEER0OmxaZA==} + peerDependencies: + '@nestjs/common': ^9.0.0 + '@nestjs/core': ^9.0.0 + '@nestjs/microservices': ^9.0.0 + '@nestjs/platform-express': ^9.0.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + dependencies: + '@nestjs/common': 9.4.3_j3td4gnlgk75ora6o6suo62byy + '@nestjs/core': 9.4.3_c4fgdp752ib7dsgrlnt7fswfce + '@nestjs/platform-express': 9.4.3_vw2vky2jc6gkm6gj7lzrgmojyi + tslib: 2.5.3 + dev: true + + /@nestjs/typeorm/9.0.1_nktyjm3hkn2boz7s6l2p266t2u: + resolution: {integrity: sha512-A2BgLIPsMtmMI0bPKEf4bmzgFPsnvHqNBx3KkvaJ7hJrBQy0OqYOb+Rr06ifblKWDWS2tUPNrAFQbZjtk3PI+g==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 + '@nestjs/core': ^8.0.0 || ^9.0.0 + reflect-metadata: ^0.1.13 + rxjs: ^7.2.0 + typeorm: ^0.3.0 + dependencies: + '@nestjs/common': 9.4.3_j3td4gnlgk75ora6o6suo62byy + '@nestjs/core': 9.4.3_c4fgdp752ib7dsgrlnt7fswfce + reflect-metadata: 0.1.13 + rxjs: 7.8.1 + typeorm: 0.3.17_ucsizvblneazg3mzm3rghga4yy + uuid: 8.3.2 + dev: true + + /@nicolo-ribaudo/semver-v6/6.3.3: + resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==} + hasBin: true + dev: true + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@npmcli/fs/1.1.1: + resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.5.4 + dev: true + optional: true + + /@npmcli/move-file/1.1.2: + resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} + engines: {node: '>=10'} + deprecated: This functionality has been moved to @npmcli/fs + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + dev: true + optional: true + + /@nuxtjs/opencollective/0.3.2: + resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + dependencies: + chalk: 4.1.2 + consola: 2.15.3 + node-fetch: 2.6.12 + transitivePeerDependencies: + - encoding + + /@sinclair/typebox/0.24.51: + resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} + dev: true + + /@sinonjs/commons/1.8.6: + resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers/9.1.2: + resolution: {integrity: sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==} + dependencies: + '@sinonjs/commons': 1.8.6 + dev: true + + /@sqltools/formatter/1.2.5: + resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} + dev: true + + /@tootallnate/once/1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: true + optional: true + + /@tsconfig/node10/1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12/1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14/1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16/1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@types/babel__core/7.20.1: + resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} + dependencies: + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.20.1 + dev: true + + /@types/babel__generator/7.6.4: + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@types/babel__template/7.4.1: + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + dependencies: + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + dev: true + + /@types/babel__traverse/7.20.1: + resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@types/body-parser/1.19.2: + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + dependencies: + '@types/connect': 3.4.35 + '@types/node': 16.18.38 + dev: true + + /@types/connect/3.4.35: + resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + dependencies: + '@types/node': 16.18.38 + dev: true + + /@types/cookiejar/2.1.2: + resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} + dev: true + + /@types/eslint-scope/3.7.4: + resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + dependencies: + '@types/eslint': 8.44.0 + '@types/estree': 1.0.1 + dev: true + + /@types/eslint/8.44.0: + resolution: {integrity: sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==} + dependencies: + '@types/estree': 1.0.1 + '@types/json-schema': 7.0.12 + dev: true + + /@types/estree/1.0.1: + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + dev: true + + /@types/express-serve-static-core/4.17.35: + resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} + dependencies: + '@types/node': 16.18.38 + '@types/qs': 6.9.7 + '@types/range-parser': 1.2.4 + '@types/send': 0.17.1 + dev: true + + /@types/express/4.17.17: + resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} + dependencies: + '@types/body-parser': 1.19.2 + '@types/express-serve-static-core': 4.17.35 + '@types/qs': 6.9.7 + '@types/serve-static': 1.15.2 + dev: true + + /@types/graceful-fs/4.1.6: + resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} + dependencies: + '@types/node': 16.18.38 + dev: true + + /@types/http-errors/2.0.1: + resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} + dev: true + + /@types/istanbul-lib-coverage/2.0.4: + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + dev: true + + /@types/istanbul-lib-report/3.0.0: + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + dev: true + + /@types/istanbul-reports/3.0.1: + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + dependencies: + '@types/istanbul-lib-report': 3.0.0 + dev: true + + /@types/jest/28.1.4: + resolution: {integrity: sha512-telv6G5N7zRJiLcI3Rs3o+ipZ28EnE+7EvF0pSrt2pZOMnAVI/f+6/LucDxOvcBcTeTL3JMF744BbVQAVBUQRA==} + dependencies: + jest-matcher-utils: 28.1.3 + pretty-format: 28.1.3 + dev: true + + /@types/json-schema/7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + dev: true + + /@types/jsonwebtoken/9.0.2: + resolution: {integrity: sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==} + dependencies: + '@types/node': 16.18.38 + dev: true + + /@types/lodash-es/4.17.7: + resolution: {integrity: sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==} + dependencies: + '@types/lodash': 4.14.195 + dev: true + + /@types/lodash/4.14.195: + resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==} + dev: true + + /@types/mime/1.3.2: + resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} + dev: true + + /@types/mime/3.0.1: + resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} + dev: true + + /@types/mockjs/1.0.7: + resolution: {integrity: sha512-OCxXz6hEaJOVpRwuJMiVY5a6LtJcih+br9gwB/Q8ooOBikvk5FpBQ31OlNimXo3EqKha1Z7PFBni+q9m+8NCWg==} + dev: true + + /@types/multer/1.4.7: + resolution: {integrity: sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==} + dependencies: + '@types/express': 4.17.17 + dev: true + + /@types/node/16.18.38: + resolution: {integrity: sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==} + dev: true + + /@types/parse-json/4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: true + + /@types/prettier/2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + dev: true + + /@types/qs/6.9.7: + resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} + dev: true + + /@types/range-parser/1.2.4: + resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + dev: true + + /@types/semver/7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + dev: true + + /@types/send/0.17.1: + resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} + dependencies: + '@types/mime': 1.3.2 + '@types/node': 16.18.38 + dev: true + + /@types/serve-static/1.15.2: + resolution: {integrity: sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==} + dependencies: + '@types/http-errors': 2.0.1 + '@types/mime': 3.0.1 + '@types/node': 16.18.38 + dev: true + + /@types/stack-utils/2.0.1: + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + dev: true + + /@types/superagent/4.1.18: + resolution: {integrity: sha512-LOWgpacIV8GHhrsQU+QMZuomfqXiqzz3ILLkCtKx3Us6AmomFViuzKT9D693QTKgyut2oCytMG8/efOop+DB+w==} + dependencies: + '@types/cookiejar': 2.1.2 + '@types/node': 16.18.38 + dev: true + + /@types/supertest/2.0.12: + resolution: {integrity: sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==} + dependencies: + '@types/superagent': 4.1.18 + dev: true + + /@types/uuid/9.0.2: + resolution: {integrity: sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==} + dev: true + + /@types/validator/13.7.17: + resolution: {integrity: sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==} + + /@types/yargs-parser/21.0.0: + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + dev: true + + /@types/yargs/17.0.24: + resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} + dependencies: + '@types/yargs-parser': 21.0.0 + dev: true + + /@typescript-eslint/eslint-plugin/5.61.0_tiwiljqgmizmat2g4tqcn7wxxu: + resolution: {integrity: sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.5.1 + '@typescript-eslint/parser': 5.61.0_c6scop6gobf6637sntyzfiffg4 + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/type-utils': 5.61.0_c6scop6gobf6637sntyzfiffg4 + '@typescript-eslint/utils': 5.61.0_c6scop6gobf6637sntyzfiffg4 + debug: 4.3.4 + eslint: 8.44.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser/5.61.0_c6scop6gobf6637sntyzfiffg4: + resolution: {integrity: sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/typescript-estree': 5.61.0_typescript@4.9.5 + debug: 4.3.4 + eslint: 8.44.0 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/5.61.0: + resolution: {integrity: sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/visitor-keys': 5.61.0 + dev: true + + /@typescript-eslint/type-utils/5.61.0_c6scop6gobf6637sntyzfiffg4: + resolution: {integrity: sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.61.0_typescript@4.9.5 + '@typescript-eslint/utils': 5.61.0_c6scop6gobf6637sntyzfiffg4 + debug: 4.3.4 + eslint: 8.44.0 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types/5.61.0: + resolution: {integrity: sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree/5.61.0_typescript@4.9.5: + resolution: {integrity: sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/visitor-keys': 5.61.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils/5.61.0_c6scop6gobf6637sntyzfiffg4: + resolution: {integrity: sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.44.0 + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/typescript-estree': 5.61.0_typescript@4.9.5 + eslint: 8.44.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys/5.61.0: + resolution: {integrity: sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.61.0 + eslint-visitor-keys: 3.4.1 + dev: true + + /@webassemblyjs/ast/1.11.6: + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: true + + /@webassemblyjs/floating-point-hex-parser/1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: true + + /@webassemblyjs/helper-api-error/1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: true + + /@webassemblyjs/helper-buffer/1.11.6: + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} + dev: true + + /@webassemblyjs/helper-numbers/1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/helper-wasm-bytecode/1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: true + + /@webassemblyjs/helper-wasm-section/1.11.6: + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + dev: true + + /@webassemblyjs/ieee754/1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + + /@webassemblyjs/leb128/1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/utf8/1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: true + + /@webassemblyjs/wasm-edit/1.11.6: + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 + dev: true + + /@webassemblyjs/wasm-gen/1.11.6: + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wasm-opt/1.11.6: + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + dev: true + + /@webassemblyjs/wasm-parser/1.11.6: + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wast-printer/1.11.6: + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@xtuc/long': 4.2.2 + dev: true + + /@xtuc/ieee754/1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: true + + /@xtuc/long/4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: true + + /abbrev/1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + dev: true + + /accepts/1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + /acorn-import-assertions/1.9.0_acorn@8.10.0: + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.10.0 + dev: true + + /acorn-jsx/5.3.2_acorn@8.10.0: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + dev: true + + /acorn-walk/8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn/8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /agentkeepalive/4.3.0: + resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} + engines: {node: '>= 8.0.0'} + dependencies: + debug: 4.3.4 + depd: 2.0.0 + humanize-ms: 1.2.1 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /aggregate-error/3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + optional: true + + /ajv-formats/2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.12.0 + dev: true + + /ajv-keywords/3.5.2_ajv@6.12.6: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: true + + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv/8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-colors/4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: true + + /ansi-escapes/4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles/5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /any-promise/1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch/3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /app-root-path/3.1.0: + resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==} + engines: {node: '>= 6.0.0'} + dev: true + + /append-field/1.0.0: + resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} + + /aproba/2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + dev: true + + /are-we-there-yet/2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + dev: true + + /are-we-there-yet/3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + dev: true + optional: true + + /arg/4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /argparse/1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /array-flatten/1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /asap/2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + + /babel-jest/28.1.3_@babel+core@7.22.8: + resolution: {integrity: sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.22.8 + '@jest/transform': 28.1.3 + '@types/babel__core': 7.20.1 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 28.1.3_@babel+core@7.22.8 + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-istanbul/6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.22.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-jest-hoist/28.1.3: + resolution: {integrity: sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + '@types/babel__core': 7.20.1 + '@types/babel__traverse': 7.20.1 + dev: true + + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.22.8: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.8 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.22.8 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.22.8 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.22.8 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.22.8 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.22.8 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.22.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.22.8 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.22.8 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.22.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.22.8 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.22.8 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.22.8 + dev: true + + /babel-preset-jest/28.1.3_@babel+core@7.22.8: + resolution: {integrity: sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.8 + babel-plugin-jest-hoist: 28.1.3 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.22.8 + dev: true + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bl/4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /body-parser/1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + /body-parser/1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion/2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist/4.21.9: + resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001514 + electron-to-chromium: 1.4.454 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11_browserslist@4.21.9 + dev: true + + /bs-logger/0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + dependencies: + fast-json-stable-stringify: 2.1.0 + dev: true + + /bser/2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: true + + /buffer-equal-constant-time/1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + dev: true + + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /buffer/6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /busboy/1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + + /bytes/3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + /cacache/15.3.0: + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} + engines: {node: '>= 10'} + dependencies: + '@npmcli/fs': 1.1.1 + '@npmcli/move-file': 1.1.2 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 7.2.3 + infer-owner: 1.0.4 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 8.0.1 + tar: 6.1.15 + unique-filename: 1.1.1 + transitivePeerDependencies: + - bluebird + dev: true + optional: true + + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase/5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /camelcase/6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /caniuse-lite/1.0.30001514: + resolution: {integrity: sha512-ENcIpYBmwAAOm/V2cXgM7rZUrKKaqisZl4ZAI520FIkqGXUxJjmaIssbRW5HVVR5tyV6ygTLIm15aU8LUmQSaQ==} + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /char-regex/1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: true + + /chardet/0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /chownr/2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + dev: true + + /chrome-trace-event/1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: true + + /ci-info/3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} + dev: true + + /cjs-module-lexer/1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + dev: true + + /class-transformer/0.5.1: + resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} + + /class-validator/0.14.0: + resolution: {integrity: sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==} + dependencies: + '@types/validator': 13.7.17 + libphonenumber-js: 1.10.37 + validator: 13.9.0 + + /clean-stack/2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + optional: true + + /cli-cursor/3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-highlight/2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + dev: true + + /cli-spinners/2.9.0: + resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} + engines: {node: '>=6'} + dev: true + + /cli-table3/0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + dev: true + + /cli-width/3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: true + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /cliui/8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone/1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + + /co/4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true + + /collect-v8-coverage/1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: true + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /color-support/1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + dev: true + + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true + + /commander/11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + dev: true + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + + /commander/4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /component-emitter/1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /concat-stream/1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + + /consola/2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + + /console-control-strings/1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + dev: true + + /content-disposition/0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + + /content-type/1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /cookie-signature/1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + /cookie/0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + + /cookiejar/2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + dev: true + + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + /cors/2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + /cosmiconfig/7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /create-require/1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /date-fns/2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': 7.22.6 + dev: true + + /dayjs/1.11.9: + resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==} + dev: true + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /dedent/0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dev: true + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /deepmerge/4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + + /defaults/1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: true + + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + + /delegates/1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + dev: true + + /denque/2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + dev: true + + /depd/2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + /destroy/1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + /detect-libc/2.0.1: + resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} + engines: {node: '>=8'} + dev: true + + /detect-newline/3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true + + /dezalgo/1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + dev: true + + /diff-sequences/28.1.1: + resolution: {integrity: sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true + + /diff/4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dotenv-expand/10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + dev: true + + /dotenv/16.1.4: + resolution: {integrity: sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==} + engines: {node: '>=12'} + dev: true + + /dotenv/16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + dev: true + + /ecdsa-sig-formatter/1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /ee-first/1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + /electron-to-chromium/1.4.454: + resolution: {integrity: sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ==} + dev: true + + /emittery/0.10.2: + resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} + engines: {node: '>=12'} + dev: true + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /encodeurl/1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + /encoding/0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + requiresBuild: true + dependencies: + iconv-lite: 0.6.3 + dev: true + optional: true + + /end-of-stream/1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /enhanced-resolve/5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + + /env-paths/2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + dev: true + optional: true + + /err-code/2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + dev: true + optional: true + + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-module-lexer/1.3.0: + resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-html/1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp/2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true + + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-prettier/8.8.0_eslint@8.44.0: + resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.44.0 + dev: true + + /eslint-plugin-prettier/4.2.1_qkgbdr345imkz5woyd5e5k6xse: + resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: '>=7.28.0' + eslint-config-prettier: '*' + prettier: '>=2.0.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + dependencies: + eslint: 8.44.0 + eslint-config-prettier: 8.8.0_eslint@8.44.0 + prettier: 2.8.8 + prettier-linter-helpers: 1.0.0 + dev: true + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope/7.2.0: + resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys/3.4.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint/8.44.0: + resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.44.0 + '@eslint-community/regexpp': 4.5.1 + '@eslint/eslintrc': 2.1.0 + '@eslint/js': 8.44.0 + '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.0 + eslint-visitor-keys: 3.4.1 + espree: 9.6.0 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + graphemer: 1.4.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree/9.6.0: + resolution: {integrity: sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2_acorn@8.10.0 + eslint-visitor-keys: 3.4.1 + dev: true + + /esprima/4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esquery/1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /etag/1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + /events/3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /execa/4.1.0: + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 5.2.0 + human-signals: 1.1.1 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa/5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /exit/0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: true + + /expect/28.1.3: + resolution: {integrity: sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/expect-utils': 28.1.3 + jest-get-type: 28.0.2 + jest-matcher-utils: 28.1.3 + jest-message-util: 28.1.3 + jest-util: 28.1.3 + dev: true + + /express/4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + /external-editor/3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-diff/1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + + /fast-glob/3.3.0: + resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fast-safe-stringify/2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + /fastq/1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /fb-watchman/2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + dev: true + + /figures/3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /file-entry-cache/6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /finalhandler/1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache/3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: true + + /flatted/3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: true + + /fork-ts-checker-webpack-plugin/8.0.0_hybrf64lftnf5l2xwgg7goi2iu: + resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 + dependencies: + '@babel/code-frame': 7.22.5 + chalk: 4.1.2 + chokidar: 3.5.3 + cosmiconfig: 7.1.0 + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.5.4 + tapable: 2.2.1 + typescript: 4.9.5 + webpack: 5.82.1 + dev: true + + /form-data/4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + + /formidable/2.1.2: + resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} + dependencies: + dezalgo: 1.0.4 + hexoid: 1.0.0 + once: 1.4.0 + qs: 6.11.2 + dev: true + + /forwarded/0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + /fresh/0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + /fs-extra/10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs-minipass/2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + + /fs-monkey/1.0.4: + resolution: {integrity: sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==} + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + + /gauge/3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + dev: true + + /gauge/4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + dev: true + optional: true + + /generate-function/2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + dependencies: + is-property: 1.0.2 + dev: true + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-intrinsic/1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + + /get-package-type/0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true + + /get-stream/5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: true + + /get-stream/6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-to-regexp/0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: true + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /glob/8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: true + + /glob/9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.10.1 + dev: true + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals/13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.0 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /graceful-fs/4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /graphemer/1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-proto/1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + /has-unicode/2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + + /hexoid/1.0.0: + resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} + engines: {node: '>=8'} + dev: true + + /highlight.js/10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + dev: true + + /html-escaper/2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + + /http-cache-semantics/4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: true + optional: true + + /http-errors/2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + /http-proxy-agent/4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /https-proxy-agent/5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /human-signals/1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + dev: true + + /human-signals/2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /humanize-ms/1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.3 + dev: true + optional: true + + /iconv-lite/0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + + /iconv-lite/0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore/5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + dev: true + + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /import-local/3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + + /imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string/4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + optional: true + + /infer-owner/1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + dev: true + optional: true + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /inquirer/8.2.4: + resolution: {integrity: sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + dev: true + + /inquirer/8.2.5: + resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + dev: true + + /interpret/1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true + + /ip/2.0.0: + resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + dev: true + optional: true + + /ipaddr.js/1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + /is-arrayish/0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-core-module/2.12.1: + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + dependencies: + has: 1.0.3 + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-generator-fn/2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: true + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-interactive/1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true + + /is-lambda/1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + dev: true + optional: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-property/1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + dev: true + + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-unicode-supported/0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /isarray/1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /istanbul-lib-coverage/3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-instrument/5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.22.8 + '@babel/parser': 7.22.7 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-report/3.0.0: + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} + dependencies: + istanbul-lib-coverage: 3.2.0 + make-dir: 3.1.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps/4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports/3.1.5: + resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.0 + dev: true + + /iterare/1.2.1: + resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} + engines: {node: '>=6'} + + /jest-changed-files/28.1.3: + resolution: {integrity: sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + execa: 5.1.1 + p-limit: 3.1.0 + dev: true + + /jest-circus/28.1.3: + resolution: {integrity: sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/environment': 28.1.3 + '@jest/expect': 28.1.3 + '@jest/test-result': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 16.18.38 + chalk: 4.1.2 + co: 4.6.0 + dedent: 0.7.0 + is-generator-fn: 2.1.0 + jest-each: 28.1.3 + jest-matcher-utils: 28.1.3 + jest-message-util: 28.1.3 + jest-runtime: 28.1.3 + jest-snapshot: 28.1.3 + jest-util: 28.1.3 + p-limit: 3.1.0 + pretty-format: 28.1.3 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-cli/28.1.3_734c4vwpoc3zmfagshlprrefne: + resolution: {integrity: sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 28.1.3_ts-node@10.9.1 + '@jest/test-result': 28.1.3 + '@jest/types': 28.1.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + import-local: 3.1.0 + jest-config: 28.1.3_734c4vwpoc3zmfagshlprrefne + jest-util: 28.1.3 + jest-validate: 28.1.3 + prompts: 2.4.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + + /jest-config/28.1.3_734c4vwpoc3zmfagshlprrefne: + resolution: {integrity: sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.22.8 + '@jest/test-sequencer': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 16.18.38 + babel-jest: 28.1.3_@babel+core@7.22.8 + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 28.1.3 + jest-environment-node: 28.1.3 + jest-get-type: 28.0.2 + jest-regex-util: 28.0.2 + jest-resolve: 28.1.3 + jest-runner: 28.1.3 + jest-util: 28.1.3 + jest-validate: 28.1.3 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 28.1.3 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.1_npeoqfxwgl5njwqojmpesqhar4 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-diff/28.1.3: + resolution: {integrity: sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 28.1.1 + jest-get-type: 28.0.2 + pretty-format: 28.1.3 + dev: true + + /jest-docblock/28.1.1: + resolution: {integrity: sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + + /jest-each/28.1.3: + resolution: {integrity: sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + chalk: 4.1.2 + jest-get-type: 28.0.2 + jest-util: 28.1.3 + pretty-format: 28.1.3 + dev: true + + /jest-environment-node/28.1.3: + resolution: {integrity: sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/environment': 28.1.3 + '@jest/fake-timers': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 16.18.38 + jest-mock: 28.1.3 + jest-util: 28.1.3 + dev: true + + /jest-get-type/28.0.2: + resolution: {integrity: sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true + + /jest-haste-map/28.1.3: + resolution: {integrity: sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/graceful-fs': 4.1.6 + '@types/node': 16.18.38 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 28.0.2 + jest-util: 28.1.3 + jest-worker: 28.1.3 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /jest-leak-detector/28.1.3: + resolution: {integrity: sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + jest-get-type: 28.0.2 + pretty-format: 28.1.3 + dev: true + + /jest-matcher-utils/28.1.3: + resolution: {integrity: sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 28.1.3 + jest-get-type: 28.0.2 + pretty-format: 28.1.3 + dev: true + + /jest-message-util/28.1.3: + resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@babel/code-frame': 7.22.5 + '@jest/types': 28.1.3 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 28.1.3 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-mock/28.1.3: + resolution: {integrity: sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 16.18.38 + dev: true + + /jest-pnp-resolver/1.2.3_jest-resolve@28.1.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 28.1.3 + dev: true + + /jest-regex-util/28.0.2: + resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true + + /jest-resolve-dependencies/28.1.3: + resolution: {integrity: sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + jest-regex-util: 28.0.2 + jest-snapshot: 28.1.3 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-resolve/28.1.3: + resolution: {integrity: sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 28.1.3 + jest-pnp-resolver: 1.2.3_jest-resolve@28.1.3 + jest-util: 28.1.3 + jest-validate: 28.1.3 + resolve: 1.22.2 + resolve.exports: 1.1.1 + slash: 3.0.0 + dev: true + + /jest-runner/28.1.3: + resolution: {integrity: sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/console': 28.1.3 + '@jest/environment': 28.1.3 + '@jest/test-result': 28.1.3 + '@jest/transform': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 16.18.38 + chalk: 4.1.2 + emittery: 0.10.2 + graceful-fs: 4.2.11 + jest-docblock: 28.1.1 + jest-environment-node: 28.1.3 + jest-haste-map: 28.1.3 + jest-leak-detector: 28.1.3 + jest-message-util: 28.1.3 + jest-resolve: 28.1.3 + jest-runtime: 28.1.3 + jest-util: 28.1.3 + jest-watcher: 28.1.3 + jest-worker: 28.1.3 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-runtime/28.1.3: + resolution: {integrity: sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/environment': 28.1.3 + '@jest/fake-timers': 28.1.3 + '@jest/globals': 28.1.3 + '@jest/source-map': 28.1.2 + '@jest/test-result': 28.1.3 + '@jest/transform': 28.1.3 + '@jest/types': 28.1.3 + chalk: 4.1.2 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2 + execa: 5.1.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 28.1.3 + jest-message-util: 28.1.3 + jest-mock: 28.1.3 + jest-regex-util: 28.0.2 + jest-resolve: 28.1.3 + jest-snapshot: 28.1.3 + jest-util: 28.1.3 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-snapshot/28.1.3: + resolution: {integrity: sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@babel/core': 7.22.8 + '@babel/generator': 7.22.7 + '@babel/plugin-syntax-typescript': 7.22.5_@babel+core@7.22.8 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + '@jest/expect-utils': 28.1.3 + '@jest/transform': 28.1.3 + '@jest/types': 28.1.3 + '@types/babel__traverse': 7.20.1 + '@types/prettier': 2.7.3 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.22.8 + chalk: 4.1.2 + expect: 28.1.3 + graceful-fs: 4.2.11 + jest-diff: 28.1.3 + jest-get-type: 28.0.2 + jest-haste-map: 28.1.3 + jest-matcher-utils: 28.1.3 + jest-message-util: 28.1.3 + jest-util: 28.1.3 + natural-compare: 1.4.0 + pretty-format: 28.1.3 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-util/28.1.3: + resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 16.18.38 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + + /jest-validate/28.1.3: + resolution: {integrity: sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 28.0.2 + leven: 3.1.0 + pretty-format: 28.1.3 + dev: true + + /jest-watcher/28.1.3: + resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/test-result': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 16.18.38 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.10.2 + jest-util: 28.1.3 + string-length: 4.0.2 + dev: true + + /jest-worker/27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 16.18.38 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /jest-worker/28.1.3: + resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@types/node': 16.18.38 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /jest/28.1.2_734c4vwpoc3zmfagshlprrefne: + resolution: {integrity: sha512-Tuf05DwLeCh2cfWCQbcz9UxldoDyiR1E9Igaei5khjonKncYdc6LDfynKCEWozK0oLE3GD+xKAo2u8x/0s6GOg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 28.1.3_ts-node@10.9.1 + '@jest/types': 28.1.3 + import-local: 3.1.0 + jest-cli: 28.1.3_734c4vwpoc3zmfagshlprrefne + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml/3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-parse-even-better-errors/2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-schema-traverse/1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5/2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonc-parser/3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: true + + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /jsonwebtoken/9.0.0: + resolution: {integrity: sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==} + engines: {node: '>=12', npm: '>=6'} + dependencies: + jws: 3.2.2 + lodash: 4.17.21 + ms: 2.1.3 + semver: 7.5.4 + dev: true + + /jsonwebtoken/9.0.1: + resolution: {integrity: sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==} + engines: {node: '>=12', npm: '>=6'} + dependencies: + jws: 3.2.2 + lodash: 4.17.21 + ms: 2.1.3 + semver: 7.5.4 + dev: true + + /jwa/1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: true + + /jws/3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + dev: true + + /kleur/3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true + + /leven/3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + + /levn/0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /libphonenumber-js/1.10.37: + resolution: {integrity: sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==} + + /lines-and-columns/1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /loader-runner/4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: true + + /locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash-es/4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: true + + /lodash.memoize/4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /log-symbols/4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /long/5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + dev: true + + /lru-cache/10.0.0: + resolution: {integrity: sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==} + engines: {node: 14 || >=16.14} + dev: true + + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /lru-cache/7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: true + + /lru-cache/8.0.5: + resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} + engines: {node: '>=16.14'} + dev: true + + /macos-release/2.5.1: + resolution: {integrity: sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==} + engines: {node: '>=6'} + dev: true + + /magic-string/0.30.0: + resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /make-dir/3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.0 + dev: true + + /make-error/1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /make-fetch-happen/9.1.0: + resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} + engines: {node: '>= 10'} + dependencies: + agentkeepalive: 4.3.0 + cacache: 15.3.0 + http-cache-semantics: 4.1.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 1.4.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.3 + promise-retry: 2.0.1 + socks-proxy-agent: 6.2.1 + ssri: 8.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + optional: true + + /makeerror/1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: true + + /media-typer/0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + /memfs/3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.4 + dev: true + + /merge-descriptors/1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /methods/1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mime-db/1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + /mime-types/2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + + /mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + /mime/2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + dev: true + + /mimic-fn/2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch/5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch/8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + /minipass-collect/1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + optional: true + + /minipass-fetch/1.4.1: + resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + dev: true + optional: true + + /minipass-flush/1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + optional: true + + /minipass-pipeline/1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.6 + dev: true + optional: true + + /minipass-sized/1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.6 + dev: true + optional: true + + /minipass/3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: true + + /minipass/4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + dev: true + + /minipass/5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + dev: true + + /minipass/7.0.1: + resolution: {integrity: sha512-NQ8MCKimInjVlaIqx51RKJJB7mINVkLTJbsZKmto4UAAOC/CWXES8PGaOgoBZyqoUsUA/U3DToGK7GJkkHbjJw==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /minizlib/2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + dev: true + + /mkdirp/0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + + /mkdirp/1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /mkdirp/2.1.6: + resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /mockjs/1.1.0: + resolution: {integrity: sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==} + hasBin: true + dependencies: + commander: 11.0.0 + dev: true + + /ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /multer/1.4.4-lts.1: + resolution: {integrity: sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==} + engines: {node: '>= 6.0.0'} + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 1.6.2 + mkdirp: 0.5.6 + object-assign: 4.1.1 + type-is: 1.6.18 + xtend: 4.0.2 + + /multer/1.4.5-lts.1: + resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} + engines: {node: '>= 6.0.0'} + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 1.6.2 + mkdirp: 0.5.6 + object-assign: 4.1.1 + type-is: 1.6.18 + xtend: 4.0.2 + dev: true + + /mute-stream/0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true + + /mysql2/3.5.1: + resolution: {integrity: sha512-RyaeUBqMiFR1ivk78JToPz0MhwN/sUWCKwPZszbXaFNZ6wmP/EJNPDU6gbZkF+qtLjr3sULQb0Y7JuFrNblnDg==} + engines: {node: '>= 8.0'} + dependencies: + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.6.3 + long: 5.2.3 + lru-cache: 8.0.5 + named-placeholders: 1.1.3 + seq-queue: 0.0.5 + sqlstring: 2.3.3 + dev: true + + /mz/2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /named-placeholders/1.1.3: + resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==} + engines: {node: '>=12.0.0'} + dependencies: + lru-cache: 7.18.3 + dev: true + + /nanoid/4.0.2: + resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} + engines: {node: ^14 || ^16 || >=18} + hasBin: true + dev: true + + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /negotiator/0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + /neo-async/2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /node-abort-controller/3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: true + + /node-addon-api/4.3.0: + resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} + dev: true + + /node-emoji/1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + dependencies: + lodash: 4.17.21 + dev: true + + /node-fetch/2.6.12: + resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + + /node-gyp/8.4.1: + resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} + engines: {node: '>= 10.12.0'} + hasBin: true + requiresBuild: true + dependencies: + env-paths: 2.2.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 9.1.0 + nopt: 5.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.5.4 + tar: 6.1.15 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + optional: true + + /node-int64/0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true + + /node-releases/2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + + /nopt/5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npmlog/5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + dev: true + + /npmlog/6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + dev: true + optional: true + + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + + /on-finished/2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /optionator/0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /ora/5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.0 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + + /os-name/4.0.1: + resolution: {integrity: sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==} + engines: {node: '>=10'} + dependencies: + macos-release: 2.5.1 + windows-release: 4.0.0 + dev: true + + /os-tmpdir/1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + + /p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-map/4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: true + optional: true + + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-json/5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.22.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /parse5-htmlparser2-tree-adapter/6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + dependencies: + parse5: 6.0.1 + dev: true + + /parse5/5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + dev: true + + /parse5/6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: true + + /parseurl/1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + /passport-jwt/4.0.1: + resolution: {integrity: sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==} + dependencies: + jsonwebtoken: 9.0.1 + passport-strategy: 1.0.0 + dev: true + + /passport-local/1.0.0: + resolution: {integrity: sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==} + engines: {node: '>= 0.4.0'} + dependencies: + passport-strategy: 1.0.0 + dev: true + + /passport-strategy/1.0.0: + resolution: {integrity: sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==} + engines: {node: '>= 0.4.0'} + dev: true + + /passport/0.6.0: + resolution: {integrity: sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==} + engines: {node: '>= 0.4.0'} + dependencies: + passport-strategy: 1.0.0 + pause: 0.0.1 + utils-merge: 1.0.1 + dev: true + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-scurry/1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.0.0 + minipass: 7.0.1 + dev: true + + /path-to-regexp/0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + /path-to-regexp/0.2.5: + resolution: {integrity: sha512-l6qtdDPIkmAmzEO6egquYDfqQGPMRNGjYtrU13HAXb3YSRrt7HSb1sJY0pKp6o2bAa86tSB6iwaW2JbthPKr7Q==} + dev: true + + /path-to-regexp/3.2.0: + resolution: {integrity: sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==} + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pause/0.0.1: + resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pirates/4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /pkg-dir/4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /pluralize/8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-linter-helpers/1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.3.0 + dev: true + + /prettier/2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /pretty-format/28.1.3: + resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + /promise-inflight/1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dev: true + optional: true + + /promise-retry/2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + dev: true + optional: true + + /prompts/2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + + /proxy-addr/2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + /pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + dev: true + + /qs/6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + + /qs/6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /range-parser/1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + /raw-body/2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + /raw-body/2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + /react-is/18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + + /readable-stream/2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + /readable-stream/3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /rechoir/0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.2 + dev: true + + /reflect-metadata/0.1.13: + resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} + + /regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + + /require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /require-from-string/2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-cwd/3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-from/5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve.exports/1.1.1: + resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} + engines: {node: '>=10'} + dev: true + + /resolve/1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + hasBin: true + dependencies: + is-core-module: 2.12.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /restore-cursor/3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /retry/0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + dev: true + optional: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + + /rimraf/4.4.1: + resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} + engines: {node: '>=14'} + hasBin: true + dependencies: + glob: 9.3.5 + dev: true + + /run-async/2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rxjs/7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.0 + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + /schema-utils/3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.12 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: true + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /semver/7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /send/0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + /seq-queue/0.0.5: + resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} + dev: true + + /serialize-javascript/6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + dependencies: + randombytes: 2.1.0 + dev: true + + /serve-static/1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + + /set-blocking/2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: true + + /setprototypeof/1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + /sha.js/2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /shelljs/0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: true + + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 + + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /sisteransi/1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /smart-buffer/4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: true + optional: true + + /socks-proxy-agent/6.2.1: + resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} + engines: {node: '>= 10'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + socks: 2.7.1 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /socks/2.7.1: + resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} + engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + dependencies: + ip: 2.0.0 + smart-buffer: 4.2.0 + dev: true + optional: true + + /source-map-support/0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map-support/0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map/0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true + + /sprintf-js/1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /sqlite3/5.1.6: + resolution: {integrity: sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==} + requiresBuild: true + peerDependenciesMeta: + node-gyp: + optional: true + dependencies: + '@mapbox/node-pre-gyp': 1.0.10 + node-addon-api: 4.3.0 + tar: 6.1.15 + optionalDependencies: + node-gyp: 8.4.1 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + dev: true + + /sqlstring/2.3.3: + resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} + engines: {node: '>= 0.6'} + dev: true + + /ssri/8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + optional: true + + /stack-utils/2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true + + /statuses/2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + /streamsearch/1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + /string-length/4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-bom/4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true + + /strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /superagent/8.0.9: + resolution: {integrity: sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==} + engines: {node: '>=6.4.0 <13 || >=14'} + dependencies: + component-emitter: 1.3.0 + cookiejar: 2.1.4 + debug: 4.3.4 + fast-safe-stringify: 2.1.1 + form-data: 4.0.0 + formidable: 2.1.2 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.11.2 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /supertest/6.3.3: + resolution: {integrity: sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==} + engines: {node: '>=6.4.0'} + dependencies: + methods: 1.1.2 + superagent: 8.0.9 + transitivePeerDependencies: + - supports-color + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-color/8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-hyperlinks/2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /swagger-ui-dist/4.18.2: + resolution: {integrity: sha512-oVBoBl9Dg+VJw8uRWDxlyUyHoNEDC0c1ysT6+Boy6CTgr2rUcLcfPon4RvxgS2/taNW6O0+US+Z/dlAsWFjOAQ==} + dev: true + + /symbol-observable/4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + dev: true + + /tapable/2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + + /tar/6.1.15: + resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: true + + /terminal-link/2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.3.0 + dev: true + + /terser-webpack-plugin/5.3.9_webpack@5.82.1: + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.18 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.18.2 + webpack: 5.82.1 + dev: true + + /terser-webpack-plugin/5.3.9_webpack@5.88.1: + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.18 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.18.2 + webpack: 5.88.1 + dev: true + + /terser/5.18.2: + resolution: {integrity: sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.10.0 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + + /test-exclude/6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + + /text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /thenify-all/1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify/3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /tmp/0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + + /tmpl/1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /toidentifier/1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + /tr46/0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + /tree-kill/1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + + /ts-jest/28.0.5_rv5warumbl7utqrnn4zdksbofm: + resolution: {integrity: sha512-Sx9FyP9pCY7pUzQpy4FgRZf2bhHY3za576HMKJFs+OnQ9jS96Du5vNsDKkyedQkik+sEabbKAnCliv9BEsHZgQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + babel-jest: ^28.0.0 + esbuild: '*' + jest: ^28.0.0 + typescript: '>=4.3' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 28.1.2_734c4vwpoc3zmfagshlprrefne + jest-util: 28.1.3 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.5.4 + typescript: 4.9.5 + yargs-parser: 21.1.1 + dev: true + + /ts-loader/9.4.4_dhumxs7xcapy5ah5ryvaq7oilu: + resolution: {integrity: sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.15.0 + micromatch: 4.0.5 + semver: 7.5.4 + typescript: 4.9.5 + webpack: 5.88.1 + dev: true + + /ts-node/10.9.1_npeoqfxwgl5njwqojmpesqhar4: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 16.18.38 + acorn: 8.10.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.9.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /tsconfig-paths-webpack-plugin/4.0.1: + resolution: {integrity: sha512-m5//KzLoKmqu2MVix+dgLKq70MnFi8YL8sdzQZ6DblmCdfuq/y3OqvJd5vMndg2KEVCOeNz8Es4WVZhYInteLw==} + engines: {node: '>=10.13.0'} + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.15.0 + tsconfig-paths: 4.2.0 + dev: true + + /tsconfig-paths/4.0.0: + resolution: {integrity: sha512-SLBg2GBKlR6bVtMgJJlud/o3waplKtL7skmLkExomIiaAtLGtVsoXIqP3SYdjbcH9lq/KVv7pMZeCBpLYOit6Q==} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tsconfig-paths/4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tslib/2.5.3: + resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} + + /tslib/2.6.0: + resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} + + /tsutils/3.21.0_typescript@4.9.5: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.9.5 + dev: true + + /type-check/0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-detect/4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /type-is/1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + /typedarray/0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + /typeorm-naming-strategies/4.1.0_typeorm@0.3.17: + resolution: {integrity: sha512-vPekJXzZOTZrdDvTl1YoM+w+sUIfQHG4kZTpbFYoTsufyv9NIBRe4Q+PdzhEAFA2std3D9LZHEb1EjE9zhRpiQ==} + peerDependencies: + typeorm: ^0.2.0 || ^0.3.0 + dependencies: + typeorm: 0.3.17_ucsizvblneazg3mzm3rghga4yy + dev: true + + /typeorm/0.3.17_ucsizvblneazg3mzm3rghga4yy: + resolution: {integrity: sha512-UDjUEwIQalO9tWw9O2A4GU+sT3oyoUXheHJy4ft+RFdnRdQctdQ34L9SqE2p7LdwzafHx1maxT+bqXON+Qnmig==} + engines: {node: '>= 12.9.0'} + hasBin: true + peerDependencies: + '@google-cloud/spanner': ^5.18.0 + '@sap/hana-client': ^2.12.25 + better-sqlite3: ^7.1.2 || ^8.0.0 + hdb-pool: ^0.1.6 + ioredis: ^5.0.4 + mongodb: ^5.2.0 + mssql: ^9.1.1 + mysql2: ^2.2.5 || ^3.0.1 + oracledb: ^5.1.0 + pg: ^8.5.1 + pg-native: ^3.0.0 + pg-query-stream: ^4.0.0 + redis: ^3.1.1 || ^4.0.0 + sql.js: ^1.4.0 + sqlite3: ^5.0.3 + ts-node: ^10.7.0 + typeorm-aurora-data-api-driver: ^2.0.0 + peerDependenciesMeta: + '@google-cloud/spanner': + optional: true + '@sap/hana-client': + optional: true + better-sqlite3: + optional: true + hdb-pool: + optional: true + ioredis: + optional: true + mongodb: + optional: true + mssql: + optional: true + mysql2: + optional: true + oracledb: + optional: true + pg: + optional: true + pg-native: + optional: true + pg-query-stream: + optional: true + redis: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + ts-node: + optional: true + typeorm-aurora-data-api-driver: + optional: true + dependencies: + '@sqltools/formatter': 1.2.5 + app-root-path: 3.1.0 + buffer: 6.0.3 + chalk: 4.1.2 + cli-highlight: 2.1.11 + date-fns: 2.30.0 + debug: 4.3.4 + dotenv: 16.3.1 + glob: 8.1.0 + mkdirp: 2.1.6 + mysql2: 3.5.1 + reflect-metadata: 0.1.13 + sha.js: 2.4.11 + sqlite3: 5.1.6 + ts-node: 10.9.1_npeoqfxwgl5njwqojmpesqhar4 + tslib: 2.6.0 + uuid: 9.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + dev: true + + /typescript/4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /uid/2.0.2: + resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} + engines: {node: '>=8'} + dependencies: + '@lukeed/csprng': 1.1.0 + + /unique-filename/1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + dependencies: + unique-slug: 2.0.2 + dev: true + optional: true + + /unique-slug/2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + dependencies: + imurmurhash: 0.1.4 + dev: true + optional: true + + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: true + + /unpipe/1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + /update-browserslist-db/1.0.11_browserslist@4.21.9: + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.9 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: true + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + /utils-merge/1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + /uuid/8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: true + + /uuid/9.0.0: + resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + hasBin: true + dev: true + + /v8-compile-cache-lib/3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /v8-to-istanbul/9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} + engines: {node: '>=10.12.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.18 + '@types/istanbul-lib-coverage': 2.0.4 + convert-source-map: 1.9.0 + dev: true + + /validator/13.9.0: + resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==} + engines: {node: '>= 0.10'} + + /vary/1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + /walker/1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: true + + /watchpack/2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + dev: true + + /wcwidth/1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: true + + /webidl-conversions/3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + /webpack-node-externals/3.0.0: + resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} + engines: {node: '>=6'} + dev: true + + /webpack-sources/3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack/5.82.1: + resolution: {integrity: sha512-C6uiGQJ+Gt4RyHXXYt+v9f+SN1v83x68URwgxNQ98cvH8kxiuywWGP4XeNZ1paOzZ63aY3cTciCEQJNFUljlLw==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 1.0.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0_acorn@8.10.0 + browserslist: 4.21.9 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.9_webpack@5.82.1 + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + + /webpack/5.88.1: + resolution: {integrity: sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 1.0.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0_acorn@8.10.0 + browserslist: 4.21.9 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.9_webpack@5.88.1 + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + + /whatwg-url/5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wide-align/1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + dependencies: + string-width: 4.2.3 + dev: true + + /windows-release/4.0.0: + resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==} + engines: {node: '>=10'} + dependencies: + execa: 4.1.0 + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /write-file-atomic/4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + dev: true + + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yaml/1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + + /yargs-parser/20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + + /yargs-parser/21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: true + + /yargs/17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + + /yn/3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..857f8a4 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/index.css b/public/index.css new file mode 100644 index 0000000..63578aa --- /dev/null +++ b/public/index.css @@ -0,0 +1,7680 @@ +/*! + + ========================================================= + * Paper Kit 2 - v2.0.0 + ========================================================= + + * Product Page: http://www.creative-tim.com/product/paper-kit-2 + * Copyright 2017 Creative Tim (http://www.creative-tim.com) + * Licensed under MIT (https://github.com/timcreative/paper-kit/blob/master/LICENSE.md) + + ========================================================= + + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + */ +/* light colors - used for select dropdown */ +/* Font Smoothing */ +h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6, p, .navbar, .brand, a, .td-name, td, button, input, select, textarea { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: "Montserrat", "Helvetica", Arial, sans-serif; + font-weight: 300; +} + +h1, .h1, h2, .h2, h3, .h3, h4, .h4 { + margin: 30px 0 0; +} + +h1, .h1 { + font-size: 3.6em; +} + +h2, .h2 { + font-size: 2.8em; +} + +h3, .h3 { + font-size: 1.825em; + line-height: 1.4; + margin: 20px 0 0px; +} + +h4, .h4 { + font-size: 1.6em; + line-height: 1.2em; +} + +h5, .h5 { + font-size: 1.35em; + line-height: 1.4em; +} + +h6, .h6 { + font-size: 0.9em; + font-weight: 600; + text-transform: uppercase; + line-height: 1.5em; +} + +p { + font-size: 15px; + line-height: 1.5em; + margin-bottom: 5px; +} + +h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { + color: #9A9A9A; + line-height: 1.5em; +} + +h1 small, h2 small, h3 small, h1 .small, h2 .small, h3 .small { + font-size: 60%; +} + +.title, +.card-title, +.info-title, +.footer-brand, +.footer-big h5, +.footer-big h4, +.media .media-heading { + font-family: "Montserrat", "Helvetica", Arial, sans-serif; +} +.title, +.title a, +.card-title, +.card-title a, +.info-title, +.info-title a, +.footer-brand, +.footer-brand a, +.footer-big h5, +.footer-big h5 a, +.footer-big h4, +.footer-big h4 a, +.media .media-heading, +.media .media-heading a { + color: #333333; + text-decoration: none; +} + +.title-uppercase { + text-transform: uppercase; +} + +.description { + color: #9A9A9A; +} + +blockquote small { + font-style: normal; +} + +.text-muted { + color: #DDDDDD; +} + +.text-primary, .text-primary:hover { + color: #51cbce !important; +} + +.text-info, .text-info:hover { + color: #51bcda !important; +} + +.text-success, .text-success:hover { + color: #6bd098 !important; +} + +.text-warning, .text-warning:hover { + color: #fbc658 !important; +} + +.text-danger, .text-danger:hover { + color: #f5593d !important; +} + +.glyphicon { + line-height: 1; +} + +.heart { + color: #EB5E28; + animation: heathing 1s ease infinite; +} + +@keyframes heathing { + 0% { + transform: scale(0.75); + } + 20% { + transform: scale(1); + } + 40% { + transform: scale(0.75); + } + 60% { + transform: scale(1); + } + 80% { + transform: scale(0.75); + } + 100% { + transform: scale(0.75); + } +} +.footer .credits, +.footer-nav { + line-height: 85px; +} + +.footer .btn { + margin-bottom: 0; +} + +.blockquote { + border-left: 0 none; + border-bottom: 1px solid #CCC5B9; + border-top: 1px solid #CCC5B9; + font-weight: 300; + margin: 15px 0 10px; + text-align: center; +} + +.title { + margin-top: 30px; + margin-bottom: 25px; + min-height: 32px; +} + +.title.text-center { + margin-bottom: 50px; +} + +/* General overwrite */ +body { + color: #66615b; + font-size: 14px; + font-weight: 300; + font-family: 'Montserrat', "Helvetica", Arial, sans-serif; +} + +a { + color: #51bcda; +} +a:hover, a:focus { + color: #2ba9cd; + text-decoration: none; +} + +hr { + border-color: #F1EAE0; +} + +.icon { + fill: #66615b; +} + +.fa-base { + font-size: 1.25em !important; +} + +a:focus, a:active, +button::-moz-focus-inner, +input[type="reset"]::-moz-focus-inner, +input[type="button"]::-moz-focus-inner, +input[type="submit"]::-moz-focus-inner, +select::-moz-focus-inner, +input[type="file"] > input[type="button"]::-moz-focus-inner { + outline: 0; +} + +.ui-slider-handle:focus, +.navbar-toggle { + outline: 0 !important; +} + +/* Animations */ +.form-control, +.input-group-addon, +.tagsinput, +.navbar, +.navbar .alert, +.carousel-control.right, +.carousel-control.left { + -webkit-transition: all 300ms linear; + -moz-transition: all 300ms linear; + -o-transition: all 300ms linear; + -ms-transition: all 300ms linear; + transition: all 300ms linear; +} + +.tagsinput .tag, +.tagsinput-remove-link, +.filter, +.btn-hover, +[data-toggle="collapse"] i, +.animation-transition-fast, +.dropdown-menu .dropdown-item { + -webkit-transition: all 150ms linear; + -moz-transition: all 150ms linear; + -o-transition: all 150ms linear; + -ms-transition: all 150ms linear; + transition: all 150ms linear; +} + +.btn-morphing .fa, +.btn-morphing .circle, +.gsdk-collapse { + -webkit-transition: all 300ms linear; + -moz-transition: all 300ms linear; + -o-transition: all 300ms linear; + -ms-transition: all 300ms linear; + transition: all 300ms linear; +} + +.fa { + width: 18px; + text-align: center; +} + +.margin-top { + margin-top: 50px; +} + +.iframe-container iframe { + box-shadow: 0 16px 38px -12px rgba(0, 0, 0, 0.56), 0 4px 25px 0 rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2); +} + +/* CT colors */ +.ct-blue { + color: #51cbce; +} + +.ct-azure { + color: #51bcda; +} + +.ct-green { + color: #6bd098; +} + +.ct-orange { + color: #fbc658; +} + +.ct-red { + color: #f5593d; +} + +.pagination .page-item .page-link .fa { + width: auto; + font-weight: 600; +} + +.bg-primary { + background-color: #6dd3d6 !important; +} + +.bg-info { + background-color: #6ec7e0 !important; +} + +.bg-success { + background-color: #86d9ab !important; +} + +.bg-warning { + background-color: #fcd27b !important; +} + +.bg-danger { + background-color: #f7765f !important; +} + +.navbar-transparent { + background-color: transparent !important; + border-bottom: 1px solid transparent; +} + +.btn { + box-sizing: border-box; + border-width: 2px; + font-size: 12px; + font-weight: 600; + padding: 0.5rem 18px; + line-height: 1.75; + cursor: pointer; + text-transform: uppercase; + background-color: #66615B; + border-color: #66615B; + color: #FFFFFF; + opacity: 1; + filter: alpha(opacity=100); + -webkit-transition: all 150ms linear; + -moz-transition: all 150ms linear; + -o-transition: all 150ms linear; + -ms-transition: all 150ms linear; + transition: all 150ms linear; +} +.btn.btn-border, .btn.btn-link { + background-color: transparent; +} +.btn:hover, .btn:focus, .btn:active, .btn.active, .show > .btn.dropdown-toggle { + background-color: #403D39; + color: #FFFFFF; + border-color: #403D39; +} +.btn .caret { + border-top-color: #FFFFFF; +} +.btn.btn-link { + color: #66615B; +} +.btn.btn-link:hover, .btn.btn-link:focus, .btn.btn-link:active, .btn.btn-link.active, .open > .btn.btn-link.dropdown-toggle { + background-color: transparent; + color: #403D39; +} +.btn.btn-link .caret { + border-top-color: #66615B; +} +.btn .caret { + border-top-color: #FFFFFF; +} +.btn:hover, .btn:focus { + outline: 0 !important; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn:active, .btn.active, .open > .btn.dropdown-toggle { + -webkit-box-shadow: none; + box-shadow: none; + outline: 0 !important; +} +.btn[class*="btn-outline-"] { + background-image: none; + background-color: transparent; +} + +.btn-just-icon { + border-radius: 50px; + height: 40px; + width: 40px; + min-width: 40px; + padding: 8px; +} +.btn-just-icon.btn-sm { + padding: 4px !important; +} +.btn-just-icon i { + font-size: 16px; + padding: 2px 0px; +} + +.upgrade-pro .btn { + margin-top: 30px; +} + +.btn-link.btn-just-icon { + padding: 8px; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -2px; +} + +.btn-primary { + background-color: #51cbce; + border-color: #51cbce; + color: #FFFFFF; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle { + background-color: #34b5b8; + color: #FFFFFF; + border-color: #34b5b8; +} +.btn-primary .caret { + border-top-color: #FFFFFF; +} +.btn-primary.btn-link { + color: #51cbce; +} +.btn-primary.btn-link:hover, .btn-primary.btn-link:focus, .btn-primary.btn-link:active, .btn-primary.btn-link.active, .open > .btn-primary.btn-link.dropdown-toggle { + background-color: transparent; + color: #34b5b8; +} +.btn-primary.btn-link .caret { + border-top-color: #51cbce; +} +.btn-primary .caret { + border-top-color: #FFFFFF; +} + +.btn-success { + background-color: #6bd098; + border-color: #6bd098; + color: #FFFFFF; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle { + background-color: #44c47d; + color: #FFFFFF; + border-color: #44c47d; +} +.btn-success .caret { + border-top-color: #FFFFFF; +} +.btn-success.btn-link { + color: #6bd098; +} +.btn-success.btn-link:hover, .btn-success.btn-link:focus, .btn-success.btn-link:active, .btn-success.btn-link.active, .open > .btn-success.btn-link.dropdown-toggle { + background-color: transparent; + color: #44c47d; +} +.btn-success.btn-link .caret { + border-top-color: #6bd098; +} +.btn-success .caret { + border-top-color: #FFFFFF; +} + +.btn-info { + background-color: #51bcda; + border-color: #51bcda; + color: #FFFFFF; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle { + background-color: #2ba9cd; + color: #FFFFFF; + border-color: #2ba9cd; +} +.btn-info .caret { + border-top-color: #FFFFFF; +} +.btn-info.btn-link { + color: #51bcda; +} +.btn-info.btn-link:hover, .btn-info.btn-link:focus, .btn-info.btn-link:active, .btn-info.btn-link.active, .open > .btn-info.btn-link.dropdown-toggle { + background-color: transparent; + color: #2ba9cd; +} +.btn-info.btn-link .caret { + border-top-color: #51bcda; +} +.btn-info .caret { + border-top-color: #FFFFFF; +} + +.btn-warning { + background-color: #fbc658; + border-color: #fbc658; + color: #FFFFFF; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle { + background-color: #fab526; + color: #FFFFFF; + border-color: #fab526; +} +.btn-warning .caret { + border-top-color: #FFFFFF; +} +.btn-warning.btn-link { + color: #fbc658; +} +.btn-warning.btn-link:hover, .btn-warning.btn-link:focus, .btn-warning.btn-link:active, .btn-warning.btn-link.active, .open > .btn-warning.btn-link.dropdown-toggle { + background-color: transparent; + color: #fab526; +} +.btn-warning.btn-link .caret { + border-top-color: #fbc658; +} +.btn-warning .caret { + border-top-color: #FFFFFF; +} + +.btn-danger { + background-color: #f5593d; + border-color: #f5593d; + color: #FFFFFF; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle { + background-color: #f33816; + color: #FFFFFF; + border-color: #f33816; +} +.btn-danger .caret { + border-top-color: #FFFFFF; +} +.btn-danger.btn-link { + color: #f5593d; +} +.btn-danger.btn-link:hover, .btn-danger.btn-link:focus, .btn-danger.btn-link:active, .btn-danger.btn-link.active, .open > .btn-danger.btn-link.dropdown-toggle { + background-color: transparent; + color: #f33816; +} +.btn-danger.btn-link .caret { + border-top-color: #f5593d; +} +.btn-danger .caret { + border-top-color: #FFFFFF; +} + +.btn-neutral { + background-color: #FFFFFF; + border-color: #FFFFFF; + color: #FFFFFF; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-neutral:hover, .btn-neutral:focus, .btn-neutral:active, .btn-neutral.active, .show > .btn-neutral.dropdown-toggle { + background-color: #403D39; + color: #FFFFFF; + border-color: #403D39; +} +.btn-neutral .caret { + border-top-color: #FFFFFF; +} +.btn-neutral.btn-link { + color: #FFFFFF; +} +.btn-neutral.btn-link:hover, .btn-neutral.btn-link:focus, .btn-neutral.btn-link:active, .btn-neutral.btn-link.active, .open > .btn-neutral.btn-link.dropdown-toggle { + background-color: transparent; + color: #403D39; +} +.btn-neutral.btn-link .caret { + border-top-color: #FFFFFF; +} +.btn-neutral .caret { + border-top-color: #FFFFFF; +} + +.btn-outline-default { + border-color: #66615B; + color: #66615B; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-outline-default:hover, .btn-outline-default:focus, .btn-outline-default:active, .btn-outline-default.active, .open > .btn-outline-default.dropdown-toggle { + background-color: #66615B; + color: rgba(255, 255, 255, 0.8); + border-color: #66615B; +} +.btn-outline-default:hover .caret, .btn-outline-default:focus .caret, .btn-outline-default:active .caret, .btn-outline-default.active .caret, .open > .btn-outline-default.dropdown-toggle .caret { + border-top-color: rgba(255, 255, 255, 0.8); +} +.btn-outline-default .caret { + border-top-color: #FFFFFF; +} +.btn-outline-default.disabled, .btn-outline-default.disabled:hover, .btn-outline-default.disabled:focus, .btn-outline-default.disabled.focus, .btn-outline-default.disabled:active, .btn-outline-default.disabled.active, .btn-outline-default:disabled, .btn-outline-default:disabled:hover, .btn-outline-default:disabled:focus, .btn-outline-default:disabled.focus, .btn-outline-default:disabled:active, .btn-outline-default:disabled.active, .btn-outline-default[disabled], .btn-outline-default[disabled]:hover, .btn-outline-default[disabled]:focus, .btn-outline-default[disabled].focus, .btn-outline-default[disabled]:active, .btn-outline-default[disabled].active, fieldset[disabled] .btn-outline-default, fieldset[disabled] .btn-outline-default:hover, fieldset[disabled] .btn-outline-default:focus, fieldset[disabled] .btn-outline-default.focus, fieldset[disabled] .btn-outline-default:active, fieldset[disabled] .btn-outline-default.active { + background-color: transparent; + border-color: #66615B; +} + +.btn-outline-primary { + border-color: #51cbce; + color: #51cbce; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-outline-primary:hover, .btn-outline-primary:focus, .btn-outline-primary:active, .btn-outline-primary.active, .open > .btn-outline-primary.dropdown-toggle { + background-color: #51cbce; + color: rgba(255, 255, 255, 0.8); + border-color: #51cbce; +} +.btn-outline-primary:hover .caret, .btn-outline-primary:focus .caret, .btn-outline-primary:active .caret, .btn-outline-primary.active .caret, .open > .btn-outline-primary.dropdown-toggle .caret { + border-top-color: rgba(255, 255, 255, 0.8); +} +.btn-outline-primary .caret { + border-top-color: #FFFFFF; +} +.btn-outline-primary.disabled, .btn-outline-primary.disabled:hover, .btn-outline-primary.disabled:focus, .btn-outline-primary.disabled.focus, .btn-outline-primary.disabled:active, .btn-outline-primary.disabled.active, .btn-outline-primary:disabled, .btn-outline-primary:disabled:hover, .btn-outline-primary:disabled:focus, .btn-outline-primary:disabled.focus, .btn-outline-primary:disabled:active, .btn-outline-primary:disabled.active, .btn-outline-primary[disabled], .btn-outline-primary[disabled]:hover, .btn-outline-primary[disabled]:focus, .btn-outline-primary[disabled].focus, .btn-outline-primary[disabled]:active, .btn-outline-primary[disabled].active, fieldset[disabled] .btn-outline-primary, fieldset[disabled] .btn-outline-primary:hover, fieldset[disabled] .btn-outline-primary:focus, fieldset[disabled] .btn-outline-primary.focus, fieldset[disabled] .btn-outline-primary:active, fieldset[disabled] .btn-outline-primary.active { + background-color: transparent; + border-color: #51cbce; +} + +.btn-outline-success { + border-color: #6bd098; + color: #6bd098; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-outline-success:hover, .btn-outline-success:focus, .btn-outline-success:active, .btn-outline-success.active, .open > .btn-outline-success.dropdown-toggle { + background-color: #6bd098; + color: rgba(255, 255, 255, 0.8); + border-color: #6bd098; +} +.btn-outline-success:hover .caret, .btn-outline-success:focus .caret, .btn-outline-success:active .caret, .btn-outline-success.active .caret, .open > .btn-outline-success.dropdown-toggle .caret { + border-top-color: rgba(255, 255, 255, 0.8); +} +.btn-outline-success .caret { + border-top-color: #FFFFFF; +} +.btn-outline-success.disabled, .btn-outline-success.disabled:hover, .btn-outline-success.disabled:focus, .btn-outline-success.disabled.focus, .btn-outline-success.disabled:active, .btn-outline-success.disabled.active, .btn-outline-success:disabled, .btn-outline-success:disabled:hover, .btn-outline-success:disabled:focus, .btn-outline-success:disabled.focus, .btn-outline-success:disabled:active, .btn-outline-success:disabled.active, .btn-outline-success[disabled], .btn-outline-success[disabled]:hover, .btn-outline-success[disabled]:focus, .btn-outline-success[disabled].focus, .btn-outline-success[disabled]:active, .btn-outline-success[disabled].active, fieldset[disabled] .btn-outline-success, fieldset[disabled] .btn-outline-success:hover, fieldset[disabled] .btn-outline-success:focus, fieldset[disabled] .btn-outline-success.focus, fieldset[disabled] .btn-outline-success:active, fieldset[disabled] .btn-outline-success.active { + background-color: transparent; + border-color: #6bd098; +} + +.btn-outline-info { + border-color: #51bcda; + color: #51bcda; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-outline-info:hover, .btn-outline-info:focus, .btn-outline-info:active, .btn-outline-info.active, .open > .btn-outline-info.dropdown-toggle { + background-color: #51bcda; + color: rgba(255, 255, 255, 0.8); + border-color: #51bcda; +} +.btn-outline-info:hover .caret, .btn-outline-info:focus .caret, .btn-outline-info:active .caret, .btn-outline-info.active .caret, .open > .btn-outline-info.dropdown-toggle .caret { + border-top-color: rgba(255, 255, 255, 0.8); +} +.btn-outline-info .caret { + border-top-color: #FFFFFF; +} +.btn-outline-info.disabled, .btn-outline-info.disabled:hover, .btn-outline-info.disabled:focus, .btn-outline-info.disabled.focus, .btn-outline-info.disabled:active, .btn-outline-info.disabled.active, .btn-outline-info:disabled, .btn-outline-info:disabled:hover, .btn-outline-info:disabled:focus, .btn-outline-info:disabled.focus, .btn-outline-info:disabled:active, .btn-outline-info:disabled.active, .btn-outline-info[disabled], .btn-outline-info[disabled]:hover, .btn-outline-info[disabled]:focus, .btn-outline-info[disabled].focus, .btn-outline-info[disabled]:active, .btn-outline-info[disabled].active, fieldset[disabled] .btn-outline-info, fieldset[disabled] .btn-outline-info:hover, fieldset[disabled] .btn-outline-info:focus, fieldset[disabled] .btn-outline-info.focus, fieldset[disabled] .btn-outline-info:active, fieldset[disabled] .btn-outline-info.active { + background-color: transparent; + border-color: #51bcda; +} + +.btn-outline-warning { + border-color: #fbc658; + color: #fbc658; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-outline-warning:hover, .btn-outline-warning:focus, .btn-outline-warning:active, .btn-outline-warning.active, .open > .btn-outline-warning.dropdown-toggle { + background-color: #fbc658; + color: rgba(255, 255, 255, 0.8); + border-color: #fbc658; +} +.btn-outline-warning:hover .caret, .btn-outline-warning:focus .caret, .btn-outline-warning:active .caret, .btn-outline-warning.active .caret, .open > .btn-outline-warning.dropdown-toggle .caret { + border-top-color: rgba(255, 255, 255, 0.8); +} +.btn-outline-warning .caret { + border-top-color: #FFFFFF; +} +.btn-outline-warning.disabled, .btn-outline-warning.disabled:hover, .btn-outline-warning.disabled:focus, .btn-outline-warning.disabled.focus, .btn-outline-warning.disabled:active, .btn-outline-warning.disabled.active, .btn-outline-warning:disabled, .btn-outline-warning:disabled:hover, .btn-outline-warning:disabled:focus, .btn-outline-warning:disabled.focus, .btn-outline-warning:disabled:active, .btn-outline-warning:disabled.active, .btn-outline-warning[disabled], .btn-outline-warning[disabled]:hover, .btn-outline-warning[disabled]:focus, .btn-outline-warning[disabled].focus, .btn-outline-warning[disabled]:active, .btn-outline-warning[disabled].active, fieldset[disabled] .btn-outline-warning, fieldset[disabled] .btn-outline-warning:hover, fieldset[disabled] .btn-outline-warning:focus, fieldset[disabled] .btn-outline-warning.focus, fieldset[disabled] .btn-outline-warning:active, fieldset[disabled] .btn-outline-warning.active { + background-color: transparent; + border-color: #fbc658; +} + +.btn-outline-danger { + border-color: #f5593d; + color: #f5593d; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-outline-danger:hover, .btn-outline-danger:focus, .btn-outline-danger:active, .btn-outline-danger.active, .open > .btn-outline-danger.dropdown-toggle { + background-color: #f5593d; + color: rgba(255, 255, 255, 0.8); + border-color: #f5593d; +} +.btn-outline-danger:hover .caret, .btn-outline-danger:focus .caret, .btn-outline-danger:active .caret, .btn-outline-danger.active .caret, .open > .btn-outline-danger.dropdown-toggle .caret { + border-top-color: rgba(255, 255, 255, 0.8); +} +.btn-outline-danger .caret { + border-top-color: #FFFFFF; +} +.btn-outline-danger.disabled, .btn-outline-danger.disabled:hover, .btn-outline-danger.disabled:focus, .btn-outline-danger.disabled.focus, .btn-outline-danger.disabled:active, .btn-outline-danger.disabled.active, .btn-outline-danger:disabled, .btn-outline-danger:disabled:hover, .btn-outline-danger:disabled:focus, .btn-outline-danger:disabled.focus, .btn-outline-danger:disabled:active, .btn-outline-danger:disabled.active, .btn-outline-danger[disabled], .btn-outline-danger[disabled]:hover, .btn-outline-danger[disabled]:focus, .btn-outline-danger[disabled].focus, .btn-outline-danger[disabled]:active, .btn-outline-danger[disabled].active, fieldset[disabled] .btn-outline-danger, fieldset[disabled] .btn-outline-danger:hover, fieldset[disabled] .btn-outline-danger:focus, fieldset[disabled] .btn-outline-danger.focus, fieldset[disabled] .btn-outline-danger:active, fieldset[disabled] .btn-outline-danger.active { + background-color: transparent; + border-color: #f5593d; +} + +.btn-outline-neutral { + border-color: #FFFFFF; + color: #FFFFFF; + opacity: 1; + filter: alpha(opacity=100); +} +.btn-outline-neutral:hover, .btn-outline-neutral:focus, .btn-outline-neutral:active, .btn-outline-neutral.active, .open > .btn-outline-neutral.dropdown-toggle { + background-color: #FFFFFF; + color: rgba(255, 255, 255, 0.8); + border-color: #FFFFFF; +} +.btn-outline-neutral:hover .caret, .btn-outline-neutral:focus .caret, .btn-outline-neutral:active .caret, .btn-outline-neutral.active .caret, .open > .btn-outline-neutral.dropdown-toggle .caret { + border-top-color: rgba(255, 255, 255, 0.8); +} +.btn-outline-neutral .caret { + border-top-color: #FFFFFF; +} +.btn-outline-neutral.disabled, .btn-outline-neutral.disabled:hover, .btn-outline-neutral.disabled:focus, .btn-outline-neutral.disabled.focus, .btn-outline-neutral.disabled:active, .btn-outline-neutral.disabled.active, .btn-outline-neutral:disabled, .btn-outline-neutral:disabled:hover, .btn-outline-neutral:disabled:focus, .btn-outline-neutral:disabled.focus, .btn-outline-neutral:disabled:active, .btn-outline-neutral:disabled.active, .btn-outline-neutral[disabled], .btn-outline-neutral[disabled]:hover, .btn-outline-neutral[disabled]:focus, .btn-outline-neutral[disabled].focus, .btn-outline-neutral[disabled]:active, .btn-outline-neutral[disabled].active, fieldset[disabled] .btn-outline-neutral, fieldset[disabled] .btn-outline-neutral:hover, fieldset[disabled] .btn-outline-neutral:focus, fieldset[disabled] .btn-outline-neutral.focus, fieldset[disabled] .btn-outline-neutral:active, fieldset[disabled] .btn-outline-neutral.active { + background-color: transparent; + border-color: #FFFFFF; +} +.btn-outline-neutral:hover, .btn-outline-neutral:focus { + color: #403D39; + background-color: #FFFFFF; +} + +.btn-neutral { + background-color: #FFFFFF; + border-color: #FFFFFF; + color: #FFFFFF; + opacity: 1; + filter: alpha(opacity=100); + color: #66615B; +} +.btn-neutral:hover, .btn-neutral:focus, .btn-neutral:active, .btn-neutral.active, .show > .btn-neutral.dropdown-toggle { + background-color: #FFFFFF; + color: #FFFFFF; + border-color: #FFFFFF; +} +.btn-neutral .caret { + border-top-color: #FFFFFF; +} +.btn-neutral.btn-link { + color: #FFFFFF; +} +.btn-neutral.btn-link:hover, .btn-neutral.btn-link:focus, .btn-neutral.btn-link:active, .btn-neutral.btn-link.active, .open > .btn-neutral.btn-link.dropdown-toggle { + background-color: transparent; + color: #FFFFFF; +} +.btn-neutral.btn-link .caret { + border-top-color: #FFFFFF; +} +.btn-neutral .caret { + border-top-color: #FFFFFF; +} +.btn-neutral:hover, .btn-neutral:focus { + color: #403D39; +} +.btn-neutral.btn-border:hover, .btn-neutral.btn-border:focus { + color: #66615B; +} +.btn-neutral.btn-border:active, .btn-neutral.btn-border.active, .open > .btn-neutral.btn-border.dropdown-toggle { + background-color: #FFFFFF; + color: #66615B; +} +.btn-neutral.btn-link:active, .btn-neutral.btn-link.active { + background-color: transparent; +} + +.btn:disabled, .btn[disabled], .btn.disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.btn-link { + border-color: transparent !important; + padding: 7px 18px; +} +.btn-link:hover, .btn-link:focus, .btn-link:active { + text-decoration: none; + border-color: transparent; +} +.btn-link.btn-icon { + padding: 7px; +} + +.btn-lg { + font-size: 14px; + padding: 11px 30px; +} +.btn-lg.btn-simple { + padding: 13px 30px; +} + +.btn-sm { + font-size: 12px; + padding: 4px 10px; +} +.btn-sm.btn-simple { + padding: 6px 10px; +} + +.btn-wd { + min-width: 140px; +} + +.btn-group.select { + width: 100%; +} + +.btn-group.select .btn { + text-align: left; +} + +.btn-group.select .caret { + position: absolute; + top: 50%; + margin-top: -1px; + right: 8px; +} + +.btn-just-icon.btn-sm { + height: 30px; + width: 30px; + min-width: 30px; + padding: 0; +} +.btn-just-icon.btn-sm i { + font-size: 12px; +} +.btn-just-icon.btn-lg { + height: 50px; + width: 50px; + min-width: 50px; + padding: 13px; +} +.btn-just-icon.btn-lg i { + font-size: 18px; + padding: 0; +} + +.btn-round { + border-radius: 30px; +} + +.btn.btn-link:focus { + box-shadow: none !important; + text-decoration: none; +} + +.column .btn-link { + padding: 7px 0; +} + +.share-buttons .btn-outline-default { + margin-top: 24px; +} + +#modals .btn-outline-neutral { + margin-bottom: 10px; +} + +.btn-group.select { + overflow: visible !important; +} + +.media .media-body .media-footer .btn-neutral { + margin: 15px 3px; + font-size: 14px; +} +.media .media-body .media-footer .btn-neutral i { + margin-right: 0 !important; +} + +.form-control::-moz-placeholder { + color: #d2d2d2; + opacity: 1; + filter: alpha(opacity=100); +} + +.form-control:-moz-placeholder { + color: #d2d2d2; + opacity: 1; + filter: alpha(opacity=100); +} + +.form-control::-webkit-input-placeholder { + color: #d2d2d2; + opacity: 1; + filter: alpha(opacity=100); +} + +.form-control:-ms-input-placeholder { + color: #d2d2d2; + opacity: 1; + filter: alpha(opacity=100); +} + +.form-control { + background-color: #FFFFFF; + border: 1px solid #DDDDDD; + border-radius: 4px; + color: #66615b; + font-size: 14px; + padding: 7px 12px; + height: 40px; + -webkit-box-shadow: none; + box-shadow: none; +} +.form-control:focus { + background-color: #FFFFFF; + border: 1px solid #9A9A9A; + -webkit-box-shadow: none; + box-shadow: none; + outline: 0 !important; +} +.form-control.no-border { + border: medium none !important; +} +.has-success .form-control, .has-error .form-control, .has-success .form-control:focus, .has-error .form-control:focus { + -webkit-box-shadow: none; + box-shadow: none; +} +.has-success .form-control { + border: 1px solid #ccc; + color: #66615b; +} +.has-success .form-control:focus { + border: 1px solid #6bd098; + color: #6bd098; +} +.has-danger .form-control { + background-color: #FFC0A4; + border: 1px solid #f5593d; + color: #f5593d; +} +.has-danger .form-control:focus { + background-color: #FFFFFF; + border: 1px solid #f5593d; +} +.form-control + .form-control-feedback { + border-radius: 6px; + font-size: 14px; + color: #f5593d; + font-size: .8rem; + position: absolute; + top: 100%; + padding-left: 12px; + vertical-align: middle; +} +.open .form-control { + border-radius: 4px 4px 0 0; + border-bottom-color: transparent; +} + +.input-group.input-group-focus .input-group-addon { + border-color: #9A9A9A; +} + +.input-lg { + height: 55px; + padding: 11px 30px; +} + +.has-error .form-control-feedback, .has-error .control-label { + color: #f5593d; +} + +.has-success .form-control-feedback, .has-success .control-label { + color: #6bd098; +} + +.input-group-addon { + background-color: #FFFFFF; + border-radius: 4px; +} +.input-group-addon.no-border { + border: medium none !important; +} +.has-success .input-group-addon, .has-error .input-group-addon { + background-color: #FFFFFF; +} +.has-error .form-control:focus + .input-group-addon { + color: #f5593d; +} +.has-success .form-control:focus + .input-group-addon { + color: #6bd098; +} +.form-control:focus + .input-group-addon, .form-control:focus ~ .input-group-addon { + background-color: #FFFFFF; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { + border-right: 0 none; + padding-right: 0; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child) { + border-left: 0 none; +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #E3E3E3; + color: #66615B; + cursor: not-allowed; +} + +.input-group[disabled] .input-group-addon { + background-color: #E3E3E3; + cursor: not-allowed; + border-color: #DDDDDD; +} + +.input-group-btn .btn { + border-width: 1px; + padding: 9px 18px; +} + +.input-group-btn .btn-default:not(.btn-fill) { + border-color: #DDDDDD; +} + +.input-group-btn:last-child > .btn { + margin-left: 0; +} + +textarea.form-control { + padding: 10px 18px; + height: auto; +} + +.form-group { + position: relative; +} + +.register-form .form-control { + border: 1px solid transparent !important; +} + +#inputs .input-group { + margin-bottom: 1rem; +} + +.card-form-horizontal .card-block .form-group { + margin-bottom: 0; +} + +.form-group-no-border .form-control, +.form-group-no-border .input-group-addon { + border: 0 !important; +} + +.progress { + background-color: #DDDDDD; + border-radius: 3px; + box-shadow: none; + height: 8px; +} + +.progress-thin { + height: 4px; +} + +.progress-bar { + background-color: #51cbce; +} + +.progress-bar-primary { + background-color: #51cbce; +} + +.progress-bar-info { + background-color: #51bcda; +} + +.progress-bar-success { + background-color: #6bd098; +} + +.progress-bar-warning { + background-color: #fbc658; +} + +.progress-bar-danger { + background-color: #f5593d; +} + +.noUi-target, +.noUi-target * { + -webkit-touch-callout: none; + -ms-touch-action: none; + user-select: none; + box-sizing: border-box; +} + +.noUi-base { + width: 100%; + height: 100%; + position: relative; +} + +.noUi-origin { + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; +} + +.noUi-handle { + position: relative; + z-index: 1; + box-sizing: border-box; +} + +.noUi-stacking .noUi-handle { + z-index: 10; +} + +.noUi-state-tap .noUi-origin { + transition: left 0.3s, top 0.3s; +} + +.noUi-state-drag * { + cursor: inherit !important; +} + +.noUi-horizontal { + height: 10px; +} + +.noUi-handle { + box-sizing: border-box; + width: 14px; + height: 14px; + left: -10px; + top: -6px; + cursor: pointer; + border-radius: 100%; + transition: all 0.2s ease-out; + border: 1px solid; + background: #FFFFFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); +} + +.noUi-vertical .noUi-handle { + margin-left: 5px; + cursor: ns-resize; +} + +.noUi-horizontal.noUi-extended { + padding: 0 15px; +} + +.noUi-horizontal.noUi-extended .noUi-origin { + right: -15px; +} + +.noUi-background { + height: 2px; + margin: 20px 0; +} + +.noUi-origin { + margin: 0; + border-radius: 0; + height: 2px; + background: #c8c8c8; +} + +.noUi-origin[style^="left: 0"] .noUi-handle { + background-color: #fff; + border: 2px solid #c8c8c8; +} + +.noUi-origin[style^="left: 0"] .noUi-handle.noUi-active { + border-width: 1px; +} + +.noUi-target { + border-radius: 3px; +} + +.noUi-horizontal { + height: 2px; + margin: 15px 0; +} + +.noUi-vertical { + height: 100%; + width: 2px; + margin: 0 15px; + display: inline-block; +} + +.noUi-handle.noUi-active { + transform: scale3d(2, 2, 1); +} + +[disabled].noUi-slider { + opacity: 0.5; +} + +[disabled] .noUi-handle { + cursor: not-allowed; +} + +.slider { + background: #c8c8c8; +} + +.c-1-color { + background-color: blue; +} + +.c-2-color { + background-color: white; +} + +.slider.noUi-connect { + background-color: #7AC29A; +} + +.slider .noUi-handle { + border-color: #7AC29A; +} + +.slider.slider-info .noUi-origin:first-child { + background-color: #51cbce; +} + +.slider.slider-info .noUi-handle { + border-color: #51cbce; +} + +.slider.slider-success .noUi-connect, +.slider.slider-success.noUi-connect { + background-color: #51cbce; +} + +.slider.slider-success .noUi-handle { + border-color: #51cbce; +} + +.slider.slider-warning .noUi-connect, +.slider.slider-warning.noUi-connect { + background-color: #ff9800; +} + +.slider.slider-warning .noUi-handle { + border-color: #ff9800; +} + +.slider.slider-danger .noUi-connect, +.slider.slider-danger.noUi-connect { + background-color: #f44336; +} + +.slider.slider-danger .noUi-handle { + border-color: #f44336; +} + +.alert { + border: 0; + border-radius: 0; + color: #FFFFFF; + padding: 10px 15px; + font-size: 14px; +} +.alert .close { + font-size: 20px; + color: #FFFFFF; +} +.container .alert { + border-radius: 4px; +} +.navbar .alert { + border-radius: 0; + left: 0; + position: absolute; + right: 0; + top: 85px; + width: 100%; + z-index: 3; +} +.navbar:not(.navbar-transparent) .alert { + top: 70px; +} +.alert .alert-icon { + display: block; + font-size: 30px; + left: 15px; + position: absolute; + top: 50%; + margin-top: -22px; +} +.alert .alert-wrapper.message { + padding-right: 60px; +} +.alert .alert-wrapper i { + position: relative; + font-size: 20px; + top: 5px; + margin-top: -5px; + font-weight: 600; +} + +.alert-info { + background-color: #6ec7e0; +} + +.alert-success { + background-color: #86d9ab; +} + +.alert-warning { + background-color: #fcd27b; +} + +.alert-danger { + background-color: #f7765f; +} + +/* Labels & Progress-bar */ +.label { + padding: 0.2em 0.6em; + border-radius: 10px; + color: #FFFFFF; + font-weight: 500; + font-size: 0.75em; + text-transform: uppercase; + display: inline-block; + margin-bottom: 3px; + line-height: 17px; +} + +.label-primary { + background-color: #51cbce; +} + +.label-info { + background-color: #51bcda; +} + +.label-success { + background-color: #6bd098; +} + +.label-warning { + background-color: #fbc658; +} + +.label-danger { + background-color: #f5593d; +} + +.label-default { + background-color: #66615B; +} + +.tooltip { + font-size: 12px; + font-weight: 400; +} + +.tooltip-inner { + background-color: #FFFFFF; + border-radius: 4px; + box-shadow: 0 1px 13px rgba(0, 0, 0, 0.14), 0 0 0 1px rgba(115, 71, 38, 0.23); + color: #66615B; + max-width: 200px; + padding: 10px 10px; + text-align: center; + text-decoration: none; +} + +.tooltip-inner:after { + content: ""; + display: inline-block; + position: absolute; +} + +.tooltip-inner:before { + content: ""; + display: inline-block; + position: absolute; +} + +.tooltip.bs-tether-element-attached-left, +.tooltip.tooltip-right { + padding: 0 3px !important; +} + +.tooltip.bs-tether-element-attached-right .tooltip-inner::before, +.tooltip.tooltip-left .tooltip-inner::before { + border-left: 11px solid rgba(0, 0, 0, 0.2); + border-top: 11px solid transparent; + border-bottom: 11px solid transparent; + right: -7px; + left: auto; + margin-left: 0; + top: 13px; +} + +.tooltip.bs-tether-element-attached-right .tooltip-inner::after, +.tooltip.tooltip-left .tooltip-inner::after { + border-left: 11px solid #FFFFFF; + border-top: 11px solid transparent; + border-bottom: 11px solid transparent; + right: -6px; + left: auto; + margin-left: 0; + top: 8px; +} + +.tooltip.bs-tether-element-attached-bottom .tooltip-inner::before, +.tooltip.tooltip-top .tooltip-inner::before { + border-top: 11px solid rgba(0, 0, 0, 0.2); + border-left: 11px solid transparent; + border-right: 11px solid transparent; + bottom: -6px; + left: 100%; + margin-left: -60%; +} + +.tooltip.bs-tether-element-attached-bottom .tooltip-inner::after, +.tooltip.tooltip-top .tooltip-inner::after { + border-top: 11px solid #FFFFFF; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + bottom: -5px; + content: ""; + display: inline-block; + left: 100%; + margin-left: -60%; + position: absolute; +} + +.tooltip.bs-tether-element-attached-left .tooltip-inner::before, +.tooltip.tooltip-right .tooltip-inner::before { + border-right: 11px solid rgba(0, 0, 0, 0.2); + border-top: 11px solid transparent; + border-bottom: 11px solid transparent; + top: 13px; + margin-left: -8px; + content: ""; + display: inline-block; + position: absolute; + left: 0; +} + +.tooltip.bs-tether-element-attached-left .tooltip-inner::after, +.tooltip.tooltip-right .tooltip-inner::after { + border-right: 11px solid #FFFFFF; + border-top: 11px solid transparent; + border-bottom: 11px solid transparent; + top: 8px; + margin-left: -7px; + content: ""; + display: inline-block; + position: absolute; + left: 0; +} + +.popover.bs-tether-element-attached-top::after, .popover.popover-bottom::after, +.popover.bs-tether-element-attached-top::before, .popover.popover-bottom::before { + border-bottom-color: #FF8F5E !important; + top: -9px; +} + +.tooltip.bs-tether-element-attached-top .tooltip-inner::before, +.tooltip.tooltip-bottom .tooltip-inner::before { + border-bottom: 11px solid rgba(0, 0, 0, 0.2); + border-left: 11px solid transparent; + border-right: 11px solid transparent; + top: -7px; + content: ""; + display: inline-block; + left: 100%; + margin-left: -60%; + position: absolute; +} + +.tooltip.bs-tether-element-attached-top .tooltip-inner::after, +.tooltip.tooltip-bottom .tooltip-inner::after { + border-bottom: 11px solid #FFFFFF; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + top: -6px; + content: ""; + display: inline-block; + left: 100%; + margin-left: -60%; + position: absolute; +} + +.tooltip.show { + opacity: 1 !important; +} + +.popover { + border: 0; + border-radius: 4px; + background-color: #FFFCF5; + color: #66615b; + font-weight: 400; + padding: 0; + z-index: 1031; + -webkit-box-shadow: none; + box-shadow: none; +} + +.popover-title { + background-color: #FFFCF5; + border-bottom: 0 none; + font-size: 15px; + font-weight: normal; + line-height: 22px; + padding: 15px 15px 0px 15px; + margin: 0; + color: #66615b; + text-align: center; + border-radius: 4px 4px 0 0; + margin-bottom: -10px; +} + +.popover-content { + padding: 15px; + text-align: center; +} + +.popover .arrow { + border: 0; +} + +.popover.top .arrow { + margin-left: 0; +} + +.popover.bottom .arrow:after { + border-bottom-color: #f7765f; +} + +.popover-filter { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + background-color: #000000; + opacity: 0; + filter: alpha(opacity=0); + visibility: hidden; + transition: visibility 0s linear 0.3s,opacity 0.3s linear; +} + +.popover-filter.in { + visibility: visible; + opacity: 0.2; + filter: alpha(opacity=20); + transition-delay: 0s; +} + +.popover.left > .arrow::after { + border-left-color: #f7765f; + bottom: -20px; +} + +.popover.top > .arrow::after { + border-top-color: #f7765f; +} + +.popover.right > .arrow::after { + border-right-color: #f7765f; +} + +.popover.left::before { + border-left-color: #f7765f; + bottom: -20px; +} + +.popover-filter.in { + visibility: visible; + opacity: 0.2; + filter: alpha(opacity=20); + transition-delay: 0s; +} + +.popover-primary { + background-color: #6dd3d6; + color: #FFFFFF; +} +.popover-primary .popover-title { + background-color: #6dd3d6; + color: rgba(0, 0, 0, 0.56); +} +.popover-primary.bottom .arrow:after { + border-bottom-color: #6dd3d6; +} +.popover-primary.left > .arrow::after { + border-left-color: #6dd3d6; +} +.popover-primary.top > .arrow::after { + border-top-color: #6dd3d6; +} +.popover-primary.right > .arrow::after { + border-right-color: #6dd3d6; +} + +.popover-info { + background-color: #6ec7e0; + color: #FFFFFF; +} +.popover-info .popover-title { + background-color: #6ec7e0; + color: rgba(0, 0, 0, 0.56); +} +.popover-info.bottom .arrow:after { + border-bottom-color: #6ec7e0; +} +.popover-info.left > .arrow::after { + border-left-color: #6ec7e0; +} +.popover-info.top > .arrow::after { + border-top-color: #6ec7e0; +} +.popover-info.right > .arrow::after { + border-right-color: #6ec7e0; +} + +.popover-success { + background-color: #86d9ab; + color: #FFFFFF; +} +.popover-success .popover-title { + background-color: #86d9ab; + color: rgba(0, 0, 0, 0.56); +} +.popover-success.bottom .arrow:after { + border-bottom-color: #86d9ab; +} +.popover-success.left > .arrow::after { + border-left-color: #86d9ab; +} +.popover-success.top > .arrow::after { + border-top-color: #86d9ab; +} +.popover-success.right > .arrow::after { + border-right-color: #86d9ab; +} + +.popover-warning { + background-color: #fcd27b; + color: #FFFFFF; +} +.popover-warning .popover-title { + background-color: #fcd27b; + color: rgba(0, 0, 0, 0.56); +} +.popover-warning.bottom .arrow:after { + border-bottom-color: #fcd27b; +} +.popover-warning.left > .arrow::after { + border-left-color: #fcd27b; +} +.popover-warning.top > .arrow::after { + border-top-color: #fcd27b; +} +.popover-warning.right > .arrow::after { + border-right-color: #fcd27b; +} + +.popover-danger { + background-color: #f7765f; + color: #FFFFFF; +} +.popover-danger .popover-title { + background-color: #f7765f; + color: rgba(0, 0, 0, 0.56); +} +.popover-danger.bottom .arrow:after { + border-bottom-color: #f7765f; +} +.popover-danger.left > .arrow::after { + border-left-color: #f7765f; +} +.popover-danger.top > .arrow::after { + border-top-color: #f7765f; +} +.popover-danger.right > .arrow::after { + border-right-color: #f7765f; +} + +.popover-primary.bs-tether-element-attached-bottom::after, +.popover-primary.bs-tether-element-attached-bottom::before, +.popover-primary.popover-top::after, +.popover-primary.popover-top::before { + border-top-color: #6dd3d6 !important; +} + +.popover.popover-info.bs-tether-element-attached-top::after, +.popover.popover-info.popover-bottom::after, +.popover.popover-info.bs-tether-element-attached-top::before, +.popover.popover-info.popover-bottom::before { + border-bottom-color: #6ec7e0 !important; +} + +.popover-success.bs-tether-element-attached-left::after, +.popover-success.bs-tether-element-attached-left::before, +.popover-success.popover-right::after, +.popover-success.popover-right::before { + border-right-color: #86d9ab !important; +} + +.popover.popover-warning.bs-tether-element-attached-right::after, +.popover.popover-warning.bs-tether-element-attached-right::before, +.popover.popover-warning.popover-left::after, +.popover.popover-warning.popover-left::before { + border-left-color: #fcd27b !important; +} + +.popover.popover-danger.bs-tether-element-attached-right::after, +.popover.popover-danger.bs-tether-element-attached-right::before, +.popover.popover-danger.popover-left::after, +.popover.popover-danger.popover-left::before { + border-left-color: #f7765f !important; +} + +.popover.bs-tether-element-attached-top::after, .popover.popover-bottom::after, +.popover.bs-tether-element-attached-top::before, .popover.popover-bottom::before { + border-bottom-color: #fff !important; +} + +.section { + padding: 70px 0; + position: relative; + background-color: #FFFFFF; +} + +.section-with-space { + padding: 60px 0; +} + +.section-gray { + background-color: #EEEEEE; +} + +.section-nude { + background-color: #FFFCF5; +} + +.section-gold { + background-color: #caac90; + color: #FFFFFF; +} + +.section-brown { + background-color: #A59E94; + color: #FFFFFF; +} + +.section-light-blue { + background-color: #51cbce; + color: #FFFFFF; +} + +.section-dark-blue { + background-color: #506367; + color: #FFFFFF; +} + +.section-dark { + background-color: #0b1011; +} + +.section-image, +.section-gold, +.section-dark { + position: relative; +} +.section-image .title, +.section-image .info-title, +.section-image .card-plain .card-title, +.section-gold .title, +.section-gold .info-title, +.section-gold .card-plain .card-title, +.section-dark .title, +.section-dark .info-title, +.section-dark .card-plain .card-title { + color: #FFFFFF !important; +} +.section-image .category, +.section-image .description, +.section-image .card-plain .card-description, +.section-image .card-plain .card-category, +.section-gold .category, +.section-gold .description, +.section-gold .card-plain .card-description, +.section-gold .card-plain .card-category, +.section-dark .category, +.section-dark .description, +.section-dark .card-plain .card-description, +.section-dark .card-plain .card-category { + color: rgba(255, 255, 255, 0.7); +} +.section-image hr, +.section-gold hr, +.section-dark hr { + border-color: rgba(255, 255, 255, 0.19); +} + +.page-header .title, +.page-header .info-title, +.carousel-caption .title, +.carousel-caption .info-title { + color: #FFFFFF; +} + +[class*="features-"], +[class*="team-"], +[class*="projects-"], +[class*="pricing-"], +[class*="testimonials-"], +[class*="contactus-"] { + padding: 80px 0; +} + +.section-image { + background-position: center center; + background-size: cover; +} +.section-image:before { + background-color: rgba(0, 0, 0, 0.5); + content: ""; + display: block; + height: 100%; + left: 0; + top: 0; + position: absolute; + width: 100%; + z-index: 1; +} +.section-image .container { + position: relative; + z-index: 2; +} + +.section-login { + min-height: 700px; +} + +.checkbox, +.radio { + margin-left: -3px; +} + +.checkbox label { + display: inline-block; + vertical-align: middle; + position: relative; + padding-left: 10px; + width: 67%; +} + +.checkbox label::before, +.checkbox label::after { + content: ""; + display: inline-block; + position: absolute; + width: 21px; + height: 21px; + left: 0; + margin-left: -20px; + border-radius: 4px; + opacity: .50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + top: 0; + background-color: #66615b; + transition: opacity 0.2s linear; +} + +.checkbox label::after { + top: -2px; + text-align: center; + font-size: 17px; + opacity: .9; + color: #FFFFFF; + background-color: inherit; +} + +.checkbox input[type="checkbox"], +.radio input[type="radio"] { + opacity: 0; + z-index: 1; + cursor: pointer; + width: 21px; + height: 21px; + top: -3px; +} + +.checkbox input[type="checkbox"]:checked + label::after { + font-family: 'FontAwesome'; + content: "\f00c"; +} + +.checkbox input[type="checkbox"]:checked + label::before { + opacity: 1; +} + +.checkbox input[type="checkbox"]:disabled + label { + color: #ddd; +} + +.checkbox input[type="checkbox"]:disabled + label::before { + background-color: #ddd; + cursor: not-allowed; +} + +.checkbox.checkbox-circle label::before { + border-radius: 50%; +} + +.checkbox.checkbox-inline { + margin-top: 0; +} + +.radio label { + display: inline-block; + vertical-align: middle; + position: relative; + padding-left: 10px; + width: 64%; +} + +.radio label::before, +.radio label::after { + font-family: 'FontAwesome'; + content: "\f10c"; + font-size: 25px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + display: inline-block; + position: absolute; + left: 0; + top: -8px; + color: #66615b; + opacity: .50; + margin-left: -20px; + padding: 1px; +} + +.radio label::after { + content: "\f192"; + opacity: 0; + font-size: 25px; + background-color: transparent; + transition: opacity 0.2s linear; +} + +.radio input[type="radio"]:not(:disabled):hover + label::before { + font-family: 'FontAwesome'; + content: "\f192"; + color: #66615b; + opacity: .50; +} + +.radio input[type="radio"]:checked + label::after { + opacity: 1; +} + +.radio input[type="radio"]:disabled + label { + color: #ddd; +} + +.radio input[type="radio"]:disabled + label::before, +.radio input[type="radio"]:disabled + label::after { + color: #ddd; +} + +.radio.radio-inline { + margin-top: 0; +} + +.nav .nav-item .nav-link:hover, +.nav .nav-item .nav-link:focus { + background-color: transparent; +} + +.navbar { + border: 0; + font-size: 14px; + transition: all 0.4s; + -webkit-transition: all 0.4s; + padding: 0; + background: #FFFFFF; + box-shadow: 0 6px 10px -4px rgba(0, 0, 0, 0.15); +} +.navbar .navbar-brand { + font-weight: 600; + margin: 5px 0px; + padding: 20px 15px; + font-size: 14px; + color: #66615B; + text-transform: uppercase; +} +.navbar .nav-link i { + font-size: 16px; + position: relative; + top: 4px; + right: 3px; +} +.navbar .nav-link [class^="fa"] { + top: 2px; +} +.navbar .nav-link p { + margin: 0px 0px; + color: #9A9A9A !important; + text-transform: uppercase; + font-weight: 600; + font-size: 12px; + line-height: 1.5em; + padding: 15px 0; +} +.navbar .nav-link p:hover { + color: #403D39 !important; +} +.navbar .navbar-nav .nav-item .nav-link { + line-height: 1.6; + margin: 15px 0px; + padding: 10px 15px; + opacity: .8; + font-size: 12px; + text-transform: uppercase; + font-weight: 600; + color: #66615B; +} +.navbar .navbar-nav .nav-item .nav-link.btn { + margin: 15px 3px; + padding: 9px; +} +.navbar .navbar-nav .dropdown-menu { + border-radius: 12px; + margin-top: 1px; +} +.navbar .navbar-collapse .nav-item .nav-link p { + display: inline; +} +.navbar .navbar-collapse .nav-item .dropdown-item i { + margin: 0 10px; + margin: 0 10px 0px 5px; + font-size: 18px; + position: relative; + top: 3px; +} +.navbar .navbar-collapse.show .navbar-nav .nav-item { + padding-right: 10px; +} +.navbar .notification-bubble { + right: 72px; + padding: 0.2em 0.6em; + position: absolute; + top: 15px; +} +.navbar .btn { + margin: 15px 3px; + font-size: 12px; +} +.navbar .btn i { + font-size: 14px; + line-height: 13px; +} +.navbar .btn-simple { + font-size: 16px; +} +.navbar .caret { + left: 0; + right: 0; + margin-right: auto; + margin-left: auto; + position: absolute; +} +.navbar.navbar-transparent { + padding-top: 0; +} +.navbar .logo-container { + margin-top: 5px; +} +.navbar .logo-container .logo { + overflow: hidden; + border-radius: 50%; + border: 1px solid #333333; + width: 50px; + float: left; +} +.navbar .logo-container .logo img { + width: 100%; +} +.navbar .logo-container .brand { + font-size: 18px; + color: #FFFFFF; + line-height: 20px; + float: left; + margin-left: 10px; + margin-top: 5px; + width: 75px; + height: 50px; +} + +.navbar.fixed-top .nav-link i { + top: 4px; +} + +.navbar-absolute { + position: absolute; + width: 100%; + padding-top: 10px; + z-index: 1029; +} + +.navbar-transparent .navbar-brand, [class*="bg"] .navbar-brand { + color: #FFFFFF; + opacity: 0.9; + filter: alpha(opacity=90); +} +.navbar-transparent .navbar-brand:focus, .navbar-transparent .navbar-brand:hover, [class*="bg"] .navbar-brand:focus, [class*="bg"] .navbar-brand:hover { + background-color: transparent; + opacity: 1; + filter: alpha(opacity=100); + color: #FFFFFF; +} +.navbar-transparent .navbar-nav .nav-item .nav-link:not(.btn), [class*="bg"] .navbar-nav .nav-item .nav-link:not(.btn) { + color: #FFFFFF; + border-color: #FFFFFF; +} +.navbar-transparent .navbar-nav .active .nav-link +.active .nav-link:hover, +.navbar-transparent .navbar-nav .active .nav-link:focus, +.navbar-transparent .navbar-nav .nav-item .nav-link:hover, +.navbar-transparent .navbar-nav .nav-item .nav-link:focus, [class*="bg"] .navbar-nav .active .nav-link +.active .nav-link:hover, +[class*="bg"] .navbar-nav .active .nav-link:focus, +[class*="bg"] .navbar-nav .nav-item .nav-link:hover, +[class*="bg"] .navbar-nav .nav-item .nav-link:focus { + background-color: transparent; + color: #FFFFFF; + opacity: 1; + filter: alpha(opacity=100); +} +.navbar-transparent .navbar-nav .nav .nav-item a.btn:hover, [class*="bg"] .navbar-nav .nav .nav-item a.btn:hover { + background-color: transparent; +} +.navbar-transparent .navbar-nav .dropdown .nav-link .caret, +.navbar-transparent .navbar-nav .dropdown .nav-link:hover .caret, +.navbar-transparent .navbar-nav .dropdown .nav-link:focus .caret, [class*="bg"] .navbar-nav .dropdown .nav-link .caret, +[class*="bg"] .navbar-nav .dropdown .nav-link:hover .caret, +[class*="bg"] .navbar-nav .dropdown .nav-link:focus .caret { + border-bottom-color: #FFFFFF; + border-top-color: #FFFFFF; +} +.navbar-transparent .navbar-nav .open .nav-link, +.navbar-transparent .navbar-nav .open .nav-link:hover, +.navbar-transparent .navbar-nav .open .nav-link:focus, [class*="bg"] .navbar-nav .open .nav-link, +[class*="bg"] .navbar-nav .open .nav-link:hover, +[class*="bg"] .navbar-nav .open .nav-link:focus { + background-color: transparent; + color: #66615B; + opacity: 1; + filter: alpha(opacity=100); +} +.navbar-transparent .btn-default.btn-fill, [class*="bg"] .btn-default.btn-fill { + color: #9A9A9A; + background-color: #FFFFFF; + opacity: 0.9; + filter: alpha(opacity=90); +} +.navbar-transparent .btn-default.btn-fill:hover, +.navbar-transparent .btn-default.btn-fill:focus, +.navbar-transparent .btn-default.btn-fill:active, +.navbar-transparent .btn-default.btn-fill.active, +.navbar-transparent .open .dropdown-toggle.btn-fill.btn-default, [class*="bg"] .btn-default.btn-fill:hover, +[class*="bg"] .btn-default.btn-fill:focus, +[class*="bg"] .btn-default.btn-fill:active, +[class*="bg"] .btn-default.btn-fill.active, +[class*="bg"] .open .dropdown-toggle.btn-fill.btn-default { + border-color: #FFFFFF; + opacity: 1; + filter: alpha(opacity=100); +} + +.nav-open .nav .caret { + border-bottom-color: #FFFFFF; + border-top-color: #FFFFFF; +} + +.navbar-default .brand { + color: #66615b !important; +} +.navbar-default .navbar-nav .nav-item .nav-link:not(.btn) { + color: #9A9A9A; +} +.navbar-default .navbar-nav .active .nav-link, +.navbar-default .navbar-nav .active .nav-link:not(.btn):hover, +.navbar-default .navbar-nav .active .nav-link:not(.btn):focus, +.navbar-default .navbar-nav .nav-item .nav-link:not(.btn):hover, +.navbar-default .navbar-nav .nav-item .nav-link:not(.btn):focus { + background-color: transparent; + border-radius: 3px; + color: #51bcda; + opacity: 1; + filter: alpha(opacity=100); +} +.navbar-default .navbar-nav .dropdown .nav-link:hover .caret, +.navbar-default .navbar-nav .dropdown .nav-link:focus .caret { + border-bottom-color: #51bcda; + border-top-color: #51bcda; +} +.navbar-default .navbar-nav .open .nav-link, +.navbar-default .navbar-nav .open .nav-link:hover, +.navbar-default .navbar-nav .open .nav-link:focus { + background-color: transparent; + color: #51bcda; +} +.navbar-default .navbar-nav .navbar-toggle:hover, .navbar-default .navbar-nav .navbar-toggle:focus { + background-color: transparent; +} +.navbar-default:not(.navbar-transparent) .btn-default:hover { + color: #51bcda; + border-color: #51bcda; +} +.navbar-default:not(.navbar-transparent) .btn-neutral, .navbar-default:not(.navbar-transparent) .btn-neutral:hover, .navbar-default:not(.navbar-transparent) .btn-neutral:active { + color: #9A9A9A; +} + +/* Navbar with icons */ +.navbar-icons.navbar .navbar-brand { + margin-top: 12px; + margin-bottom: 12px; +} +.navbar-icons .navbar-nav .nav-item .nav-link { + text-align: center; + padding: 6px 15px; + margin: 6px 3px; +} +.navbar-icons .navbar-nav [class^="pe"] { + font-size: 30px; + position: relative; +} +.navbar-icons .navbar-nav p { + margin: 3px 0 0; +} + +.navbar-form { + -webkit-box-shadow: none; + box-shadow: none; +} +.navbar-form .form-control { + border-radius: 0; + border: 0; + padding: 0; + background-color: transparent; + height: 22px; + font-size: 14px; + line-height: 1.5em; + color: #E3E3E3; +} +.navbar-transparent .navbar-form .form-control, [class*="bg"] .navbar-form .form-control { + color: #FFFFFF; + border: 0; + border-bottom: 1px solid rgba(255, 255, 255, 0.6); +} + +.navbar-toggle { + margin-top: 19px; + margin-bottom: 19px; + border: 0; +} +.navbar-toggle .icon-bar { + background-color: #FFFFFF; +} +.navbar-toggle .navbar-collapse, +.navbar-toggle .navbar-form { + border-color: transparent; +} +.navbar-toggle.navbar-default .navbar-toggle:hover, .navbar-toggle.navbar-default .navbar-toggle:focus { + background-color: transparent; +} + +.navbar-light .navbar-nav .nav-link:hover { + color: #E3E3E3; +} + +.red { + color: #ff0000; +} + +.collapse .navbar-text { + line-height: 55px; +} + +.navbar-default .navbar-brand { + color: #66615B; +} + +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; +} + +.navbar-collapse.show .navbar-nav .nav-item { + padding-right: 100px; +} + +.nav-tabs-navigation:last-child { + border-bottom: 0 none; +} +.nav-tabs-navigation:last-child .nav-stacked { + border-right: 1px solid #F1EAE0; + font-size: 16px; + font-weight: 600; + padding: 20px 0; +} +.nav-tabs-navigation:last-child .nav-stacked .nav-item .nav-link { + padding: 7px 25px; +} + +.navbar-nav > li > .dropdown-menu, +.dropdown .dropdown-menu { + transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s, opacity 0.3s ease 0s, height 0s linear 0.35s; +} + +.navbar-toggler { + outline: none !important; + cursor: pointer; +} +.navbar .navbar-toggler .navbar-toggler-bar { + background: #66615b; +} +.navbar[class*="bg-"] .navbar-toggler .navbar-toggler-bar, .navbar.navbar-transparent .navbar-toggler .navbar-toggler-bar { + background: #fff; +} +.navbar-toggler .navbar-toggler-bar { + display: block; + position: relative; + width: 24px; + height: 2px; + border-radius: 1px; + margin: 0 auto; +} + +.navbar-toggler .navbar-toggler-bar + .navbar-toggler-bar, +.navbar-toggler .navbar-toggler-icon + .navbar-toggler-icon { + margin-top: 4px; +} + +.navbar .navbar-toggler { + margin-top: 24px; +} + +.navbar .navbar-burger { + margin-top: 20px; +} + +.navbar-toggler-icon { + display: block; + position: relative; + width: 24px; + height: 2px; + border-radius: 1px; + margin: 0 auto; + background: gray; +} + +.no-transition { + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + -ms-transition: none; + transition: none; +} + +#description-areas .nav-stacked .nav-link.active:before, +#navtabs-row .nav-stacked .nav-link.active:before { + border-right: 11px solid #F1EAE0; + border-top: 11px solid transparent; + border-bottom: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 0; + bottom: 7px; +} + +#description-areas .nav-stacked .nav-link.active:after, +#navtabs-row .nav-stacked .nav-link.active:after { + border-right: 11px solid #FFFFFF; + border-top: 11px solid transparent; + border-bottom: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: -1px; + bottom: 7px; +} + +#second-tabs { + margin-left: 20px; +} + +.scroll-area { + max-height: 310px; + overflow-y: scroll; + list-style: outside none none; + padding: 0px; +} + +.burger-menu .collapse .navbar-nav a { + color: #333333; +} + +.navbar-transparent { + background: transparent !important; + border-bottom: 1px solid transparent; + box-shadow: none; +} +.navbar-transparent .dropdown-menu .divider { + background-color: rgba(255, 255, 255, 0.2); +} + +.img-rounded { + border-radius: 12px; + transition: opacity 0.5s ease 0s; + max-width: 100%; +} + +.img-details { + min-height: 50px; + padding: 0 4px 0.5em; +} + +.img-details img { + width: 50px; +} + +.img-details .author { + margin-left: 10px; + margin-top: -21px; + width: 40px; +} + +.img-circle { + background-color: #FFFFFF; + margin-bottom: 10px; + padding: 4px; + border-radius: 50% !important; + max-width: 100%; +} + +.img-thumbnail { + border: 0 none; + border-radius: 12px; + box-shadow: 0 1px 2px rgba(164, 158, 147, 0.6); + margin-bottom: 10px; +} + +.img-no-padding { + padding: 0px; +} + +.example-page .img-rounded { + margin: 50px 0 20px; +} + +.img-shadow { + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); +} + +.images-title { + margin-bottom: 20px; + height: 50px; +} + +.nav-link .profile-photo-small { + width: 40px; + height: 30px; + margin: -10px 0 0 -15px; +} + +.profile-picture { + margin: 0 auto; +} +.profile-picture .fileinput-new img { + width: 150px; + height: 150px; + border-radius: 50%; + margin-bottom: 10px; +} +.profile-picture .fileinput-exists img { + max-width: 150px; + max-height: 150px; + border-radius: 50%; + margin-bottom: 10px; +} + +.card { + border-radius: 12px; + box-shadow: 0 6px 10px -4px rgba(0, 0, 0, 0.15); + background-color: #FFFFFF; + color: #333333; + margin-bottom: 20px; + position: relative; + z-index: 1; + border: 0 none; + -webkit-transition: transform 300ms cubic-bezier(0.34, 2, 0.6, 1), box-shadow 200ms ease; + -moz-transition: transform 300ms cubic-bezier(0.34, 2, 0.6, 1), box-shadow 200ms ease; + -o-transition: transform 300ms cubic-bezier(0.34, 2, 0.6, 1), box-shadow 200ms ease; + -ms-transition: transform 300ms cubic-bezier(0.34, 2, 0.6, 1), box-shadow 200ms ease; + transition: transform 300ms cubic-bezier(0.34, 2, 0.6, 1), box-shadow 200ms ease; +} +.card:not(.card-plain):hover { + box-shadow: 0px 12px 19px -7px rgba(0, 0, 0, 0.3); + transform: translateY(-10px); + -webkit-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -moz-transform: translateY(-10px); +} +.card.card-plain { + background-color: transparent; + box-shadow: none; + border-radius: 0; +} +.card .card-footer { + padding: 15px; + background: transparent; + border-top: 0 none; +} +.card .card-footer .social-line .btn:first-child { + border-radius: 0 0 0 6px; +} +.card .card-footer .social-line .btn:last-child { + border-radius: 0 0 6px 0; +} +.card .card-block .card-footer { + padding: 0; +} +.card .card-block .card-description + .card-footer { + padding-top: 10px; +} +.card.no-transition:hover, .card.card-register:hover, .card.page-carousel:hover { + box-shadow: 0 6px 10px -4px rgba(0, 0, 0, 0.15); + transform: none; + -webkit-transform: none; + -ms-transform: none; + -moz-transform: none; +} + +.section-dark .card-profile.card-plain .card-title { + color: #FFFFFF !important; +} +.section-dark .card-profile.card-plain .card-description { + color: rgba(255, 255, 255, 0.7); +} + +.card-profile { + margin-top: 30px; + text-align: center; +} +.card-profile .card-cover { + height: 130px; + background-position: center center; + background-size: cover; + border-radius: 12px 12px 0 0; +} +.card-profile .card-block .card-title { + margin-top: 5px !important; +} +.card-profile .card-block .card-category { + margin-bottom: 5px; + margin-top: 5px; +} +.card-profile .card-avatar { + max-width: 120px; + max-height: 120px; + margin: -60px auto 0; + border-radius: 50%; + overflow: hidden; +} +.card-profile .card-avatar img { + max-width: 100%; + height: auto; +} +.card-profile .card-avatar.border-white { + border: 4px solid #FFFFFF; +} +.card-profile .card-avatar.border-gray { + border: 4px solid #ccc; +} + +.section .card-profile { + margin-top: 100px; +} + +.card-register { + background-color: #FF8F5E; + border-radius: 8px; + color: #fff; + max-width: 350px; + margin: 120px 0 70px; + min-height: 400px; + padding: 30px; + z-index: 1; +} +.card-register .social-line .btn { + margin-top: 0; +} + +.section-image .card-register { + margin-top: 0; +} + +.card-register label { + margin-top: 15px; +} + +.card-register .title { + color: #B33C12; + text-align: center; +} + +.card-register .btn { + margin-top: 30px; +} + +.card-register .forgot { + text-align: center; +} + +.footer { + background-attachment: fixed; + position: relative; + line-height: 20px; +} + +.footer nav > ul { + list-style: none; + margin: 0; + padding: 0; + font-weight: normal; +} + +.footer nav > ul > li { + display: inline-block; + padding: 10px 15px; + margin: 15px 3px; + line-height: 20px; + text-align: center; +} + +.footer nav > ul a:not(.btn) { + color: #777777; + display: block; + margin-bottom: 3px; + line-height: 1.6; + opacity: .8; + font-size: 12px; + text-transform: uppercase; + font-weight: 600; +} + +.footer nav > ul a:not(.btn):hover, +.footer nav > ul a:not(.btn):focus { + color: #777777; + opacity: 1; +} + +.footer .copyright { + color: #777777; + padding: 10px 0px; + font-size: 14px; + margin: 15px 3px; + line-height: 20px; + text-align: center; +} + +.footer .heart { + color: #EB5E28; +} + +.footer { + background-color: #FFFFFF; + line-height: 36px; +} +.footer.footer-black h4 { + color: #FFFFFF; +} +.footer .links { + display: inline-block; +} +.footer .links ul { + list-style: none; + margin: 0; + padding: 0; + font-weight: 600; +} +.footer .links ul > li { + display: inline-block; + padding-right: 20px; +} +.footer .links ul > li:last-child { + padding-right: 0px; +} +.footer .links ul a:not(.btn) { + color: #66615b; + display: block; + font-size: 0.9em; + margin-bottom: 3px; +} +.footer .links ul a:not(.btn):hover, .footer .links ul a:not(.btn):focus { + color: #403D39; +} +.footer .links ul.uppercase-links { + text-transform: uppercase; +} +.footer .links ul.stacked-links { + margin-top: 10px; +} +.footer .links ul.stacked-links > li { + display: block; + line-height: 26px; +} +.footer .links ul.stacked-links h4 { + margin-top: 0px; +} +.footer hr { + border-color: #DDDDDD; + border-width: 1px 0 0; + margin-top: 5px; + margin-bottom: 5px; +} +.footer .copyright { + color: #A49E9E; + font-size: 0.9em; +} +.footer .copyright ul > li { + padding-right: 0px; +} +.footer .title { + color: #403D39; +} + +.footer-black, +.footer-transparent, +.subscribe-line-transparent { + background-color: #252422; + color: #DDDDDD; +} +.footer-black .links ul a:not(.btn), +.footer-transparent .links ul a:not(.btn), +.subscribe-line-transparent .links ul a:not(.btn) { + color: #A49E9E; +} +.footer-black .links ul a:not(.btn):hover, .footer-black .links ul a:not(.btn):focus, +.footer-transparent .links ul a:not(.btn):hover, +.subscribe-line-transparent .links ul a:not(.btn):hover, +.footer-transparent .links ul a:not(.btn):focus, +.subscribe-line-transparent .links ul a:not(.btn):focus { + color: #F1EAE0; +} +.footer-black .copyright, +.footer-transparent .copyright, +.subscribe-line-transparent .copyright { + color: #66615b; +} +.footer-black .copyright ul > li a:not(.btn), +.footer-transparent .copyright ul > li a:not(.btn), +.subscribe-line-transparent .copyright ul > li a:not(.btn) { + color: #66615b; +} +.footer-black hr, +.footer-transparent hr, +.subscribe-line-transparent hr { + border-color: #66615b; +} + +.footer-transparent, .subscribe-line-transparent { + background-size: cover; + position: relative; +} +.footer-transparent .container, .subscribe-line-transparent .container { + z-index: 2; + position: relative; +} +.footer-transparent hr, .subscribe-line-transparent hr { + border-color: #A49E9E; +} +.footer-transparent .copyright, .subscribe-line-transparent .copyright { + color: #A49E9E; +} +.footer-transparent .copyright ul > li a:not(.btn), .subscribe-line-transparent .copyright ul > li a:not(.btn) { + color: #A49E9E; +} +.footer-transparent::after, .subscribe-line-transparent::after { + top: 0; + left: 0; + height: 100%; + width: 100%; + position: absolute; + background-color: rgba(17, 17, 17, 0.5); + display: block; + content: ""; + z-index: 1; +} + +.footer-gray { + background-color: #F3F2EE; +} + +.footer-big { + padding: 30px 0; +} +.footer-big hr { + margin-top: 20px; +} +.footer-big .copyright { + margin: 10px 0px 20px; +} +.footer-big .form-group { + margin-top: 15px; +} + +.subscribe-line { + background-color: #FFFCF5; + padding: 35px 0; + background-position: center center; + background-size: cover; + background-attachment: fixed; + margin-top: 0; +} +.subscribe-line .form-group { + margin: 0; +} +.subscribe-line .form-control { + height: auto; + font-size: 1.825em; + border: 0; + padding: 0; + font-weight: 300; + line-height: 54px; + background-color: transparent; +} +.subscribe-line .btn:not(.btn-lg) { + margin-top: 7px; +} + +.subscribe-line-black { + background-color: #252422; +} +.subscribe-line-black .form-control { + color: #FFFFFF; +} + +.subscribe-line-transparent .form-control { + color: #FFFFFF; +} + +.social-line-black { + background-color: #252422; + color: #FFFFFF; +} + +.bootstrap-switch { + display: inline-block; + direction: ltr; + cursor: pointer; + border-radius: 30px; + border: 0; + position: relative; + text-align: left; + overflow: hidden; + margin-bottom: 5px; + line-height: 8px; + width: 61px !important; + height: 26px; + outline: none; + z-index: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + vertical-align: middle; + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} + +.bootstrap-switch .bootstrap-switch-container { + display: inline-flex; + top: 0; + height: 26px; + border-radius: 4px; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + width: 100px !important; +} + +.bootstrap-switch .bootstrap-switch-handle-on, +.bootstrap-switch .bootstrap-switch-handle-off, +.bootstrap-switch .bootstrap-switch-label { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; + display: inline-block !important; + height: 100%; + color: #fff; + padding: 6px 12px; + font-size: 11px; + text-indent: -5px; + line-height: 15px; + -webkit-transition: 0.25s ease-out; + transition: 0.25s ease-out; +} + +.bootstrap-switch .bootstrap-switch-handle-on, +.bootstrap-switch .bootstrap-switch-handle-off { + text-align: center; + z-index: 1; + float: left; + width: 50% !important; + background-color: #66615B; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary { + color: #fff; + background: #51cbce; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info { + color: #fff; + background: #447DF7; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success { + color: #fff; + background: #7AC29A; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning { + background: #FFA534; + color: #fff; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger { + color: #fff; + background: #FB404B; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default { + color: #fff; + background: #cfcfca; +} + +.bootstrap-switch .bootstrap-switch-label { + text-align: center; + z-index: 100; + color: #333333; + background: #ffffff; + width: 22px !important; + height: 22px; + margin: 2px -11px; + border-radius: 12px; + position: relative; + float: left; + padding: 0; + background-color: #FFFFFF; + box-shadow: 0 1px 1px #FFFFFF inset, 0 1px 1px rgba(0, 0, 0, 0.25); +} + +.bootstrap-switch .bootstrap-switch-handle-on { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.bootstrap-switch .bootstrap-switch-handle-off { + text-indent: 6px; +} + +.bootstrap-switch input[type='radio'], +.bootstrap-switch input[type='checkbox'] { + position: absolute !important; + top: 0; + left: 0; + opacity: 0; + filter: alpha(opacity=0); + z-index: -1; +} + +.bootstrap-switch input[type='radio'].form-control, +.bootstrap-switch input[type='checkbox'].form-control { + height: auto; +} + +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; +} + +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} + +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label { + padding: 6px 16px; + font-size: 18px; + line-height: 1.33; +} + +.bootstrap-switch.bootstrap-switch-disabled, +.bootstrap-switch.bootstrap-switch-readonly, +.bootstrap-switch.bootstrap-switch-indeterminate { + cursor: default !important; +} + +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default !important; +} + +.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container { + -webkit-transition: margin-left 0.5s; + transition: margin-left 0.5s; +} + +.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} + +.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-container { + margin-left: -2px !important; +} + +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-container { + margin-left: -37px !important; +} + +.bootstrap-switch.bootstrap-switch-on:hover .bootstrap-switch-label { + width: 26px !important; + margin: 2px -15px; +} + +.bootstrap-switch.bootstrap-switch-off:hover .bootstrap-switch-label { + width: 26px !important; + margin: 2px -15px -13px -11px; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-handle-off { + background-color: #66615B; +} + +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-handle-on { + background-color: #cfcfca; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-danger ~ .bootstrap-switch-default { + background-color: #FB404B; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-warning ~ .bootstrap-switch-default { + background-color: #FFA534; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-success ~ .bootstrap-switch-default { + background-color: #7AC29A; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-primary ~ .bootstrap-switch-default { + background-color: #51cbce; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-info ~ .bootstrap-switch-default { + background-color: #447DF7; +} + +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-danger, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-primary, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-info, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-warning, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-success { + background-color: #cfcfca; +} + +.dropdown-menu { + background-color: #FFFCF5; + border: 0 none; + border-radius: 12px; + display: block; + margin-top: 10px; + padding: 0px; + position: absolute; + visibility: hidden; + opacity: 0; + filter: alpha(opacity=0); + -webkit-box-shadow: 0 2px rgba(17, 16, 15, 0.1), 0 2px 10px rgba(17, 16, 15, 0.1); + box-shadow: 0 2px rgba(17, 16, 15, 0.1), 0 2px 10px rgba(17, 16, 15, 0.1); +} +.show .dropdown-menu { + opacity: 1; + filter: alpha(opacity=100); + visibility: visible; +} +.dropdown-menu .divider { + background-color: #F1EAE0; + margin: 0px; +} +.dropdown-menu .dropdown-header { + color: #9A9A9A; + font-size: 12px; + padding: 10px 15px; +} +.dropdown-menu .no-notification { + color: #9A9A9A; + font-size: 1.2em; + padding: 30px 30px; + text-align: center; +} +.dropdown-menu .dropdown-item { + padding: 0 !important; +} +.dropdown-menu .dropdown-item a { + color: #66615b; + font-size: 14px; + padding: 10px 45px 10px 15px; + clear: both; + white-space: nowrap; + width: 100%; + display: block; +} +.dropdown-menu .dropdown-item a img { + margin-top: -3px; +} +.dropdown-menu .dropdown-item a:focus { + outline: 0 !important; +} +.btn-group.select .dropdown-menu { + min-width: 100%; +} +.dropdown-menu .dropdown-item:first-child a, +.dropdown-menu .dropdown-item:first-child { + border-top-left-radius: 12px; + border-top-right-radius: 12px; +} +.dropdown-menu .dropdown-item:last-child a, +.dropdown-menu .dropdown-item:last-child { + border-bottom-left-radius: 12px; + border-bottom-right-radius: 12px; +} +.select .dropdown-menu .dropdown-item:first-child a { + border-radius: 0; + border-bottom: 0 none; +} +.dropdown-menu .dropdown-item a:hover, +.dropdown-menu .dropdown-item a:focus { + color: #FFFFFF; + opacity: 1; + text-decoration: none; +} +.dropdown-menu .dropdown-item:hover, +.dropdown-menu .dropdown-item:focus { + background-color: #66615B; +} +.dropdown-menu.dropdown-primary .dropdown-item:hover, .dropdown-menu.dropdown-primary .dropdown-item:focus { + background-color: #6dd3d6; +} +.dropdown-menu.dropdown-info .dropdown-item:hover, .dropdown-menu.dropdown-info .dropdown-item:focus { + background-color: #6ec7e0; +} +.dropdown-menu.dropdown-success .dropdown-item:hover, .dropdown-menu.dropdown-success .dropdown-item:focus { + background-color: #86d9ab; +} +.dropdown-menu.dropdown-warning .dropdown-item:hover, .dropdown-menu.dropdown-warning .dropdown-item:focus { + background-color: #fcd27b; +} +.dropdown-menu.dropdown-danger .dropdown-item:hover, .dropdown-menu.dropdown-danger .dropdown-item:focus { + background-color: #f7765f; +} + +.dropdown-divider { + margin: 0 !important; +} + +.btn-group.select.open { + overflow: visible; +} + +.dropdown-menu-right { + right: -2px; + left: auto; +} + +@media (min-width: 768px) { + .navbar-form { + margin-top: 21px; + margin-bottom: 21px; + padding-left: 5px; + padding-right: 5px; + } + + .navbar-search-form { + display: none; + } + + .navbar-nav .dropdown-item .dropdown-menu, + .dropdown .dropdown-menu, + .dropdown-btn .dropdown-menu { + transform: translate3d(0px, -40px, 0px); + transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s, opacity 0.3s ease 0s, height 0s linear 0.35s; + } + + .navbar-nav .dropdown-item.show .dropdown-menu, + .dropdown.show .dropdown-menu, + .dropdown-btn.show .dropdown-menu { + transform: translate3d(0px, 0px, 0px); + visibility: visible !important; + } + + .bootstrap-select .dropdown-menu { + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transition: all 150ms linear; + -moz-transition: all 150ms linear; + -o-transition: all 150ms linear; + -ms-transition: all 150ms linear; + transition: all 150ms linear; + } + + .bootstrap-datetimepicker-widget { + visibility: visible !important; + opacity: 1; + filter: alpha(opacity=100); + } + + .dropup.show .dropdown-menu { + -webkit-transform: translate3d(0, -10px, 0); + -moz-transform: translate3d(0, -10px, 0); + -o-transform: translate3d(0, -10px, 0); + -ms-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + opacity: 1; + visibility: visible; + } + + .dropup .dropdown-menu { + transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s, opacity 0.3s ease 0s, height 0s linear 0.35s; + -webkit-transform: translate3d(0, 30px, 0); + -moz-transform: translate3d(0, 30px, 0); + -o-transform: translate3d(0, 30px, 0); + -ms-transform: translate3d(0, 30px, 0); + transform: translate3d(0, 30px, 0); + opacity: 0; + visibility: hidden; + display: block; + } + + .bootstrap-select .show .dropdown-menu { + transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s, opacity 0.3s ease 0s, height 0s linear 0.35s; + transform: translate3d(0px, 0px, 0px); + } + + .navbar-nav li .dropdown-menu:before, + #dropdown-row .dropdown .dropdown-menu:before, + .card.card-just-text .dropdown .dropdown-menu:before, + .card-just-text .dropdown .dropdown-menu:before, + .dropdown-btn .dropdown-menu:before { + border-bottom: 11px solid #F1EAE0; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 12px; + top: -11px; + } + + #dropdown-row .dropdown .dropdown-menu:before { + left: 12px !important; + right: auto; + } + + .navbar-nav li .dropdown-menu:after, + #dropdown-row .dropdown .dropdown-menu:after, + .card.card-just-text .dropdown .dropdown-menu:after, + .card-just-text .dropdown .dropdown-menu:after, + .dropdown-btn .dropdown-menu:after { + border-bottom: 11px solid #FFFCF5; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 12px; + top: -10px; + } + + #dropdown-row .dropdown .dropdown-menu:after { + left: 12px !important; + right: auto; + } + + #dropdown-row .dropdown .dropdown-menu { + left: 15px; + } + + .navbar-nav.navbar-right li .dropdown-menu:before, + .navbar-nav.navbar-right li .dropdown-menu:after { + left: auto; + right: 12px; + } + + .footer:not(.footer-big) nav ul li:first-child { + margin-left: 0; + } + + body > .navbar-collapse.collapse { + display: none !important; + } +} +#navbar .dropdown-menu .dropdown-item { + padding: 3px 1.5rem !important; +} + +.dropdown-sharing li { + color: #66615b; + font-size: 14px; +} +.dropdown-sharing li .social-line { + line-height: 28px; + padding: 10px 20px 5px 20px; +} +.dropdown-sharing li .social-line [class*="icon-"] { + font-size: 20px; +} +.dropdown-sharing li:hover .social-line, +.dropdown-sharing li:hover a, +.dropdown-sharing li:hover .action-line, +.dropdown-sharing li:focus .social-line, +.dropdown-sharing li:focus a, +.dropdown-sharing li:focus .action-line { + background-color: #FFFCF5; + color: #66615b; + opacity: 1; + text-decoration: none; +} + +.show .dropdown-sharing { + margin-bottom: 1px; +} +.show .dropdown-sharing li:last-child { + padding: 10px 15px; +} + +.show .dropdown-actions { + margin-bottom: 1px; +} + +.dropdown-actions li { + margin: -15px 35px; +} +.dropdown-actions li .action-line { + padding: 5px 10px; + line-height: 24px; + font-weight: bold; +} +.dropdown-actions li .action-line [class*="icon-"] { + font-size: 24px; +} +.dropdown-actions li .action-line .col-sm-9 { + line-height: 34px; +} +.dropdown-actions li .link-danger { + color: #f5593d; +} +.dropdown-actions li .link-danger:hover, .dropdown-actions li .link-danger:active, .dropdown-actions li .link-danger:focus { + color: #f5593d; +} +.dropdown-actions li:hover a, +.dropdown-actions li:focus a { + color: #66615b; + opacity: 1; + text-decoration: none; +} +.dropdown-actions .action-line .icon-simple { + margin-left: -15px; +} + +.dropup .dropdown-menu:before { + border-top: 11px solid #DCD9D1; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 12px; + bottom: -12px; +} + +.dropup .dropdown-menu:after { + border-top: 11px solid #FFFCF5; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 12px; + bottom: -11px; +} + +.dropup .dropdown-toggle:after, +.dropdown .dropdown-toggle:after { + margin-left: 5px; +} + +.dropdown-notification .dropdown-notification-list li { + border-bottom: 1px solid #F1EAE0; + color: #66615b; + font-size: 16px; + padding: 10px 5px; + width: 330px; +} +.dropdown-notification .dropdown-notification-list li a { + color: #66615b; + white-space: normal; +} +.dropdown-notification .dropdown-notification-list li a .notification-text { + padding-left: 40px; + position: relative; +} +.dropdown-notification .dropdown-notification-list li a .notification-text .label { + display: block; + position: absolute; + top: 50%; + margin-top: -12px; + left: 7px; +} +.dropdown-notification .dropdown-notification-list li a .notification-text .message { + font-size: 0.9em; + line-height: 0.7; + margin-left: 10px; +} +.dropdown-notification .dropdown-notification-list li a .notification-text .time { + color: #9A9A9A; + font-size: 0.7em; + margin-left: 10px; +} +.dropdown-notification .dropdown-notification-list li a .read-notification { + font-size: 12px; + opacity: 0; + position: absolute; + right: 5px; + top: 50%; + margin-top: -12px; +} +.dropdown-notification .dropdown-notification-list li:hover { + background-color: #F0EFEB; + color: #66615b; + opacity: 1; + text-decoration: none; +} +.dropdown-notification .dropdown-notification-list li:hover .read-notification { + opacity: 1 !important; +} +.dropdown-notification .dropdown-footer { + background-color: #E8E7E3; + border-radius: 0 0 8px 8px; +} +.dropdown-notification .dropdown-footer .dropdown-footer-menu { + list-style: outside none none; + padding: 0px 5px; +} +.dropdown-notification .dropdown-footer .dropdown-footer-menu li { + display: inline-block; + text-align: left; + padding: 0 10px; +} +.dropdown-notification .dropdown-footer .dropdown-footer-menu li a { + color: #9C9B99; + font-size: 0.9em; + line-height: 35px; +} + +.section-nucleo-icons { + padding: 100px 0; +} +.section-nucleo-icons .icons-container { + position: relative; + max-width: 450px; + height: 300px; + max-height: 300px; + margin: 0 auto; +} +.section-nucleo-icons .icons-container i { + font-size: 34px; + position: absolute; + top: 0; + left: 0; +} +.section-nucleo-icons .icons-container i:nth-child(1) { + top: 5%; + left: 7%; +} +.section-nucleo-icons .icons-container i:nth-child(2) { + top: 28%; + left: 24%; +} +.section-nucleo-icons .icons-container i:nth-child(3) { + top: 40%; +} +.section-nucleo-icons .icons-container i:nth-child(4) { + top: 18%; + left: 62%; +} +.section-nucleo-icons .icons-container i:nth-child(5) { + top: 74%; + left: 3%; +} +.section-nucleo-icons .icons-container i:nth-child(6) { + top: 36%; + left: 44%; + font-size: 65px; + color: #f5593d; + padding: 1px; +} +.section-nucleo-icons .icons-container i:nth-child(7) { + top: 59%; + left: 26%; +} +.section-nucleo-icons .icons-container i:nth-child(8) { + top: 60%; + left: 69%; +} +.section-nucleo-icons .icons-container i:nth-child(9) { + top: 72%; + left: 47%; +} +.section-nucleo-icons .icons-container i:nth-child(10) { + top: 88%; + left: 27%; +} +.section-nucleo-icons .icons-container i:nth-child(11) { + top: 31%; + left: 80%; +} +.section-nucleo-icons .icons-container i:nth-child(12) { + top: 88%; + left: 68%; +} +.section-nucleo-icons .icons-container i:nth-child(13) { + top: 5%; + left: 81%; +} +.section-nucleo-icons .icons-container i:nth-child(14) { + top: 58%; + left: 90%; +} +.section-nucleo-icons .icons-container i:nth-child(15) { + top: 6%; + left: 40%; +} + +.section-dark .icons-container { + color: #FFFFFF; +} + +.info .icon { + margin-top: 0; + font-size: 3.4em; +} + +.icon-primary { + color: #51cbce; +} + +.icon-info { + color: #51bcda; +} + +.icon-success { + color: #6bd098; +} + +.icon-warning { + color: #fbc658; +} + +.icon-danger { + color: #f5593d; +} + +.icon-neutral { + color: #FFFFFF; +} + +/* Navigation menu */ +/* Navigation Tabs */ +.nav-tabs-navigation { + text-align: center; + border-bottom: 1px solid #F1EAE0; + margin-bottom: 30px; +} +.nav-tabs-navigation .nav > .nav-item > .nav-link { + padding-bottom: 20px; +} + +.nav-tabs-wrapper { + display: inline-block; + margin-bottom: -6px; + margin-left: 1.25%; + margin-right: 1.25%; + position: relative; + width: auto; +} + +.nav-tabs { + border-bottom: 0 none; + font-size: 16px; + font-weight: 600; +} +.nav-tabs .nav-item .nav-link { + border: 0 none; + color: #A49E93; + background-color: transparent; +} +.nav-tabs .nav-item .nav-link:hover { + color: #66615b; +} +.nav-tabs .nav-item .nav-link.active { + color: #66615b; +} +.nav-tabs .nav-item { + color: #66615b; + position: relative; +} +.nav-tabs .nav-item .nav-link.active, +.nav-tabs .nav-item .nav-link.active:hover, +.nav-tabs .nav-item .nav-link.active:focus { + background-color: transparent; + border: 0 none; +} +.nav-tabs .nav-item .nav-link.active:after, +.nav-tabs .nav-item .nav-link.active:hover:after, +.nav-tabs .nav-item .nav-link.active:focus:after { + border-bottom: 11px solid #FFFFFF; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 40%; + bottom: 5px; +} +.nav-tabs .nav-item .nav-link.active:before, +.nav-tabs .nav-item .nav-link.active:hover:before, +.nav-tabs .nav-item .nav-link.active:focus:before { + border-bottom: 11px solid #F1EAE0; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 40%; + bottom: 6px; +} +.nav-tabs .nav-item.show .nav-link { + background-color: transparent; +} +.nav-tabs .dropdown-menu { + margin-top: -6px; + margin-left: -46px; + border-radius: 8px; +} +.nav-tabs .dropdown-menu .dropdown-item:hover, +.nav-tabs .dropdown-menu .dropdown-item.active { + color: #FFFFFF; + background-color: #68B3C8; +} +.nav-tabs .dropdown-menu :before { + border-bottom: 11px solid #F1EAE0; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 12px; + top: -11px; +} +.nav-tabs .dropdown-menu :after { + border-bottom: 11px solid #FFFCF5; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 12px; + top: -10px; +} + +.profile-content .tab-content .tab-pane { + min-height: 200px; +} +.profile-content .tab-content #tweets, .profile-content .tab-content #connections, .profile-content .tab-content #media { + height: 100%; +} + +/* Navigation Pills */ +.nav-pills .nav-item + .nav-link { + margin-left: 0; +} +.nav-pills .nav-item .nav-link { + border: 1px solid #66615B; + border-radius: 0; + color: #66615B; + font-weight: 600; + margin-left: -1px; + padding: 10px 25px; +} +.nav-pills .nav-item.active .nav-link, +.nav-pills .nav-item.active .nav-link:hover, +.nav-pills .nav-item.active .nav-link:focus { + background-color: #66615B; + color: #FFFFFF; +} +.nav-pills .nav-item:first-child .nav-link { + border-radius: 30px 0 0 30px !important; + margin: 0; +} +.nav-pills .nav-item:last-child .nav-link { + border-radius: 0 30px 30px 0 !important; +} +.nav-pills .nav-item .nav-link.active { + background-color: #66615B; + color: #FFFFFF; +} + +.nav-pills-primary .nav-item .nav-link { + border: 1px solid #51cbce !important; + color: #51cbce !important; +} +.nav-pills-primary .nav-item .nav-link.active { + border: 1px solid #51cbce !important; + color: #FFFFFF !important; +} + +.nav-pills-danger .nav-item .nav-link { + border: 1px solid #f5593d !important; + color: #f5593d !important; +} +.nav-pills-danger .nav-item .nav-link.active { + border: 1px solid #f5593d !important; + color: #FFFFFF !important; +} + +.nav-pills-info .nav-item .nav-link { + border: 1px solid #51bcda !important; + color: #51bcda !important; +} +.nav-pills-info .nav-item .nav-link.active { + border: 1px solid #51bcda !important; + color: #FFFFFF !important; +} + +.nav-pills-success .nav-item .nav-link { + border: 1px solid #6bd098 !important; + color: #6bd098 !important; +} +.nav-pills-success .nav-item .nav-link.active { + border: 1px solid #6bd098 !important; + color: #FFFFFF !important; +} + +.nav-pills-warning .nav-item .nav-link { + border: 1px solid #fbc658 !important; + color: #fbc658 !important; +} +.nav-pills-warning .nav-item .nav-link.active { + border: 1px solid #fbc658 !important; + color: #FFFFFF !important; +} + +.pagination > .page-item > .page-link, +.pagination > .page-item > span, +.pagination > .page-item:first-child > .page-link, +.pagination > .page-item:first-child > span, +.pagination > .page-item:last-child > .page-link, +.pagination > .page-item:last-child > span { + background-color: transparent; + border: 2px solid #f5593d; + border-radius: 20px; + color: #f5593d; + height: 36px; + margin: 0 2px; + min-width: 36px; + font-weight: 600; +} + +.nav-pills-danger > .page-item > .page-link, +.pagination-danger > .page-item > .page-link, +.pagination-danger > .page-item > span, +.pagination-danger > .page-item:first-child > .page-link, +.pagination-danger > .page-item:first-child > span, +.pagination-danger > .page-item:last-child > .page-link, +.pagination-danger > .page-item:last-child > span { + border: 2px solid #f5593d; + color: #f5593d; +} + +.nav-pills-danger > .page-item.active > .page-link, +.nav-pills-danger > .page-item.active > .page-link:hover, +.nav-pills-danger > .page-item.active > .page-link:focus, +.pagination-danger > .page-item > .page-link:hover, +.pagination-danger > .page-item > .page-link:focus, +.pagination-danger > .page-item > .page-link:active, +.pagination-danger > .page-item.active > .page-link, +.pagination-danger > .page-item.active > span, +.pagination-danger > .page-item.active > .page-link:hover, +.pagination-danger > .page-item.active > span:hover, +.pagination-danger > .page-item.active > .page-link:focus, +.pagination-danger > .page-item.active > span:focus { + background-color: #f5593d !important; + border-color: #f5593d !important; + color: #FFFFFF; +} + +.nav-text, .nav-icons { + margin: 0 0 10px 0; +} +.nav-text > li > a, .nav-icons > li > a { + display: block; + padding: 0px 18px; + color: #9A9A9A; + text-align: center; + opacity: 0.8; + filter: alpha(opacity=80); +} +.nav-text > li > a:hover, .nav-text > li > a:focus, .nav-icons > li > a:hover, .nav-icons > li > a:focus { + background-color: transparent; + opacity: 1; + filter: alpha(opacity=100); +} +.nav-text > li:first-child a, .nav-icons > li:first-child a { + padding-left: 0; +} +.nav-text > li.active a, .nav-icons > li.active a { + color: #51bcda; +} + +.nav-icons > li { + display: inline-block; +} +.nav-icons > li > a { + padding: 0 10px; + margin-bottom: 10px; +} +.nav-icons > li > a i { + font-size: 1.6em; + margin-bottom: 10px; + width: 1.6em; +} + +.nav-icons.nav-stacked > li { + display: block; +} +.nav-icons.nav-stacked > li > a { + margin-bottom: 20px; +} + +.nav-blue > li.active a { + color: #51cbce; +} + +.nav-azure > li.active a { + color: #51bcda; +} + +.nav-green > li.active a { + color: #6bd098; +} + +.nav-orange > li.active a { + color: #fbc658; +} + +.nav-red > li.active a { + color: #f5593d; +} + +.nav-text { + margin: 0 0 10px 0; +} +.nav-text > li > a { + font-size: 0.9em; + text-transform: uppercase; + padding: 3px 0; + text-align: left; + font-weight: 500; +} +.nav-text > li:first-child > a { + padding-top: 0; +} +.nav-text h4 { + margin-top: 0; +} + +.nav-text:not(.nav-stacked) > li { + display: inline-block; +} +.nav-text:not(.nav-stacked) > li > a { + margin-right: 15px; +} + +.page-item:first-child .page-link, +.page-item:last-child .page-link { + border-bottom-left-radius: 20px; + border-top-left-radius: 20px; + border-bottom-right-radius: 20px; + border-top-right-radius: 20px; +} + +.nav-pills-default .nav-item.show .nav-link, +.nav-pills-default .nav-link.active { + background-color: #66615B !important; +} + +.nav-pills-primary .nav-item.show .nav-link, +.nav-pills-primary .nav-link.active { + background-color: #51cbce !important; +} + +.nav-pills-info .nav-item.show .nav-link, +.nav-pills-info .nav-link.active { + background-color: #51bcda !important; +} + +.nav-pills-warning .nav-item.show .nav-link, +.nav-pills-warning .nav-link.active { + background-color: #fbc658 !important; +} + +.nav-pills-success .nav-item.show .nav-link, +.nav-pills-success .nav-link.active { + background-color: #6bd098 !important; +} + +.nav-pills-danger .nav-item.show .nav-link, +.nav-pills-danger .nav-link.active { + background-color: #f5593d !important; +} + +.pagination > li > a:hover, +.pagination > li > a:focus, +.pagination > li > a:active, +.pagination > li.active > a, +.pagination > li.active > span, +.pagination > li.active > a:hover, +.pagination > li.active > span:hover, +.pagination > li.active > a:focus, +.pagination > li.active > span:focus { + background-color: #f5593d; + border-color: #f5593d; + color: #FFFFFF; +} + +.page-item.active .page-link { + background-color: #f5593d; + color: white; + border-color: #f5593d; +} + +.nav-pills .nav-link { + border-radius: 0; +} + +.panel { + border: 0; + border-bottom: 1px solid #DDDDDD; + box-shadow: none; +} + +.panel-default > .panel-heading { + background-color: #FFFFFF; + border-color: #FFFFFF; +} + +.panel-group .panel { + border-radius: 0; +} + +.panel-title { + font-size: 1.35em; +} +.panel-title a { + display: block; + padding: .75rem; +} +.panel-title i { + float: right; + padding-top: 5px; +} + +.panel-title a:hover, +.panel-title a:focus { + text-decoration: none; +} + +.gsdk-collapse { + display: block; + height: 0px; + visibility: visible; + overflow: hidden; +} + +#accordion .panel-title a:hover, +#accordion .panel-title a:focus { + color: #f5593d; +} +#accordion .card-header { + background-color: #FFFFFF; +} + +.card-collapse { + padding: 0 !important; +} + +.panel-title a[aria-expanded="true"] i { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transition: all 300ms linear; + -moz-transition: all 300ms linear; + -o-transition: all 300ms linear; + -ms-transition: all 300ms linear; + transition: all 300ms linear; +} + +.carousel-control { + background-color: #f5593d; + border-radius: 50%; + opacity: 1; + text-shadow: none; +} +.carousel-control:hover, .carousel-control:focus { + opacity: 1; + background-color: #f33816; +} + +.carousel-control.left { + height: 30px; + top: 48%; + width: 30px; + left: 20px; + opacity: 0; +} + +.carousel-control.right { + height: 30px; + right: 20px; + top: 48%; + width: 30px; + opacity: 0; +} + +.carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .fa, .carousel-control .fa { + display: inline-block; + z-index: 5; +} + +.carousel-control-prev .fa { + font-size: 26px; + margin: 2px; + padding-right: 3px; +} + +.carousel-control-next .fa { + font-size: 26px; + margin: 2px; + padding-left: 3px; +} + +.carousel-control.left, .carousel-control.right { + background-image: none; +} + +.page-carousel { + border-radius: 12px !important; + border: none !important; +} + +.carousel-inner .carousel-item img { + border-radius: 12px; + box-shadow: 0 2px 2px rgba(204, 197, 185, 0.5); + height: 400px; + width: 100%; +} + +.carousel-indicators { + bottom: 0px; +} + +.carousel-indicators li { + background-color: #FFFFFF; + border: 0 none; +} + +.carousel-indicators .active { + background-color: #f5593d; +} + +.page-carousel:hover .carousel-control.right, +.page-carousel:hover .carousel-control.left { + opacity: 1; +} + +.modal-header { + border-bottom: 1px solid #DDDDDD; + padding: 20px; + text-align: center; + display: block !important; +} +.modal-header.no-border-header { + border-bottom: 0 none !important; +} +.modal-header.no-border-header .modal-title { + margin-top: 20px; +} +.modal-header .modal-title { + color: #333333; +} +.modal-header button.close { + margin-top: -25px; +} + +.modal-content { + border: 0 none; + border-radius: 10px; + box-shadow: 0 0 15px rgba(0, 0, 0, 0.15), 0 0 1px 1px rgba(0, 0, 0, 0.1); +} +.modal-content .modal-header h6 { + margin-top: 10px; +} + +.modal-dialog { + padding-top: 60px; +} + +.modal-body { + padding: 20px 50px; + color: #000; +} + +.modal-footer { + border-top: 1px solid #DDDDDD; + padding: 0px; +} +.modal-footer.no-border-footer { + border-top: 0 none; +} + +.modal-footer .left-side, .modal-footer .right-side { + display: inline-block; + text-align: center; + width: 49%; +} + +.modal-footer .btn-link { + padding: 20px; + width: 100%; +} + +.modal-footer .divider { + background-color: #DDDDDD; + display: inline-block; + float: inherit; + height: 63px; + margin: 0px -3px; + width: 1px; +} + +.modal.fade .modal-dialog { + transform: none; + -webkit-transform: none; + -moz-transform: none; +} + +.modal.in .modal-dialog { + transform: none; + -webkit-transform: none; + -moz-transform: none; +} + +.modal-backdrop.in { + opacity: 0.25; +} + +.modal-register .modal-footer { + text-align: center; + margin-bottom: 25px; + padding: 20px 0 15px; +} +.modal-register .modal-footer span { + width: 100%; +} + +.modal-header:after { + display: table; + content: " "; +} + +.modal-header:before { + display: table; + content: " "; +} + +/* Changes for small display */ +@media (max-width: 767px) { + .navbar-transparent { + background-color: rgba(0, 0, 0, 0.45); + } + + body { + position: relative; + font-size: 12px; + } + + h6 { + font-size: 1em; + } + + .navbar .container { + left: 0; + width: 100%; + -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + position: relative; + } + + .navbar .navbar-nav .dropdown-menu { + height: 400px; + overflow-y: scroll; + } + + .demo-header .motto { + padding-top: 30% !important; + } + + .navbar-toggle .icon-bar { + display: block; + position: relative; + background: #fff; + width: 24px; + height: 2px; + border-radius: 1px; + margin: 0 auto; + } + + .fog-low { + margin-bottom: -35px; + } + + .presentation-title { + font-size: 5em; + } + + .presentation-subtitle { + margin-top: 40px; + text-align: center; + } + + .title-brand { + max-width: 450px; + } + .title-brand .type { + font-size: 16px; + } + + .navbar-header .navbar-toggle { + margin-top: 12px; + width: 40px; + height: 40px; + } + + .bar1, + .bar2, + .bar3 { + outline: 1px solid transparent; + } + + .bar1 { + top: 0px; + -webkit-animation: topbar-back 500ms linear 0s; + -moz-animation: topbar-back 500ms linear 0s; + animation: topbar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + + .bar2 { + opacity: 1; + } + + .bar3 { + bottom: 0px; + -webkit-animation: bottombar-back 500ms linear 0s; + -moz-animation: bottombar-back 500ms linear 0s; + animation: bottombar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + + .toggled .bar1 { + top: 6px; + -webkit-animation: topbar-x 500ms linear 0s; + -moz-animation: topbar-x 500ms linear 0s; + animation: topbar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + + .toggled .bar2 { + opacity: 0; + } + + .toggled .bar3 { + bottom: 6px; + -webkit-animation: bottombar-x 500ms linear 0s; + -moz-animation: bottombar-x 500ms linear 0s; + animation: bottombar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + + @keyframes topbar-x { + 0% { + top: 0px; + transform: rotate(0deg); + } + 45% { + top: 6px; + transform: rotate(145deg); + } + 75% { + transform: rotate(130deg); + } + 100% { + transform: rotate(135deg); + } + } + @-webkit-keyframes topbar-x { + 0% { + top: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + top: 6px; + -webkit-transform: rotate(145deg); + } + 75% { + -webkit-transform: rotate(130deg); + } + 100% { + -webkit-transform: rotate(135deg); + } + } + @-moz-keyframes topbar-x { + 0% { + top: 0px; + -moz-transform: rotate(0deg); + } + 45% { + top: 6px; + -moz-transform: rotate(145deg); + } + 75% { + -moz-transform: rotate(130deg); + } + 100% { + -moz-transform: rotate(135deg); + } + } + @keyframes topbar-back { + 0% { + top: 6px; + transform: rotate(135deg); + } + 45% { + transform: rotate(-10deg); + } + 75% { + transform: rotate(5deg); + } + 100% { + top: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes topbar-back { + 0% { + top: 6px; + -webkit-transform: rotate(135deg); + } + 45% { + -webkit-transform: rotate(-10deg); + } + 75% { + -webkit-transform: rotate(5deg); + } + 100% { + top: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes topbar-back { + 0% { + top: 6px; + -moz-transform: rotate(135deg); + } + 45% { + -moz-transform: rotate(-10deg); + } + 75% { + -moz-transform: rotate(5deg); + } + 100% { + top: 0px; + -moz-transform: rotate(0); + } + } + @keyframes bottombar-x { + 0% { + bottom: 0px; + transform: rotate(0deg); + } + 45% { + bottom: 6px; + transform: rotate(-145deg); + } + 75% { + transform: rotate(-130deg); + } + 100% { + transform: rotate(-135deg); + } + } + @-webkit-keyframes bottombar-x { + 0% { + bottom: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -webkit-transform: rotate(-145deg); + } + 75% { + -webkit-transform: rotate(-130deg); + } + 100% { + -webkit-transform: rotate(-135deg); + } + } + @-moz-keyframes bottombar-x { + 0% { + bottom: 0px; + -moz-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -moz-transform: rotate(-145deg); + } + 75% { + -moz-transform: rotate(-130deg); + } + 100% { + -moz-transform: rotate(-135deg); + } + } + @keyframes bottombar-back { + 0% { + bottom: 6px; + transform: rotate(-135deg); + } + 45% { + transform: rotate(10deg); + } + 75% { + transform: rotate(-5deg); + } + 100% { + bottom: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes bottombar-back { + 0% { + bottom: 6px; + -webkit-transform: rotate(-135deg); + } + 45% { + -webkit-transform: rotate(10deg); + } + 75% { + -webkit-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes bottombar-back { + 0% { + bottom: 6px; + -moz-transform: rotate(-135deg); + } + 45% { + -moz-transform: rotate(10deg); + } + 75% { + -moz-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -moz-transform: rotate(0); + } + } + @-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @-moz-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + .navbar-nav { + margin: 1px -15px; + } + .navbar-nav .open .dropdown-menu > li > a { + padding: 15px 15px 5px 50px; + } + .navbar-nav .open .dropdown-menu > li:first-child > a { + padding: 5px 15px 5px 50px; + } + .navbar-nav .open .dropdown-menu > li:last-child > a { + padding: 15px 15px 25px 50px; + } + + [class*="navbar-"] .navbar-nav > li > a, [class*="navbar-"] .navbar-nav > li > a:hover, [class*="navbar-"] .navbar-nav > li > a:focus, [class*="navbar-"] .navbar-nav .active > a, [class*="navbar-"] .navbar-nav .active > a:hover, [class*="navbar-"] .navbar-nav .active > a:focus, [class*="navbar-"] .navbar-nav .open .dropdown-menu > li > a, [class*="navbar-"] .navbar-nav .open .dropdown-menu > li > a:hover, [class*="navbar-"] .navbar-nav .open .dropdown-menu > li > a:focus, [class*="navbar-"] .navbar-nav .navbar-nav .open .dropdown-menu > li > a:active { + color: white; + } + [class*="navbar-"] .navbar-nav > li > a:not(.btn), + [class*="navbar-"] .navbar-nav > li > a:hover, + [class*="navbar-"] .navbar-nav > li > a:focus, + [class*="navbar-"] .navbar-nav .open .dropdown-menu > li > a:not(.btn), + [class*="navbar-"] .navbar-nav .open .dropdown-menu > li > a:hover, + [class*="navbar-"] .navbar-nav .open .dropdown-menu > li > a:focus { + opacity: .7; + background: transparent; + } + [class*="navbar-"] .navbar-nav.navbar-nav .open .dropdown-menu > li > a:active { + opacity: 1; + } + [class*="navbar-"] .navbar-nav .dropdown > a:hover .caret { + border-bottom-color: #777; + border-top-color: #777; + } + [class*="navbar-"] .navbar-nav .dropdown > a:active .caret { + border-bottom-color: white; + border-top-color: white; + } + + .dropdown-menu { + display: none; + } + + .navbar-fixed-top { + -webkit-backface-visibility: hidden; + } + + .social-line .btn { + margin: 0 0 10px 0; + } + + .subscribe-line .form-control { + margin: 0 0 10px 0; + } + + .social-line.pull-right { + float: none; + } + + .footer nav.pull-left { + float: none !important; + } + + .footer:not(.footer-big) nav > ul li { + float: none; + } + + .social-area.pull-right { + float: none !important; + } + + .form-control + .form-control-feedback { + margin-top: -8px; + } + + .navbar-toggle:hover, .navbar-toggle:focus { + background-color: transparent !important; + } + + .btn.dropdown-toggle { + margin-bottom: 0; + } + + .media-post .author { + width: 20%; + float: none !important; + display: block; + margin: 0 auto 10px; + } + + .media-post .media-body { + width: 100%; + } + + .modal-footer .btn-simple { + padding: 15px; + } + + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: scroll; + overflow-y: hidden; + border: 1px solid #dddddd; + -ms-overflow-style: -ms-autohiding-scrollbar; + -webkit-overflow-scrolling: touch; + } + + .typography-line { + padding-left: 100px !important; + } + + .projects-1 .project-pills .nav.nav-pills { + display: block !important; + } + .projects-1 .project-pills .nav.nav-pills .nav-item:first-child .nav-link { + border-radius: 12px 12px 0 0 !important; + margin-left: -1px; + } + .projects-1 .project-pills .nav.nav-pills .nav-item.active:first-child .nav-link { + border-radius: 12px 12px 0 0 !important; + margin-left: -1px; + } + .projects-1 .project-pills .nav.nav-pills .nav-item:last-child .nav-link { + border-radius: 0 0 12px 12px !important; + margin-left: -1px; + } + + .testimonials-2 .testimonials-people img, + .section-testimonials .testimonials-people img { + display: none !important; + } + + .presentation-page .section-cards, + .presentation-page .section-components { + overflow: hidden; + } + .presentation-page .section-cards .first-card, + .presentation-page .section-components .first-card { + top: 750px !important; + } + .presentation-page .section-cards .first-card .grid__link, + .presentation-page .section-components .first-card .grid__link { + width: 200px !important; + } + .presentation-page .section-cards .fourth-card, + .presentation-page .section-components .fourth-card { + top: 940px !important; + } + .presentation-page .section-cards .fourth-card .grid__link, + .presentation-page .section-components .fourth-card .grid__link { + width: 200px !important; + } + .presentation-page .section-cards .fifth-card, + .presentation-page .section-components .fifth-card { + top: 950px !important; + left: 220px !important; + } + .presentation-page .section-cards .fifth-card .grid__link, + .presentation-page .section-components .fifth-card .grid__link { + width: 200px !important; + } + .presentation-page .section-cards .sixth-card, + .presentation-page .section-components .sixth-card { + top: 1335px !important; + left: 220px !important; + } + .presentation-page .section-cards .sixth-card .grid__link, + .presentation-page .section-components .sixth-card .grid__link { + width: 200px !important; + } + .presentation-page .section-cards .seventh-card, + .presentation-page .section-components .seventh-card { + top: 1155px !important; + } + .presentation-page .section-cards .seventh-card .grid__link, + .presentation-page .section-components .seventh-card .grid__link { + width: 200px !important; + } + .presentation-page .section-content .image-container .add-animation { + height: 250px !important; + width: 180px !important; + } + .presentation-page .section-components .image-container .components-macbook { + width: 580px !important; + height: 400px !important; + } + .presentation-page .section-components .image-container .social-img, + .presentation-page .section-components .image-container .share-btn-img { + display: none; + } + .presentation-page .section-components .title { + margin-top: -100px !important; + } + .presentation-page .section-examples { + padding-top: 0 !important; + margin-top: 10px !important; + } + .presentation-page .section-icons .icons-nucleo .nc-icon:not(.ninth-left-icon):not(.seventh-left-icon):not(.third-left-icon) { + display: none !important; + } +} +@media screen and (max-width: 991px) { + .navbar-collapse { + position: fixed; + display: block; + top: 0; + height: 100%; + width: 230px; + right: 0; + z-index: 1032; + visibility: visible; + background-color: #999; + overflow-y: visible; + border-top: none; + text-align: left; + border-left: 1px solid #CCC5B9; + padding-right: 0px; + padding-left: 40px; + padding-top: 15px; + -webkit-transform: translate3d(230px, 0, 0); + -moz-transform: translate3d(230px, 0, 0); + -o-transform: translate3d(230px, 0, 0); + -ms-transform: translate3d(230px, 0, 0); + transform: translate3d(230px, 0, 0); + -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .navbar-collapse ul { + position: relative; + z-index: 3; + height: 95%; + } + .navbar-collapse .navbar-nav > .nav-item:last-child { + border-bottom: 0; + } + .navbar-collapse .navbar-nav > .nav-item > .nav-link { + margin: 0px 0px; + color: #9A9A9A !important; + text-transform: uppercase; + font-weight: 600; + font-size: 12px; + line-height: 1.5em; + padding: 15px 0; + } + .navbar-collapse .navbar-nav > .nav-item > .nav-link:hover, .navbar-collapse .navbar-nav > .nav-item > .nav-link:active { + color: #403D39 !important; + } + .navbar-collapse::after { + top: 0; + left: 0; + height: 100%; + width: 100%; + position: absolute; + background-color: #FFFCF5; + background-image: linear-gradient(to bottom, transparent 0%, rgba(112, 112, 112, 0) 60%, rgba(186, 186, 186, 0.15) 100%); + display: block; + content: ""; + z-index: 1; + } + .navbar-collapse.has-image::after { + top: 0; + left: 0; + height: 100%; + width: 100%; + position: absolute; + background-color: rgba(17, 17, 17, 0.8); + display: block; + content: ""; + z-index: 1; + } + + .nav-open .navbar-collapse { + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + } + .nav-open .wrapper { + left: 0; + -webkit-transform: translate3d(-230px, 0, 0); + -moz-transform: translate3d(-230px, 0, 0); + -o-transform: translate3d(-230px, 0, 0); + -ms-transform: translate3d(-230px, 0, 0); + transform: translate3d(-230px, 0, 0); + } + .nav-open .navbar-translate { + -webkit-transform: translate3d(-230px, 0, 0); + -moz-transform: translate3d(-230px, 0, 0); + -o-transform: translate3d(-230px, 0, 0); + -ms-transform: translate3d(-230px, 0, 0); + transform: translate3d(-230px, 0, 0); + } + + .wrapper .navbar-collapse { + display: none; + } + + .fixed-top .navbar-collapse { + background-color: #FF8F5E; + float: left; + } + + .dropdown.show .dropdown-menu, + .dropdown .dropdown-menu { + background-color: transparent; + border: 0; + transition: none; + -webkit-box-shadow: none; + box-shadow: none; + width: auto; + border-radius: 0; + } + .dropdown.show .dropdown-menu .dropdown-item:hover, + .dropdown.show .dropdown-menu .dropdown-item:focus, + .dropdown .dropdown-menu .dropdown-item:hover, + .dropdown .dropdown-menu .dropdown-item:focus { + background-color: transparent; + border-radius: 0; + } + .dropdown.show .dropdown-menu .dropdown-item a:hover, .dropdown.show .dropdown-menu .dropdown-item a:focus, + .dropdown .dropdown-menu .dropdown-item a:hover, + .dropdown .dropdown-menu .dropdown-item a:focus { + color: #403D39; + } + .dropdown.show .dropdown-menu:before, .dropdown.show .dropdown-menu:after, + .dropdown .dropdown-menu:before, + .dropdown .dropdown-menu:after { + display: none; + } + + .dropdown .dropdown-menu { + display: none; + } + .dropdown.show .dropdown-menu { + display: block; + } + + .navbar-translate { + width: 100%; + position: relative; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + + .wrapper { + -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + left: 0; + background-color: white; + } +} +@media screen and (min-width: 767px) { + .section-sections .section-cols { + position: relative; + z-index: 1; + } + .section-sections .section-cols .row:first-of-type { + margin-top: 50px; + margin-right: -120px; + margin-left: -15px; + -webkit-transform: translate3d(-80px, 0, 0); + -moz-transform: translate3d(-80px, 0, 0); + -o-transform: translate3d(-80px, 0, 0); + -ms-transform: translate3d(-80px, 0, 0); + transform: translate3d(-80px, 0, 0); + } + .section-sections .section-cols .row:nth-of-type(2) { + margin-left: -100px; + margin-right: -15px; + transform: translateX(80px); + } + .section-sections .section-cols .row:nth-of-type(3) { + margin-right: -120px; + margin-left: 0px; + transform: translateX(-120px); + } + .section-sections .section-cols .row:nth-of-type(4) { + margin-right: -100px; + margin-left: -15px; + transform: translateX(-50px); + } +} +@media screen and (min-width: 991px) { + .burger-menu .navbar-collapse { + position: fixed; + display: block; + top: 0; + height: 100%; + width: 230px; + right: 0px; + z-index: 1032; + visibility: visible; + background-color: #999; + overflow-y: visible; + border-top: none; + text-align: left; + border-left: 1px solid #CCC5B9; + padding-right: 0px; + padding-left: 40px; + padding-top: 15px; + -webkit-transform: translate3d(230px, 0, 0); + -moz-transform: translate3d(230px, 0, 0); + -o-transform: translate3d(230px, 0, 0); + -ms-transform: translate3d(230px, 0, 0); + transform: translate3d(230px, 0, 0); + -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .burger-menu .navbar-collapse .navbar-nav .nav-item:last-child { + border-bottom: 0; + } + .burger-menu .navbar-collapse .navbar-nav { + height: 100%; + z-index: 2; + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } + .burger-menu .navbar-collapse::after { + top: 0; + left: 0; + height: 100%; + width: 100%; + position: absolute; + background-color: #FFFCF5; + background-image: linear-gradient(to bottom, transparent 0%, rgba(112, 112, 112, 0) 60%, rgba(186, 186, 186, 0.15) 100%); + display: block; + content: ""; + z-index: 1; + } + .burger-menu .navbar-collapse.has-image::after { + top: 0; + left: 0; + height: 100%; + width: 100%; + position: absolute; + background-color: rgba(17, 17, 17, 0.8); + display: block; + content: ""; + z-index: 1; + } + .burger-menu .navbar .container .navbar-toggler { + display: block; + margin-top: 20px; + } + .burger-menu .navbar-translate { + width: 100%; + position: relative; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .burger-menu .wrapper { + -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); + left: 0; + background-color: white; + } + .burger-menu .body .navbar-collapse.collapse { + height: 100vh !important; + } + .burger-menu .navbar-collapse:before, .burger-menu .navbar-collapse:after, + .burger-menu .navbar-nav:before, + .burger-menu .navbar-nav:after { + display: table; + content: " "; + } + .nav-open .burger-menu .navbar-collapse.collapse { + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + } + .nav-open .burger-menu .wrapper { + left: 0; + -webkit-transform: translate3d(-230px, 0, 0); + -moz-transform: translate3d(-230px, 0, 0); + -o-transform: translate3d(-230px, 0, 0); + -ms-transform: translate3d(-230px, 0, 0); + transform: translate3d(-230px, 0, 0); + } + .nav-open .burger-menu .navbar-translate { + -webkit-transform: translate3d(-230px, 0, 0); + -moz-transform: translate3d(-230px, 0, 0); + -o-transform: translate3d(-230px, 0, 0); + -ms-transform: translate3d(-230px, 0, 0); + transform: translate3d(-230px, 0, 0); + } + .burger-menu .dropdown.show .dropdown-menu, + .burger-menu .dropdown .dropdown-menu { + background-color: transparent; + border: 0; + transition: none; + -webkit-box-shadow: none; + box-shadow: none; + width: auto; + border-radius: 0; + } + .burger-menu .dropdown.show .dropdown-menu .dropdown-item:hover, + .burger-menu .dropdown.show .dropdown-menu .dropdown-item:focus, + .burger-menu .dropdown .dropdown-menu .dropdown-item:hover, + .burger-menu .dropdown .dropdown-menu .dropdown-item:focus { + background-color: transparent; + border-radius: 0; + } + .burger-menu .dropdown.show .dropdown-menu .dropdown-item a:hover, .burger-menu .dropdown.show .dropdown-menu .dropdown-item a:focus, + .burger-menu .dropdown .dropdown-menu .dropdown-item a:hover, + .burger-menu .dropdown .dropdown-menu .dropdown-item a:focus { + color: #403D39; + } + .burger-menu .dropdown.show .dropdown-menu:before, .burger-menu .dropdown.show .dropdown-menu:after, + .burger-menu .dropdown .dropdown-menu:before, + .burger-menu .dropdown .dropdown-menu:after { + display: none; + } + .burger-menu .dropdown .dropdown-menu { + display: none; + } + .burger-menu .dropdown.show .dropdown-menu { + display: block; + } +} +/*! + * Datetimepicker for Bootstrap 3 + * ! version : 4.7.14 + * https://github.com/Eonasdan/bootstrap-datetimepicker/ + */ +.sr-only, +.bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after, +.bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after, +.bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after, +.bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after, +.bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after, +.bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after, +.bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after, +.bootstrap-datetimepicker-widget .btn[data-action="clear"]::after, +.bootstrap-datetimepicker-widget .btn[data-action="today"]::after, +.bootstrap-datetimepicker-widget .picker-switch::after, +.bootstrap-datetimepicker-widget table th.prev::after, +.bootstrap-datetimepicker-widget table th.next::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.bootstrap-datetimepicker-widget { + list-style: none; +} + +.bootstrap-datetimepicker-widget a .btn:hover { + background-color: transparent; +} + +.bootstrap-datetimepicker-widget.dropdown-menu { + padding: 4px; + width: 16em; +} + +@media (min-width: 768px) { + .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs { + width: 38em; + } +} +@media (min-width: 992px) { + .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs { + width: 38em; + } +} +@media (min-width: 1200px) { + .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs { + width: 38em; + } +} +.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before { + border-bottom: 11px solid #F1EAE0; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 12px; + left: auto; + top: -11px; +} + +.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after { + border-bottom: 11px solid #FFFFFF; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 12px; + left: auto; + top: -11px; +} + +.bootstrap-datetimepicker-widget.dropdown-menu.top { + margin-top: auto; + margin-bottom: -20px; +} + +.bootstrap-datetimepicker-widget.dropdown-menu.top.open { + margin-top: auto; + margin-bottom: 5px; + background-color: #FFFFFF; +} + +.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before { + left: auto; + right: 6px; +} + +.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after { + left: auto; + right: 7px; +} + +.bootstrap-datetimepicker-widget .list-unstyled { + margin: 0; +} + +.bootstrap-datetimepicker-widget a[data-action] { + padding: 6px 0; + border-width: 0; + color: #66615B; + background-color: transparent; +} + +.bootstrap-datetimepicker-widget a[data-action="togglePicker"], +.bootstrap-datetimepicker-widget a[data-action="togglePicker"]:hover { + color: #429cb6 !important; +} + +.bootstrap-datetimepicker-widget a[data-action]:hover { + background-color: transparent; + color: rgba(255, 255, 255, 0.85); +} + +.bootstrap-datetimepicker-widget a[data-action]:active { + box-shadow: none; +} + +.bootstrap-datetimepicker-widget .timepicker-hour, +.bootstrap-datetimepicker-widget .timepicker-minute, +.bootstrap-datetimepicker-widget .timepicker-second { + width: 40px; + height: 40px; + line-height: 40px; + font-weight: 300; + font-size: 1.5em; + margin: 3px; + border-radius: 50%; +} + +.bootstrap-datetimepicker-widget button[data-action] { + width: 38px; + height: 38px; + padding: 0; +} + +.bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after { + content: "Increment Hours"; +} + +.bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after { + content: "Increment Minutes"; +} + +.bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after { + content: "Decrement Hours"; +} + +.bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after { + content: "Decrement Minutes"; +} + +.bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after { + content: "Show Hours"; +} + +.bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after { + content: "Show Minutes"; +} + +.bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after { + content: "Toggle AM/PM"; +} + +.bootstrap-datetimepicker-widget .btn[data-action="clear"]::after { + content: "Clear the picker"; +} + +.bootstrap-datetimepicker-widget .btn[data-action="today"]::after { + content: "Set the date to today"; +} + +.bootstrap-datetimepicker-widget .picker-switch { + text-align: center; + border-radius: 4px; +} + +.bootstrap-datetimepicker-widget .picker-switch::after { + content: "Toggle Date and Time Screens"; +} + +.bootstrap-datetimepicker-widget .picker-switch td { + padding: 0; + margin: 0; + height: auto; + width: auto; + line-height: inherit; +} + +.bootstrap-datetimepicker-widget .picker-switch td span { + line-height: 2.5; + height: 2.5em; + width: 100%; + border-radius: 4px; + margin: 2px 0px !important; +} + +.bootstrap-datetimepicker-widget table { + width: 100%; + margin: 0; +} + +.bootstrap-datetimepicker-widget table td > div, .bootstrap-datetimepicker-widget table th > div { + text-align: center; +} + +.bootstrap-datetimepicker-widget table th { + height: 20px; + line-height: 20px; + width: 20px; +} + +.bootstrap-datetimepicker-widget table th.picker-switch { + width: 145px; +} + +.bootstrap-datetimepicker-widget table th.disabled, .bootstrap-datetimepicker-widget table th.disabled:hover { + background: none; + color: #cfcfca; + cursor: not-allowed; +} + +.bootstrap-datetimepicker-widget table th.prev span, .bootstrap-datetimepicker-widget table th.next span { + border-radius: 4px; + height: 27px; + width: 27px; + line-height: 28px; + font-size: 12px; + border-radius: 50%; + text-align: center; +} + +.bootstrap-datetimepicker-widget table th.prev::after { + content: "Previous Month"; +} + +.bootstrap-datetimepicker-widget table th.next::after { + content: "Next Month"; +} + +.bootstrap-datetimepicker-widget table th.dow { + text-align: center; + border-bottom: 1px solid #E3E3E3; + font-size: 12px; + text-transform: uppercase; + color: #9A9A9A; + font-weight: 400; + padding-bottom: 5px; + padding-top: 10px; +} + +.bootstrap-datetimepicker-widget table thead tr:first-child th { + cursor: pointer; +} + +.bootstrap-datetimepicker-widget table thead tr:first-child th:hover span, .bootstrap-datetimepicker-widget table thead tr:first-child th.picker-switch:hover { + background: #E3E3E3; +} + +.bootstrap-datetimepicker-widget table td > div { + border-radius: 4px; + height: 54px; + line-height: 54px; + width: 54px; + text-align: center; +} + +.bootstrap-datetimepicker-widget table td.cw > div { + font-size: .8em; + height: 20px; + line-height: 20px; + color: #cfcfca; +} + +.bootstrap-datetimepicker-widget table td.day > div { + height: 30px; + line-height: 31px; + width: 30px; + text-align: center; + padding: 0px; + border-radius: 50%; + margin: 0 auto; + z-index: -1; + position: relative; +} + +.bootstrap-datetimepicker-widget table td.minute > div, .bootstrap-datetimepicker-widget table td.hour > div { + border-radius: 50%; +} + +.bootstrap-datetimepicker-widget table td.day:hover > div, .bootstrap-datetimepicker-widget table td.hour:hover > div, .bootstrap-datetimepicker-widget table td.minute:hover > div, .bootstrap-datetimepicker-widget table td.second:hover > div { + background: #E3E3E3; + cursor: pointer; +} + +.bootstrap-datetimepicker-widget table td.old > div, .bootstrap-datetimepicker-widget table td.new > div { + color: #cfcfca; +} + +.bootstrap-datetimepicker-widget table td.today > div:before { + content: ''; + display: inline-block; + border: 0 0 7px 7px solid transparent; + border-bottom-color: #68B3C8; + border-top-color: rgba(0, 0, 0, 0.2); + position: absolute; + bottom: 4px; + right: 4px; +} + +.bootstrap-datetimepicker-widget table td.active > div, .bootstrap-datetimepicker-widget table td.active:hover > div { + background-color: #68B3C8; + color: #FFFFFF; +} + +.bootstrap-datetimepicker-widget table td.active.today:before > div { + border-bottom-color: #FFFFFF; +} + +.bootstrap-datetimepicker-widget table td.disabled > div, .bootstrap-datetimepicker-widget table td.disabled:hover > div { + background: none; + color: #cfcfca; + cursor: not-allowed; +} + +.bootstrap-datetimepicker-widget table td span { + display: inline-block; + width: 40px; + height: 40px; + line-height: 40px; + margin: 3px 3px; + cursor: pointer; + border-radius: 50%; + text-align: center; +} + +.bootstrap-datetimepicker-widget table td span:hover { + background: #E3E3E3; +} + +.bootstrap-datetimepicker-widget table td span.active { + background-color: #68B3C8; + color: #FFFFFF; +} + +.bootstrap-datetimepicker-widget table td span.old { + color: #cfcfca; +} + +.bootstrap-datetimepicker-widget table td span.disabled, .bootstrap-datetimepicker-widget table td span.disabled:hover { + background: none; + color: #cfcfca; + cursor: not-allowed; +} + +.bootstrap-datetimepicker-widget .timepicker-picker span, +.bootstrap-datetimepicker-widget .timepicker-hours span, +.bootstrap-datetimepicker-widget .timepicker-minutes span { + border-radius: 50% !important; +} + +.bootstrap-datetimepicker-widget.usetwentyfour td.hour { + height: 27px; + line-height: 27px; +} + +.input-group.date .input-group-addon { + cursor: pointer; +} + +.table-condensed > tbody > tr > td, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > td, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > thead > tr > th { + padding: 1px; + text-align: center; + z-index: 1; + cursor: pointer; +} + +.bootstrap-datetimepicker-widget { + opacity: 0; + -webkit-transform: translate3d(0px, -10px, 0px); + -moz-transform: translate3d(0, -10px, 0); + -o-transform: translate3d(0, -10px, 0); + -ms-transform: translate3d(0, -10px, 0); + transform: translate3d(0px, -10px, 0px); +} +.bootstrap-datetimepicker-widget.top { + -webkit-transform: translate3d(0px, 0px, 0px); + -moz-transform: translate3d(0, 0px, 0); + -o-transform: translate3d(0, 0px, 0); + -ms-transform: translate3d(0, 0px, 0); + transform: translate3d(0px, 0px, 0px); +} +.bootstrap-datetimepicker-widget.open { + opacity: 1; + -webkit-transform: translate3d(0, 10px, 0); + -moz-transform: translate3d(0, 10px, 0); + -o-transform: translate3d(0, 10px, 0); + -ms-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + transition: transform 0.5s cubic-bezier(0.215, 0.61, 0.355, 1) 0s; +} + +.bootstrap-datetimepicker-widget.open.top { + -webkit-transform: translate3d(0, -10px, 0); + -moz-transform: translate3d(0, -10px, 0); + -o-transform: translate3d(0, -10px, 0); + -ms-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); +} +.bootstrap-datetimepicker-widget.open.top:before { + border-top: 11px solid #DCD9D1; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 12px; + bottom: -12px; +} +.bootstrap-datetimepicker-widget.open.top:after { + border-top: 11px solid #FFFCF5; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + content: ""; + display: inline-block; + position: absolute; + right: 12px; + bottom: -11px; +} + +.btn-twitter { + color: #55acee !important; +} +.btn-twitter:hover, .btn-twitter:focus, .btn-twitter:active { + color: #55acee !important; +} + +.btn-facebook { + color: #3b5998 !important; +} +.btn-facebook:hover, .btn-facebook:focus, .btn-facebook:active { + color: #3b5998 !important; +} + +.btn-google { + color: #dd4b39 !important; +} +.btn-google:hover, .btn-google:focus, .btn-google:active { + color: #dd4b39 !important; +} + +.btn-linkedin { + color: #0976b4 !important; +} +.btn-linkedin:hover, .btn-linkedin:focus, .btn-linkedin:active { + color: #0976b4 !important; +} + +.btn-twitter-bg { + background-color: #55acee !important; + border-color: #55acee !important; +} +.btn-twitter-bg:hover { + background-color: #3ea1ec !important; + border-color: #3ea1ec !important; +} + +.btn-facebook-bg { + background-color: #3b5998 !important; + border-color: #3b5998 !important; +} +.btn-facebook-bg:hover { + background-color: #344e86 !important; + border-color: #344e86 !important; +} + +.btn-google-bg { + background-color: #dd4b39 !important; + border-color: #dd4b39 !important; +} +.btn-google-bg:hover { + background-color: #d73925 !important; + border-color: #d73925 !important; +} + +.btn-github-bg { + background-color: #767676 !important; + border-color: #767676 !important; +} +.btn-github-bg:hover { + background-color: dimgray !important; + border-color: dimgray !important; +} + +.landing-alert { + margin-bottom: 0; +} + +.page-header { + background-color: #B2AFAB; + background-position: center center; + background-size: cover; + min-height: 100vh; + max-height: 999px; + overflow: hidden; + position: relative; + width: 100%; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; +} +.page-header .filter::after { + background-color: rgba(0, 0, 0, 0.5); + content: ""; + display: block; + height: 100%; + left: 0; + top: 0; + position: absolute; + width: 100%; + z-index: 1; +} +.page-header.page-header-small { + min-height: 65vh !important; + max-height: 700px; +} +.page-header.page-header-xs { + min-height: 40vh !important; +} +.page-header.section-dark .content-center, +.page-header.section-dark .category-absolute { + z-index: 1; +} + +.page-header .motto { + text-align: left; + z-index: 3; + color: #fff; + position: relative; +} + +.landing-section { + padding: 100px 0; + z-index: 1; +} + +.section-buttons { + z-index: 1; +} + +.landing-section .btn-simple { + padding: 0; +} + +.landing-section .column { + padding: 0 75px 0 25px; +} + +.team-player .img-circle, .team-player .img-thumbnail { + display: block; + margin-top: 50px; + margin-left: auto; + margin-right: auto; + width: 120px; +} + +.contact-form { + margin-top: 30px; +} + +.contact-form label { + margin-top: 15px; +} + +.contact-form .btn { + margin-top: 30px; +} + +.navbar-relative { + position: relative; + z-index: 2; +} + +#register-navbar a { + color: #FFF; +} + +.register-background .container { + margin-top: 11%; + position: relative; + z-index: 3; +} + +.register-footer { + bottom: 20px; + position: absolute; + z-index: 1; + width: 100%; + background: transparent; + color: #FFFFFF; +} + +.register-footer .fa-heart { + color: #EB5E28; +} + +.register-card label { + margin-top: 15px; +} + +.register-card .title { + color: #B33C12; + text-align: center; +} + +.register-card .btn { + margin-top: 30px; +} + +.register-card .forgot { + text-align: center; +} + +.profile-content { + position: relative; +} + +.owner { + text-align: center; +} + +.owner .avatar { + padding: 15px; + max-width: 180px; + margin: -85px auto 0; + display: inline-block; +} + +.owner .name h4 { + margin-top: 10px; +} + +.profile-tabs { + margin: 50px 0; + min-height: 300px; +} + +#following h3 { + margin: 20px 0 40px 0; +} + +.profile-content .tab-content .tab-pane.active { + height: 200px; +} + +.follows .unfollow { + width: 15px; +} + +#follows .follows .unfollow .checkbox { + margin-top: -15px; +} + +#follows .follows h6 { + margin-top: 15px; +} + +.follows hr { + margin-top: 10px; +} + +.title-brand { + max-width: 730px; + margin: 0 auto; + position: relative; + text-align: center; + color: #FFFFFF; + display: block; +} +.title-brand .type { + position: absolute; + font-size: 20px; + background: #132026; + padding: 6px 10px; + border-radius: 4px; + top: 0; + font-weight: 600; + margin-top: 10px; + right: -15px; +} + +.presentation-title { + font-size: 8em; + font-weight: 700; + margin: 0; + color: #FFFFFF; + background: #fbf8ec; + background: -moz-linear-gradient(top, #FFFFFF 35%, #4e6773 100%); + background: -webkit-linear-gradient(top, #FFFFFF 35%, #4e6773 100%); + background: linear-gradient(to bottom, #FFFFFF 35%, #4e6773 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.presentation-subtitle { + font-size: 1.7em; + color: #FFFFFF; + text-align: center; +} + +.category-absolute { + position: absolute; + text-align: center; + top: 100vh; + margin-top: -60px; + padding: 0 15px; + width: 100%; + color: rgba(255, 255, 255, 0.5); +} +.category-absolute .creative-tim-logo { + max-width: 140px; + top: -2px; + left: 3px; + position: relative; +} + +.fog-low { + position: absolute; + left: 0; + bottom: 0; + margin-left: -35%; + margin-bottom: -50px; + width: 110%; + opacity: .85; +} +.fog-low img { + width: 100%; +} +.fog-low.right { + margin-left: 30%; + opacity: 1; +} + +.moving-clouds { + position: absolute; + z-index: 1; + bottom: 0; + left: 0; + width: 250.625em; + height: 43.75em; + -webkit-animation: cloudLoop 80s linear infinite; + animation: cloudLoop 80s linear infinite; +} + +@keyframes cloudLoop { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 100% { + -webkit-transform: translate3d(-50%, 0, 0); + transform: translate3d(-50%, 0, 0); + } +} +.following img { + max-width: 70px; +} + +.tim-row{ + margin-bottom: 20px; +} + +.tim-white-buttons { + background-color: #777777; +} +.tim-title{ + margin-top: 30px; + margin-bottom: 25px; + min-height: 32px; +} +.tim-title.text-center{ + margin-bottom: 50px; +} +.typography-line{ + padding-left: 180px; + margin-bottom: 20px; + position: relative; + width: 100%; +} +.typography-line .note{ + bottom: 10px; + color: #c0c1c2; + display: block; + font-weight: 400; + font-size: 13px; + line-height: 13px; + left: 0; + margin-left: 20px; + position: absolute; + width: 260px; +} +.tim-row{ + padding-top: 50px; +} +.tim-row h3{ + margin-top: 0; +} +.switch{ + margin-right: 20px; +} +#navbar-full .navbar{ + border-radius: 0 !important; + margin-bottom: 0; + z-index: 2; +} +.space{ + height: 130px; + display: block; +} +.space-110{ + height: 110px; + display: block; +} +.space-50{ + height: 50px; + display: block; +} +.space-70{ + height: 70px; + display: block; +} +.navigation-example .img-src{ + background-attachment: scroll; +} + +.main{ + background-color: #fff; +/* position: relative; */ + +} +.navigation-example{ + background-image: url('../img/ilya-yakover.jpg'); + background-position: center center; + background-size: cover; + background-attachment: fixed; + margin-top:0; +} +#notifications{ + background-color: #FFFFFF; + display: block; + width: 100%; + position: relative; +} +#carousel{ + padding-top: 0; +} +.note{ + text-transform: capitalize; +} +.subscribe-form{ + padding-top: 20px; +} +.page-header .card-register .title{ + margin-bottom: 10px; +} +.space-100{ + height: 100px; + display: block; + width: 100%; +} +.sharing-area .btn{ + padding: 0.5rem 10px !important; +} + +.be-social{ + padding-bottom: 20px; +/* border-bottom: 1px solid #aaa; */ + margin: 0 auto 40px; +} +.txt-white{ + color: #FFFFFF; +} +.txt-gray{ + color: #ddd !important; +} +.footer{ + background-attachment: fixed; + position: relative; + line-height: 20px; +} +.footer nav > ul { + list-style: none; + margin: 0; + padding: 0; + font-weight: normal; +} +.footer nav > ul > li{ + display: inline-block; + padding: 10px 15px; + margin: 15px 3px; + line-height: 20px; + text-align: center; +} + +.footer nav > ul a:not(.btn) { + color: #777777; + display: block; + margin-bottom: 3px; +} +.footer nav > ul a:not(.btn):hover, .footer nav > ul a:not(.btn):focus { + color: #E3E3E3; +} +.footer .copyright { + color: #777777; + padding: 10px 15px; + font-size: 14px; + margin: 15px 3px; + line-height: 20px; + text-align: center; +} +.footer .heart{ + color: #EB5E28; +} + +.social-share{ + float: left; + margin-right: 8px; +} +.social-share a{ + color: #FFFFFF; +} +#subscribe_email{ + border-radius: 0; + border-left: 0; + border-right: 0; +} +.pick-class-label{ + border-radius: 8px; + color: #ffffff; + cursor: pointer; + display: inline-block; + font-size: 75%; + font-weight: bold; + line-height: 1; + margin-right: 10px; + padding: 23px; + text-align: center; + vertical-align: baseline; + white-space: nowrap; +} + +.parallax{ + width:100%; + height:570px; + display: block; + background-attachment: fixed; + background-repeat:no-repeat; + background-size:cover; + background-position: center center; +} + +.logo-container .logo{ + overflow: hidden; + border-radius: 50%; + border: 1px solid #333333; + width: 50px; + float: left; +} + +.logo-container .brand{ + font-size: 18px; + color: #FFFFFF; + line-height: 20px; + float: left; + margin-left: 10px; + margin-top: 5px; + width: 75px; + height: 50px; +} +.logo-container{ + margin-top: 5px; +} +.logo-container .logo img{ + width: 100%; +} +.navbar-small .logo-container .brand{ + color: #333333; +} +.demo-header{ + background-size: cover; + /*background-color: #FF8F5E;*/ + background-position: center top; + margin-top: -100px; + min-height: 600px; +} +.demo-height{ + min-height: 102vh; +} +.demo-height .motto{ + padding-top: 20% !important; +} +.demo-header-image{ + background-image: url('../img/city.jpg'); +} +.demo-header .motto{ + color: #FFFFFF; + padding-top: 15%; + text-align: center; + z-index: 3; +} +.demo-header .motto h3{ + margin-bottom: 0; +} +.separator{ + content: "Separator"; + color: #FFFFFF; + display: block; + width: 100%; + padding: 20px; +} +.separator-line{ + background-color: #EEE; + height: 1px; + width: 100%; + display: block; +} +.separator.separator-gray{ + background-color: #EEEEEE; +} +.social-buttons-demo .btn{ + margin-right: 5px; + margin-bottom: 7px; +} + +.img-container{ + width: 100%; + overflow: hidden; +} +.img-container img{ + width: 100%; +} +.lightbox img{ + width: 100%; +} +.lightbox .modal-content{ + overflow: hidden; +} +.lightbox .modal-body{ + padding: 0; +} +@media screen and (min-width: 991px){ + .lightbox .modal-dialog{ + width: 960px; + } +} + +@media screen{ + .section-buttons .btn, + .section-buttons .btn-morphing{ + margin-bottom: 10px; + } + .parallax .motto{ + top: 170px; + margin-top: 0; + font-size: 60px; + width: 270px; + } +} + +.presentation .loader{ + opacity: 0; + display: block; + transition: all 0.4s; + -webkit-transition: all 0.4s; + position: fixed; + left: 50%; + top: 50%; + z-index: 1031; + margin-left: -32px; + margin-top: -32px; +} +.presentation .loader.visible{ + display: block; + opacity: 1; +} +.presentation .modal-content{ + background-color: transparent; + box-shadow: 0 0 0; +} +.presentation .modal-backdrop.in{ + opacity: 0.45; +} +.presentation .preload-image{ + display: none; + box-shadow: 0 0 15px rgba(0, 0, 0, 0.15), 0 0 1px 1px rgba(0, 0, 0, 0.1); +} +/* Loading dots */ + +/* transitions */ +.presentation .front, .presentation .front:after, .presentation .front .btn, .logo-container .logo, .logo-container .brand{ + -webkit-transition: all .2s; + -moz-transition: all .2s; + -o-transition: all .2s; + transition: all .2s; +} +.presentation .section{ + padding: 100px 0; +} +.presentation .colors{ + padding: 100px 0; +} +.presentation > .description{ + padding-top: 20px; +} +.presentation .section-rotation{ + padding: 140px 0; +} +.presentation .section-images{ + padding: 80px 0; +} +.presentation .section-thin{ + padding: 0; +} +.presentation .section-pay{ + padding-top: 20px; +} +.presentation .colors{ + padding: 70px 0; + z-index: 7; + position: relative; + margin-top: -300px; +} +.presentation .colors{ + border-top: 1px solid #DDDDDD; +} +.presentation .card-container{ + -webkit-perspective: 800px; + -moz-perspective: 800px; + -o-perspective: 800px; + perspective: 800px; + min-height: 500px; + width: 300px; + position: relative; + margin-top: 90px; +} +.presentation .card-component{ + -webkit-transform-style: preserve-3d; + -moz-transform-style: preserve-3d; + -o-transform-style: preserve-3d; + transform-style: preserve-3d; + position: relative; + height: 600px; +} +.presentation .card-component .front{ + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -o-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transform: rotateY( -28deg ); + -moz-transform: rotateY( -28deg ); + -o-transform: rotateY( -28deg ); + transform: rotateY( -28deg ); + + position: absolute; + top: 0; + left: 0; + background-color: #FFF; + width: 100%; + cursor: pointer; + box-shadow: 10px 4px 14px rgba(0, 0, 0, 0.12); + border-radius: 10px; + overflow: hidden; + border: 1px solid rgba(0,0,0,.12); +} + +.presentation .front img{ + z-index: 2; + position: relative; +} + +.presentation .card-container:hover .front{ + top: -10px; +} + +.presentation .card-component img{ + width: 100%; +} +.presentation .description .col-md-3{ + width: 16%; + margin-left: 4%; +} +.presentation .first-card{ + z-index: 6; +} +.presentation .second-card{ + z-index: 5; +} +.presentation .third-card{ + z-index: 4; +} +.presentation .fourth-card{ + z-index: 3; +} +.presentation h1, +.presentation h2{ + font-weight: 200; +} +.presentation h4, +.presentation h5, +.presentation h6{ + font-weight: 300; +} +.presentation h4{ + font-size: 18px; + line-height: 24px; +} +.presentation .info h4{ + font-size: 24px; + line-height: 28px; +} + +.presentation .section-gray h1 small{ + color: #888888; +} +.presentation .color-container{ + text-align: center; +} +.presentation .color-container img{ + width: 100%; + margin-bottom: 10px; +} +.presentation .circle-color{ + width: 40px; + height: 40px; + border-radius: 10px; + display: block; + background-color: #cccccc; + margin: 0 auto; +} +.presentation .circle-red{ + background-color: #ff3b30; +} +.presentation .circle-blue{ + background-color: #3472f7; +} +.presentation .circle-azure{ + background-color: #2ca8ff; +} +.presentation .circle-green{ + background-color: #05ae0e; +} +.presentation .circle-orange{ + background-color: #ff9500; +} + +.presentation .section-gray-gradient{ + background: rgb(255,255,255); /* Old browsers */ + background: -moz-linear-gradient(top, rgba(255,255,255,1) 25%, rgba(231,231,231,1) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(25%,rgba(255,255,255,1)), color-stop(100%,rgba(231,231,231,1))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(255,255,255,1) 25%,rgba(231,231,231,1) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(255,255,255,1) 25%,rgba(231,231,231,1) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, rgba(255,255,255,1) 25%,rgba(231,231,231,1) 100%); /* IE10+ */ + background: linear-gradient(to bottom, rgba(255,255,255,1) 25%,rgba(231,231,231,1) 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#e7e7e7',GradientType=0 ); /* IE6-9 */ +} +.presentation .section-black{ + background-color: #333; +} + +.rotating-card-container { + -webkit-perspective: 900px; + -moz-perspective: 900px; + -o-perspective: 900px; + perspective: 900px; + margin-bottom: 30px; +} + +.rotating-card { + -webkit-transition: all 1.3s; + -moz-transition: all 1.3s; + -o-transition: all 1.3s; + transition: all 1.3s; +-webkit-transform-style: preserve-3d; + -moz-transform-style: preserve-3d; + -o-transform-style: preserve-3d; + transform-style: preserve-3d; + + margin-top: 20px; + position: relative; + background: none repeat scroll 0 0 #FFFFFF; + border-radius: 20px; + color: #444444; +} +.rotating-card-container .rotate, +.rotating-card .back{ + -webkit-transform: rotateY( 180deg ); + -moz-transform: rotateY( 180deg ); + -o-transform: rotateY( 180deg ); + transform: rotateY( 180deg ); +} +.rotating-card-container:hover .rotate{ + -webkit-transform: rotateY(0deg); + -moz-transform: rotateY(0deg); + -o-transform: rotateY(0deg); + transform: rotateY(0deg); +} + + +.rotating-card .front, +.rotating-card .back { + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -o-backface-visibility: hidden; + backface-visibility: hidden; + + position: absolute; + top: 0; + left: 0; + background-color: #FFF; + box-shadow: 0 3px 17px rgba(0,0,0,.15); +} + +.rotating-card .front { + z-index: 2; +} + +.rotating-card .back { + z-index: 3; + height: 500px; + width: 100%; + display: block; + padding: 0 15px; + background-color: #e5e5e5; +} + +.rotating-card .back-contaier { + background-color: white; + padding: 30px 15px; + +} + +.rotating-card .image{ + border-radius: 20px 20px 0 0; +} +.rotating-card-container, +.rotating-card .front, +.rotating-card .back { + width: 100%; + min-height: 500px; + border-radius: 20px; +} +/* Fix bug for IE */ + +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .rotating-card .front, .rotating-card .back{ + -ms-backface-visibility: visible; + backface-visibility: visible; + } + .rotating-card .back { + visibility: hidden; + -ms-transition: all 0.2s cubic-bezier(.92,.01,.83,.67); + } + .rotating-card .front{ + z-index: 4; + } + .rotating-card-container:hover .back{ + z-index: 5; + visibility: visible; + } +} + +.fixed-section{ + top: 100px; + max-height: 80vh; + position: -webkit-sticky; + position: -moz-sticky; + position: -ms-sticky; + position: -o-sticky; + position: sticky; + bottom: auto; +} +.fixed-section ul{ + padding: 0 !important; +} +.fixed-section ul li{ + list-style: none; +} +.fixed-section li a{ + font-size: 14px; + padding: 2px; + display: block; + color: #666666; +} +.fixed-section li a.active{ + color: #00bbff; +} + + + +/* prettyprint */ + pre.prettyprint{ + background-color: #eee !important; + margin-bottom: 30px; + margin-top: 30px; + padding: 20px !important; + font-size: 13px; + text-align: left; + border-radius: 4px !important; + border: 1px transparent !important; +} +.presentation .atv, +.presentation .str{ + color: #0D9814; +} +.presentation .tag, +.presentation .pln, +.presentation .kwd{ + color: #195CEC; +} +.presentation .atn{ + color: #2C93FF; +} +.presentation .pln{ + color: #333; +} +.presentation .com{ + color: #999; +} + +.presentation .text-white{ + color: #FFFFFF; + text-shadow: 0 1px 2px rgba(0,0,0,.13); +} +.presentation .section-images .card-image{ + border-radius: 6px 6px 0 0; + overflow: hidden; + box-shadow: 0 -3px 8px rgba(0,0,0,0); +} +.presentation .section-images .card-image .image{ +/* border-radius: 6px; */ +} +@media (max-width: 1200px){ + .presentation .section-images .image img{ + width: 100%; + } + +} +.presentation .card-text-adjust{ + padding-left: 40px; +} +.presentation .info.info-separator{ + position: relative; +} +.presentation .info.info-separator:after{ + height: 100%; + position: absolute; + background-color: #ccc; + width: 1px; + content: ""; + right: -7px; + top: 0; +} +.presentation .info li{ + padding: 5px 0; + border-bottom: 1px solid #E5E5E5; + color: #666666; +} +.presentation .info ul{ + width: 240px; + margin: 10px auto; +} +.presentation .info li:last-child{ + border: 0; +} + +/* layer animation */ + +.layers-container{ + display: block; + margin-top: 50px; + position: relative; +} +.layers-container img { + position: absolute; + width: 100%; + height: auto; + top: 0; + left: 0; + text-align: center; +} + +.section-black { + background-color: #333; +} + +#layerHover{ + top: 30px; +} +#layerImage{ + top: 50px; +} +#layerBody{ + top: 75px; +} + +.animate { + transition: 1.5s ease-in-out; + -moz-transition: 1.5s ease-in-out; + -webkit-transition: 1.5s ease-in-out; +} + +.down { + transform: translate(0,45px); + -moz-transform: translate(0,45px); + -webkit-transform: translate(0,45px); +} + +.down-2x { + transform: translate(0,90px); + -moz-transform: translate(0,90px); + -webkit-transform: translate(0,90px); +} + + +.navbar-default.navbar-small .logo-container .brand{ + color: #333333; +} +.navbar-transparent.navbar-small .logo-container .brand{ + color: #FFFFFF; +} +.navbar-default.navbar-small .logo-container .brand{ + color: #333333; +} +.section-thin{ + padding-bottom: 0; +} + +.info.info-separator{ + position: relative; +} +.info.info-separator:after{ + height: 100%; + position: absolute; + background-color: #ccc; + width: 1px; + content: ""; + right: -7px; + top: 0; +} +@media (max-width: 767px){ +.info.info-separator:after{ + display: none; + } +} +.info li{ + padding: 5px 0; + border-bottom: 1px solid #E5E5E5; + color: #666666; +} +.info ul{ + width: 240px; + margin: 10px auto; +} +.info li:last-child{ + border: 0; +} +.payment-methods i { + font-size: 28px; + padding: 0 3px; + width: 38px; +} +.payment-methods h4 { + font-size: 18px; + line-height: 38px; +} +.info .description .btn{ + width: 240px; + font-weight: 500; +} +#buyButtonHeroes{ + margin-top: 31px; +} +.right-click{ + width: 100%; + height: 100%; + background: rgba(51, 51, 51, 0.8); + position: fixed; + z-index: 20000; + display: none; +} +.onclick{ + width: 100%; + height: 100%; + position: absolute; + z-index: 20001; +} +.container-right-click{ + width: 100%; + position: absolute; + top: 0; + left: 0; +} +.container-right-click .card-price#card-price-small{ + margin-top: 70px; + -webkit-transition: all .2s; + -moz-transition: all .2s; + -o-transition: all .2s; + transition: all .2s; + position: relative; + z-index: 20003; + +} +.container-right-click .card-price#card-price-big{ + margin-top: 40px; + -webkit-transition: all .2s; + -moz-transition: all .2s; + -o-transition: all .2s; + transition: all .2s; + position: relative; + z-index: 20003; + +} +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +@-webkit-keyframes bounceInDown { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInDown { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} + +.container-right-click h4{ + color: white;margin-top: 45px;font-weight: 200;margin-bottom: 0; +} +.icon-class{ + fill: #75c3b6; +} +.navbar-header{ + min-width: 135px; +} + +#demo-navbar{ + border-radius: 0; + margin-bottom: 0px; +} +.download-area{ + margin-top: 30px; +} +.sharing-area{ + margin-top: 50px; +} +.sharing-area .btn{ + margin-top: 14px; +} + +/* nucleo icons */ + +.demo-iconshtml { + font-size: 62.5%; +} +.demo-icons body { + font-size: 1.6rem; + font-family: sans-serif; + color: #333333; + background: white; +} +.demo-icons a { + color: #608CEE; + text-decoration: none; +} +.demo-icons header { + text-align: center; + padding: 100px 0 0; +} +.demo-icons header h1 { + font-size: 2.8rem; +} +.demo-icons header p { + font-size: 1.4rem; + margin-top: 1em; +} +.demo-icons header a:hover { + text-decoration: underline; +} +.demo-icons .nc-icon { + font-size: 34px; +} +.demo-icons section { + width: 90%; + max-width: 1200px; + margin: 50px auto; +} +.demo-icons section h2 { + border-bottom: 1px solid #e2e2e2; + padding: 0 0 1em .2em; + margin-bottom: 1em; +} +.demo-icons ul::after { + clear: both; + content: ""; + display: table; +} +.demo-icons ul li { + width: 25%; + float: left; + padding: 16px 0; + text-align: center; + border-radius: .25em; + -webkit-transition: background 0.2s; + -moz-transition: background 0.2s; + transition: background 0.2s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: hidden; +} +.demo-icons ul li:hover { + background: #f4f4f4; +} +.demo-icons ul p, .demo-icons ul em, .demo-icons ul input { + display: inline-block; + font-size: 1rem; + color: #999999; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; + white-space: nowrap; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + cursor: pointer; +} +.demo-icons ul p { + padding: 20px 0 0; + font-size: 12px; + margin: 0; +} +.demo-icons ul p::selection, .demo-icons ul em::selection { + background: #608CEE; + color: #efefef; +} +.demo-icons ul em { + margin-bottom: 8px; + font-size: 12px; +} +.demo-icons ul em::before { + content: '['; +} +.demo-icons ul em::after { + content: ']'; +} +.demo-icons ul input { + text-align: center; + background: transparent; + border: none; + box-shadow: none; + outline: none; + display: none; +} + +@media only screen and (min-width: 768px) { + .demo-icons ul li { + width: 20%; + float: left; + } +} +@media only screen and (min-width: 1024px) { + .demo-icons ul li { + width: 12.5%; + float: left; + padding: 32px 0; + } +} + +/* for components and tutorial page */ + /*pre.prettyprint{ + background-color: #FFFCF5; + border: 0px; + margin-bottom: 0; + margin-top: 20px; + padding: 20px; + text-align: left; + }*/ +.atv, .str{ + color: #75c3b6; +} +.tag, .pln, .kwd{ + color: #7A9E9F; +} +.atn{ + color: #68B3C8; +} +.pln{ + color: #333; +} +.com{ + color: #999; +} +.space-top{ + margin-top: 30px; +} +.area-line{ + /*border: 1px solid #999;*/ + border-left: 0; + border-right: 0; + color: #666; + display: block; + margin-top: 20px; + padding: 8px 0; + text-align: center; +} +.area-line a{ + color: #666; +} +.container-fluid{ + padding-right: 15px; + padding-left: 15px; +} +.example-pages{ + margin-top: 50px; +} +.main .section:first-of-type{ + position: relative; + z-index: 2; +} +.profile-content{ + padding-top: 0; + position: relative; + z-index: 2; +} +/*-------------------------------- + +nucleo-icons Web Font - built using nucleoapp.com +License - nucleoapp.com/license/ + +-------------------------------- */ +@font-face { + font-family: 'nucleo-icons'; + src: url('../fonts/nucleo-icons.eot'); + src: url('../fonts/nucleo-icons.eot') format('embedded-opentype'), url('../fonts/nucleo-icons.woff2') format('woff2'), url('../fonts/nucleo-icons.woff') format('woff'), url('../fonts/nucleo-icons.ttf') format('truetype'), url('../fonts/nucleo-icons.svg') format('svg'); + font-weight: normal; + font-style: normal; +} +/*------------------------ + base class definition +-------------------------*/ +.nc-icon { + display: inline-block; + font: normal normal normal 14px/1 'nucleo-icons'; + font-size: inherit; + speak: none; + text-transform: none; + /* Better Font Rendering */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/*------------------------ + change icon size +-------------------------*/ +.nc-icon.lg { + font-size: 1.33333333em; + vertical-align: -16%; +} +.nc-icon.x2 { + font-size: 2em; +} +.nc-icon.x3 { + font-size: 3em; +} +/*---------------------------------- + add a square/circle background +-----------------------------------*/ +.nc-icon.square, +.nc-icon.circle { + padding: 0.33333333em; + vertical-align: -16%; + background-color: #eee; +} +.nc-icon.circle { + border-radius: 50%; +} +/*------------------------ + list icons +-------------------------*/ +.nc-icon-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.nc-icon-ul > li { + position: relative; +} +.nc-icon-ul > li > .nc-icon { + position: absolute; + left: -1.57142857em; + top: 0.14285714em; + text-align: center; +} +.nc-icon-ul > li > .nc-icon.lg { + top: 0; + left: -1.35714286em; +} +.nc-icon-ul > li > .nc-icon.circle, +.nc-icon-ul > li > .nc-icon.square { + top: -0.19047619em; + left: -1.9047619em; +} +/*------------------------ + spinning icons +-------------------------*/ +.nc-icon.spin { + -webkit-animation: nc-icon-spin 2s infinite linear; + -moz-animation: nc-icon-spin 2s infinite linear; + animation: nc-icon-spin 2s infinite linear; +} +@-webkit-keyframes nc-icon-spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + } +} +@-moz-keyframes nc-icon-spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + } +} +@keyframes nc-icon-spin { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +/*------------------------ + rotated/flipped icons +-------------------------*/ +.nc-icon.rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} +.nc-icon.rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.nc-icon.rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); +} +.nc-icon.flip-y { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0); + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.nc-icon.flip-x { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} +/*------------------------ + font icons +-------------------------*/ + +.nc-air-baloon::before { + content: "\ea01"; +} + +.nc-album-2::before { + content: "\ea02"; +} + +.nc-alert-circle-i::before { + content: "\ea04"; +} + +.nc-align-center::before { + content: "\ea03"; +} + +.nc-align-left-2::before { + content: "\ea05"; +} + +.nc-ambulance::before { + content: "\ea06"; +} + +.nc-app::before { + content: "\ea07"; +} + +.nc-atom::before { + content: "\ea08"; +} + +.nc-badge::before { + content: "\ea09"; +} + +.nc-bag-16::before { + content: "\ea0a"; +} + +.nc-bank::before { + content: "\ea0b"; +} + +.nc-basket::before { + content: "\ea0c"; +} + +.nc-bell-55::before { + content: "\ea0d"; +} + +.nc-bold::before { + content: "\ea0e"; +} + +.nc-book-bookmark::before { + content: "\ea0f"; +} + +.nc-bookmark-2::before { + content: "\ea10"; +} + +.nc-box-2::before { + content: "\ea11"; +} + +.nc-box::before { + content: "\ea12"; +} + +.nc-briefcase-24::before { + content: "\ea13"; +} + +.nc-bulb-63::before { + content: "\ea14"; +} + +.nc-bullet-list-67::before { + content: "\ea15"; +} + +.nc-bus-front-12::before { + content: "\ea16"; +} + +.nc-button-pause::before { + content: "\ea17"; +} + +.nc-button-play::before { + content: "\ea18"; +} + +.nc-button-power::before { + content: "\ea19"; +} + +.nc-calendar-60::before { + content: "\ea1a"; +} + +.nc-camera-compact::before { + content: "\ea1b"; +} + +.nc-caps-small::before { + content: "\ea1c"; +} + +.nc-cart-simple::before { + content: "\ea1d"; +} + +.nc-chart-bar-32::before { + content: "\ea1e"; +} + +.nc-chart-pie-36::before { + content: "\ea1f"; +} + +.nc-chat-33::before { + content: "\ea20"; +} + +.nc-check-2::before { + content: "\ea21"; +} + +.nc-circle-10::before { + content: "\ea22"; +} + +.nc-cloud-download-93::before { + content: "\ea23"; +} + +.nc-cloud-upload-94::before { + content: "\ea24"; +} + +.nc-compass-05::before { + content: "\ea25"; +} + +.nc-controller-modern::before { + content: "\ea26"; +} + +.nc-credit-card::before { + content: "\ea27"; +} + +.nc-delivery-fast::before { + content: "\ea28"; +} + +.nc-diamond::before { + content: "\ea29"; +} + +.nc-email-85::before { + content: "\ea2a"; +} + +.nc-favourite-28::before { + content: "\ea2b"; +} + +.nc-glasses-2::before { + content: "\ea2c"; +} + +.nc-globe-2::before { + content: "\ea2d"; +} + +.nc-globe::before { + content: "\ea2e"; +} + +.nc-hat-3::before { + content: "\ea2f"; +} + +.nc-headphones::before { + content: "\ea30"; +} + +.nc-html5::before { + content: "\ea31"; +} + +.nc-image::before { + content: "\ea32"; +} + +.nc-istanbul::before { + content: "\ea33"; +} + +.nc-key-25::before { + content: "\ea34"; +} + +.nc-laptop::before { + content: "\ea35"; +} + +.nc-layout-11::before { + content: "\ea36"; +} + +.nc-lock-circle-open::before { + content: "\ea37"; +} + +.nc-map-big::before { + content: "\ea38"; +} + +.nc-minimal-down::before { + content: "\ea39"; +} + +.nc-minimal-left::before { + content: "\ea3a"; +} + +.nc-minimal-right::before { + content: "\ea3b"; +} + +.nc-minimal-up::before { + content: "\ea3c"; +} + +.nc-mobile::before { + content: "\ea3d"; +} + +.nc-money-coins::before { + content: "\ea3e"; +} + +.nc-note-03::before { + content: "\ea3f"; +} + +.nc-palette::before { + content: "\ea40"; +} + +.nc-paper::before { + content: "\ea41"; +} + +.nc-pin-3::before { + content: "\ea42"; +} + +.nc-planet::before { + content: "\ea43"; +} + +.nc-refresh-69::before { + content: "\ea44"; +} + +.nc-ruler-pencil::before { + content: "\ea45"; +} + +.nc-satisfied::before { + content: "\ea46"; +} + +.nc-scissors::before { + content: "\ea47"; +} + +.nc-send::before { + content: "\ea48"; +} + +.nc-settings-gear-65::before { + content: "\ea49"; +} + +.nc-settings::before { + content: "\ea4a"; +} + +.nc-share-66::before { + content: "\ea4b"; +} + +.nc-shop::before { + content: "\ea4c"; +} + +.nc-simple-add::before { + content: "\ea4d"; +} + +.nc-simple-delete::before { + content: "\ea4e"; +} + +.nc-simple-remove::before { + content: "\ea4f"; +} + +.nc-single-02::before { + content: "\ea50"; +} + +.nc-single-copy-04::before { + content: "\ea51"; +} + +.nc-sound-wave::before { + content: "\ea52"; +} + +.nc-spaceship::before { + content: "\ea53"; +} + +.nc-sun-fog-29::before { + content: "\ea54"; +} + +.nc-support-17::before { + content: "\ea55"; +} + +.nc-tablet-2::before { + content: "\ea56"; +} + +.nc-tag-content::before { + content: "\ea57"; +} + +.nc-tap-01::before { + content: "\ea58"; +} + +.nc-tie-bow::before { + content: "\ea59"; +} + +.nc-tile-56::before { + content: "\ea5a"; +} + +.nc-time-alarm::before { + content: "\ea5b"; +} + +.nc-touch-id::before { + content: "\ea5c"; +} + +.nc-trophy::before { + content: "\ea5d"; +} + +.nc-tv-2::before { + content: "\ea5e"; +} + +.nc-umbrella-13::before { + content: "\ea5f"; +} + +.nc-user-run::before { + content: "\ea60"; +} + +.nc-vector::before { + content: "\ea61"; +} + +.nc-watch-time::before { + content: "\ea62"; +} + +.nc-world-2::before { + content: "\ea63"; +} + +.nc-zoom-split::before { + content: "\ea64"; +} + +html,body { + margin: 0; + padding: 0; +} + + +/* all icon font classes list here */ \ No newline at end of file diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..a677a16 --- /dev/null +++ b/public/index.html @@ -0,0 +1,155 @@ + + + + + Apptify | 快速构建NestJS应用的模板工具 + + + + + + + + +
+ +
+ + + diff --git a/src/app.module.ts b/src/app.module.ts new file mode 100644 index 0000000..07ce665 --- /dev/null +++ b/src/app.module.ts @@ -0,0 +1,129 @@ +import { ClassSerializerInterceptor, Global, Module } from '@nestjs/common'; +import { APP_FILTER, APP_INTERCEPTOR, APP_PIPE } from '@nestjs/core'; +import { + AllExecptionFilter, + BaseModule, + ConfigModule, + HttpExecptionFilter, + LoggerInterceptor, + LoggerModule, + MulterModule, + ResponseInterceptor, + ServeStaticModule, + TypeormModule, + ValidationExecptionFilter, + validationPipeFactory, +} from './features'; +import { AuthModule, UserModule } from './modules'; +import { PostModule } from './modules/post/post.module'; +import { RoleModule } from './modules/role/role.module'; +import { UploadModule } from './modules/upload/upload.module'; + +@Global() +@Module({ + imports: [ + /** + * 配置模块(全局),提供ConfigService类 + */ + ConfigModule, + /** + * 日志模块(全局),提供LoggerService类 + */ + LoggerModule, + /** + * 静态资源(全局),/upload和/web + */ + ServeStaticModule, + /** + * 基础模块(全局),提供基础服务 + */ + BaseModule, + /** + * 文件上传配置模块(全局) + */ + MulterModule, + /** + * 数据库ORM + */ + TypeormModule, + /** + * 用户模块 + */ + UserModule, + /** + * 账户模块 + */ + AuthModule, + /** + * 角色模块 + */ + RoleModule, + /** + * 上传模块 + */ + UploadModule, + /** + * 文章模块 + */ + PostModule, + ], + providers: [ + /** + * 全局序列化拦截器 + * @description 由于中间件的洋葱机制,需放在响应拦截器之前,否则无法检测到实例类型 + */ + { + provide: APP_INTERCEPTOR, + useClass: ClassSerializerInterceptor, + }, + /** + * 全局响应拦截器 + * @description 将返回值统一包装成{code, message, data, meta}格式 + */ + { + provide: APP_INTERCEPTOR, + useClass: ResponseInterceptor, + }, + /** + * 全局日志拦截器 + * @description 将请求和响应日志打印到控制台 + */ + { + provide: APP_INTERCEPTOR, + useClass: LoggerInterceptor, + }, + /** + * 全局异常过滤器 + * @description 将异常统一包装成{code, message, data, meta}格式 + */ + { + provide: APP_FILTER, + useClass: AllExecptionFilter, + }, + /** + * 全局HTTP异常过滤器 + * @description 将HTTP异常统一包装成{code, message, data, meta}格式 + */ + { + provide: APP_FILTER, + useClass: HttpExecptionFilter, + }, + /** + * 全局验证管道 + * @description 校验和转换输入数据 + */ + { + provide: APP_PIPE, + useFactory: validationPipeFactory, + }, + /** + * 全局验证异常过滤器 + * @description 将验证异常统一包装成{code, message, data, meta}格式 + */ + { + provide: APP_FILTER, + useClass: ValidationExecptionFilter, + }, + ], +}) +export class AppModule {} diff --git a/src/common/dayjs/index.ts b/src/common/dayjs/index.ts new file mode 100644 index 0000000..41b949c --- /dev/null +++ b/src/common/dayjs/index.ts @@ -0,0 +1,49 @@ +import dayjs from 'dayjs'; +import 'dayjs/locale/zh-cn'; +import relativeTime from 'dayjs/plugin/relativeTime'; + +export const DATETIME = 'YYYY-MM-DD HH:mm:ss'; + +export const DATE = 'YYYY-MM-DD'; + +export const TIME = 'HH:mm:ss'; + +/** + * 中文语言包 + */ +dayjs.locale('zh-cn'); + +/** + * 相对时间插件 + * @see https://dayjs.gitee.io/docs/zh-CN/plugin/relative-time + */ +dayjs.extend(relativeTime); + +/** + * + * 默认时间格式 + */ +dayjs.DATETIME = DATETIME; + +/** + * 默认日期格式 + */ +dayjs.DATE = DATE; + +/** + * 默认时间格式 + */ +dayjs.TIME = TIME; + +/** + * 重写format方法,如果没有传入format参数,则使用默认的时间格式 + */ +dayjs.prototype._format = dayjs.prototype.format; +dayjs.prototype.format = function (format?: string) { + if (format) { + return this._format(format); + } + return this._format(dayjs.DATETIME); +}; + +export { dayjs }; diff --git a/src/common/dayjs/interface.d.ts b/src/common/dayjs/interface.d.ts new file mode 100644 index 0000000..4eec097 --- /dev/null +++ b/src/common/dayjs/interface.d.ts @@ -0,0 +1,22 @@ +import 'dayjs'; + +declare module 'dayjs' { + /** + * 默认日期时间格式 + */ + export let DATETIME: 'YYYY-MM-DD HH:mm:ss'; + + /** + * 默认日期格式 + */ + export let DATE: 'YYYY-MM-DD'; + + /** + * 默认时间格式 + */ + export let TIME: 'HH:mm:ss'; + + interface Dayjs { + _format: (format?: string) => string; + } +} diff --git a/src/common/index.ts b/src/common/index.ts new file mode 100644 index 0000000..adb94bd --- /dev/null +++ b/src/common/index.ts @@ -0,0 +1,2 @@ +export * from './dayjs'; +export * from './uuid'; diff --git a/src/common/uuid/index.ts b/src/common/uuid/index.ts new file mode 100644 index 0000000..46bd0d0 --- /dev/null +++ b/src/common/uuid/index.ts @@ -0,0 +1,3 @@ +import { v4 } from 'uuid'; + +export { v4 as uuid }; diff --git a/src/constants/env.ts b/src/constants/env.ts new file mode 100644 index 0000000..ae36998 --- /dev/null +++ b/src/constants/env.ts @@ -0,0 +1,5 @@ +export enum envKeys { + SERVER_HOST = 'SERVER_HOST', + SERVER_PORT = 'SERVER_PORT', + UPLOAD_FOLDER = 'UPLOAD_FOLDER', +} diff --git a/src/constants/index.ts b/src/constants/index.ts new file mode 100644 index 0000000..c1532d6 --- /dev/null +++ b/src/constants/index.ts @@ -0,0 +1 @@ +export * from './env'; diff --git a/src/features/base/base.controller.ts b/src/features/base/base.controller.ts new file mode 100644 index 0000000..75e2272 --- /dev/null +++ b/src/features/base/base.controller.ts @@ -0,0 +1,13 @@ +import { Inject } from '@nestjs/common'; +import { LoggerService } from '../logger'; + +/** + * 基础控制器 + */ +export class BaseController { + /** + * 日志服务 + */ + @Inject(LoggerService) + readonly logger: LoggerService; +} diff --git a/src/features/base/base.module.ts b/src/features/base/base.module.ts new file mode 100644 index 0000000..979f4a2 --- /dev/null +++ b/src/features/base/base.module.ts @@ -0,0 +1,8 @@ +import { Global, Module } from '@nestjs/common'; +import { LoggerService } from '../logger'; + +@Global() +@Module({ + providers: [LoggerService], +}) +export class BaseModule {} diff --git a/src/features/base/base.service.ts b/src/features/base/base.service.ts new file mode 100644 index 0000000..4a4b4e0 --- /dev/null +++ b/src/features/base/base.service.ts @@ -0,0 +1,5 @@ +import { LoggerService } from '../logger'; + +export class BaseService { + constructor(protected readonly loogerService: LoggerService) {} +} diff --git a/src/features/base/index.ts b/src/features/base/index.ts new file mode 100644 index 0000000..31e6d0f --- /dev/null +++ b/src/features/base/index.ts @@ -0,0 +1,3 @@ +export * from './base.controller'; +export * from './base.module'; +export * from './base.service'; diff --git a/src/features/config/config.enum.ts b/src/features/config/config.enum.ts new file mode 100644 index 0000000..3bf9c97 --- /dev/null +++ b/src/features/config/config.enum.ts @@ -0,0 +1,5 @@ +export enum configEnum { + SERVER_HOST = 'SERVER_HOST', + SERVER_PORT = 'SERVER_PORT', + UPLOAD_FOLDER = 'UPLOAD_FOLDER', +} diff --git a/src/features/config/config.module.ts b/src/features/config/config.module.ts new file mode 100644 index 0000000..85f6bbc --- /dev/null +++ b/src/features/config/config.module.ts @@ -0,0 +1,6 @@ +import { ConfigModule as configModule } from '@nestjs/config'; + +export const ConfigModule = configModule.forRoot({ + envFilePath: ['.env.local', '.env'], + isGlobal: true, +}); diff --git a/src/features/config/index.ts b/src/features/config/index.ts new file mode 100644 index 0000000..85f6bbc --- /dev/null +++ b/src/features/config/index.ts @@ -0,0 +1,6 @@ +import { ConfigModule as configModule } from '@nestjs/config'; + +export const ConfigModule = configModule.forRoot({ + envFilePath: ['.env.local', '.env'], + isGlobal: true, +}); diff --git a/src/features/exception/all.filter.ts b/src/features/exception/all.filter.ts new file mode 100644 index 0000000..daaf2a4 --- /dev/null +++ b/src/features/exception/all.filter.ts @@ -0,0 +1,15 @@ +import { ArgumentsHost, Catch, ExceptionFilter, HttpStatus } from '@nestjs/common'; +import { Response as _Response } from 'express'; +import { Response, ResponseCode } from '../response'; + +@Catch() +export class AllExecptionFilter implements ExceptionFilter { + catch(exception: Error, host: ArgumentsHost) { + const ctx = host.switchToHttp(); + const response = ctx.getResponse<_Response>(); + const message = exception.message; + const code = ResponseCode.UNKNOWN_ERROR; + + response.status(HttpStatus.INTERNAL_SERVER_ERROR).json(Response.create({ code, message, data: null })); + } +} diff --git a/src/features/exception/http.filter.ts b/src/features/exception/http.filter.ts new file mode 100644 index 0000000..235dd10 --- /dev/null +++ b/src/features/exception/http.filter.ts @@ -0,0 +1,15 @@ +import { ArgumentsHost, Catch, ExceptionFilter, HttpException } from '@nestjs/common'; +import { Response as _Response } from 'express'; +import { Response } from '../response'; + +@Catch(HttpException) +export class HttpExecptionFilter implements ExceptionFilter { + catch(exception: HttpException, host: ArgumentsHost) { + const ctx = host.switchToHttp(); + const response = ctx.getResponse<_Response>(); + const code = exception.getStatus(); + const message = exception.message; + + response.status(code).json(Response.error(null, message)); + } +} diff --git a/src/features/exception/index.ts b/src/features/exception/index.ts new file mode 100644 index 0000000..7354575 --- /dev/null +++ b/src/features/exception/index.ts @@ -0,0 +1,2 @@ +export * from './all.filter'; +export * from './http.filter'; diff --git a/src/features/index.ts b/src/features/index.ts new file mode 100644 index 0000000..84add23 --- /dev/null +++ b/src/features/index.ts @@ -0,0 +1,12 @@ +export * from './base'; +export * from './config'; +export * from './exception'; +export * from './logger'; +export * from './multer'; +export * from './pagination'; +export * from './response'; +export * from './static'; +export * from './swagger'; +export * from './typeorm'; +export * from './validation'; + diff --git a/src/features/logger/index.ts b/src/features/logger/index.ts new file mode 100644 index 0000000..ddc0b8a --- /dev/null +++ b/src/features/logger/index.ts @@ -0,0 +1,3 @@ +export * from './logger.interceptor'; +export * from './logger.module'; +export * from './logger.service'; diff --git a/src/features/logger/logger.interceptor.ts b/src/features/logger/logger.interceptor.ts new file mode 100644 index 0000000..55a6a04 --- /dev/null +++ b/src/features/logger/logger.interceptor.ts @@ -0,0 +1,17 @@ +import { CallHandler, ExecutionContext, Inject, NestInterceptor } from '@nestjs/common'; +import { Request } from 'express'; +import { Observable } from 'rxjs'; +import { LoggerService } from './logger.service'; + +export class LoggerInterceptor implements NestInterceptor { + @Inject() + logger: LoggerService; + + intercept(context: ExecutionContext, next: CallHandler): Observable | Promise> { + const controller = context.getClass(); + const handler = context.getHandler(); + const { method, url } = context.switchToHttp().getRequest(); + this.logger.log(`${method} ${url} +1`, `${controller.name}.${handler.name}`); + return next.handle(); + } +} diff --git a/src/features/logger/logger.module.ts b/src/features/logger/logger.module.ts new file mode 100644 index 0000000..191271d --- /dev/null +++ b/src/features/logger/logger.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { LoggerService } from './logger.service'; + +@Global() +@Module({ + providers: [LoggerService], + exports: [LoggerService], +}) +export class LoggerModule {} diff --git a/src/features/logger/logger.service.ts b/src/features/logger/logger.service.ts new file mode 100644 index 0000000..5b14f38 --- /dev/null +++ b/src/features/logger/logger.service.ts @@ -0,0 +1,9 @@ +import { ConsoleLogger, Injectable } from '@nestjs/common'; +import { dayjs } from 'src/common'; + +@Injectable() +export class LoggerService extends ConsoleLogger { + protected getTimestamp(): string { + return dayjs().format(); + } +} diff --git a/src/features/multer/index.ts b/src/features/multer/index.ts new file mode 100644 index 0000000..205e4ad --- /dev/null +++ b/src/features/multer/index.ts @@ -0,0 +1,34 @@ +import { Global, Module } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import { MulterModule as _MulterModule } from '@nestjs/platform-express'; +import { diskStorage } from 'multer'; +import { join, parse } from 'path'; +import { dayjs } from 'src/common'; + +@Global() +@Module({ + imports: [ + _MulterModule.registerAsync({ + useFactory: async (configService) => { + const dest = configService.get('UPLOAD_FOLDER', './content/upload'); + return { + storage: diskStorage({ + destination: join(dest), + filename: (req, file, cb) => { + const yearMonth = dayjs().format('YYYY-MM'); + const { name, ext } = parse(file.originalname); + const randomName = Array(32) + .fill(null) + .map(() => Math.round(Math.random() * 16).toString(16)) + .join(''); + cb(null, `${yearMonth}/${name}-${randomName}${ext}`); + }, + }), + }; + }, + inject: [ConfigService], + }), + ], + exports: [_MulterModule], +}) +export class MulterModule {} diff --git a/src/features/pagination/index.ts b/src/features/pagination/index.ts new file mode 100644 index 0000000..8f40f7f --- /dev/null +++ b/src/features/pagination/index.ts @@ -0,0 +1,2 @@ +export * from './pagination'; +export * from './pagination.dto'; diff --git a/src/features/pagination/pagination.dto.ts b/src/features/pagination/pagination.dto.ts new file mode 100644 index 0000000..e1820e0 --- /dev/null +++ b/src/features/pagination/pagination.dto.ts @@ -0,0 +1,22 @@ +import { Transform } from 'class-transformer'; +import { IsNumber, IsOptional, Min } from 'class-validator'; + +export class paginationDto { + /** + * 页码 + */ + // @IsNumber() + @IsOptional() + @IsNumber() + @Min(1) + @Transform(({ value }) => Number(value)) + page: number; + /** + * 每页条数 + */ + @IsOptional() + @IsNumber() + @Min(1) + @Transform(({ value }) => Number(value)) + size: number; +} diff --git a/src/features/pagination/pagination.ts b/src/features/pagination/pagination.ts new file mode 100644 index 0000000..df8410a --- /dev/null +++ b/src/features/pagination/pagination.ts @@ -0,0 +1,44 @@ +import { Response, ResponseCode } from '../response'; + +interface Options { + page: number; + size: number; + [key: string]: any; +} + +type WrapOptions = { + page: number; + size: number; + total: number; + data: T[]; +}; + +export const defaultPage = 1; + +export const defaultSize = 10; + +/** + * 分页工具类 + */ +export class Pagination { + /** + * 包装响应结果 + */ + static wrap(options: WrapOptions) { + const { page = defaultPage, size = defaultSize, total, data } = options; + return Response.create({ + code: ResponseCode.SUCESS, + message: '请求成功', + data, + meta: { page, size, total }, + }); + } + /** + * 将分页参数转换为typeorm查询参数 + */ + static optionize(options: Options) { + const { page = defaultPage, size: take = defaultSize, ...where } = options || {}; + const skip = (page - 1) * take; + return { skip, take, where }; + } +} diff --git a/src/features/response/index.ts b/src/features/response/index.ts new file mode 100644 index 0000000..943eeb4 --- /dev/null +++ b/src/features/response/index.ts @@ -0,0 +1,4 @@ +export * from './response'; +export * from './response.code'; +export * from './response.decorator'; +export * from './response.interceptor'; diff --git a/src/features/response/response.code.ts b/src/features/response/response.code.ts new file mode 100644 index 0000000..24e025d --- /dev/null +++ b/src/features/response/response.code.ts @@ -0,0 +1,25 @@ +/** + * 响应码枚举,开头与HTTP状态码保持一致 + */ +export enum ResponseCode { + /** + * 操作成功 + */ + SUCESS = 2000, + /** + * 客户端未知错误 + */ + ERROR = 4000, + /** + * 参数错误 + */ + PARAM_ERROR = 4001, + /** + * 服务端未知错误 + */ + UNKNOWN_ERROR = 5000, + /** + * 未授权 + */ + UNAUTHORIZED = 4003, +} diff --git a/src/features/response/response.decorator.ts b/src/features/response/response.decorator.ts new file mode 100644 index 0000000..5800c2e --- /dev/null +++ b/src/features/response/response.decorator.ts @@ -0,0 +1,43 @@ +import { SetMetadata } from '@nestjs/common'; + +/** + * 元数据的KEY + */ +export const RESPONSE_KEY = 'resultor'; + +/** + * 响应结果的类型 + */ +export enum ResponseType { + /** + * 包装类型,返回的数据会被包装成统一的格式 + */ + WRAP = 'wrap', + /** + * 原始类型,返回的数据不会被包装 + */ + RAW = 'raw', + /** + * 分页类型,返回的数据会被包装成统一的格式,并且会包含分页信息 + */ + PAGINATION = 'pagination', +} + +/** + * 响应结果装饰器的参数 + */ +export class ResponseOptions { + /** + * 类型,默认为wrap + */ + type?: ResponseType = ResponseType.WRAP; +} + +/** + * 响应结果装饰器 + * @param options 参数 + * @returns + */ +export const Responsing = (options: ResponseOptions) => { + return SetMetadata(RESPONSE_KEY, { ...ResponseOptions, ...options }); +}; diff --git a/src/features/response/response.interceptor.ts b/src/features/response/response.interceptor.ts new file mode 100644 index 0000000..3710f86 --- /dev/null +++ b/src/features/response/response.interceptor.ts @@ -0,0 +1,28 @@ +import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common'; +import { Reflector } from '@nestjs/core'; +import { Observable, map } from 'rxjs'; +import { Response } from './response'; +import { RESPONSE_KEY, ResponseType } from './response.decorator'; + +@Injectable() +export class ResponseInterceptor implements NestInterceptor { + constructor(private reflector: Reflector) {} + + intercept(context: ExecutionContext, next: CallHandler): Observable { + const controller = context.getClass(); + const handler = context.getHandler(); + const metadata = this.reflector.getAllAndOverride(RESPONSE_KEY, [controller, handler]); + + const maper = (data: any) => { + if (metadata?.type === ResponseType.RAW) { + return data; + } + if (data instanceof Response) { + return data; + } + return Response.success(data); + }; + + return next.handle().pipe(map(maper)); + } +} diff --git a/src/features/response/response.ts b/src/features/response/response.ts new file mode 100644 index 0000000..81cb0dc --- /dev/null +++ b/src/features/response/response.ts @@ -0,0 +1,57 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { ResponseCode } from './response.code'; + +/** + * 响应结果 + */ +export class Response { + /** + * 状态码 + * @example 2000 + */ + @ApiProperty({ + type: 'number', + example: 2000, + }) + code?: ResponseCode; + /** + * 响应消息 + * @example '请求成功' + */ + @ApiProperty({ + type: 'string', + example: '请求成功', + }) + message?: string; + /** + * 响应数据 + * @example 1 + */ + @ApiProperty({}) + data: T; + /** + * 响应元数据 + * @example { total: 100 } + */ + meta?: any; + /** + * 创建成功响应结果 + */ + static success(data: any, message = '请求成功') { + return this.create({ code: ResponseCode.SUCESS, message, data }); + } + /** + * 创建失败响应结果 + */ + static error(data = null, message = '请求失败') { + return this.create({ code: ResponseCode.ERROR, message, data }); + } + /** + * 创建响应结果 + */ + static create(result: Response) { + const response = new Response(); + const data = Object.assign(response, result); + return data; + } +} diff --git a/src/features/serialization/index.ts b/src/features/serialization/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/features/static/index.ts b/src/features/static/index.ts new file mode 100644 index 0000000..3a9a615 --- /dev/null +++ b/src/features/static/index.ts @@ -0,0 +1,12 @@ +import { ServeStaticModule as module } from '@nestjs/serve-static'; +import { join } from 'path'; + +export const ServeStaticModule = module.forRoot( + { + rootPath: join(process.cwd(), 'content/upload'), + serveRoot: '/upload', + }, + { + rootPath: join(process.cwd(), 'public'), + }, +); diff --git a/src/features/swagger/index.ts b/src/features/swagger/index.ts new file mode 100644 index 0000000..7471fd0 --- /dev/null +++ b/src/features/swagger/index.ts @@ -0,0 +1,24 @@ +import { INestApplication } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; + +export const initSwagger = (app: INestApplication) => { + const configService = app.get(ConfigService); + const openapiUrl = configService.get('SERVER_OPENAPI_URL', 'openapi'); + const appTitle = configService.get('APP_TITLE', 'Apptify'); + const appSubtitle = configService.get('APP_SUBTITLE', 'Apptify'); + const config = new DocumentBuilder() + .setTitle(`${appTitle}接口文档`) + .setVersion('1.0') + .setDescription('Openapi 3.0文档') + .setExternalDoc('JSON数据', `${openapiUrl}.json`) + .addTag('user', '用户管理') + .build(); + const document = SwaggerModule.createDocument(app, config); + SwaggerModule.setup(openapiUrl, app, document, { + jsonDocumentUrl: `${openapiUrl}.json`, + yamlDocumentUrl: `${openapiUrl}.yaml`, + customfavIcon: '/favicon.ico', + customSiteTitle: `接口文档 | ${appSubtitle}`, + }); +}; diff --git a/src/features/typeorm/config/index.ts b/src/features/typeorm/config/index.ts new file mode 100644 index 0000000..4101427 --- /dev/null +++ b/src/features/typeorm/config/index.ts @@ -0,0 +1,39 @@ +import { TypeOrmModuleOptions } from '@nestjs/typeorm'; +import { DataSource, DataSourceOptions } from 'typeorm'; +import { SnakeNamingStrategy } from 'typeorm-naming-strategies'; +import { CreateUsersTable1682693329275 } from '../migrations/1682693329275-CreateUsersTable'; +import { MockPosts1685026010848 } from '../migrations/1685026010848-MockPosts'; + +/** + * 基本配置 + */ +export const baseConfig: DataSourceOptions = { + type: 'sqlite', + database: 'content/database/database.sqlite', + logging: false, + namingStrategy: new SnakeNamingStrategy(), +}; + +/** + * 用于运行时连接数据库 + */ +export const ormConfig: TypeOrmModuleOptions = { + ...baseConfig, + synchronize: true, + autoLoadEntities: true, + logging: true, +}; + +/** + * 用于生成迁移文件 + */ +export const cliConfig: DataSourceOptions = { + ...baseConfig, + entities: ['src/**/*.entity.ts'], + migrations: [CreateUsersTable1682693329275, MockPosts1685026010848], +}; + +/** + * 用于生成迁移文件 + */ +export default new DataSource(cliConfig); diff --git a/src/features/typeorm/entities/base.ts b/src/features/typeorm/entities/base.ts new file mode 100644 index 0000000..502a53d --- /dev/null +++ b/src/features/typeorm/entities/base.ts @@ -0,0 +1,59 @@ +import { Exclude } from 'class-transformer'; +import { Column, CreateDateColumn, DeleteDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'; + +/** + * 基础实体, 默认按照id倒序 + */ +@Entity({ orderBy: { id: 'DESC' } }) +export class BaseEntity { + /** + * 自增ID + * @example 1 + */ + @PrimaryGeneratedColumn({ comment: '自增ID' }) + id: number; + + /** + * 创建时间 + * @example "2022-01-01 10:10:10" + */ + @CreateDateColumn({ comment: '创建时间' }) + createdAt: Date; + + /** + * 创建人ID + * @example 1 + */ + @Column({ comment: '创建人' }) + createdBy: number; + + /** + * 更新时间 + * @example "2022-01-02 11:11:11" + */ + @UpdateDateColumn({ comment: '更新时间' }) + updatedAt: Date; + + /** + * 更新人ID + * @example 1 + */ + @Column({ comment: '更新人' }) + updatedBy: number; + + /** + * 删除时间 + * @example "2022-01-03 12:12:12" + */ + @Exclude() + @DeleteDateColumn({ comment: '删除时间' }) + deleteddAt: Date; + + /** + * 删除人ID + * @example 1 + */ + @Exclude() + @Column({ comment: '删除人' }) + deletedBy: number; +} diff --git a/src/features/typeorm/index.ts b/src/features/typeorm/index.ts new file mode 100644 index 0000000..46dbb90 --- /dev/null +++ b/src/features/typeorm/index.ts @@ -0,0 +1,9 @@ +import { TypeOrmModule } from '@nestjs/typeorm'; +import { ormConfig } from './config'; +export * from './config'; +export * from './entities/base'; + +/** + * 连接数据库 + */ +export const TypeormModule = TypeOrmModule.forRoot(ormConfig); diff --git a/src/features/typeorm/migrations/1682693329275-CreateUsersTable.ts b/src/features/typeorm/migrations/1682693329275-CreateUsersTable.ts new file mode 100644 index 0000000..c14a1d7 --- /dev/null +++ b/src/features/typeorm/migrations/1682693329275-CreateUsersTable.ts @@ -0,0 +1,25 @@ +import mock from 'mockjs'; +import { MigrationInterface, QueryRunner } from 'typeorm'; +import { v4 } from 'uuid'; + +export class CreateUsersTable1682693329275 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + const numbers = Array(20).fill(0); + const users = numbers.map(() => { + const guid = `"${v4()}"`; + const username = `"${mock.Random.name()}"`; + const nickname = `"${mock.Random.cname()}"`; + const description = `"${mock.Random.csentence(100, 120)}"`; + const avatar = `"https://picsum.photos/400/300"`; + const password = `"123456"`; + return [guid, username, nickname, description, avatar, password]; + }); + const fields = ['guid', 'username', 'nickname', 'description', 'avatar', 'password'].join(','); + const values = users.map((user) => `(${user.join(',')})`).join(','); + await queryRunner.query(`INSERT INTO user (${fields}) VALUES ${values}`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`TRUNCATE TABLE user`); + } +} diff --git a/src/features/typeorm/migrations/1685026010848-MockPosts.ts b/src/features/typeorm/migrations/1685026010848-MockPosts.ts new file mode 100644 index 0000000..188c1ae --- /dev/null +++ b/src/features/typeorm/migrations/1685026010848-MockPosts.ts @@ -0,0 +1,23 @@ +import mock from 'mockjs'; +import { MigrationInterface, QueryRunner } from 'typeorm'; +import { v4 } from 'uuid'; + +export class MockPosts1685026010848 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + const numbers = Array(20).fill(0); + const users = numbers.map(() => { + const guid = `"${v4()}"`; + const title = `"${mock.Random.csentence(10, 30)}"`; + const description = `"${mock.Random.csentence(100, 120)}"`; + const content = `"${mock.Random.csentence(200, 220)}"`; + return [guid, title, description, content]; + }); + const fields = ['guid', 'title', 'description', 'content'].join(','); + const values = users.map((user) => `(${user.join(',')})`).join(','); + await queryRunner.query(`INSERT INTO post (${fields}) VALUES ${values}`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`TRUNCATE TABLE post`); + } +} diff --git a/src/features/validation/index.ts b/src/features/validation/index.ts new file mode 100644 index 0000000..dc57334 --- /dev/null +++ b/src/features/validation/index.ts @@ -0,0 +1,3 @@ +export * from './validation.error'; +export * from './validation.filter'; +export * from './validation.pipe'; diff --git a/src/features/validation/validation.error.ts b/src/features/validation/validation.error.ts new file mode 100644 index 0000000..9b0cfbe --- /dev/null +++ b/src/features/validation/validation.error.ts @@ -0,0 +1,12 @@ +export class AppValidationError extends Error { + messages: string[] = []; + + constructor(message: string) { + super(message); + this.name = 'ValidationError'; + } + + setMessages(errors: string[]) { + this.messages = errors; + } +} diff --git a/src/features/validation/validation.filter.ts b/src/features/validation/validation.filter.ts new file mode 100644 index 0000000..d1f6319 --- /dev/null +++ b/src/features/validation/validation.filter.ts @@ -0,0 +1,16 @@ +import { ArgumentsHost, Catch, ExceptionFilter } from '@nestjs/common'; +import { Response } from 'express'; +import { ResponseCode } from '../response'; +import { AppValidationError } from './validation.error'; + +@Catch(AppValidationError) +export class ValidationExecptionFilter implements ExceptionFilter { + catch(exception: AppValidationError, host: ArgumentsHost) { + const ctx = host.switchToHttp(); + const response = ctx.getResponse(); + const code = ResponseCode.PARAM_ERROR; + const message = exception.message; + const data = exception.messages; + response.status(400).json({ code, message, data }); + } +} diff --git a/src/features/validation/validation.pipe.ts b/src/features/validation/validation.pipe.ts new file mode 100644 index 0000000..f60f0f2 --- /dev/null +++ b/src/features/validation/validation.pipe.ts @@ -0,0 +1,42 @@ +import { ValidationPipe } from '@nestjs/common'; +import { AppValidationError } from './validation.error'; + +const MessageMap = { + isString: '必须为字符串', + isNumber: '必须为数字', + isBoolean: '必须为布尔值', + isDate: '必须为日期', + isEnum: '必须为枚举值', + isNotEmpty: '不能为空', + isNotEmptyObject: '不能为空对象', + isNotEmptyString: '不能为空字符串', + isNotEmptyArray: '不能为空数组', + isNotEmptyMap: '不能为空Map', + isNotEmptySet: '不能为空Set', + isNotEmptyDate: '不能为空日期', + isNotEmptyNumber: '不能为空数字', + isNotEmptyBoolean: '不能为空布尔值', + isNotEmptyFunction: '不能为空函数', + isNotEmptySymbol: '不能为空Symbol', + isNotEmptyPromise: '不能为空Promise', + isNotEmptyObservable: '不能为空Observable', +}; + +export const validationPipeFactory = () => { + return new ValidationPipe({ + transform: true, + whitelist: true, + exceptionFactory: (errors) => { + const error = new AppValidationError('参数错误'); + const messages: string[] = []; + for (const error of errors) { + const { property, constraints } = error; + Object.keys(constraints).forEach((key) => { + messages.push(MessageMap[key] ? `参数(${property})${MessageMap[key]}` : constraints[key]); + }); + } + error.setMessages(messages); + return error; + }, + }); +}; diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..372c70a --- /dev/null +++ b/src/main.ts @@ -0,0 +1,50 @@ +import { VersioningType } from '@nestjs/common'; +import { NestFactory } from '@nestjs/core'; +import { initSwagger, LoggerService } from 'src/features'; +import { AppModule } from './app.module'; + +async function bootstrap() { + const { SERVER_HOST, SERVER_PORT } = process.env; + /** + * 创建应用 + */ + const app = await NestFactory.create(AppModule, { bufferLogs: false }); + /** + * 使用全局日志 + */ + const logger = app.get(LoggerService); + /** + * 全局日志 + */ + app.useLogger(logger); + /** + * 允许跨域 + */ + app.enableCors(); + /** + * API前缀 + */ + app.setGlobalPrefix('/api'); + /** + * 接口版本 + */ + app.enableVersioning({ type: VersioningType.URI, defaultVersion: '1' }); + /** + * 接口文档(swagger) + */ + initSwagger(app); + /** + * 监听端口 + */ + await app.listen(SERVER_PORT, SERVER_HOST); + /** + * 输出项目运行URL + */ + logger.log(`Application is running at ${await app.getUrl()}`, 'NestApplication'); + /** + * 输出接口文档URL + */ + logger.log(`OpenapiDocs is running at ${await app.getUrl()}/openapi`, 'NestApplication'); +} + +bootstrap(); diff --git a/src/modules/auth/auth.controller.ts b/src/modules/auth/auth.controller.ts new file mode 100644 index 0000000..39173a1 --- /dev/null +++ b/src/modules/auth/auth.controller.ts @@ -0,0 +1,21 @@ +import { Body, Controller, HttpStatus, Post, Request, UseGuards } from '@nestjs/common'; +import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { AuthService } from './auth.service'; +import { Public } from './jwt'; +import { LocalAuthDto, LocalAuthGuard } from './local'; + +@ApiTags('auth') +@Controller('auth') +export class AuthController { + constructor(private accountService: AuthService) {} + + @Public() + @UseGuards(LocalAuthGuard) + @Post('login') + @ApiResponse({ status: HttpStatus.UNAUTHORIZED, description: '账号或密码错误' }) + @ApiResponse({ status: HttpStatus.OK, description: '登录成功' }) + @ApiOperation({ summary: '账号登录', operationId: 'login' }) + login(@Request() req: any, @Body() user: LocalAuthDto) { + this.accountService.sign(req.user); + } +} diff --git a/src/modules/auth/auth.module.ts b/src/modules/auth/auth.module.ts new file mode 100644 index 0000000..caf4367 --- /dev/null +++ b/src/modules/auth/auth.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { UserModule } from '../user'; +import { AuthController } from './auth.controller'; +import { AuthService } from './auth.service'; +import { JwtAuthService, JwtModule } from './jwt'; +import { LocalAuthService } from './local'; + +@Module({ + imports: [UserModule, JwtModule], + providers: [AuthService, LocalAuthService, JwtAuthService], + exports: [AuthService], + controllers: [AuthController], +}) +export class AuthModule {} diff --git a/src/modules/auth/auth.service.ts b/src/modules/auth/auth.service.ts new file mode 100644 index 0000000..105154e --- /dev/null +++ b/src/modules/auth/auth.service.ts @@ -0,0 +1,22 @@ +import { Injectable } from '@nestjs/common'; +import { JwtService } from '@nestjs/jwt'; +import { UserService } from '../user'; + +@Injectable() +export class AuthService { + constructor(private userService: UserService, private jwtService: JwtService) {} + + // 验证用户 + async auth(username: string, password: string): Promise { + const user = await this.userService.findOne({ username }); + if (!user) return null; + if (user.password !== password) return null; + return user; + } + + // 令牌签名 + async sign(user: any) { + const payload = { id: user.id, username: user.username }; + return this.jwtService.sign(payload); + } +} diff --git a/src/modules/auth/index.ts b/src/modules/auth/index.ts new file mode 100644 index 0000000..093a0f2 --- /dev/null +++ b/src/modules/auth/index.ts @@ -0,0 +1,4 @@ +export * from './auth.controller'; +export * from './auth.module'; +export * from './auth.service'; +export * from './jwt'; diff --git a/src/modules/auth/jwt/index.ts b/src/modules/auth/jwt/index.ts new file mode 100644 index 0000000..7c412b0 --- /dev/null +++ b/src/modules/auth/jwt/index.ts @@ -0,0 +1,4 @@ +export * from './jwt-decorator'; +export * from './jwt-guard'; +export * from './jwt-module'; +export * from './jwt-service'; diff --git a/src/modules/auth/jwt/jwt-decorator.ts b/src/modules/auth/jwt/jwt-decorator.ts new file mode 100644 index 0000000..3272322 --- /dev/null +++ b/src/modules/auth/jwt/jwt-decorator.ts @@ -0,0 +1,11 @@ +import { SetMetadata } from '@nestjs/common'; + +/** + * 装饰器 + */ +export const PUBLICK_KEY = 'isPublic'; + +/** + * 公开当前控制器或路由 + */ +export const Public = (idPublic = true) => SetMetadata(PUBLICK_KEY, idPublic); diff --git a/src/modules/auth/jwt/jwt-guard.ts b/src/modules/auth/jwt/jwt-guard.ts new file mode 100644 index 0000000..9b215ea --- /dev/null +++ b/src/modules/auth/jwt/jwt-guard.ts @@ -0,0 +1,30 @@ +import { ExecutionContext, Injectable } from '@nestjs/common'; +import { APP_GUARD, Reflector } from '@nestjs/core'; +import { AuthGuard } from '@nestjs/passport'; +import { Request } from 'express'; +import { Observable } from 'rxjs'; +import { PUBLICK_KEY } from './jwt-decorator'; + +@Injectable() +export class JwtAuthGuard extends AuthGuard('jwt') { + constructor(private reflector: Reflector) { + super(); + } + + canActivate(context: ExecutionContext): boolean | Promise | Observable { + const metadata = [context.getClass(), context.getHandler()]; + const isPublic = this.reflector.getAllAndOverride(PUBLICK_KEY, metadata); + + const routeMethod = context.switchToHttp().getRequest().method; + + if (routeMethod === 'GET' && isPublic !== false) return true; + + if (isPublic) return true; + return super.canActivate(context); + } +} + +export const AppJwtGuard = { + provide: APP_GUARD, + useClass: JwtAuthGuard, +}; diff --git a/src/modules/auth/jwt/jwt-module.ts b/src/modules/auth/jwt/jwt-module.ts new file mode 100644 index 0000000..53dd644 --- /dev/null +++ b/src/modules/auth/jwt/jwt-module.ts @@ -0,0 +1,8 @@ +import { JwtModule as Jwt } from '@nestjs/jwt'; + +export const JwtModule = Jwt.register({ + secret: 'secret', + signOptions: { + expiresIn: '60000s', + }, +}); diff --git a/src/modules/auth/jwt/jwt-service.ts b/src/modules/auth/jwt/jwt-service.ts new file mode 100644 index 0000000..1e27755 --- /dev/null +++ b/src/modules/auth/jwt/jwt-service.ts @@ -0,0 +1,18 @@ +import { Injectable } from '@nestjs/common'; +import { PassportStrategy } from '@nestjs/passport'; +import { ExtractJwt, Strategy } from 'passport-jwt'; + +@Injectable() +export class JwtAuthService extends PassportStrategy(Strategy) { + constructor() { + super({ + jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), + ignoreExpiration: false, + secretOrKey: 'dsfsfs', + }); + } + + async validate({ id, username }) { + return { id, username }; + } +} diff --git a/src/modules/auth/local/index.ts b/src/modules/auth/local/index.ts new file mode 100644 index 0000000..8e1cc3b --- /dev/null +++ b/src/modules/auth/local/index.ts @@ -0,0 +1,3 @@ +export * from './local-guard'; +export * from './local-service'; +export * from './local.dto'; diff --git a/src/modules/auth/local/local-guard.ts b/src/modules/auth/local/local-guard.ts new file mode 100644 index 0000000..ccf962b --- /dev/null +++ b/src/modules/auth/local/local-guard.ts @@ -0,0 +1,5 @@ +import { Injectable } from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; + +@Injectable() +export class LocalAuthGuard extends AuthGuard('local') {} diff --git a/src/modules/auth/local/local-service.ts b/src/modules/auth/local/local-service.ts new file mode 100644 index 0000000..a7c046b --- /dev/null +++ b/src/modules/auth/local/local-service.ts @@ -0,0 +1,22 @@ +import { Injectable, UnauthorizedException } from '@nestjs/common'; +import { PassportStrategy } from '@nestjs/passport'; +import { Strategy } from 'passport-local'; +import { UserService } from 'src/modules/user/user.service'; + +@Injectable() +export class LocalAuthService extends PassportStrategy(Strategy) { + constructor(private readonly userService: UserService) { + super(); + } + + async validate(username: string, password: string): Promise { + const user = await this.userService.findOne({ username }); + if (!user) { + throw new UnauthorizedException('用户名不存在'); + } + if (user.password !== password) { + throw new UnauthorizedException('密码错误'); + } + return true; + } +} diff --git a/src/modules/auth/local/local.dto.ts b/src/modules/auth/local/local.dto.ts new file mode 100644 index 0000000..3505b79 --- /dev/null +++ b/src/modules/auth/local/local.dto.ts @@ -0,0 +1,15 @@ +import { IsString } from 'class-validator'; + +export class LocalAuthDto { + /** + * 用户名 + * @example admin + */ + @IsString() + username: string; + /** + * 用户密码 + * @example 123456 + */ + password: string; +} diff --git a/src/modules/index.ts b/src/modules/index.ts new file mode 100644 index 0000000..a0032eb --- /dev/null +++ b/src/modules/index.ts @@ -0,0 +1,2 @@ +export * from './auth'; +export * from './user'; diff --git a/src/modules/post/dto/create-post.dto.ts b/src/modules/post/dto/create-post.dto.ts new file mode 100644 index 0000000..1a2b3c5 --- /dev/null +++ b/src/modules/post/dto/create-post.dto.ts @@ -0,0 +1 @@ +export class CreatePostDto {} diff --git a/src/modules/post/dto/update-post.dto.ts b/src/modules/post/dto/update-post.dto.ts new file mode 100644 index 0000000..7545cd5 --- /dev/null +++ b/src/modules/post/dto/update-post.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreatePostDto } from './create-post.dto'; + +export class UpdatePostDto extends PartialType(CreatePostDto) {} diff --git a/src/modules/post/entities/post.entity.ts b/src/modules/post/entities/post.entity.ts new file mode 100644 index 0000000..4bd702c --- /dev/null +++ b/src/modules/post/entities/post.entity.ts @@ -0,0 +1,31 @@ +import { BaseEntity } from 'src/features'; +import { User } from 'src/modules/user'; +import { Column, Entity, ManyToMany } from 'typeorm'; + +@Entity() +export class Post extends BaseEntity { + /** + * 文章标题 + * @example '文章标题' + */ + @Column() + title: string; + /** + * 文章描述 + * @example '文章描述' + */ + @Column() + description: string; + /** + * 文章内容 + * @example '文章内容' + */ + @Column() + content: string; + /** + * 文章作者 + * @example '文章作者' + */ + @ManyToMany(() => User, (user) => user.posts) + author: User; +} diff --git a/src/modules/post/post.controller.ts b/src/modules/post/post.controller.ts new file mode 100644 index 0000000..5a597c6 --- /dev/null +++ b/src/modules/post/post.controller.ts @@ -0,0 +1,34 @@ +import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'; +import { PostService } from './post.service'; +import { CreatePostDto } from './dto/create-post.dto'; +import { UpdatePostDto } from './dto/update-post.dto'; + +@Controller('post') +export class PostController { + constructor(private readonly postService: PostService) {} + + @Post() + create(@Body() createPostDto: CreatePostDto) { + return this.postService.create(createPostDto); + } + + @Get() + findAll() { + return this.postService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string) { + return this.postService.findOne(+id); + } + + @Patch(':id') + update(@Param('id') id: string, @Body() updatePostDto: UpdatePostDto) { + return this.postService.update(+id, updatePostDto); + } + + @Delete(':id') + remove(@Param('id') id: string) { + return this.postService.remove(+id); + } +} diff --git a/src/modules/post/post.module.ts b/src/modules/post/post.module.ts new file mode 100644 index 0000000..0709e45 --- /dev/null +++ b/src/modules/post/post.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Post } from './entities/post.entity'; +import { PostController } from './post.controller'; +import { PostService } from './post.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([Post])], + controllers: [PostController], + providers: [PostService], +}) +export class PostModule {} diff --git a/src/modules/post/post.service.ts b/src/modules/post/post.service.ts new file mode 100644 index 0000000..61a0dbe --- /dev/null +++ b/src/modules/post/post.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@nestjs/common'; +import { CreatePostDto } from './dto/create-post.dto'; +import { UpdatePostDto } from './dto/update-post.dto'; + +@Injectable() +export class PostService { + create(createPostDto: CreatePostDto) { + return 'This action adds a new post'; + } + + findAll() { + return `This action returns all post`; + } + + findOne(id: number) { + return `This action returns a #${id} post`; + } + + update(id: number, updatePostDto: UpdatePostDto) { + return `This action updates a #${id} post`; + } + + remove(id: number) { + return `This action removes a #${id} post`; + } +} diff --git a/src/modules/role/dto/create-role.dto.ts b/src/modules/role/dto/create-role.dto.ts new file mode 100644 index 0000000..3044c2b --- /dev/null +++ b/src/modules/role/dto/create-role.dto.ts @@ -0,0 +1 @@ +export class CreateRoleDto {} diff --git a/src/modules/role/dto/update-role.dto.ts b/src/modules/role/dto/update-role.dto.ts new file mode 100644 index 0000000..450134d --- /dev/null +++ b/src/modules/role/dto/update-role.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateRoleDto } from './create-role.dto'; + +export class UpdateRoleDto extends PartialType(CreateRoleDto) {} diff --git a/src/modules/role/entities/role.entity.ts b/src/modules/role/entities/role.entity.ts new file mode 100644 index 0000000..79d020e --- /dev/null +++ b/src/modules/role/entities/role.entity.ts @@ -0,0 +1,11 @@ +import { User } from 'src/modules/user'; +import { Entity, ManyToMany, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity() +export class Role { + @PrimaryGeneratedColumn() + id: number; + + @ManyToMany(() => User, (user) => user.roles) + user: User; +} diff --git a/src/modules/role/role.controller.ts b/src/modules/role/role.controller.ts new file mode 100644 index 0000000..3f8352e --- /dev/null +++ b/src/modules/role/role.controller.ts @@ -0,0 +1,36 @@ +import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; +import { CreateRoleDto } from './dto/create-role.dto'; +import { UpdateRoleDto } from './dto/update-role.dto'; +import { RoleService } from './role.service'; + +@ApiTags('role') +@Controller('role') +export class RoleController { + constructor(private readonly roleService: RoleService) {} + + @Post() + create(@Body() createRoleDto: CreateRoleDto) { + return this.roleService.create(createRoleDto); + } + + @Get() + findAll() { + return this.roleService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string) { + return this.roleService.findOne(+id); + } + + @Patch(':id') + update(@Param('id') id: string, @Body() updateRoleDto: UpdateRoleDto) { + return this.roleService.update(+id, updateRoleDto); + } + + @Delete(':id') + remove(@Param('id') id: string) { + return this.roleService.remove(+id); + } +} diff --git a/src/modules/role/role.module.ts b/src/modules/role/role.module.ts new file mode 100644 index 0000000..b7b90a1 --- /dev/null +++ b/src/modules/role/role.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Role } from './entities/role.entity'; +import { RoleController } from './role.controller'; +import { RoleService } from './role.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([Role])], + controllers: [RoleController], + providers: [RoleService], +}) +export class RoleModule {} diff --git a/src/modules/role/role.service.ts b/src/modules/role/role.service.ts new file mode 100644 index 0000000..d2da7d9 --- /dev/null +++ b/src/modules/role/role.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@nestjs/common'; +import { CreateRoleDto } from './dto/create-role.dto'; +import { UpdateRoleDto } from './dto/update-role.dto'; + +@Injectable() +export class RoleService { + create(createRoleDto: CreateRoleDto) { + return 'This action adds a new role'; + } + + findAll() { + return `This action returns all role`; + } + + findOne(id: number) { + return `This action returns a #${id} role`; + } + + update(id: number, updateRoleDto: UpdateRoleDto) { + return `This action updates a #${id} role`; + } + + remove(id: number) { + return `This action removes a #${id} role`; + } +} diff --git a/src/modules/upload/dto/create-upload.dto.ts b/src/modules/upload/dto/create-upload.dto.ts new file mode 100644 index 0000000..b9ec6cd --- /dev/null +++ b/src/modules/upload/dto/create-upload.dto.ts @@ -0,0 +1 @@ +export class CreateUploadDto {} diff --git a/src/modules/upload/dto/update-upload.dto.ts b/src/modules/upload/dto/update-upload.dto.ts new file mode 100644 index 0000000..c537d36 --- /dev/null +++ b/src/modules/upload/dto/update-upload.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateUploadDto } from './create-upload.dto'; + +export class UpdateUploadDto extends PartialType(CreateUploadDto) {} diff --git a/src/modules/upload/entities/upload.entity.ts b/src/modules/upload/entities/upload.entity.ts new file mode 100644 index 0000000..7a16e0f --- /dev/null +++ b/src/modules/upload/entities/upload.entity.ts @@ -0,0 +1,46 @@ +import { BaseEntity, Column, Entity } from 'typeorm'; + +@Entity() +export class Upload extends BaseEntity { + /** + * 文件大小 + * @example 1024 + */ + @Column({ comment: '文件大小' }) + size: number; + + /** + * 文件名 + * @example "xxx.jpg" + */ + @Column({ comment: '文件名' }) + name: string; + + /** + * 文件类型 + * @example "image/jpeg" + */ + @Column({ comment: '文件类型' }) + mimetype: string; + + /** + * 文件路径 + * @example "upload/2021/10/01/xxx.jpg" + */ + @Column({ comment: '文件路径' }) + path: string; + + /** + * 文件哈希 + * @example "xxx" + */ + @Column({ comment: '文件哈希' }) + hash: string; + + /** + * 文件后缀 + * @example ".jpg" + */ + @Column({ comment: '文件后缀' }) + ext: string; +} diff --git a/src/modules/upload/upload.controller.ts b/src/modules/upload/upload.controller.ts new file mode 100644 index 0000000..a1e7f3f --- /dev/null +++ b/src/modules/upload/upload.controller.ts @@ -0,0 +1,40 @@ +import { Body, Controller, Delete, Get, Param, Patch, Post, UploadedFile, UseInterceptors } from '@nestjs/common'; +import { ApiOperation, ApiTags } from '@nestjs/swagger'; +import { CreateUploadDto } from './dto/create-upload.dto'; +import { UpdateUploadDto } from './dto/update-upload.dto'; +import { UploadService } from './upload.service'; +import { FileInterceptor } from '@nestjs/platform-express'; + +@ApiTags('upload') +@Controller('upload') +export class UploadController { + constructor(private readonly uploadService: UploadService) {} + + @Post() + @UseInterceptors(FileInterceptor('file')) + @ApiOperation({ summary: '上传文件', operationId: 'upload' }) + create(@Body() createUploadDto: CreateUploadDto, @UploadedFile() file: Express.Multer.File) { + file.filename; + return this.uploadService.create(createUploadDto); + } + + @Get() + findAll() { + return this.uploadService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string) { + return this.uploadService.findOne(+id); + } + + @Patch(':id') + update(@Param('id') id: string, @Body() updateUploadDto: UpdateUploadDto) { + return this.uploadService.update(+id, updateUploadDto); + } + + @Delete(':id') + remove(@Param('id') id: string) { + return this.uploadService.remove(+id); + } +} diff --git a/src/modules/upload/upload.module.ts b/src/modules/upload/upload.module.ts new file mode 100644 index 0000000..0ea0aa3 --- /dev/null +++ b/src/modules/upload/upload.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { UploadController } from './upload.controller'; +import { UploadService } from './upload.service'; + +@Module({ + imports: [], + controllers: [UploadController], + providers: [UploadService], +}) +export class UploadModule {} diff --git a/src/modules/upload/upload.service.ts b/src/modules/upload/upload.service.ts new file mode 100644 index 0000000..51b6b63 --- /dev/null +++ b/src/modules/upload/upload.service.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@nestjs/common'; +import { CreateUploadDto } from './dto/create-upload.dto'; +import { UpdateUploadDto } from './dto/update-upload.dto'; + +@Injectable() +export class UploadService { + constructor() { + console; + } + + create(createUploadDto: CreateUploadDto) { + return 'This action adds a new upload'; + } + + findAll() { + return `This action returns all upload`; + } + + findOne(id: number) { + return `This action returns a #${id} upload`; + } + + update(id: number, updateUploadDto: UpdateUploadDto) { + return `This action updates a #${id} upload`; + } + + remove(id: number) { + return `This action removes a #${id} upload`; + } +} diff --git a/src/modules/user/dto/create-user.dto.ts b/src/modules/user/dto/create-user.dto.ts new file mode 100644 index 0000000..5a28376 --- /dev/null +++ b/src/modules/user/dto/create-user.dto.ts @@ -0,0 +1,16 @@ +import { IsOptional, IsString } from 'class-validator'; + +export class CreateUserDto { + @IsString({ message: '用户名不能为空' }) + username: string; + + @IsString() + password: string; + + @IsString() + nickname: string; + + @IsString() + @IsOptional() + avatar: string; +} diff --git a/src/modules/user/dto/find-user.dto.ts b/src/modules/user/dto/find-user.dto.ts new file mode 100644 index 0000000..c295d0c --- /dev/null +++ b/src/modules/user/dto/find-user.dto.ts @@ -0,0 +1,8 @@ +import { IntersectionType } from '@nestjs/swagger'; +import { IsString } from 'class-validator'; +import { paginationDto } from 'src/features'; + +export class FindUserDto extends IntersectionType(paginationDto) { + @IsString() + name: string; +} diff --git a/src/modules/user/dto/index.ts b/src/modules/user/dto/index.ts new file mode 100644 index 0000000..9375b1b --- /dev/null +++ b/src/modules/user/dto/index.ts @@ -0,0 +1,2 @@ +export * from './create-user.dto'; +export * from './update-user.dto'; diff --git a/src/modules/user/dto/update-user.dto.ts b/src/modules/user/dto/update-user.dto.ts new file mode 100644 index 0000000..78ab602 --- /dev/null +++ b/src/modules/user/dto/update-user.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateUserDto } from './create-user.dto'; + +export class UpdateUserDto extends PartialType(CreateUserDto) {} diff --git a/src/modules/user/entities/index.ts b/src/modules/user/entities/index.ts new file mode 100644 index 0000000..e4aa507 --- /dev/null +++ b/src/modules/user/entities/index.ts @@ -0,0 +1 @@ +export * from './user.entity'; diff --git a/src/modules/user/entities/user.entity.ts b/src/modules/user/entities/user.entity.ts new file mode 100644 index 0000000..6c627b6 --- /dev/null +++ b/src/modules/user/entities/user.entity.ts @@ -0,0 +1,58 @@ +import { ApiHideProperty } from '@nestjs/swagger'; +import { Exclude } from 'class-transformer'; +import { BaseEntity } from 'src/features'; +import { Post } from 'src/modules/post/entities/post.entity'; +import { Role } from 'src/modules/role/entities/role.entity'; +import { Column, Entity, ManyToMany } from 'typeorm'; + +@Entity() +export class User extends BaseEntity { + /** + * 用户文章 + */ + @ApiHideProperty() + @ManyToMany(() => Post, (post) => post.author) + posts: Post[]; + + /** + * 用户角色 + */ + @ManyToMany(() => Role, (role) => role.user) + roles: Role[]; + + /** + * 登录账号 + * @example 'juetan' + */ + @Column({ length: 48 }) + username: string; + + /** + * 用户昵称 + * @example '绝弹' + */ + @Column({ length: 48 }) + nickname: string; + + /** + * 用户介绍 + * @example '这个人很懒, 什么也没有留下!' + */ + @Column({ default: '这个人很懒, 什么也没有留下!' }) + description: string; + + /** + * 用户头像(URL) + * @example './assets/222421415123.png ' + */ + @Column({ nullable: true }) + avatar: string; + + /** + * 用户密码 + * @example 'password' + */ + @Exclude() + @Column({ length: 64 }) + password: string; +} diff --git a/src/modules/user/index.ts b/src/modules/user/index.ts new file mode 100644 index 0000000..c79ecff --- /dev/null +++ b/src/modules/user/index.ts @@ -0,0 +1,5 @@ +export * from './dto'; +export * from './entities'; +export * from './user.controller'; +export * from './user.module'; +export * from './user.service'; diff --git a/src/modules/user/user.controller.ts b/src/modules/user/user.controller.ts new file mode 100644 index 0000000..e101ee8 --- /dev/null +++ b/src/modules/user/user.controller.ts @@ -0,0 +1,67 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + Patch, + Post, + Query, + UploadedFile, + UseInterceptors, + Version, +} from '@nestjs/common'; +import { FileInterceptor } from '@nestjs/platform-express'; +import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; +import { BaseController, Pagination } from 'src/features'; +import { Public } from '../auth/jwt'; +import { CreateUserDto, UpdateUserDto } from './dto'; +import { FindUserDto } from './dto/find-user.dto'; +import { User } from './entities'; +import { UserService } from './user.service'; + +@ApiTags('user') +@Controller('users') +export class UserController extends BaseController { + constructor(private userService: UserService) { + super(); + } + + @UseInterceptors(FileInterceptor('avatar')) + @Post() + @ApiOperation({ summary: '创建用户', operationId: 'createUser' }) + create(@Body() createUserDto: CreateUserDto, @UploadedFile() file: Express.Multer.File) { + createUserDto.avatar = `upload/${file.filename}`; + console.log(createUserDto, file); + return this.userService.create(createUserDto); + } + + @Public() + @Get() + @ApiOkResponse({ isArray: true, type: User }) + @ApiOperation({ summary: '批量查询', operationId: 'selectUsers' }) + async findMany(@Query() query: FindUserDto) { + const [data, total] = await this.userService.findAll(query); + const { page, size } = query; + return Pagination.wrap({ page, size, total, data }); + } + + @Version('2') + @Get(':id') + @ApiOperation({ summary: '查询用户', operationId: 'selectUserv2' }) + findOne(@Param('id') id: number) { + return this.userService.findOne(+id); + } + + @Patch(':id') + @ApiOperation({ summary: '更新用户', operationId: 'updateUser' }) + update(@Param('id') id: number, @Body() updateUserDto: UpdateUserDto) { + return this.userService.update(+id, updateUserDto); + } + + @Delete(':id') + @ApiOperation({ summary: '删除用户', operationId: 'deleteUser' }) + remove(@Param('id') id: number) { + return this.userService.remove(+id); + } +} diff --git a/src/modules/user/user.module.ts b/src/modules/user/user.module.ts new file mode 100644 index 0000000..fc5c29f --- /dev/null +++ b/src/modules/user/user.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { User } from './entities'; +import { UserController } from './user.controller'; +import { UserService } from './user.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([User])], + controllers: [UserController], + providers: [UserService], + exports: [UserService], +}) +export class UserModule {} diff --git a/src/modules/user/user.service.ts b/src/modules/user/user.service.ts new file mode 100644 index 0000000..6fb4e7c --- /dev/null +++ b/src/modules/user/user.service.ts @@ -0,0 +1,59 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Pagination } from 'src/features'; +import { Repository } from 'typeorm'; +import { CreateUserDto, UpdateUserDto } from './dto'; +import { FindUserDto } from './dto/find-user.dto'; +import { User } from './entities'; + +@Injectable() +export class UserService { + constructor(@InjectRepository(User) private userRepository: Repository) {} + + /** + * 创建用户 + */ + async create(createUserDto: CreateUserDto) { + console.log(createUserDto); + const user = this.userRepository.create(createUserDto); + await this.userRepository.save(user); + return user.id; + } + + /** + * 查找所有用户 + */ + async findAll(dto: FindUserDto) { + const options = Pagination.optionize(dto); + return this.userRepository.findAndCount({ ...options, order: { createdAt: 'DESC' } }); + } + + /** + * 根据id查找用户 + */ + findOne(idOrOptions: number | Partial) { + const where = typeof idOrOptions === 'number' ? { id: idOrOptions } : idOrOptions; + return this.userRepository.findOne({ where }); + } + + /** + * 根据用户id + */ + update(id: number, updateUserDto: UpdateUserDto) { + return this.userRepository.update(id, updateUserDto); + } + + /** + * 根据id删除用户 + */ + remove(id: number) { + return this.userRepository.softDelete(id); + } + + /** + * 根据用户名查找用户 + */ + find(username: string) { + return this.userRepository.findOne({ where: { username } }); + } +} diff --git a/src/types/env.d.ts b/src/types/env.d.ts new file mode 100644 index 0000000..3bd3b6a --- /dev/null +++ b/src/types/env.d.ts @@ -0,0 +1,20 @@ +declare namespace NodeJS { + interface ProcessEnv { + /** + * 运行端口 + */ + SERVER_PORT: number; + /** + * 运行IP + */ + SERVER_HOST: string; + /** + * 项目根目录路径 + */ + ROOT_PATH: string; + /** + * 环境变量 + */ + NODE_ENV: 'development' | 'production' | 'test'; + } +} diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..64f86c6 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..91183b2 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "target": "es2017", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, + "skipLibCheck": true, + "strictNullChecks": false, + "noImplicitAny": false, + "strictBindCallApply": false, + "forceConsistentCasingInFileNames": false, + "noFallthroughCasesInSwitch": false, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "paths": { + "modules": ["./src/modules"] + } + } +} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..3fa26e1 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,3 @@ +module.exports = (config) => { + return config; +};