From 213f5c472f818183f0615a530b0ece8671695b4a Mon Sep 17 00:00:00 2001 From: Manoj K Date: Tue, 8 Aug 2023 23:09:16 -0700 Subject: [PATCH 1/3] add: zendesk ticketing integration --- integrations/ticketing/zendesk/.eslintignore | 3 + integrations/ticketing/zendesk/.eslintrc | 83 + integrations/ticketing/zendesk/.gitignore | 32 + integrations/ticketing/zendesk/.prettierrc | 22 + integrations/ticketing/zendesk/README.md | 44 + integrations/ticketing/zendesk/package.json | 65 + integrations/ticketing/zendesk/public/test.js | 24 + .../ticketing/zendesk/rollup.config.mjs | 43 + integrations/ticketing/zendesk/src/common.ts | 55 + integrations/ticketing/zendesk/src/index.ts | 139 + .../src/models/accounts/account.interface.ts | 63 + .../src/models/accounts/account.path.ts | 55 + .../src/models/accounts/account.utils.ts | 15 + .../src/models/accounts/accounts.path.ts | 58 + .../src/models/comment/comment.interface.ts | 41 + .../src/models/comment/comment.utils.ts | 20 + .../src/models/comment/comments.path.ts | 69 + .../zendesk/src/models/tag/tag.interface.ts | 27 + .../zendesk/src/models/tag/tag.utils.ts | 20 + .../zendesk/src/models/tag/tags.path.ts | 42 + .../zendesk/src/models/team/team.interface.ts | 38 + .../zendesk/src/models/team/team.path.ts | 42 + .../zendesk/src/models/team/team.utils.ts | 22 + .../zendesk/src/models/team/teams.path.ts | 50 + .../src/models/ticket/ticket.interface.ts | 61 + .../zendesk/src/models/ticket/ticket.path.ts | 60 + .../zendesk/src/models/ticket/ticket.utils.ts | 61 + .../zendesk/src/models/ticket/tickets.path.ts | 77 + .../zendesk/src/models/user/user.interface.ts | 40 + .../zendesk/src/models/user/user.path.ts | 36 + .../zendesk/src/models/user/user.utils.ts | 17 + .../zendesk/src/models/user/users.path.ts | 49 + integrations/ticketing/zendesk/src/proxy.ts | 27 + integrations/ticketing/zendesk/src/spec.ts | 64 + integrations/ticketing/zendesk/tsconfig.json | 31 + integrations/ticketing/zendesk/yarn.lock | 3289 +++++++++++++++++ 36 files changed, 4884 insertions(+) create mode 100644 integrations/ticketing/zendesk/.eslintignore create mode 100644 integrations/ticketing/zendesk/.eslintrc create mode 100644 integrations/ticketing/zendesk/.gitignore create mode 100644 integrations/ticketing/zendesk/.prettierrc create mode 100644 integrations/ticketing/zendesk/README.md create mode 100644 integrations/ticketing/zendesk/package.json create mode 100644 integrations/ticketing/zendesk/public/test.js create mode 100644 integrations/ticketing/zendesk/rollup.config.mjs create mode 100644 integrations/ticketing/zendesk/src/common.ts create mode 100644 integrations/ticketing/zendesk/src/index.ts create mode 100644 integrations/ticketing/zendesk/src/models/accounts/account.interface.ts create mode 100644 integrations/ticketing/zendesk/src/models/accounts/account.path.ts create mode 100644 integrations/ticketing/zendesk/src/models/accounts/account.utils.ts create mode 100644 integrations/ticketing/zendesk/src/models/accounts/accounts.path.ts create mode 100644 integrations/ticketing/zendesk/src/models/comment/comment.interface.ts create mode 100644 integrations/ticketing/zendesk/src/models/comment/comment.utils.ts create mode 100644 integrations/ticketing/zendesk/src/models/comment/comments.path.ts create mode 100644 integrations/ticketing/zendesk/src/models/tag/tag.interface.ts create mode 100644 integrations/ticketing/zendesk/src/models/tag/tag.utils.ts create mode 100644 integrations/ticketing/zendesk/src/models/tag/tags.path.ts create mode 100644 integrations/ticketing/zendesk/src/models/team/team.interface.ts create mode 100644 integrations/ticketing/zendesk/src/models/team/team.path.ts create mode 100644 integrations/ticketing/zendesk/src/models/team/team.utils.ts create mode 100644 integrations/ticketing/zendesk/src/models/team/teams.path.ts create mode 100644 integrations/ticketing/zendesk/src/models/ticket/ticket.interface.ts create mode 100644 integrations/ticketing/zendesk/src/models/ticket/ticket.path.ts create mode 100644 integrations/ticketing/zendesk/src/models/ticket/ticket.utils.ts create mode 100644 integrations/ticketing/zendesk/src/models/ticket/tickets.path.ts create mode 100644 integrations/ticketing/zendesk/src/models/user/user.interface.ts create mode 100644 integrations/ticketing/zendesk/src/models/user/user.path.ts create mode 100644 integrations/ticketing/zendesk/src/models/user/user.utils.ts create mode 100644 integrations/ticketing/zendesk/src/models/user/users.path.ts create mode 100644 integrations/ticketing/zendesk/src/proxy.ts create mode 100644 integrations/ticketing/zendesk/src/spec.ts create mode 100644 integrations/ticketing/zendesk/tsconfig.json create mode 100644 integrations/ticketing/zendesk/yarn.lock diff --git a/integrations/ticketing/zendesk/.eslintignore b/integrations/ticketing/zendesk/.eslintignore new file mode 100644 index 00000000..46d3cd68 --- /dev/null +++ b/integrations/ticketing/zendesk/.eslintignore @@ -0,0 +1,3 @@ +/**/*.js + +zendesk/ diff --git a/integrations/ticketing/zendesk/.eslintrc b/integrations/ticketing/zendesk/.eslintrc new file mode 100644 index 00000000..ca3b702f --- /dev/null +++ b/integrations/ticketing/zendesk/.eslintrc @@ -0,0 +1,83 @@ +{ + "extends": ["plugin:@typescript-eslint/recommended", "prettier", "plugin:prettier/recommended"], + "plugins": ["@typescript-eslint", "prettier", "unused-imports", "notice", "import"], + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "ecmaFeatures": { + "jsx": true + } + }, + "rules": { + "curly": "warn", + "dot-location": "warn", + "eqeqeq": "error", + "prettier/prettier": "warn", + "unused-imports/no-unused-imports": "warn", + "no-else-return": "warn", + "no-lonely-if": "warn", + "no-inner-declarations": "off", + "no-unused-vars": "off", + "no-useless-computed-key": "warn", + "no-useless-return": "warn", + "no-var": "warn", + "object-shorthand": ["warn", "always"], + "prefer-arrow-callback": "warn", + "prefer-const": "warn", + "prefer-destructuring": ["warn", { "AssignmentExpression": { "array": true } }], + "prefer-object-spread": "warn", + "prefer-template": "warn", + "spaced-comment": ["warn", "always", { "markers": ["/"] }], + "yoda": "warn", + "import/order": [ + "warn", + { + "newlines-between": "always", + "groups": ["type", "builtin", "external", "internal", ["parent", "sibling"], "index"], + "pathGroupsExcludedImportTypes": ["builtin"], + "pathGroups": [ + { + "pattern": "models{/**,}", + "group": "internal" + }, + { + "pattern": "+(types){/**,}", + "group": "internal", + "position": "after" + } + ], + "alphabetize": { + "order": "asc" /* sort in ascending order. Options: ['ignore', 'asc', 'desc'] */, + "caseInsensitive": true /* ignore case. Options: [true, false] */ + } + } + ], + "@typescript-eslint/array-type": ["warn", { "default": "array-simple" }], + "@typescript-eslint/ban-ts-comment": [ + "warn", + { + "ts-expect-error": "allow-with-description" + } + ], + "@typescript-eslint/ban-types": "warn", + "@typescript-eslint/consistent-indexed-object-style": ["warn", "record"], + "@typescript-eslint/consistent-type-definitions": ["warn", "interface"], + "@typescript-eslint/no-unused-vars": "warn", + "notice/notice": [ + "error", + { + "mustMatch": "Copyright \\(c\\) [0-9]{0,4}, Poozle, all rights reserved.", + "template": "/** Copyright (c) <%= YEAR %>, Poozle, all rights reserved. **/\n\n" + } + ] + }, + "parser": "@typescript-eslint/parser", + "overrides": [ + { + "files": ["scripts/**/*"], + "rules": { + "@typescript-eslint/no-var-requires": "off" + } + } + ] +} diff --git a/integrations/ticketing/zendesk/.gitignore b/integrations/ticketing/zendesk/.gitignore new file mode 100644 index 00000000..aec3d811 --- /dev/null +++ b/integrations/ticketing/zendesk/.gitignore @@ -0,0 +1,32 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.pnp.* + +zendesk/ + +node_modules/ \ No newline at end of file diff --git a/integrations/ticketing/zendesk/.prettierrc b/integrations/ticketing/zendesk/.prettierrc new file mode 100644 index 00000000..b61e355b --- /dev/null +++ b/integrations/ticketing/zendesk/.prettierrc @@ -0,0 +1,22 @@ +{ + "arrowParens": "always", + "tabWidth": 2, + "useTabs": false, + "semi": true, + "bracketSpacing": true, + "jsxBracketSameLine": false, + "requirePragma": false, + "proseWrap": "preserve", + "singleQuote": true, + "formatOnSave": true, + "trailingComma": "all", + "printWidth": 100, + "overrides": [ + { + "files": ".prettierrc", + "options": { + "parser": "json" + } + } + ] +} diff --git a/integrations/ticketing/zendesk/README.md b/integrations/ticketing/zendesk/README.md new file mode 100644 index 00000000..c208c23c --- /dev/null +++ b/integrations/ticketing/zendesk/README.md @@ -0,0 +1,44 @@ +# Zendesk Readme + +This is the repository for the Zendesk integration, written in Typescript. + +### Prerequisites + +**To iterate on this connector, make sure to complete this prerequisites section.** + +#### Install dependencies + +From this integration directory, run the following command: + +```js +yarn; +``` + +This will install all the necessary dependencies for the integration. + +### Locally running the connector + +As we are still making the integration creation process better this is still a series of steps to test things out. We want to create a test suite to test certain key flows automatically. + +1. Run `yarn build` command to build the integration which will create a file `zendesk/index.js` which is the compiled + version of the complete integration + +2. We already have a test file `public/test.js` where you can write multiple testcases to test the functionality of the integration. + +Examples: + +``` +main('SPEC', {}) + +main('CHECK', { + config: { + // Pass credentials according to configuration + } +}) +``` + +In case you need help reach us out in Slack. + +### Publishing a new version integration + +You can create a PR in our repo and we will take care of the rest. diff --git a/integrations/ticketing/zendesk/package.json b/integrations/ticketing/zendesk/package.json new file mode 100644 index 00000000..cc53b0ea --- /dev/null +++ b/integrations/ticketing/zendesk/package.json @@ -0,0 +1,65 @@ +{ + "name": "@poozle/zendesk", + "version": "0.1.0", + "description": "zendesk extension for Poozle", + "exports": { + ".": { + "types": "./zendesk", + "require": "./zendesk/index.js" + } + }, + "package": "./zendesk/index.js", + "types": "./zendesk", + "files": [ + "zendesk" + ], + "scripts": { + "build": "rimraf zendesk && npm run build:js", + "build:js": "rollup -c", + "lint": "eslint --ext js,ts,tsx src", + "prettier": "prettier --config .prettierrc --write ." + }, + "devDependencies": { + "@babel/core": "^7.18.2", + "@babel/preset-env": "^7.18.2", + "@babel/preset-typescript": "^7.17.12", + "@rollup/plugin-babel": "6.0.2", + "@rollup/plugin-commonjs": "^23.0.2", + "@rollup/plugin-json": "^5.0.1", + "@rollup/plugin-node-resolve": "^15.0.1", + "@rollup/plugin-replace": "^5.0.1", + "@typescript-eslint/eslint-plugin": "5.48.2", + "@typescript-eslint/parser": "5.48.2", + "eslint": "^8.24.0", + "eslint-config-prettier": "8.5.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-notice": "^0.9.10", + "eslint-plugin-prettier": "4.2.1", + "eslint-plugin-unused-imports": "^2.0.0", + "prettier": "^2.6.2", + "rimraf": "^3.0.2", + "rollup": "^3.2.3", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.34.0", + "typescript": "^4.7.2" + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@poozle/engine-idk": "^0.1.44", + "axios": "^1.4.0" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/integrations/ticketing/zendesk/public/test.js b/integrations/ticketing/zendesk/public/test.js new file mode 100644 index 00000000..244ed2ef --- /dev/null +++ b/integrations/ticketing/zendesk/public/test.js @@ -0,0 +1,24 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +const { main } = require("../zendesk/index"); + +async function run() { + const response = await main("SPEC", {}); + + console.log(response); + + // const response = await main('RUN', { + // config: { + // + // }, + // path: '/collections', + // method: 'GET', + // params: { + // queryParams: {}, + // }, + // }); + + // console.log(response); +} + +run(); diff --git a/integrations/ticketing/zendesk/rollup.config.mjs b/integrations/ticketing/zendesk/rollup.config.mjs new file mode 100644 index 00000000..b61916da --- /dev/null +++ b/integrations/ticketing/zendesk/rollup.config.mjs @@ -0,0 +1,43 @@ +/** Copyright (c) 2022, Poozle, all rights reserved. **/ + +import { babel } from '@rollup/plugin-babel'; +import commonjs from '@rollup/plugin-commonjs'; +import json from '@rollup/plugin-json'; +import resolve from '@rollup/plugin-node-resolve'; +import { terser } from 'rollup-plugin-terser'; +import typescript from 'rollup-plugin-typescript2'; + +import pkg from './package.json' assert { type: 'json' }; + +const extensions = ['.js', '.jsx', '.ts', '.tsx']; + +const plugins = [ + json(), + resolve({ extensions }), + commonjs({ + include: /\/node_modules\//, + }), + typescript(), + babel({ + extensions, + presets: [], + }), + terser(), +]; + +export default [ + { + input: 'src/index.ts', + external: [], + output: [ + { + file: pkg.package, + sourcemap: true, + format: 'cjs', + exports: 'named', + preserveModules: false, + }, + ], + plugins, + }, +]; diff --git a/integrations/ticketing/zendesk/src/common.ts b/integrations/ticketing/zendesk/src/common.ts new file mode 100644 index 00000000..e99031b3 --- /dev/null +++ b/integrations/ticketing/zendesk/src/common.ts @@ -0,0 +1,55 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { Config } from '@poozle/engine-idk'; + +export const BASE_URL = 'GIVE_BASE_URL'; + +export interface Meta { + previous: string; + next: string; + current: string; +} + +export function getMetaParams(data: any, current_page: string): Meta { + return { + previous: '', + current: current_page, + next: data.end_time.toString() ?? '', + }; +} + +export function convertEpoc(epochTime: string) { + const date = new Date(Number(epochTime)); + return date.toISOString(); +} + +export function convertDatetime(datetime: string) { + const date = new Date(datetime); + return date.getTime() / 1000; +} + +export function getBaseUrl(config: Config): string { + return `https://${config.zendesk_domain}/api/v2`; +} + +function getPage(pageUrl: string, param: string) { + const url = new URL(pageUrl); + const params = new URLSearchParams(url.search); + return params.get(param) ?? ''; +} + +export function getPageMeta(data: any, current_page: string): Meta { + return { + previous: data.previous_page ? getPage(data.previous_page, 'page') : '', + current: current_page, + next: data.previous_page ? getPage(data.next_page, 'page') : '', + }; +} + +export function getCommentMeta(data: any, current_page: string): Meta { + return { + previous: data.previous_page ? getPage(data.previous_page, 'page') : '', + current: current_page, + next: data.previous_page ? getPage(data.next_page, 'page') : '', + }; +} diff --git a/integrations/ticketing/zendesk/src/index.ts b/integrations/ticketing/zendesk/src/index.ts new file mode 100644 index 00000000..1f5ecb76 --- /dev/null +++ b/integrations/ticketing/zendesk/src/index.ts @@ -0,0 +1,139 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { + BaseIntegration, + CheckResponse, + Config, + getAccessToken, + interpolateString, + SpecificationResponse, +} from '@poozle/engine-idk'; +import axios from 'axios'; +import { ProxyPath } from 'proxy'; + +import { AccountPath } from 'models/accounts/account.path'; +import { AccountsPath } from 'models/accounts/accounts.path'; +import { CommentsPath } from 'models/comment/comments.path'; +import { TagsPath } from 'models/tag/tags.path'; +import { TeamPath } from 'models/team/team.path'; +import { TeamsPath } from 'models/team/teams.path'; +import { TicketPath } from 'models/ticket/ticket.path'; +import { TicketsPath } from 'models/ticket/tickets.path'; +import { UserPath } from 'models/user/user.path'; +import { UsersPath } from 'models/user/users.path'; + +import spec from './spec'; +import { getBaseUrl } from 'common'; + +class ZendeskIntegration extends BaseIntegration { + async spec(): SpecificationResponse { + return spec; + } + + async authHeaders(config: Config) { + try { + if (config.authType === 'OAuth2') { + const spec = await this.spec(); + const specification = spec.auth_specification['OAuth2']; + const token = await getAccessToken( + interpolateString(specification.token_url as string, config), + config, + ); + + const headers = { + Authorization: `Bearer ${token.access_token}`, + 'refresh-token': token.refresh_token, + expiry: token.expires_in, + }; + + return headers; + } + + return { + Authorization: `Basic ${Buffer.from(`${config.email_id}:${config.api_key}`).toString( + 'base64', + )}`, + }; + } catch (err) { + console.log(err); + return {}; + } + } + + async check(config: Config): CheckResponse { + const headers = (await this.authHeaders(config)) as Record; + + try { + const baseURL = getBaseUrl(config); + + await axios({ + url: `${baseURL}/users/me`, + headers, + }); + + return { + status: true, + error: '', + }; + } catch (e) { + return { + status: false, + error: e.message, + }; + } + } + + paths() { + return [ + /** + * PROXY API calls to the third party directly + */ + new ProxyPath(/^\/?proxy$/g, ['GET', 'POST', 'PATCH', 'DELETE']), + + /** + * TODO: Link to the documentation of the APIS this is mapping to + */ + new AccountsPath(/^\/?accounts$/g, ['GET', 'POST']), + new AccountPath(/^\/?accounts+/g, ['GET', 'PUT']), + + /** + * TODO: Link to the documentation of the APIS this is mapping to + */ + new CommentsPath(/^\/?comments$/g, ['GET', 'POST']), + + /** + * TODO: Link to the documentation of the APIS this is mapping to + */ + new TagsPath(/^\/?tags$/g, ['GET', 'POST']), + + /** + * TODO: Link to the documentation of the APIS this is mapping to + */ + new TeamsPath(/^\/?teams$/g, ['GET', 'POST']), + new TeamPath(/^\/?teams+/g, ['GET', 'PATCH']), + + /** + * TODO: Link to the documentation of the APIS this is mapping to + */ + new TicketsPath(/^\/?tickets$/g, ['GET', 'POST']), + new TicketPath(/^\/?tickets+/g, ['GET', 'PATCH']), + + /** + * TODO: Link to the documentation of the APIS this is mapping to + */ + new UsersPath(/^\/?users$/g, 'GET'), + new UserPath(/^\/?users+/g, 'GET'), + ]; + } +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export async function main(command: string, allParams: any) { + const integration = new ZendeskIntegration(); + + const response = await integration.runCommand(command, allParams); + + return response; +} + +export default main; diff --git a/integrations/ticketing/zendesk/src/models/accounts/account.interface.ts b/integrations/ticketing/zendesk/src/models/accounts/account.interface.ts new file mode 100644 index 00000000..bf3173ed --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/accounts/account.interface.ts @@ -0,0 +1,63 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +// import { Collection } from '@poozle/engine-idk'; +import { Meta } from 'common'; + +export interface AccountWithRaw { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + raw: any; + + id: string; + name: string; + domains: string[]; + created_at: string; + updated_at: string; +} + +export interface AccountsResponse { + data: AccountWithRaw[]; + meta: Meta; +} + +export interface AccountResponse { + data: AccountWithRaw; +} + +export interface GetAccountsParams { + queryParams: { + limit: number; + cursor?: string; + created_after?: string; + }; + pathParams: {}; +} + +export interface GetAccountParams { + queryParams: {}; + pathParams: { + account_id: string; + team_id: string; + }; +} + +export interface CreateAccountParams { + queryParams: {}; + + pathParams: {}; + + requestBody: { + name: string; + }; +} + +export interface updateAccountParams { + queryParams: {}; + + pathParams: { + account_id: string; + }; + + requestBody: { + name: string; + }; +} diff --git a/integrations/ticketing/zendesk/src/models/accounts/account.path.ts b/integrations/ticketing/zendesk/src/models/accounts/account.path.ts new file mode 100644 index 00000000..a001ffbf --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/accounts/account.path.ts @@ -0,0 +1,55 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { BasePath, Config } from '@poozle/engine-idk'; +import axios, { AxiosHeaders } from 'axios'; +import { BASE_URL } from 'common'; + +import { AccountResponse, GetAccountParams, updateAccountParams } from './account.interface'; +import { convertAccount } from './account.utils'; + +export class AccountPath extends BasePath { + async fetchSingleAccount( + url: string, + headers: AxiosHeaders, + _params: GetAccountParams, + ): Promise { + const response = await axios({ + url, + headers, + }); + + return { + data: convertAccount(response.data.group), + }; + } + + async updateAccount( + url: string, + headers: AxiosHeaders, + params: updateAccountParams, + ): Promise { + const response = await axios.put(url, { group: params.requestBody }, { headers }); + + return { data: convertAccount(response.data.group) }; + } + + async run( + method: string, + headers: AxiosHeaders, + params: GetAccountParams | updateAccountParams, + _config: Config, + ) { + const url = `${BASE_URL}/organizations/${params.pathParams.account_id}`; + + switch (method) { + case 'GET': + return this.fetchSingleAccount(url, headers, params as GetAccountParams); + + case 'POST': + return this.updateAccount(url, headers, params as updateAccountParams); + + default: + throw new Error('Method not found'); + } + } +} diff --git a/integrations/ticketing/zendesk/src/models/accounts/account.utils.ts b/integrations/ticketing/zendesk/src/models/accounts/account.utils.ts new file mode 100644 index 00000000..9bb3c5e0 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/accounts/account.utils.ts @@ -0,0 +1,15 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { AccountWithRaw } from './account.interface'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function convertAccount(data: any): AccountWithRaw { + return { + id: data.name, + name: data.name, + domains: data.domain_names, + created_at: data.created_at, + updated_at: data.updated_at, + raw: data, + }; +} diff --git a/integrations/ticketing/zendesk/src/models/accounts/accounts.path.ts b/integrations/ticketing/zendesk/src/models/accounts/accounts.path.ts new file mode 100644 index 00000000..7809fbce --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/accounts/accounts.path.ts @@ -0,0 +1,58 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { BasePath, Config } from '@poozle/engine-idk'; +import axios, { AxiosHeaders } from 'axios'; +import { BASE_URL, getPageMeta } from 'common'; + +import { AccountsResponse, CreateAccountParams, GetAccountsParams } from './account.interface'; +import { convertAccount } from './account.utils'; + +export class AccountsPath extends BasePath { + async fetchAccounts( + url: string, + headers: AxiosHeaders, + params: GetAccountsParams, + ): Promise { + const page = params.queryParams.cursor ? parseInt(params.queryParams.cursor.toString()) : 1; + + const final_params = { + per_page: params.queryParams.limit ?? 10, + page, + }; + + const response = await axios({ + url, + headers, + params: final_params, + }); + + return { + data: response.data.organizations.map((organization: any) => convertAccount(organization)), + meta: getPageMeta(response.data, page.toString()), + }; + } + + async createAccounts(url: string, headers: AxiosHeaders, params: CreateAccountParams) { + const response = await axios.post(url, { organisation: params.requestBody }, { headers }); + + return convertAccount(response.data); + } + async run( + method: string, + headers: AxiosHeaders, + params: GetAccountsParams | CreateAccountParams, + _config: Config, + ) { + const url = `${BASE_URL}/organizations`; + switch (method) { + case 'GET': + return this.fetchAccounts(url, headers, params as GetAccountsParams); + + case 'POST': + return this.createAccounts(url, headers, params as CreateAccountParams); + + default: + throw new Error('Method not found'); + } + } +} diff --git a/integrations/ticketing/zendesk/src/models/comment/comment.interface.ts b/integrations/ticketing/zendesk/src/models/comment/comment.interface.ts new file mode 100644 index 00000000..8af0089d --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/comment/comment.interface.ts @@ -0,0 +1,41 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { Comment, CreateCommentBody } from '@poozle/engine-idk'; +import { Meta } from 'common'; + +export interface CommentWithRaw extends Comment { + raw: any; +} + +export interface CommentsResponse { + data: CommentWithRaw[]; + meta: Meta; +} + +export interface CommentResponse { + data: CommentWithRaw; +} + +export interface GetCommentsParams { + queryParams: { + limit: number; + cursor?: string; + created_after?: string; + }; + + pathParams: { + organization_id: string; + ticket_id: string; + }; +} + +export interface CreateCommentsParams { + queryParams: {}; + + pathParams: { + organization_id: string; + ticket_id: string; + }; + + requestBody: CreateCommentBody; +} diff --git a/integrations/ticketing/zendesk/src/models/comment/comment.utils.ts b/integrations/ticketing/zendesk/src/models/comment/comment.utils.ts new file mode 100644 index 00000000..bbe32a91 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/comment/comment.utils.ts @@ -0,0 +1,20 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { Creator } from '@poozle/engine-idk'; +import { CommentWithRaw } from './comment.interface'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function convertComment(data: any, ticketId: string): CommentWithRaw { + return { + id: data.id, + ticket_id: ticketId, + body: data.body, + html_body: data.html_body, + is_private: !data.public ?? false, + created_by_id: data.author_id, + created_by: {} as Creator, + created_at: data.created_at, + updated_at: '', + raw: data, + }; +} diff --git a/integrations/ticketing/zendesk/src/models/comment/comments.path.ts b/integrations/ticketing/zendesk/src/models/comment/comments.path.ts new file mode 100644 index 00000000..44fa0f03 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/comment/comments.path.ts @@ -0,0 +1,69 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { BasePath, Config } from '@poozle/engine-idk'; +import axios, { AxiosHeaders } from 'axios'; +import { BASE_URL, getPageMeta } from 'common'; + +import { CommentsResponse, CreateCommentsParams, GetCommentsParams } from './comment.interface'; +import { convertComment } from './comment.utils'; + +export class CommentsPath extends BasePath { + async fetchData( + url: string, + headers: AxiosHeaders, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + params: GetCommentsParams, + ): Promise { + const page = params.queryParams?.cursor ? parseInt(params.queryParams?.cursor.toString()) : 1; + + const final_params = { + per_page: params.queryParams?.limit ?? 10, + page, + }; + + const response = await axios({ + url, + headers, + params: final_params, + }); + + return { + data: response.data.comments.map((comment: any) => + convertComment(comment, params.pathParams.ticket_id), + ), + meta: getPageMeta(response.data, page.toString()), + }; + } + + async createComment( + url: string, + headers: AxiosHeaders, + params: CreateCommentsParams, + ): Promise { + const response = await axios.put(url, { comments: params.requestBody }, { headers }); + + return response.data.events.map((comment: any) => + convertComment(comment, params.pathParams.ticket_id), + ); + } + + async run( + method: string, + headers: AxiosHeaders, + params: GetCommentsParams | CreateCommentsParams, + _config: Config, + ) { + let url = `${BASE_URL}/tickets/${params.pathParams.ticket_id}/comments`; + switch (method) { + case 'GET' && params.pathParams?.ticket_id: + return this.fetchData(url, headers, params as GetCommentsParams); + + case 'POST': + url = `${BASE_URL}/tickets/${params.pathParams.ticket_id}`; + return this.createComment(url, headers, params as CreateCommentsParams); + + default: + throw new Error('Unknown method'); + } + } +} diff --git a/integrations/ticketing/zendesk/src/models/tag/tag.interface.ts b/integrations/ticketing/zendesk/src/models/tag/tag.interface.ts new file mode 100644 index 00000000..8acf89e5 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/tag/tag.interface.ts @@ -0,0 +1,27 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { Tag } from '@poozle/engine-idk'; +import { Meta } from 'common'; + +export interface TagWithRaw extends Tag { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + raw: any; +} + +export interface TagsResponse { + data: TagWithRaw[]; + meta: Meta; +} + +export interface TagResponse { + data: TagWithRaw; +} + +export interface GetTeamsParams { + queryParams: { + limit: number; + cursor?: string; + created_after?: string; + }; + pathParams: {}; +} diff --git a/integrations/ticketing/zendesk/src/models/tag/tag.utils.ts b/integrations/ticketing/zendesk/src/models/tag/tag.utils.ts new file mode 100644 index 00000000..dc303789 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/tag/tag.utils.ts @@ -0,0 +1,20 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { TagWithRaw } from './tag.interface'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function convertTag(data: any): TagWithRaw { + return { + id: data.name, + name: data.name, + description: '', + color: '', + raw: data, + }; +} + +export const tagMapping = { + name: 'name', + description: 'description', + color: 'color', +}; diff --git a/integrations/ticketing/zendesk/src/models/tag/tags.path.ts b/integrations/ticketing/zendesk/src/models/tag/tags.path.ts new file mode 100644 index 00000000..ecf07895 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/tag/tags.path.ts @@ -0,0 +1,42 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { BasePath, Config } from '@poozle/engine-idk'; +import axios, { AxiosHeaders } from 'axios'; +import { BASE_URL, getPageMeta } from 'common'; + +import { GetTeamsParams, TagsResponse } from './tag.interface'; +import { convertTag } from './tag.utils'; + +export class TagsPath extends BasePath { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async getTags(url: string, headers: AxiosHeaders, params: GetTeamsParams): Promise { + const page = params.queryParams.cursor ? parseInt(params.queryParams.cursor.toString()) : 1; + + const final_params = { + per_page: params.queryParams?.limit ?? 10, + page, + }; + + const response = await axios({ + url, + headers, + params: final_params, + }); + + return { + data: response.data.tags.map((tag: any) => convertTag(tag)), + meta: getPageMeta(response.data, page.toString()), + }; + } + + async run(method: string, headers: AxiosHeaders, params: GetTeamsParams, _config: Config) { + const url = `${BASE_URL}/tag`; + switch (method) { + case 'GET': + return this.getTags(url, headers, params); + + default: + throw new Error('Method not found'); + } + } +} diff --git a/integrations/ticketing/zendesk/src/models/team/team.interface.ts b/integrations/ticketing/zendesk/src/models/team/team.interface.ts new file mode 100644 index 00000000..00c705a0 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/team/team.interface.ts @@ -0,0 +1,38 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { Team } from '@poozle/engine-idk'; +import { Meta } from 'common'; + +export interface TeamWithRaw extends Team { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + raw: any; + + created_at: string; + updated_at: string; +} + +export interface TeamsResponse { + data: TeamWithRaw[]; + meta: Meta; +} + +export interface TeamResponse { + data: TeamWithRaw; +} + +export interface GetTeamsParams { + queryParams: { + limit: number; + cursor?: string; + created_after?: string; + }; + pathParams: {}; +} + +export interface GetTeamParams { + queryParams: {}; + pathParams: { + organization_id: string; + team_id: string; + }; +} diff --git a/integrations/ticketing/zendesk/src/models/team/team.path.ts b/integrations/ticketing/zendesk/src/models/team/team.path.ts new file mode 100644 index 00000000..ee6d4725 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/team/team.path.ts @@ -0,0 +1,42 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { BasePath, Config, Params } from '@poozle/engine-idk'; +import axios, { AxiosHeaders } from 'axios'; +import { BASE_URL } from 'common'; + +import { GetTeamParams, TeamResponse } from './team.interface'; +import { convertTeam } from './team.utils'; + +export class TeamPath extends BasePath { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async getTeam(url: string, headers: AxiosHeaders, _params: Params): Promise { + const response = await axios({ + url, + headers, + }); + + return { + data: convertTeam(response.data.group), + }; + } + + async updateTeam(url: string, headers: AxiosHeaders, params: Params): Promise { + const response = await axios.put(url, { group: params.requestBody }, { headers }); + + return { data: convertTeam(response.data.group) }; + } + + async run(method: string, headers: AxiosHeaders, params: GetTeamParams, _config: Config) { + const url = `${BASE_URL}/groups/${params.pathParams.team_id}`; + switch (method) { + case 'GET': + return this.getTeam(url, headers, params); + + case 'PATCH': + return this.updateTeam(url, headers, params); + + default: + throw new Error('Method not found'); + } + } +} diff --git a/integrations/ticketing/zendesk/src/models/team/team.utils.ts b/integrations/ticketing/zendesk/src/models/team/team.utils.ts new file mode 100644 index 00000000..f6e0f26f --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/team/team.utils.ts @@ -0,0 +1,22 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { TeamWithRaw } from './team.interface'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function convertTeam(data: any): TeamWithRaw { + return { + id: data.id, + name: data.name, + description: data.description, + created_at: data.created_at, + updated_at: data.updated_at, + members: [], + raw: data, + }; +} + +export const teamMapping = { + name: 'name', + description: 'description', + members: 'maintainers', +}; diff --git a/integrations/ticketing/zendesk/src/models/team/teams.path.ts b/integrations/ticketing/zendesk/src/models/team/teams.path.ts new file mode 100644 index 00000000..59ca31c7 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/team/teams.path.ts @@ -0,0 +1,50 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { BasePath, Config, Params } from '@poozle/engine-idk'; +import axios, { AxiosHeaders } from 'axios'; +import { BASE_URL, getPageMeta } from 'common'; + +import { TeamResponse, TeamsResponse } from './team.interface'; +import { convertTeam } from './team.utils'; + +export class TeamsPath extends BasePath { + async getTeams(url: string, headers: AxiosHeaders, params: Params): Promise { + const page = params.queryParams?.cursor ? parseInt(params.queryParams?.cursor.toString()) : 1; + + const final_params = { + per_page: params.queryParams?.limit ?? 10, + page, + }; + + const response = await axios({ + url, + headers, + params: final_params, + }); + + return { + data: response.data.groups.map((group: any) => convertTeam(group)), + meta: getPageMeta(response.data, page.toString()), + }; + } + + async createTeams(url: string, headers: AxiosHeaders, params: Params): Promise { + const response = await axios.post(url, { group: params.requestBody }, { headers }); + + return { data: convertTeam(response.data.group) }; + } + + async run(method: string, headers: AxiosHeaders, params: Params, _config: Config) { + const url = `${BASE_URL}/groups`; + switch (method) { + case 'GET': + return this.getTeams(url, headers, params); + + case 'POST': + return this.createTeams(url, headers, params); + + default: + throw new Error('Method not found'); + } + } +} diff --git a/integrations/ticketing/zendesk/src/models/ticket/ticket.interface.ts b/integrations/ticketing/zendesk/src/models/ticket/ticket.interface.ts new file mode 100644 index 00000000..eaaf96cf --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/ticket/ticket.interface.ts @@ -0,0 +1,61 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { CreateTicketBody, Ticket } from '@poozle/engine-idk'; +import { Meta } from 'common'; + +export interface TicketWithRaw extends Ticket { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + raw: any; + organization_id: string; +} + +export interface TicketsResponse { + data: TicketWithRaw[]; + meta: Meta; +} + +export interface TicketResponse { + data: TicketWithRaw; +} + +export interface GetTicketsParams { + queryParams: { + limit: number; + cursor?: string; + created_after?: string; + }; + + pathParams: { + organization_id: string; + ticket_id: string; + }; +} + +export interface GetTicketParams { + pathParams: { + ticket_id: string; + }; +} + +export interface createBody extends CreateTicketBody { + organization_id: string; + priority: string; + status: string; +} + +export interface CreateTicketParams { + requestBody: createBody; + + pathParams: { + organization_id: string; + }; +} + +export interface UpdateTicketParams { + requestBody: createBody; + + pathParams: { + organization_id: string; + ticket_id: string; + }; +} diff --git a/integrations/ticketing/zendesk/src/models/ticket/ticket.path.ts b/integrations/ticketing/zendesk/src/models/ticket/ticket.path.ts new file mode 100644 index 00000000..159c6a78 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/ticket/ticket.path.ts @@ -0,0 +1,60 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { BasePath, Config } from '@poozle/engine-idk'; +import axios, { AxiosHeaders } from 'axios'; +import { BASE_URL } from 'common'; + +import { GetTicketParams, TicketResponse, UpdateTicketParams } from './ticket.interface'; +import { convertCreateUpdateBody, convertTicket } from './ticket.utils'; + +export class TicketPath extends BasePath { + async fetchSingleTicket( + url: string, + headers: AxiosHeaders, + _params: GetTicketParams, + ): Promise { + const response = await axios({ + url, + headers, + }); + + return { + data: convertTicket(response.data), + }; + } + + async patchTicket( + url: string, + headers: AxiosHeaders, + params: UpdateTicketParams, + ): Promise { + const response = await axios.patch(url, convertCreateUpdateBody(params.requestBody), { + headers, + }); + + return { + data: convertTicket(response.data), + }; + } + + async run( + method: string, + headers: AxiosHeaders, + params: GetTicketParams | UpdateTicketParams, + _config: Config, + ) { + const url = `${BASE_URL}/tickets/${params.pathParams.ticket_id}`; + + switch (method) { + case 'GET': + return this.fetchSingleTicket(url, headers, params as GetTicketParams); + + case 'PATCH': + await this.patchTicket(url, headers, params as UpdateTicketParams); + return this.fetchSingleTicket(url, headers, params); + + default: + throw new Error('Method not found'); + } + } +} diff --git a/integrations/ticketing/zendesk/src/models/ticket/ticket.utils.ts b/integrations/ticketing/zendesk/src/models/ticket/ticket.utils.ts new file mode 100644 index 00000000..c889c8e6 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/ticket/ticket.utils.ts @@ -0,0 +1,61 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { TicketTag } from '@poozle/engine-idk'; +import { createBody, TicketWithRaw } from './ticket.interface'; + +export function convertTicket(data: any): TicketWithRaw { + return { + id: data.id, + name: data.subject, + organization_id: data.organization_id ? data.organization_id : '', + description: data.description, + status: data.status, + created_at: data.created_at, + updated_at: data.updated_at, + created_by: data.submitter_id, + type: data.type, + assignees: [ + { + id: data.assignee_id, + username: '', + }, + ], + ticket_url: data.url, + tags: data.tags.map((lab: any) => ({ + id: '', + name: lab.name, + })), + + // Extra fields + parent_id: '', + priority: data.priority, + due_date: '', + completed_at: '', + collection_id: '', + + raw: data, + }; +} + +export function convertCreateUpdateBody(data: createBody) { + return { + ticket: { + subject: data.name, + organization_id: data.organization_id, + status: data.status, + ...(data.tags + ? { + tags: data.tags + .filter((tag: TicketTag) => tag.name) + .map((tag: TicketTag) => { + return tag.name; + }), + } + : {}), + ...(data.priority ? { priority: data.priority } : {}), + ...(data.type ? { priority: data.type } : {}), + ...(data.assignees ? { assignee_id: data.assignees[0].id } : {}), + }, + }; +} diff --git a/integrations/ticketing/zendesk/src/models/ticket/tickets.path.ts b/integrations/ticketing/zendesk/src/models/ticket/tickets.path.ts new file mode 100644 index 00000000..26e8d17f --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/ticket/tickets.path.ts @@ -0,0 +1,77 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { BasePath, Config } from '@poozle/engine-idk'; +import axios, { AxiosHeaders } from 'axios'; +import { BASE_URL, getMetaParams } from 'common'; + +import { + CreateTicketParams, + GetTicketsParams, + TicketResponse, + TicketsResponse, +} from './ticket.interface'; +import { convertCreateUpdateBody, convertTicket } from './ticket.utils'; + +export class TicketsPath extends BasePath { + async fetchData( + url: string, + headers: AxiosHeaders, + params: GetTicketsParams, + ): Promise { + const final_params = { + per_page: params.queryParams.limit, + ...(params.queryParams.cursor || params.queryParams.created_after + ? { + start_time: params.queryParams.cursor + ? params.queryParams.cursor + : params.queryParams.created_after, + } + : {}), + }; + const response = await axios({ + url, + headers, + params: final_params, + }); + + return { + data: response.data.tickets.map((data: any) => convertTicket(data)), + meta: getMetaParams(response.data, ''), + }; + } + + async createTicket( + url: string, + headers: AxiosHeaders, + params: CreateTicketParams, + ): Promise { + const response = await axios.post(url, convertCreateUpdateBody(params.requestBody), { + headers, + }); + + return { + data: convertTicket(response.data.ticket), + }; + } + + async run( + method: string, + headers: AxiosHeaders, + params: GetTicketsParams | CreateTicketParams, + _config: Config, + ) { + let url = `${BASE_URL}/tickets`; + + switch (method) { + case 'GET': + url = `${BASE_URL}/incremental/tickets`; + return this.fetchData(url, headers, params as GetTicketsParams); + + case 'POST': + return this.createTicket(url, headers, params as CreateTicketParams); + + default: + throw new Error('Method not found'); + } + } +} diff --git a/integrations/ticketing/zendesk/src/models/user/user.interface.ts b/integrations/ticketing/zendesk/src/models/user/user.interface.ts new file mode 100644 index 00000000..6f48ea18 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/user/user.interface.ts @@ -0,0 +1,40 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { User } from '@poozle/engine-idk'; +import { Meta } from 'common'; + +export interface UserWithRaw extends User { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + raw: any; + is_active: boolean; + created_at: string; + updated_at: string; +} +export interface UsersResponse { + data: UserWithRaw[]; + meta: Meta; +} + +export interface UserResponse { + data: UserWithRaw; +} + +export interface GetUsersParams { + queryParams: { + limit: number; + cursor?: string; + created_after?: string; + }; + + pathParams: { + organization_id: string; + }; +} + +export interface GetUserParams { + queryParams: {}; + pathParams: { + organization_id: string; + user_id: string; + }; +} diff --git a/integrations/ticketing/zendesk/src/models/user/user.path.ts b/integrations/ticketing/zendesk/src/models/user/user.path.ts new file mode 100644 index 00000000..6fcb02ad --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/user/user.path.ts @@ -0,0 +1,36 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { BasePath, Config } from '@poozle/engine-idk'; +import axios, { AxiosHeaders } from 'axios'; +import { BASE_URL } from 'common'; + +import { GetUserParams, UserResponse } from './user.interface'; +import { convertUser } from './user.utils'; + +export class UserPath extends BasePath { + async fetchSingleUser( + url: string, + headers: AxiosHeaders, + _params: GetUserParams, + ): Promise { + const response = await axios({ + url, + headers, + }); + + return { + data: convertUser(response.data.user), + }; + } + + async run(method: string, headers: AxiosHeaders, params: GetUserParams, _config: Config) { + switch (method) { + case 'GET': + const url = `${BASE_URL}/users/${params.pathParams.user_id}`; + return this.fetchSingleUser(url, headers, params); + + default: + throw new Error('Method not found'); + } + } +} diff --git a/integrations/ticketing/zendesk/src/models/user/user.utils.ts b/integrations/ticketing/zendesk/src/models/user/user.utils.ts new file mode 100644 index 00000000..0463fbaa --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/user/user.utils.ts @@ -0,0 +1,17 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { UserWithRaw } from './user.interface'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function convertUser(data: any): UserWithRaw { + return { + id: data.id, + name: data.name, + avatar: data.avatar_url, + email_address: data.email, + is_active: data.active, + created_at: data.created_at, + updated_at: data.updated_at, + raw: data, + }; +} diff --git a/integrations/ticketing/zendesk/src/models/user/users.path.ts b/integrations/ticketing/zendesk/src/models/user/users.path.ts new file mode 100644 index 00000000..aac44466 --- /dev/null +++ b/integrations/ticketing/zendesk/src/models/user/users.path.ts @@ -0,0 +1,49 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { BasePath, Config } from '@poozle/engine-idk'; +import axios, { AxiosHeaders } from 'axios'; +import { BASE_URL, getMetaParams } from 'common'; + +import { GetUsersParams, UsersResponse } from './user.interface'; +import { convertUser } from './user.utils'; + +export class UsersPath extends BasePath { + async getUsers( + url: string, + headers: AxiosHeaders, + params: GetUsersParams, + _config: Config, + ): Promise { + const final_params = { + per_page: params.queryParams.limit, + ...(params.queryParams.cursor || params.queryParams.created_after + ? { + start_time: params.queryParams.cursor + ? params.queryParams.cursor + : params.queryParams.created_after, + } + : {}), + }; + const response = await axios({ + url, + headers, + params: final_params, + }); + + return { + data: response.data.users.map((data: any) => convertUser(data)), + meta: getMetaParams(response.data, ''), + }; + } + + async run(method: string, headers: AxiosHeaders, params: GetUsersParams, config: Config) { + switch (method) { + case 'GET': + const url = `${BASE_URL}/incremental/users`; + return this.getUsers(url, headers, params, config); + + default: + throw new Error('Method not found'); + } + } +} diff --git a/integrations/ticketing/zendesk/src/proxy.ts b/integrations/ticketing/zendesk/src/proxy.ts new file mode 100644 index 00000000..3d72d985 --- /dev/null +++ b/integrations/ticketing/zendesk/src/proxy.ts @@ -0,0 +1,27 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { BasePath, Params } from '@poozle/engine-idk'; +import axios, { AxiosHeaders } from 'axios'; + +export class ProxyPath extends BasePath { + async run(method: string, headers: AxiosHeaders, params: Params): Promise { + const axiosObject: any = { + url: params.url, + method, + headers: headers as any, + }; + + if (params.requestBody) { + axiosObject['data'] = params.requestBody; + } + + if (params.queryParams) { + axiosObject['params'] = params.queryParams; + } + + const response = await axios(axiosObject); + + return response.data; + } +} diff --git a/integrations/ticketing/zendesk/src/spec.ts b/integrations/ticketing/zendesk/src/spec.ts new file mode 100644 index 00000000..be8bf237 --- /dev/null +++ b/integrations/ticketing/zendesk/src/spec.ts @@ -0,0 +1,64 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +export default { + 'Api-Key': { + input_specification: { + type: 'object', + properties: { + email_id: { + type: 'string', + title: 'Email ID', + description: 'Enter the Email ID', + }, + api_key: { + type: 'string', + title: 'Api Key', + description: 'Enter the API Key', + }, + }, + }, + }, + auth_specification: { + OAuth2: { + token_url: 'https://${zendesk_domain}/oauth/authorizations/new', + authorization_url: 'https://${zendesk_domain}/oauth/tokens', + input_specification: { + type: 'object', + properties: { + client_id: { + type: 'string', + title: 'Client Id', + description: 'Enter the Client Id', + }, + client_secret: { + type: 'string', + title: 'Client secret', + description: 'Enter the Client secret', + }, + refresh_token: { + type: 'string', + title: 'Refresh token', + description: 'Enter the Refresh token', + }, + scope: { + type: 'string', + title: 'Scope', + description: 'Enter the Scope', + }, + }, + }, + }, + }, + other_inputs: { + input_specification: { + type: 'object', + properties: { + zendesk_domain: { + type: 'string', + title: 'Zendesk Domain', + description: 'Enter the subdomain for Zendesk. example: poozlehelp.zendesk.com', + }, + }, + }, + }, +}; diff --git a/integrations/ticketing/zendesk/tsconfig.json b/integrations/ticketing/zendesk/tsconfig.json new file mode 100644 index 00000000..384346ae --- /dev/null +++ b/integrations/ticketing/zendesk/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "esnext", + "lib": ["esnext"], + "baseUrl": "src", + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "strictNullChecks": true, + "removeComments": true, + "preserveConstEnums": true, + "sourceMap": true, + "noUnusedParameters": true, + "noUnusedLocals": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noImplicitAny": true, + "noFallthroughCasesInSwitch": true, + "useUnknownInCatchVariables": false + }, + "exclude": ["node_modules", "build", "dist", "scripts", "acceptance-tests", "webpack", "jest"], + "types": ["typePatches"], + "include": ["src"] +} diff --git a/integrations/ticketing/zendesk/yarn.lock b/integrations/ticketing/zendesk/yarn.lock new file mode 100644 index 00000000..1e1d123f --- /dev/null +++ b/integrations/ticketing/zendesk/yarn.lock @@ -0,0 +1,3289 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" + integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== + dependencies: + "@babel/highlight" "^7.22.10" + chalk "^2.4.2" + +"@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" + integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== + +"@babel/core@^7.18.2": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.10.tgz#aad442c7bcd1582252cb4576747ace35bc122f35" + integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.10" + "@babel/generator" "^7.22.10" + "@babel/helper-compilation-targets" "^7.22.10" + "@babel/helper-module-transforms" "^7.22.9" + "@babel/helpers" "^7.22.10" + "@babel/parser" "^7.22.10" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.10" + "@babel/types" "^7.22.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.1" + +"@babel/generator@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" + integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== + dependencies: + "@babel/types" "^7.22.10" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz#573e735937e99ea75ea30788b57eb52fab7468c9" + integrity sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ== + dependencies: + "@babel/types" "^7.22.10" + +"@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" + integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.5" + browserslist "^4.21.9" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3" + integrity sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" + integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" + integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" + integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== + +"@babel/helper-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== + dependencies: + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-member-expression-to-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" + integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" + integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" + integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== + 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/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" + integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.9" + +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" + integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== + +"@babel/helper-validator-option@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" + integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== + +"@babel/helper-wrap-function@^7.22.9": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" + integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.10" + +"@babel/helpers@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.10.tgz#ae6005c539dfbcb5cd71fb51bfc8a52ba63bc37a" + integrity sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw== + dependencies: + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.10" + "@babel/types" "^7.22.10" + +"@babel/highlight@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" + integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== + dependencies: + "@babel/helper-validator-identifier" "^7.22.5" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.22.10", "@babel/parser@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55" + integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" + integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" + integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" + integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" + integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" + integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" + integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-async-generator-functions@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz#45946cd17f915b10e65c29b8ed18a0a50fc648c8" + integrity sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" + integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" + +"@babel/plugin-transform-block-scoped-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" + integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa" + integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" + integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-static-block@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" + integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" + integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" + integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.5" + +"@babel/plugin-transform-destructuring@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2" + integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dotall-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" + integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-duplicate-keys@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" + integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dynamic-import@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" + integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" + integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-export-namespace-from@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" + integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" + integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" + integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== + dependencies: + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-json-strings@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" + integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-transform-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" + integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-logical-assignment-operators@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" + integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" + integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-amd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" + integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== + dependencies: + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-commonjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" + integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== + dependencies: + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + +"@babel/plugin-transform-modules-systemjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" + integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== + dependencies: + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + +"@babel/plugin-transform-modules-umd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" + integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== + dependencies: + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-new-target@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" + integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" + integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" + integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" + integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== + dependencies: + "@babel/compat-data" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.5" + +"@babel/plugin-transform-object-super@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" + integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + +"@babel/plugin-transform-optional-catch-binding@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" + integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz#076d28a7e074392e840d4ae587d83445bac0372a" + integrity sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" + integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-methods@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" + integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-property-in-object@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" + integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" + integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-regenerator@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" + integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" + integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-shorthand-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" + integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" + integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" + integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" + integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" + integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typescript@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.10.tgz#aadd98fab871f0bb5717bcc24c31aaaa455af923" + integrity sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.10" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.22.5" + +"@babel/plugin-transform-unicode-escapes@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" + integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" + integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" + integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" + integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.18.2": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.10.tgz#3263b9fe2c8823d191d28e61eac60a79f9ce8a0f" + integrity sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.10" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.22.5" + "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.10" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.10" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.5" + "@babel/plugin-transform-classes" "^7.22.6" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.10" + "@babel/plugin-transform-dotall-regex" "^7.22.5" + "@babel/plugin-transform-duplicate-keys" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.5" + "@babel/plugin-transform-exponentiation-operator" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.5" + "@babel/plugin-transform-for-of" "^7.22.5" + "@babel/plugin-transform-function-name" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.5" + "@babel/plugin-transform-literals" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" + "@babel/plugin-transform-member-expression-literals" "^7.22.5" + "@babel/plugin-transform-modules-amd" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-modules-systemjs" "^7.22.5" + "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" + "@babel/plugin-transform-numeric-separator" "^7.22.5" + "@babel/plugin-transform-object-rest-spread" "^7.22.5" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.10" + "@babel/plugin-transform-parameters" "^7.22.5" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.5" + "@babel/plugin-transform-property-literals" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.10" + "@babel/plugin-transform-reserved-words" "^7.22.5" + "@babel/plugin-transform-shorthand-properties" "^7.22.5" + "@babel/plugin-transform-spread" "^7.22.5" + "@babel/plugin-transform-sticky-regex" "^7.22.5" + "@babel/plugin-transform-template-literals" "^7.22.5" + "@babel/plugin-transform-typeof-symbol" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.10" + "@babel/plugin-transform-unicode-property-regex" "^7.22.5" + "@babel/plugin-transform-unicode-regex" "^7.22.5" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/preset-modules" "0.1.6-no-external-plugins" + "@babel/types" "^7.22.10" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" + core-js-compat "^3.31.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.17.12": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz#16367d8b01d640e9a507577ed4ee54e0101e51c8" + integrity sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-typescript" "^7.22.5" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.8.4": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" + integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" + integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/traverse@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.10.tgz#20252acb240e746d27c2e82b4484f199cf8141aa" + integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig== + dependencies: + "@babel/code-frame" "^7.22.10" + "@babel/generator" "^7.22.10" + "@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.10" + "@babel/types" "^7.22.10" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.4.4": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" + integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + to-fast-properties "^2.0.0" + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.6.1": + version "4.6.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" + integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== + +"@eslint/eslintrc@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93" + integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@^8.46.0": + version "8.46.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6" + integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA== + +"@humanwhocodes/config-array@^0.11.10": + version "0.11.10" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.19" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@poozle/engine-idk@^0.1.44": + version "0.1.44" + resolved "https://registry.yarnpkg.com/@poozle/engine-idk/-/engine-idk-0.1.44.tgz#ec8df73cd5c394998c2314f7e8e43415e22d27c0" + integrity sha512-ibZ7H1pjC+z2z2mzgEKBP9wSAxMJq1fZJRv4VeQmojLKmD5G7tZbpjLgtVgmjWnipwJkVuEJgZ1IliJoS/yVQw== + dependencies: + axios "^1.3.2" + qs "^6.11.2" + +"@rollup/plugin-babel@6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-6.0.2.tgz#92ad7a00cc0e4a6b59e1498cda9f907a9c0d2db3" + integrity sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@rollup/pluginutils" "^5.0.1" + +"@rollup/plugin-commonjs@^23.0.2": + version "23.0.7" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-23.0.7.tgz#7d26d879caa54283086de1974b66f512ef60abdc" + integrity sha512-hsSD5Qzyuat/swzrExGG5l7EuIlPhwTsT7KwKbSCQzIcJWjRxiimi/0tyMYY2bByitNb3i1p+6JWEDGa0NvT0Q== + dependencies: + "@rollup/pluginutils" "^5.0.1" + commondir "^1.0.1" + estree-walker "^2.0.2" + glob "^8.0.3" + is-reference "1.2.1" + magic-string "^0.27.0" + +"@rollup/plugin-json@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-5.0.2.tgz#d7dbbac62ff74064876b3e5d0d863cb3ad1e7cdb" + integrity sha512-D1CoOT2wPvadWLhVcmpkDnesTzjhNIQRWLsc3fA49IFOP2Y84cFOOJ+nKGYedvXHKUsPeq07HR4hXpBBr+CHlA== + dependencies: + "@rollup/pluginutils" "^5.0.1" + +"@rollup/plugin-node-resolve@^15.0.1": + version "15.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz#9ffcd8e8c457080dba89bb9fcb583a6778dc757e" + integrity sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-builtin-module "^3.2.1" + is-module "^1.0.0" + resolve "^1.22.1" + +"@rollup/plugin-replace@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz#45f53501b16311feded2485e98419acb8448c61d" + integrity sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA== + dependencies: + "@rollup/pluginutils" "^5.0.1" + magic-string "^0.27.0" + +"@rollup/pluginutils@^4.1.2": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + +"@rollup/pluginutils@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" + integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + +"@types/json-schema@^7.0.9": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/node@*": + version "20.4.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.9.tgz#c7164e0f8d3f12dfae336af0b1f7fdec8c6b204f" + integrity sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ== + +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + +"@types/semver@^7.3.12": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + +"@typescript-eslint/eslint-plugin@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz#112e6ae1e23a1dc8333ce82bb9c65c2608b4d8a3" + integrity sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg== + dependencies: + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/type-utils" "5.48.2" + "@typescript-eslint/utils" "5.48.2" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.2.tgz#c9edef2a0922d26a37dba03be20c5fff378313b3" + integrity sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw== + dependencies: + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/typescript-estree" "5.48.2" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz#bb7676cb78f1e94921eaab637a4b5d596f838abc" + integrity sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw== + dependencies: + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/visitor-keys" "5.48.2" + +"@typescript-eslint/type-utils@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz#7d3aeca9fa37a7ab7e3d9056a99b42f342c48ad7" + integrity sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew== + dependencies: + "@typescript-eslint/typescript-estree" "5.48.2" + "@typescript-eslint/utils" "5.48.2" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.2.tgz#635706abb1ec164137f92148f06f794438c97b8e" + integrity sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA== + +"@typescript-eslint/typescript-estree@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz#6e206b462942b32383582a6c9251c05021cc21b0" + integrity sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg== + dependencies: + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/visitor-keys" "5.48.2" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.2.tgz#3777a91dcb22b8499a25519e06eef2e9569295a3" + integrity sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/typescript-estree" "5.48.2" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz#c247582a0bcce467461d7b696513bf9455000060" + integrity sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ== + dependencies: + "@typescript-eslint/types" "5.48.2" + eslint-visitor-keys "^3.3.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.2, acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlastindex@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" + integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" + integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axios@^1.3.2, axios@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-plugin-polyfill-corejs2@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" + integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.2" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" + integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.2" + core-js-compat "^3.31.0" + +babel-plugin-polyfill-regenerator@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" + integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.2" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.9: + version "4.21.10" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" + integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== + dependencies: + caniuse-lite "^1.0.30001517" + electron-to-chromium "^1.4.477" + node-releases "^2.0.13" + update-browserslist-db "^1.0.11" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001517: + version "1.0.30001519" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz#3e7b8b8a7077e78b0eb054d69e6edf5c7df35601" + integrity sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg== + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +core-js-compat@^3.31.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.0.tgz#f41574b6893ab15ddb0ac1693681bd56c8550a90" + integrity sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw== + dependencies: + browserslist "^4.21.9" + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +electron-to-chromium@^1.4.477: + version "1.4.488" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.488.tgz#442b1855f8c84fb1ed79f518985c65db94f64cc9" + integrity sha512-Dv4sTjiW7t/UWGL+H8ZkgIjtUAVZDgb/PwGWvMsCT7jipzUV/u5skbLXPFKb6iV0tiddVi/bcS2/kUrczeWgIQ== + +es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: + version "1.22.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" + integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.1" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.1" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.0" + safe-array-concat "^1.0.0" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.10" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-import-resolver-node@^0.3.7: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.26.0: + version "2.28.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz#8d66d6925117b06c4018d491ae84469eb3cb1005" + integrity sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q== + dependencies: + array-includes "^3.1.6" + array.prototype.findlastindex "^1.2.2" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.8.0" + has "^1.0.3" + is-core-module "^2.12.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.6" + object.groupby "^1.0.0" + object.values "^1.1.6" + resolve "^1.22.3" + semver "^6.3.1" + tsconfig-paths "^3.14.2" + +eslint-plugin-notice@^0.9.10: + version "0.9.10" + resolved "https://registry.yarnpkg.com/eslint-plugin-notice/-/eslint-plugin-notice-0.9.10.tgz#89cf6377bf1c004a219c4e541321ea9125b408c8" + integrity sha512-rF79EuqdJKu9hhTmwUkNeSvLmmq03m/NXq/NHwUENHbdJ0wtoyOjxZBhW4QCug8v5xYE6cGe3AWkGqSIe9KUbQ== + dependencies: + find-root "^1.1.0" + lodash "^4.17.15" + metric-lcs "^0.1.2" + +eslint-plugin-prettier@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-unused-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz#d8db8c4d0cfa0637a8b51ce3fd7d1b6bc3f08520" + integrity sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A== + dependencies: + eslint-rule-composer "^0.3.0" + +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f" + integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw== + +eslint@^8.24.0: + version "8.46.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552" + integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.1" + "@eslint/js" "^8.46.0" + "@humanwhocodes/config-array" "^0.11.10" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.2" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + 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" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^2.0.1, estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-cache-dir@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2, functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + 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-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.12.1, is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-reference@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.15: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +metric-lcs@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/metric-lcs/-/metric-lcs-0.1.2.tgz#87913f149410e39c7c5a19037512814eaf155e11" + integrity sha512-+TZ5dUDPKPJaU/rscTzxyN8ZkX7eAVLAiQU/e+YINleXPv03SCmJShaMT1If1liTH8OcmWXZs0CmzCBRBLcMpA== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-releases@^2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.groupby@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" + integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.21.2" + get-intrinsic "^1.2.1" + +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.2.2, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.6.2: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +qs@^6.11.2: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexp.prototype.flags@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.14.2, resolve@^1.22.1, resolve@^1.22.3, resolve@^1.22.4: + version "1.22.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-terser@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup-plugin-typescript2@^0.34.0: + version "0.34.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.34.1.tgz#c457f155a71d133c142689213fce78694e30d0be" + integrity sha512-P4cHLtGikESmqi1CA+tdMDUv8WbQV48mzPYt77TSTOPJpERyZ9TXdDgjSDix8Fkqce6soYz3+fa4lrC93IEkcw== + dependencies: + "@rollup/pluginutils" "^4.1.2" + find-cache-dir "^3.3.2" + fs-extra "^10.0.0" + semver "^7.3.7" + tslib "^2.4.0" + +rollup@^3.2.3: + version "3.27.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.27.2.tgz#59adc973504408289be89e5978e938ce852c9520" + integrity sha512-YGwmHf7h2oUHkVBT248x0yt6vZkYQ3/rvE5iQuVBh3WO8GcJ6BNeOkpoX1yMHIiBm18EMLjBPIoUDkhgnyxGOQ== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" + integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +semver@^6.0.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.7: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +terser@^5.0.0: + version "5.19.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e" + integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.4.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" + integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@^4.7.2: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.10, which-typed-array@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From a1c06a9f37e2729c4265b8990394948c405cd3bb Mon Sep 17 00:00:00 2001 From: Manoj K Date: Wed, 9 Aug 2023 16:38:34 -0700 Subject: [PATCH 2/3] fix: zendesk integration --- .../src/common_models/ticketing/account.ts | 9 + .../src/common_models/ticketing/index.ts | 1 + .../src/common_models/ticketing/team.ts | 2 + .../src/common_models/ticketing/ticket.ts | 4 + .../src/common_models/ticketing/user.ts | 3 + .../models/account/account.controller.ts | 61 +++++++ .../models/account/account.interface.ts | 58 +++++++ .../models/account/account.service.ts | 159 ++++++++++++++++++ .../models/ticket/tickets.interface.ts | 12 ++ .../categories/ticketing/ticketing.module.ts | 5 +- engine-webapp/public/icons/zendesk.svg | 1 + integration_definitions.json | 10 +- integrations/ticketing/zendesk/src/common.ts | 14 +- integrations/ticketing/zendesk/src/index.ts | 2 +- .../src/models/accounts/account.path.ts | 5 +- .../src/models/accounts/accounts.path.ts | 5 +- .../src/models/comment/comments.path.ts | 10 +- .../zendesk/src/models/tag/tags.path.ts | 7 +- .../zendesk/src/models/team/team.path.ts | 5 +- .../zendesk/src/models/team/teams.path.ts | 5 +- .../src/models/ticket/ticket.interface.ts | 8 +- .../zendesk/src/models/ticket/ticket.path.ts | 7 +- .../zendesk/src/models/ticket/ticket.utils.ts | 4 +- .../zendesk/src/models/ticket/tickets.path.ts | 7 +- .../zendesk/src/models/user/user.path.ts | 5 +- .../zendesk/src/models/user/users.path.ts | 6 +- integrations/ticketing/zendesk/src/spec.ts | 30 ++-- 27 files changed, 382 insertions(+), 63 deletions(-) create mode 100644 engine-idk/src/common_models/ticketing/account.ts create mode 100644 engine-server/src/modules/categories/ticketing/models/account/account.controller.ts create mode 100644 engine-server/src/modules/categories/ticketing/models/account/account.interface.ts create mode 100644 engine-server/src/modules/categories/ticketing/models/account/account.service.ts create mode 100644 engine-webapp/public/icons/zendesk.svg diff --git a/engine-idk/src/common_models/ticketing/account.ts b/engine-idk/src/common_models/ticketing/account.ts new file mode 100644 index 00000000..ba62d495 --- /dev/null +++ b/engine-idk/src/common_models/ticketing/account.ts @@ -0,0 +1,9 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +export interface Account { + id: string; + name: string; + domains: string[]; + created_at: string; + updated_at: string; +} diff --git a/engine-idk/src/common_models/ticketing/index.ts b/engine-idk/src/common_models/ticketing/index.ts index a440e29a..44ca7b7b 100644 --- a/engine-idk/src/common_models/ticketing/index.ts +++ b/engine-idk/src/common_models/ticketing/index.ts @@ -1,5 +1,6 @@ /** Copyright (c) 2023, Poozle, all rights reserved. **/ +export * from './account'; export * from './ticket'; export * from './collection'; export * from './comment'; diff --git a/engine-idk/src/common_models/ticketing/team.ts b/engine-idk/src/common_models/ticketing/team.ts index 4ed07b59..e371ace8 100644 --- a/engine-idk/src/common_models/ticketing/team.ts +++ b/engine-idk/src/common_models/ticketing/team.ts @@ -10,6 +10,8 @@ export interface Team { name: string; description: string; members: Member[]; + created_at: string; + updated_at: string; } export interface CreateTeamBody { diff --git a/engine-idk/src/common_models/ticketing/ticket.ts b/engine-idk/src/common_models/ticketing/ticket.ts index 0c578563..a4a93594 100644 --- a/engine-idk/src/common_models/ticketing/ticket.ts +++ b/engine-idk/src/common_models/ticketing/ticket.ts @@ -14,6 +14,7 @@ export interface Ticket { id: string; parent_id: string; collection_id: string; + organization_id: string; type: string; name: string; description: string; @@ -37,6 +38,9 @@ export interface CreateTicketBody { tags: TicketTag[]; created_by: string; type: string; + account_id: string; + priority: string; + status: string; } export interface UpdateTicketBody { diff --git a/engine-idk/src/common_models/ticketing/user.ts b/engine-idk/src/common_models/ticketing/user.ts index 20ee5e73..e0022dfc 100644 --- a/engine-idk/src/common_models/ticketing/user.ts +++ b/engine-idk/src/common_models/ticketing/user.ts @@ -27,4 +27,7 @@ export interface User { name: string; email_address: string; avatar: string; + is_active: boolean; + created_at: string; + updated_at: string; } diff --git a/engine-server/src/modules/categories/ticketing/models/account/account.controller.ts b/engine-server/src/modules/categories/ticketing/models/account/account.controller.ts new file mode 100644 index 00000000..23d82c42 --- /dev/null +++ b/engine-server/src/modules/categories/ticketing/models/account/account.controller.ts @@ -0,0 +1,61 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { Controller, Get, Param, Query, UseGuards } from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; +import { IntegrationType } from '@prisma/client'; + +import { IntegrationAccount } from '@@generated/integrationAccount/entities'; + +import { GetIntegrationAccount } from 'common/decorators/integration_account.decorator'; + +import { AuthGuard } from 'modules/auth/auth.guard'; + +import { + AccountQueryParams, + GetAccountQueryParams, + PathParamsWithAccountId, + TicketingAccountResponse, + TicketingAccountsResponse, +} from './account.interface'; +import { AccountService } from './account.service'; + +@Controller({ + version: '1', + path: 'ticketing/accounts', +}) +@ApiTags('Ticketing') +export class AccountController { + constructor(private accountService: AccountService) {} + + @Get() + @UseGuards(new AuthGuard()) + async getAccounts( + @Query() query: AccountQueryParams, + @GetIntegrationAccount(IntegrationType.TICKETING) + integrationAccount: IntegrationAccount, + ): Promise { + const accountResponse = await this.accountService.getAccounts( + integrationAccount, + query, + ); + + return accountResponse; + } + + @Get(':account_id') + async getAccount( + @Query() query: GetAccountQueryParams, + @Param() + params: PathParamsWithAccountId, + @GetIntegrationAccount(IntegrationType.TICKETING) + integrationAccount: IntegrationAccount, + ): Promise { + const accountResponse = await this.accountService.getAccount( + integrationAccount, + query, + params, + ); + + return accountResponse; + } +} diff --git a/engine-server/src/modules/categories/ticketing/models/account/account.interface.ts b/engine-server/src/modules/categories/ticketing/models/account/account.interface.ts new file mode 100644 index 00000000..061756b0 --- /dev/null +++ b/engine-server/src/modules/categories/ticketing/models/account/account.interface.ts @@ -0,0 +1,58 @@ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { Transform } from 'class-transformer'; +import { IsBoolean, IsOptional, IsString } from 'class-validator'; + +import { JustRawParams, QueryParams } from 'common/interfaces/query.interface'; +import { Meta } from 'common/interfaces/response.interface'; + +export class AccountQueryParams extends QueryParams { + @IsOptional() + @IsBoolean() + @Transform(({ value }) => { + return value === 'true' || value === 'True' || value === true; + }) + realtime?: boolean = false; +} + +export class GetAccountQueryParams extends JustRawParams { + @IsOptional() + @IsBoolean() + @Transform(({ value }) => { + return value === 'true' || value === 'True' || value === true; + }) + realtime?: boolean = false; +} + +export class Account { + id: string; + name: string; + domains: string[]; + created_at: string; + updated_at: string; + + integration_account_id?: string; +} + +export const ACCOUNT_KEYS = [ + 'id', + 'domains', + 'name', + 'description', + 'updated_at', + 'created_at', +]; + +export class TicketingAccountsResponse { + data: Account[]; + meta: Meta; +} + +export class TicketingAccountResponse { + data: Account; +} + +export class PathParamsWithAccountId { + @IsString() + account_id: string; +} diff --git a/engine-server/src/modules/categories/ticketing/models/account/account.service.ts b/engine-server/src/modules/categories/ticketing/models/account/account.service.ts new file mode 100644 index 00000000..148561a7 --- /dev/null +++ b/engine-server/src/modules/categories/ticketing/models/account/account.service.ts @@ -0,0 +1,159 @@ +/* eslint-disable dot-location */ +/** Copyright (c) 2023, Poozle, all rights reserved. **/ + +import { Injectable } from '@nestjs/common'; +import { Method } from 'shared/integration_account.utils'; + +import { IntegrationAccount } from '@@generated/integrationAccount/entities'; + +import { + applyDateFilter, + getBaseQuery, + getMetaParams, + getObjectFromDb, +} from 'common/knex'; +import { pagination } from 'common/utils'; + +import { DataService } from 'modules/data/data.service'; + +import { + ACCOUNT_KEYS, + AccountQueryParams, + GetAccountQueryParams, + PathParamsWithAccountId, +} from './account.interface'; + +const DATABASE_NAME = 'ticketing_account'; + +@Injectable() +export class AccountService { + constructor(private dataService: DataService) {} + + async getAccounts( + integrationAccount: IntegrationAccount, + query: AccountQueryParams, + ) { + if (query.realtime || !integrationAccount.syncEnabled) { + return await this.getAccountsForRealtime(integrationAccount, query); + } + + return await this.getAccountsFromDb(integrationAccount, query); + } + + async getAccount( + integrationAccount: IntegrationAccount, + query: GetAccountQueryParams, + params: PathParamsWithAccountId, + ) { + if (query.realtime || !integrationAccount.syncEnabled) { + return await this.getAccountForRealtime( + integrationAccount, + query, + params, + ); + } + + return await this.getAccountFromDb(integrationAccount, query, params); + } + + async getListFromDb( + workspaceName: string, + table: string, + where: Record, + SELECT_KEYS: string[], + queryParams: AccountQueryParams, + ) { + const { offset, limit, page } = pagination( + queryParams.limit, + queryParams.cursor, + ); + + let query = getBaseQuery( + workspaceName, + table, + where, + SELECT_KEYS, + queryParams.raw, + ); + + query = applyDateFilter(query, queryParams); + + const data = await query.limit(limit).offset(offset); + + return { + data, + meta: getMetaParams(data, limit, page), + }; + } + + async getAccountsFromDb( + integrationAccount: IntegrationAccount, + query: AccountQueryParams, + ) { + return await this.getListFromDb( + integrationAccount.workspaceName, + DATABASE_NAME, + { + integration_account_id: integrationAccount.integrationAccountId, + }, + ACCOUNT_KEYS, + query, + ); + } + + async getAccountFromDb( + integrationAccount: IntegrationAccount, + query: GetAccountQueryParams, + params: PathParamsWithAccountId, + ) { + return await getObjectFromDb( + integrationAccount.workspaceName, + DATABASE_NAME, + { + integration_account_id: integrationAccount.integrationAccountId, + id: params.account_id, + }, + ACCOUNT_KEYS, + query.raw, + ); + } + + async getAccountForRealtime( + integrationAccount: IntegrationAccount, + query: GetAccountQueryParams, + params: PathParamsWithAccountId, + ) { + const accountResponse = await this.dataService.getDataFromAccount( + integrationAccount, + `/accounts/${params.account_id}`, + Method.GET, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + { raw: query.raw }, + params, + ); + + return accountResponse; + } + + async getAccountsForRealtime( + integrationAccount: IntegrationAccount, + query: AccountQueryParams, + ) { + const accountResponse = await this.dataService.getDataFromAccount( + integrationAccount, + '/accounts', + Method.GET, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + { + limit: query.limit, + cursor: query.cursor, + raw: query.raw, + created_after: query.created_after, + created_before: query.created_before, + }, + {}, + ); + + return accountResponse; + } +} diff --git a/engine-server/src/modules/categories/ticketing/models/ticket/tickets.interface.ts b/engine-server/src/modules/categories/ticketing/models/ticket/tickets.interface.ts index 2b076545..cacf852d 100644 --- a/engine-server/src/modules/categories/ticketing/models/ticket/tickets.interface.ts +++ b/engine-server/src/modules/categories/ticketing/models/ticket/tickets.interface.ts @@ -116,6 +116,18 @@ export class CreateTicketBody { @IsOptional() @IsString() type: string; + + @IsOptional() + @IsString() + account_id: string; + + @IsOptional() + @IsString() + priority: string; + + @IsOptional() + @IsString() + status: string; } export class UpdateTicketBody { diff --git a/engine-server/src/modules/categories/ticketing/ticketing.module.ts b/engine-server/src/modules/categories/ticketing/ticketing.module.ts index 5578e873..f791080f 100644 --- a/engine-server/src/modules/categories/ticketing/ticketing.module.ts +++ b/engine-server/src/modules/categories/ticketing/ticketing.module.ts @@ -15,10 +15,13 @@ import { TeamController } from './models/team/team.controller'; import { TicketService } from './models/ticket/ticket.service'; import { TicketsController } from './models/ticket/tickets.controller'; import { UsersController } from './models/users/users.controller'; +import { AccountController } from './models/account/account.controller'; +import { AccountService } from './models/account/account.service'; @Module({ imports: [PrismaModule, HttpModule, IntegrationAccountModule, DataModule], controllers: [ + AccountController, CollectionController, UsersController, TeamController, @@ -26,7 +29,7 @@ import { UsersController } from './models/users/users.controller'; CommentController, TagController, ], - providers: [PrismaService, CollectionService, TicketService], + providers: [PrismaService, CollectionService, TicketService, AccountService], exports: [], }) export class TicketingModule {} diff --git a/engine-webapp/public/icons/zendesk.svg b/engine-webapp/public/icons/zendesk.svg new file mode 100644 index 00000000..b2b4d3fe --- /dev/null +++ b/engine-webapp/public/icons/zendesk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integration_definitions.json b/integration_definitions.json index 18862cb5..cd3713e0 100644 --- a/integration_definitions.json +++ b/integration_definitions.json @@ -61,6 +61,14 @@ "releaseStage": "ALPHA", "sourceUrl": "https://raw.githubusercontent.com/poozlehq/build-artifacts/main/documentation/confluence/0.1.1/index.js", "integrationType": "DOCUMENTATION" - + }, + { + "name": "Zendesk", + "key": "zendesk", + "icon": "zendesk.svg", + "version": "0.1.0", + "releaseStage": "ALPHA", + "sourceUrl": "https://raw.githubusercontent.com/poozlehq/build-artifacts/main/ticketing/zendesk/0.1.0/index.js", + "integrationType": "TICKETING" } ] \ No newline at end of file diff --git a/integrations/ticketing/zendesk/src/common.ts b/integrations/ticketing/zendesk/src/common.ts index e99031b3..f53989b5 100644 --- a/integrations/ticketing/zendesk/src/common.ts +++ b/integrations/ticketing/zendesk/src/common.ts @@ -2,8 +2,6 @@ import { Config } from '@poozle/engine-idk'; -export const BASE_URL = 'GIVE_BASE_URL'; - export interface Meta { previous: string; next: string; @@ -14,11 +12,11 @@ export function getMetaParams(data: any, current_page: string): Meta { return { previous: '', current: current_page, - next: data.end_time.toString() ?? '', + next: !data.end_of_stream ? data.end_time.toString() : '', }; } -export function convertEpoc(epochTime: string) { +export function convertEpoch(epochTime: string) { const date = new Date(Number(epochTime)); return date.toISOString(); } @@ -45,11 +43,3 @@ export function getPageMeta(data: any, current_page: string): Meta { next: data.previous_page ? getPage(data.next_page, 'page') : '', }; } - -export function getCommentMeta(data: any, current_page: string): Meta { - return { - previous: data.previous_page ? getPage(data.previous_page, 'page') : '', - current: current_page, - next: data.previous_page ? getPage(data.next_page, 'page') : '', - }; -} diff --git a/integrations/ticketing/zendesk/src/index.ts b/integrations/ticketing/zendesk/src/index.ts index 1f5ecb76..bb1dd479 100644 --- a/integrations/ticketing/zendesk/src/index.ts +++ b/integrations/ticketing/zendesk/src/index.ts @@ -50,7 +50,7 @@ class ZendeskIntegration extends BaseIntegration { } return { - Authorization: `Basic ${Buffer.from(`${config.email_id}:${config.api_key}`).toString( + Authorization: `Basic ${Buffer.from(`${config.email_id}/token:${config.api_key}`).toString( 'base64', )}`, }; diff --git a/integrations/ticketing/zendesk/src/models/accounts/account.path.ts b/integrations/ticketing/zendesk/src/models/accounts/account.path.ts index a001ffbf..869f8728 100644 --- a/integrations/ticketing/zendesk/src/models/accounts/account.path.ts +++ b/integrations/ticketing/zendesk/src/models/accounts/account.path.ts @@ -2,7 +2,7 @@ import { BasePath, Config } from '@poozle/engine-idk'; import axios, { AxiosHeaders } from 'axios'; -import { BASE_URL } from 'common'; +import { getBaseUrl } from 'common'; import { AccountResponse, GetAccountParams, updateAccountParams } from './account.interface'; import { convertAccount } from './account.utils'; @@ -37,8 +37,9 @@ export class AccountPath extends BasePath { method: string, headers: AxiosHeaders, params: GetAccountParams | updateAccountParams, - _config: Config, + config: Config, ) { + const BASE_URL = getBaseUrl(config); const url = `${BASE_URL}/organizations/${params.pathParams.account_id}`; switch (method) { diff --git a/integrations/ticketing/zendesk/src/models/accounts/accounts.path.ts b/integrations/ticketing/zendesk/src/models/accounts/accounts.path.ts index 7809fbce..aaac5807 100644 --- a/integrations/ticketing/zendesk/src/models/accounts/accounts.path.ts +++ b/integrations/ticketing/zendesk/src/models/accounts/accounts.path.ts @@ -2,7 +2,7 @@ import { BasePath, Config } from '@poozle/engine-idk'; import axios, { AxiosHeaders } from 'axios'; -import { BASE_URL, getPageMeta } from 'common'; +import { getBaseUrl, getPageMeta } from 'common'; import { AccountsResponse, CreateAccountParams, GetAccountsParams } from './account.interface'; import { convertAccount } from './account.utils'; @@ -41,8 +41,9 @@ export class AccountsPath extends BasePath { method: string, headers: AxiosHeaders, params: GetAccountsParams | CreateAccountParams, - _config: Config, + config: Config, ) { + const BASE_URL = getBaseUrl(config); const url = `${BASE_URL}/organizations`; switch (method) { case 'GET': diff --git a/integrations/ticketing/zendesk/src/models/comment/comments.path.ts b/integrations/ticketing/zendesk/src/models/comment/comments.path.ts index 44fa0f03..1fa297ab 100644 --- a/integrations/ticketing/zendesk/src/models/comment/comments.path.ts +++ b/integrations/ticketing/zendesk/src/models/comment/comments.path.ts @@ -2,7 +2,7 @@ import { BasePath, Config } from '@poozle/engine-idk'; import axios, { AxiosHeaders } from 'axios'; -import { BASE_URL, getPageMeta } from 'common'; +import { getBaseUrl, getPageMeta } from 'common'; import { CommentsResponse, CreateCommentsParams, GetCommentsParams } from './comment.interface'; import { convertComment } from './comment.utils'; @@ -20,7 +20,6 @@ export class CommentsPath extends BasePath { per_page: params.queryParams?.limit ?? 10, page, }; - const response = await axios({ url, headers, @@ -28,7 +27,7 @@ export class CommentsPath extends BasePath { }); return { - data: response.data.comments.map((comment: any) => + data: response.data.comments?.map((comment: any) => convertComment(comment, params.pathParams.ticket_id), ), meta: getPageMeta(response.data, page.toString()), @@ -51,11 +50,12 @@ export class CommentsPath extends BasePath { method: string, headers: AxiosHeaders, params: GetCommentsParams | CreateCommentsParams, - _config: Config, + config: Config, ) { + const BASE_URL = getBaseUrl(config); let url = `${BASE_URL}/tickets/${params.pathParams.ticket_id}/comments`; switch (method) { - case 'GET' && params.pathParams?.ticket_id: + case 'GET': return this.fetchData(url, headers, params as GetCommentsParams); case 'POST': diff --git a/integrations/ticketing/zendesk/src/models/tag/tags.path.ts b/integrations/ticketing/zendesk/src/models/tag/tags.path.ts index ecf07895..8b4cd140 100644 --- a/integrations/ticketing/zendesk/src/models/tag/tags.path.ts +++ b/integrations/ticketing/zendesk/src/models/tag/tags.path.ts @@ -2,7 +2,7 @@ import { BasePath, Config } from '@poozle/engine-idk'; import axios, { AxiosHeaders } from 'axios'; -import { BASE_URL, getPageMeta } from 'common'; +import { getBaseUrl, getPageMeta } from 'common'; import { GetTeamsParams, TagsResponse } from './tag.interface'; import { convertTag } from './tag.utils'; @@ -29,8 +29,9 @@ export class TagsPath extends BasePath { }; } - async run(method: string, headers: AxiosHeaders, params: GetTeamsParams, _config: Config) { - const url = `${BASE_URL}/tag`; + async run(method: string, headers: AxiosHeaders, params: GetTeamsParams, config: Config) { + const BASE_URL = getBaseUrl(config); + const url = `${BASE_URL}/tags`; switch (method) { case 'GET': return this.getTags(url, headers, params); diff --git a/integrations/ticketing/zendesk/src/models/team/team.path.ts b/integrations/ticketing/zendesk/src/models/team/team.path.ts index ee6d4725..477c1353 100644 --- a/integrations/ticketing/zendesk/src/models/team/team.path.ts +++ b/integrations/ticketing/zendesk/src/models/team/team.path.ts @@ -2,7 +2,7 @@ import { BasePath, Config, Params } from '@poozle/engine-idk'; import axios, { AxiosHeaders } from 'axios'; -import { BASE_URL } from 'common'; +import { getBaseUrl } from 'common'; import { GetTeamParams, TeamResponse } from './team.interface'; import { convertTeam } from './team.utils'; @@ -26,7 +26,8 @@ export class TeamPath extends BasePath { return { data: convertTeam(response.data.group) }; } - async run(method: string, headers: AxiosHeaders, params: GetTeamParams, _config: Config) { + async run(method: string, headers: AxiosHeaders, params: GetTeamParams, config: Config) { + const BASE_URL = getBaseUrl(config); const url = `${BASE_URL}/groups/${params.pathParams.team_id}`; switch (method) { case 'GET': diff --git a/integrations/ticketing/zendesk/src/models/team/teams.path.ts b/integrations/ticketing/zendesk/src/models/team/teams.path.ts index 59ca31c7..fc08f9aa 100644 --- a/integrations/ticketing/zendesk/src/models/team/teams.path.ts +++ b/integrations/ticketing/zendesk/src/models/team/teams.path.ts @@ -2,7 +2,7 @@ import { BasePath, Config, Params } from '@poozle/engine-idk'; import axios, { AxiosHeaders } from 'axios'; -import { BASE_URL, getPageMeta } from 'common'; +import { getBaseUrl, getPageMeta } from 'common'; import { TeamResponse, TeamsResponse } from './team.interface'; import { convertTeam } from './team.utils'; @@ -34,7 +34,8 @@ export class TeamsPath extends BasePath { return { data: convertTeam(response.data.group) }; } - async run(method: string, headers: AxiosHeaders, params: Params, _config: Config) { + async run(method: string, headers: AxiosHeaders, params: Params, config: Config) { + const BASE_URL = getBaseUrl(config); const url = `${BASE_URL}/groups`; switch (method) { case 'GET': diff --git a/integrations/ticketing/zendesk/src/models/ticket/ticket.interface.ts b/integrations/ticketing/zendesk/src/models/ticket/ticket.interface.ts index eaaf96cf..5009c45f 100644 --- a/integrations/ticketing/zendesk/src/models/ticket/ticket.interface.ts +++ b/integrations/ticketing/zendesk/src/models/ticket/ticket.interface.ts @@ -22,7 +22,7 @@ export interface GetTicketsParams { queryParams: { limit: number; cursor?: string; - created_after?: string; + created_after: string; }; pathParams: { @@ -38,7 +38,7 @@ export interface GetTicketParams { } export interface createBody extends CreateTicketBody { - organization_id: string; + account_id: string; priority: string; status: string; } @@ -47,7 +47,7 @@ export interface CreateTicketParams { requestBody: createBody; pathParams: { - organization_id: string; + account_id: string; }; } @@ -55,7 +55,7 @@ export interface UpdateTicketParams { requestBody: createBody; pathParams: { - organization_id: string; + account_id: string; ticket_id: string; }; } diff --git a/integrations/ticketing/zendesk/src/models/ticket/ticket.path.ts b/integrations/ticketing/zendesk/src/models/ticket/ticket.path.ts index 159c6a78..8e29ef93 100644 --- a/integrations/ticketing/zendesk/src/models/ticket/ticket.path.ts +++ b/integrations/ticketing/zendesk/src/models/ticket/ticket.path.ts @@ -2,7 +2,7 @@ import { BasePath, Config } from '@poozle/engine-idk'; import axios, { AxiosHeaders } from 'axios'; -import { BASE_URL } from 'common'; +import { getBaseUrl } from 'common'; import { GetTicketParams, TicketResponse, UpdateTicketParams } from './ticket.interface'; import { convertCreateUpdateBody, convertTicket } from './ticket.utils'; @@ -19,7 +19,7 @@ export class TicketPath extends BasePath { }); return { - data: convertTicket(response.data), + data: convertTicket(response.data.ticket), }; } @@ -41,8 +41,9 @@ export class TicketPath extends BasePath { method: string, headers: AxiosHeaders, params: GetTicketParams | UpdateTicketParams, - _config: Config, + config: Config, ) { + const BASE_URL = getBaseUrl(config); const url = `${BASE_URL}/tickets/${params.pathParams.ticket_id}`; switch (method) { diff --git a/integrations/ticketing/zendesk/src/models/ticket/ticket.utils.ts b/integrations/ticketing/zendesk/src/models/ticket/ticket.utils.ts index c889c8e6..cad8672d 100644 --- a/integrations/ticketing/zendesk/src/models/ticket/ticket.utils.ts +++ b/integrations/ticketing/zendesk/src/models/ticket/ticket.utils.ts @@ -22,7 +22,7 @@ export function convertTicket(data: any): TicketWithRaw { }, ], ticket_url: data.url, - tags: data.tags.map((lab: any) => ({ + tags: data.tags?.map((lab: any) => ({ id: '', name: lab.name, })), @@ -42,7 +42,7 @@ export function convertCreateUpdateBody(data: createBody) { return { ticket: { subject: data.name, - organization_id: data.organization_id, + organization_id: data.account_id, status: data.status, ...(data.tags ? { diff --git a/integrations/ticketing/zendesk/src/models/ticket/tickets.path.ts b/integrations/ticketing/zendesk/src/models/ticket/tickets.path.ts index 26e8d17f..4ae15369 100644 --- a/integrations/ticketing/zendesk/src/models/ticket/tickets.path.ts +++ b/integrations/ticketing/zendesk/src/models/ticket/tickets.path.ts @@ -2,7 +2,7 @@ import { BasePath, Config } from '@poozle/engine-idk'; import axios, { AxiosHeaders } from 'axios'; -import { BASE_URL, getMetaParams } from 'common'; +import { convertDatetime, getBaseUrl, getMetaParams } from 'common'; import { CreateTicketParams, @@ -24,7 +24,7 @@ export class TicketsPath extends BasePath { ? { start_time: params.queryParams.cursor ? params.queryParams.cursor - : params.queryParams.created_after, + : convertDatetime(params.queryParams.created_after), } : {}), }; @@ -58,8 +58,9 @@ export class TicketsPath extends BasePath { method: string, headers: AxiosHeaders, params: GetTicketsParams | CreateTicketParams, - _config: Config, + config: Config, ) { + const BASE_URL = getBaseUrl(config); let url = `${BASE_URL}/tickets`; switch (method) { diff --git a/integrations/ticketing/zendesk/src/models/user/user.path.ts b/integrations/ticketing/zendesk/src/models/user/user.path.ts index 6fcb02ad..cdfce41d 100644 --- a/integrations/ticketing/zendesk/src/models/user/user.path.ts +++ b/integrations/ticketing/zendesk/src/models/user/user.path.ts @@ -2,7 +2,7 @@ import { BasePath, Config } from '@poozle/engine-idk'; import axios, { AxiosHeaders } from 'axios'; -import { BASE_URL } from 'common'; +import { getBaseUrl } from 'common'; import { GetUserParams, UserResponse } from './user.interface'; import { convertUser } from './user.utils'; @@ -23,7 +23,8 @@ export class UserPath extends BasePath { }; } - async run(method: string, headers: AxiosHeaders, params: GetUserParams, _config: Config) { + async run(method: string, headers: AxiosHeaders, params: GetUserParams, config: Config) { + const BASE_URL = getBaseUrl(config); switch (method) { case 'GET': const url = `${BASE_URL}/users/${params.pathParams.user_id}`; diff --git a/integrations/ticketing/zendesk/src/models/user/users.path.ts b/integrations/ticketing/zendesk/src/models/user/users.path.ts index aac44466..36996989 100644 --- a/integrations/ticketing/zendesk/src/models/user/users.path.ts +++ b/integrations/ticketing/zendesk/src/models/user/users.path.ts @@ -2,7 +2,7 @@ import { BasePath, Config } from '@poozle/engine-idk'; import axios, { AxiosHeaders } from 'axios'; -import { BASE_URL, getMetaParams } from 'common'; +import { getBaseUrl, getMetaParams } from 'common'; import { GetUsersParams, UsersResponse } from './user.interface'; import { convertUser } from './user.utils'; @@ -12,7 +12,6 @@ export class UsersPath extends BasePath { url: string, headers: AxiosHeaders, params: GetUsersParams, - _config: Config, ): Promise { const final_params = { per_page: params.queryParams.limit, @@ -37,10 +36,11 @@ export class UsersPath extends BasePath { } async run(method: string, headers: AxiosHeaders, params: GetUsersParams, config: Config) { + const BASE_URL = getBaseUrl(config); switch (method) { case 'GET': const url = `${BASE_URL}/incremental/users`; - return this.getUsers(url, headers, params, config); + return this.getUsers(url, headers, params); default: throw new Error('Method not found'); diff --git a/integrations/ticketing/zendesk/src/spec.ts b/integrations/ticketing/zendesk/src/spec.ts index be8bf237..15eb8df0 100644 --- a/integrations/ticketing/zendesk/src/spec.ts +++ b/integrations/ticketing/zendesk/src/spec.ts @@ -1,24 +1,24 @@ /** Copyright (c) 2023, Poozle, all rights reserved. **/ export default { - 'Api-Key': { - input_specification: { - type: 'object', - properties: { - email_id: { - type: 'string', - title: 'Email ID', - description: 'Enter the Email ID', - }, - api_key: { - type: 'string', - title: 'Api Key', - description: 'Enter the API Key', + auth_specification: { + 'Api-Key': { + input_specification: { + type: 'object', + properties: { + email_id: { + type: 'string', + title: 'Email ID', + description: 'Enter the Email ID', + }, + api_key: { + type: 'string', + title: 'Api Key', + description: 'Enter the API Key', + }, }, }, }, - }, - auth_specification: { OAuth2: { token_url: 'https://${zendesk_domain}/oauth/authorizations/new', authorization_url: 'https://${zendesk_domain}/oauth/tokens', From 83a510d0f19a23acd1adf0915be0b7283de2757f Mon Sep 17 00:00:00 2001 From: Manoj K Date: Tue, 15 Aug 2023 17:18:28 -0700 Subject: [PATCH 3/3] feat: change in api structure --- .../models/comment/comment.controller.ts | 60 +++---- .../models/comment/comment.interface.ts | 53 ++++-- .../models/comment/comment.service.ts | 164 ++++++++++++++++++ .../ticketing/models/tag/tag.controller.ts | 8 +- .../ticketing/models/tag/tag.interface.ts | 8 +- .../ticketing/models/ticket/ticket.service.ts | 34 +--- .../models/ticket/tickets.controller.ts | 23 +-- .../models/ticket/tickets.interface.ts | 14 +- .../models/users/users.controller.ts | 4 +- .../ticketing/models/users/users.interface.ts | 8 +- .../categories/ticketing/ticketing.module.ts | 9 +- integration_definitions.json | 8 +- integrations/ticketing/github/package.json | 4 +- integrations/ticketing/github/public/test.js | 15 +- .../src/models/comment/comment.interface.ts | 21 ++- .../github/src/models/comment/comment.path.ts | 2 +- .../src/models/comment/comments.path.ts | 10 +- .../github/src/models/tag/tag.interface.ts | 20 ++- .../github/src/models/tag/tag.path.ts | 17 +- .../github/src/models/tag/tags.path.ts | 2 +- .../src/models/ticket/ticket.interface.ts | 18 +- .../github/src/models/ticket/ticket.path.ts | 4 +- .../github/src/models/ticket/tickets.path.ts | 6 +- .../github/src/models/user/user.interface.ts | 5 +- .../github/src/models/user/users.path.ts | 2 +- integrations/ticketing/jira/package.json | 2 +- integrations/ticketing/jira/public/test.js | 17 +- .../src/models/collection/collections.path.ts | 4 +- .../src/models/comment/comment.interface.ts | 12 +- .../jira/src/models/comment/comment.path.ts | 6 +- .../jira/src/models/comment/comments.path.ts | 10 +- .../src/models/ticket/ticket.interface.ts | 14 +- .../jira/src/models/ticket/ticket.path.ts | 4 +- .../jira/src/models/ticket/tickets.path.ts | 14 +- .../jira/src/models/user/user.interface.ts | 9 +- integrations/ticketing/jira/yarn.lock | 8 +- .../src/models/comment/comment.interface.ts | 13 +- .../src/models/comment/comments.path.ts | 8 +- .../zendesk/src/models/team/team.interface.ts | 1 - .../src/models/ticket/ticket.interface.ts | 6 +- 40 files changed, 395 insertions(+), 252 deletions(-) create mode 100644 engine-server/src/modules/categories/ticketing/models/comment/comment.service.ts diff --git a/engine-server/src/modules/categories/ticketing/models/comment/comment.controller.ts b/engine-server/src/modules/categories/ticketing/models/comment/comment.controller.ts index 2373f579..561d5a2c 100644 --- a/engine-server/src/modules/categories/ticketing/models/comment/comment.controller.ts +++ b/engine-server/src/modules/categories/ticketing/models/comment/comment.controller.ts @@ -13,25 +13,23 @@ import { } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { IntegrationType } from '@prisma/client'; -import { Method } from 'shared/integration_account.utils'; import { IntegrationAccount } from '@@generated/integrationAccount/entities'; import { GetIntegrationAccount } from 'common/decorators/integration_account.decorator'; import { AuthGuard } from 'modules/auth/auth.guard'; -import { DataService } from 'modules/data/data.service'; import { - CommentQueryParams, - CommonCommentQueryParams, - PathParams, PathParamsWithCommentId, TicketingCommentResponse, TicketingCommentsResponse, UpdateCommentBody, CreateCommentBody, + GetCommentsQueryParams, + CommentQueryParams, } from './comment.interface'; +import { CommentService } from './comment.service'; @Controller({ version: '1', @@ -39,42 +37,34 @@ import { }) @ApiTags('Ticketing') export class CommentController { - constructor(private dataService: DataService) {} + // constructor(private dataService: DataService) {} + constructor(private commentService: CommentService) {} - @Get(':collection_id/tickets/:ticket_id/comments') + @Get('comments') @UseGuards(new AuthGuard()) async getComments( - @Query() query: CommentQueryParams, - @Param() - params: PathParams, + @Query() query: GetCommentsQueryParams, @GetIntegrationAccount(IntegrationType.TICKETING) integrationAccount: IntegrationAccount, ): Promise { - const commentsResponse = await this.dataService.getDataFromAccount( + const commentsResponse = await this.commentService.getComments( integrationAccount, - '/comments', - Method.GET, - // eslint-disable-next-line @typescript-eslint/no-explicit-any query, - params, ); return commentsResponse; } - @Get(':collection_id/tickets/:ticket_id/comments/:comment_id') + @Get('comments/:comment_id') async getComment( - @Query() query: CommonCommentQueryParams, + @Query() query: GetCommentsQueryParams, @Param() params: PathParamsWithCommentId, @GetIntegrationAccount(IntegrationType.TICKETING) integrationAccount: IntegrationAccount, ): Promise { - const commentResponse = await this.dataService.getDataFromAccount( + const commentResponse = await this.commentService.getComment( integrationAccount, - `/comments/${params.comment_id}`, - Method.GET, - // eslint-disable-next-line @typescript-eslint/no-explicit-any query, params, ); @@ -82,47 +72,37 @@ export class CommentController { return commentResponse; } - @Patch(':collection_id/tickets/:ticket_id/comments/:comment_id') + @Patch('comments/:comment_id') async patchComment( - @Query() query: CommonCommentQueryParams, + @Query() query: CommentQueryParams, @Param() params: PathParamsWithCommentId, @Body() updateCommentBody: UpdateCommentBody, @GetIntegrationAccount(IntegrationType.TICKETING) integrationAccount: IntegrationAccount, ): Promise { - const commentResponse = await this.dataService.getDataFromAccount( + return this.commentService.pathComment( integrationAccount, - `/comments/${params.comment_id}`, - Method.PATCH, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - query, params, + query, updateCommentBody, ); - - return commentResponse; } - @Post(':collection_id/tickets/:ticket_id/comments') + @Post('comments') async createComment( - @Query() query: CommonCommentQueryParams, + @Query() query: CommentQueryParams, @Param() - params: PathParams, + params: PathParamsWithCommentId, @Body() createCommentBody: CreateCommentBody, @GetIntegrationAccount(IntegrationType.TICKETING) integrationAccount: IntegrationAccount, ): Promise { - const commentResponse = await this.dataService.getDataFromAccount( + return this.commentService.createComment( integrationAccount, - `/comments`, - Method.POST, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - query, params, + query, createCommentBody, ); - - return commentResponse; } } diff --git a/engine-server/src/modules/categories/ticketing/models/comment/comment.interface.ts b/engine-server/src/modules/categories/ticketing/models/comment/comment.interface.ts index a42efa6a..f395f7d8 100644 --- a/engine-server/src/modules/categories/ticketing/models/comment/comment.interface.ts +++ b/engine-server/src/modules/categories/ticketing/models/comment/comment.interface.ts @@ -1,6 +1,7 @@ /** Copyright (c) 2023, Poozle, all rights reserved. **/ -import { IsEnum, IsOptional, IsString } from 'class-validator'; +import { Transform } from 'class-transformer'; +import { IsBoolean, IsEnum, IsOptional, IsString } from 'class-validator'; import { DIRECTION_ENUM, @@ -13,7 +14,7 @@ enum SORT_ENUM { 'created_at' = 'created_at', 'updated_at' = 'updated_at', } -export class CommentQueryParams extends QueryParams { +export class GetCommentsQueryParams extends QueryParams { @IsOptional() @IsEnum(SORT_ENUM) sort?: string; @@ -21,6 +22,19 @@ export class CommentQueryParams extends QueryParams { @IsOptional() @IsEnum(DIRECTION_ENUM) direction?: string; + + @IsOptional() + @IsBoolean() + @Transform(({ value }) => { + return value === 'true' || value === 'True' || value === true; + }) + realtime?: boolean = false; + + @IsString() + collection_id: string; + + @IsString() + ticket_id: string; } export class CommonCommentQueryParams extends JustRawParams {} @@ -42,6 +56,19 @@ export class Comment { updated_at: string; } +export const COMMENT_KEYS = [ + 'id', + 'ticket_id', + 'collection_id', + 'body', + 'html_body', + 'created_by_id', + 'created_by', + 'is_private', + 'updated_at', + 'created_at', +]; + export class TicketingCommentsResponse { data: Comment[]; meta: Meta; @@ -51,23 +78,11 @@ export class TicketingCommentResponse { data: Comment; } -export class PathParams { - @IsString() - collection_id: string; - - @IsString() - ticket_id: string; -} +export class PathParams {} export class PathParamsWithCommentId { @IsString() comment_id: string; - - @IsString() - collection_id: string; - - @IsString() - ticket_id: string; } export class UpdateCommentBody { @@ -79,3 +94,11 @@ export class CreateCommentBody { @IsString() body: string; } + +export class CommentQueryParams { + @IsString() + collection_id: string; + + @IsString() + ticket_id: string; +} diff --git a/engine-server/src/modules/categories/ticketing/models/comment/comment.service.ts b/engine-server/src/modules/categories/ticketing/models/comment/comment.service.ts new file mode 100644 index 00000000..ba6737d1 --- /dev/null +++ b/engine-server/src/modules/categories/ticketing/models/comment/comment.service.ts @@ -0,0 +1,164 @@ +import { IntegrationAccount } from '@@generated/integrationAccount/entities'; +import { Injectable } from '@nestjs/common'; +import { + applyDateFilter, + getBaseQuery, + getMetaParams, + getObjectFromDb, +} from 'common/knex'; +import { pagination } from 'common/utils'; +import { DataService } from 'modules/data/data.service'; +import { Method } from 'shared/integration_account.utils'; +import { + CommentQueryParams, + COMMENT_KEYS, + CreateCommentBody, + GetCommentsQueryParams, + PathParamsWithCommentId, + TicketingCommentsResponse, + UpdateCommentBody, +} from './comment.interface'; + +const DATABASE_NAME = 'ticketing_comment'; + +@Injectable() +export class CommentService { + constructor(private dataService: DataService) {} + + async getComments( + integrationAccount: IntegrationAccount, + query: GetCommentsQueryParams, + ) { + if (query.realtime || !integrationAccount.syncEnabled) { + return await this.getCommentsFoRealtime(integrationAccount, query); + } + + return await this.getCommentsFromDb( + integrationAccount.workspaceName, + DATABASE_NAME, + { + integration_account_id: integrationAccount.integrationAccountId, + collection_id: query.collection_id, + ticket_id: query.ticket_id, + }, + COMMENT_KEYS, + query, + ); + } + + async getComment( + integrationAccount: IntegrationAccount, + query: GetCommentsQueryParams, + params: PathParamsWithCommentId, + ) { + if (query.realtime || !integrationAccount.syncEnabled) { + return await this.getCommentsFoRealtime(integrationAccount, query); + } + + return await this.getCommentFromDb(integrationAccount, query, params); + } + + async getCommentsFoRealtime( + integrationAccount: IntegrationAccount, + query: GetCommentsQueryParams, + ) { + const commentsResponse = await this.dataService.getDataFromAccount( + integrationAccount, + '/comments', + Method.GET, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + query, + {}, + ); + + return commentsResponse; + } + + async getCommentFromDb( + integrationAccount: IntegrationAccount, + query: GetCommentsQueryParams, + params: PathParamsWithCommentId, + ) { + return await getObjectFromDb( + integrationAccount.workspaceName, + DATABASE_NAME, + { + integration_account_id: integrationAccount.integrationAccountId, + id: params.comment_id, + collection_id: query.collection_id, + ticket_id: query.ticket_id, + }, + COMMENT_KEYS, + query.raw, + ); + } + + async getCommentsFromDb( + workspaceName: string, + table: string, + where: Record, + SELECT_KEYS: string[], + queryParams: GetCommentsQueryParams, + ): Promise { + const { offset, limit, page } = pagination( + queryParams.limit, + queryParams.cursor, + ); + + let query = getBaseQuery( + workspaceName, + table, + where, + SELECT_KEYS, + queryParams.raw, + ); + + query = applyDateFilter(query, queryParams); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const data = (await query.limit(limit).offset(offset)) as any[]; + + return { + data, + meta: getMetaParams(data, limit, page), + }; + } + + async pathComment( + integrationAccount: IntegrationAccount, + params: PathParamsWithCommentId, + query: CommentQueryParams, + updateCommentBody: UpdateCommentBody, + ) { + const commentResponse = await this.dataService.getDataFromAccount( + integrationAccount, + `/comments/${params.comment_id}`, + Method.PATCH, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + query, + params, + updateCommentBody, + ); + + return commentResponse; + } + + async createComment( + integrationAccount: IntegrationAccount, + params: PathParamsWithCommentId, + query: CommentQueryParams, + createCommentBody: CreateCommentBody, + ) { + const commentResponse = await this.dataService.getDataFromAccount( + integrationAccount, + `/comments`, + Method.POST, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + query, + params, + createCommentBody, + ); + + return commentResponse; + } +} diff --git a/engine-server/src/modules/categories/ticketing/models/tag/tag.controller.ts b/engine-server/src/modules/categories/ticketing/models/tag/tag.controller.ts index 4b57c207..ad3f2b74 100644 --- a/engine-server/src/modules/categories/ticketing/models/tag/tag.controller.ts +++ b/engine-server/src/modules/categories/ticketing/models/tag/tag.controller.ts @@ -41,7 +41,7 @@ import { export class TagController { constructor(private dataService: DataService) {} - @Get(':collection_id/tags') + @Get('tags') @UseGuards(new AuthGuard()) async getTags( @Query() query: TagQueryParams, @@ -62,7 +62,7 @@ export class TagController { return tagsResponse; } - @Get(':collection_id/tags/:tag_id') + @Get('tags/:tag_id') async getTag( @Query() query: CommonTagQueryParams, @Param() @@ -82,7 +82,7 @@ export class TagController { return tagResponse; } - @Patch(':collection_id/tags/:tag_id') + @Patch('tags/:tag_id') async patchTag( @Query() query: CommonTagQueryParams, @Param() @@ -104,7 +104,7 @@ export class TagController { return tagResponse; } - @Post(':collection_id/tags') + @Post('tags') async createTag( @Query() query: CommonTagQueryParams, @Param() diff --git a/engine-server/src/modules/categories/ticketing/models/tag/tag.interface.ts b/engine-server/src/modules/categories/ticketing/models/tag/tag.interface.ts index 6f8158f3..324bcdce 100644 --- a/engine-server/src/modules/categories/ticketing/models/tag/tag.interface.ts +++ b/engine-server/src/modules/categories/ticketing/models/tag/tag.interface.ts @@ -25,17 +25,11 @@ export class TicketingTagResponse { data: Tag; } -export class PathParams { - @IsString() - collection_id: string; -} +export class PathParams {} export class PathParamsWithTagId { @IsString() tag_name: string; - - @IsString() - collection_id: string; } export class UpdateTagBody { diff --git a/engine-server/src/modules/categories/ticketing/models/ticket/ticket.service.ts b/engine-server/src/modules/categories/ticketing/models/ticket/ticket.service.ts index aea74791..98601525 100644 --- a/engine-server/src/modules/categories/ticketing/models/ticket/ticket.service.ts +++ b/engine-server/src/modules/categories/ticketing/models/ticket/ticket.service.ts @@ -36,35 +36,15 @@ const DATABASE_NAME = 'ticketing_ticket'; export class TicketService { constructor(private dataService: DataService) {} - async getTickets( - integrationAccount: IntegrationAccount, - query: ListTicketsQueryParams, - ) { - return await this.getListFromDb( - integrationAccount.workspaceName, - DATABASE_NAME, - { - integration_account_id: integrationAccount.integrationAccountId, - }, - TICKET_KEYS, - query, - ); - } - async getCollectionTickets( integrationAccount: IntegrationAccount, query: ListTicketsQueryParams, - params: PathParamsWithCollectionId, ) { if (query.realtime || !integrationAccount.syncEnabled) { - return await this.getTicketsForRealtime( - integrationAccount, - query, - params, - ); + return await this.getTicketsForRealtime(integrationAccount, query); } - return await this.getTicketsFromDb(integrationAccount, query, params); + return await this.getTicketsFromDb(integrationAccount, query); } async getTicket( @@ -113,14 +93,13 @@ export class TicketService { async getTicketsFromDb( integrationAccount: IntegrationAccount, query: ListTicketsQueryParams, - params: PathParamsWithCollectionId, ) { return await this.getListFromDb( integrationAccount.workspaceName, DATABASE_NAME, { integration_account_id: integrationAccount.integrationAccountId, - collection_id: params.collection_id, + collection_id: query.collection_id, }, TICKET_KEYS, query, @@ -138,7 +117,6 @@ export class TicketService { { integration_account_id: integrationAccount.integrationAccountId, id: params.ticket_id, - collection_id: params.collection_id, }, TICKET_KEYS, query.raw, @@ -148,7 +126,6 @@ export class TicketService { async getTicketsForRealtime( integrationAccount: IntegrationAccount, query: GetTicketsQueryParams, - params: PathParamsWithCollectionId, ) { const ticketsResponse = await this.dataService.getDataFromAccount( integrationAccount, @@ -160,10 +137,11 @@ export class TicketService { raw: query.raw, created_after: query.created_after, created_before: query.created_before, + collection_id: query.collection_id, }, // eslint-disable-next-line @typescript-eslint/no-explicit-any - params as any, + {} as any, ); return ticketsResponse; @@ -179,7 +157,7 @@ export class TicketService { `/tickets/${params.ticket_id}`, Method.GET, - { raw: query.raw }, + { raw: query.raw, collection_id: query.collection_id }, // eslint-disable-next-line @typescript-eslint/no-explicit-any params as any, ); diff --git a/engine-server/src/modules/categories/ticketing/models/ticket/tickets.controller.ts b/engine-server/src/modules/categories/ticketing/models/ticket/tickets.controller.ts index 9d55d203..f6961e6e 100644 --- a/engine-server/src/modules/categories/ticketing/models/ticket/tickets.controller.ts +++ b/engine-server/src/modules/categories/ticketing/models/ticket/tickets.controller.ts @@ -42,37 +42,20 @@ export class TicketsController { constructor(private ticketService: TicketService) {} @Get('tickets') - async getTickets( - @Query() query: ListTicketsQueryParams, - @GetIntegrationAccount(IntegrationType.TICKETING) - integrationAccount: IntegrationAccount, - ): Promise { - const ticketsResponse = await this.ticketService.getTickets( - integrationAccount, - query, - ); - - return ticketsResponse; - } - - @Get(':collection_id/tickets') async getCollectionTickets( @Query() query: ListTicketsQueryParams, - @Param() - params: PathParamsWithCollectionId, @GetIntegrationAccount(IntegrationType.TICKETING) integrationAccount: IntegrationAccount, ): Promise { const ticketsResponse = await this.ticketService.getCollectionTickets( integrationAccount, query, - params, ); return ticketsResponse; } - @Get(':collection_id/tickets/:ticket_id') + @Get('tickets/:ticket_id') async getTicketId( @Query() query: GetTicketsQueryParams, @Param() @@ -89,7 +72,7 @@ export class TicketsController { return ticketResponse; } - @Patch(':collection_id/tickets/:ticket_id') + @Patch('tickets/:ticket_id') async patchTicket( @Query() query: CommonTicketQueryParams, @Param() @@ -108,7 +91,7 @@ export class TicketsController { return ticketResponse; } - @Post(':collection_id/tickets') + @Post('tickets') async createTicket( @Query() query: CommonTicketQueryParams, @Param() diff --git a/engine-server/src/modules/categories/ticketing/models/ticket/tickets.interface.ts b/engine-server/src/modules/categories/ticketing/models/ticket/tickets.interface.ts index cacf852d..a8a22e6d 100644 --- a/engine-server/src/modules/categories/ticketing/models/ticket/tickets.interface.ts +++ b/engine-server/src/modules/categories/ticketing/models/ticket/tickets.interface.ts @@ -13,6 +13,9 @@ export class ListTicketsQueryParams extends QueryParams { return value === 'true' || value === 'True' || value === true; }) realtime?: boolean = false; + + @IsString() + collection_id: string; } export class GetTicketsQueryParams extends QueryParams { @@ -22,19 +25,16 @@ export class GetTicketsQueryParams extends QueryParams { return value === 'true' || value === 'True' || value === true; }) realtime?: boolean = false; -} - -export class CommonTicketQueryParams extends JustRawParams {} -export class PathParamsWithCollectionId { @IsString() collection_id: string; } -export class PathParamsWithTicketId { - @IsString() - collection_id: string; +export class CommonTicketQueryParams extends JustRawParams {} + +export class PathParamsWithCollectionId {} +export class PathParamsWithTicketId { @IsString() ticket_id: string; } diff --git a/engine-server/src/modules/categories/ticketing/models/users/users.controller.ts b/engine-server/src/modules/categories/ticketing/models/users/users.controller.ts index 018404e9..d1d65163 100644 --- a/engine-server/src/modules/categories/ticketing/models/users/users.controller.ts +++ b/engine-server/src/modules/categories/ticketing/models/users/users.controller.ts @@ -30,7 +30,7 @@ import { export class UsersController { constructor(private dataService: DataService) {} - @Get(':collection_id/users/:user_id') + @Get('users/:user_id') async getUserId( @Query() query: GetUserParams, @Param() @@ -51,7 +51,7 @@ export class UsersController { return userResponse; } - @Get(':collection_id/users') + @Get('users') async getUsers( @Query() query: ListUserParams, @Param() diff --git a/engine-server/src/modules/categories/ticketing/models/users/users.interface.ts b/engine-server/src/modules/categories/ticketing/models/users/users.interface.ts index c2dfc321..8c5a5912 100644 --- a/engine-server/src/modules/categories/ticketing/models/users/users.interface.ts +++ b/engine-server/src/modules/categories/ticketing/models/users/users.interface.ts @@ -8,15 +8,9 @@ import { Meta } from 'common/interfaces/response.interface'; export class ListUserParams extends QueryParams {} export class GetUserParams extends JustRawParams {} -export class PathParams { - @IsString() - collection_id: string; -} +export class PathParams {} export class PathParamsWithUserId { - @IsString() - collection_id: string; - @IsString() user_id: string; } diff --git a/engine-server/src/modules/categories/ticketing/ticketing.module.ts b/engine-server/src/modules/categories/ticketing/ticketing.module.ts index f791080f..9a3f606f 100644 --- a/engine-server/src/modules/categories/ticketing/ticketing.module.ts +++ b/engine-server/src/modules/categories/ticketing/ticketing.module.ts @@ -17,6 +17,7 @@ import { TicketsController } from './models/ticket/tickets.controller'; import { UsersController } from './models/users/users.controller'; import { AccountController } from './models/account/account.controller'; import { AccountService } from './models/account/account.service'; +import { CommentService } from './models/comment/comment.service'; @Module({ imports: [PrismaModule, HttpModule, IntegrationAccountModule, DataModule], @@ -29,7 +30,13 @@ import { AccountService } from './models/account/account.service'; CommentController, TagController, ], - providers: [PrismaService, CollectionService, TicketService, AccountService], + providers: [ + PrismaService, + CollectionService, + TicketService, + AccountService, + CommentService, + ], exports: [], }) export class TicketingModule {} diff --git a/integration_definitions.json b/integration_definitions.json index cd3713e0..b0964b82 100644 --- a/integration_definitions.json +++ b/integration_definitions.json @@ -3,18 +3,18 @@ "name": "Github", "key": "github", "icon": "github.svg", - "version": "0.1.9", + "version": "0.1.10", "releaseStage": "ALPHA", - "sourceUrl": "https://raw.githubusercontent.com/poozlehq/build-artifacts/main/ticketing/github/0.1.9/index.js", + "sourceUrl": "https://raw.githubusercontent.com/poozlehq/build-artifacts/main/ticketing/github/0.1.10/index.js", "integrationType": "TICKETING" }, { "name": "Jira", "key": "jira", "icon": "jira.svg", - "version": "0.1.9", + "version": "0.1.10", "releaseStage": "ALPHA", - "sourceUrl": "https://raw.githubusercontent.com/poozlehq/build-artifacts/main/ticketing/jira/0.1.9/index.js", + "sourceUrl": "https://raw.githubusercontent.com/poozlehq/build-artifacts/main/ticketing/jira/0.1.10/index.js", "integrationType": "TICKETING" }, { diff --git a/integrations/ticketing/github/package.json b/integrations/ticketing/github/package.json index 19d07551..a2449b34 100644 --- a/integrations/ticketing/github/package.json +++ b/integrations/ticketing/github/package.json @@ -1,6 +1,6 @@ { "name": "@poozle/github", - "version": "0.1.8", + "version": "0.1.10", "description": "github extension for Poozle", "exports": { ".": { @@ -62,4 +62,4 @@ "last 1 safari version" ] } -} +} \ No newline at end of file diff --git a/integrations/ticketing/github/public/test.js b/integrations/ticketing/github/public/test.js index 529b197d..8be88b80 100644 --- a/integrations/ticketing/github/public/test.js +++ b/integrations/ticketing/github/public/test.js @@ -3,7 +3,20 @@ const { main } = require('../github/index'); async function run() { - const response = await main('RUN', {}); + const response = await main('RUN', { + path: '/tickets', + method: 'GET', + params: { + queryParams: { raw: false, collection_id: '', ticket_id: '', limit: 10 }, + pathParams: {}, + requestBody: {}, + }, + config: { + api_key: '', + authType: 'Api Key', + org: '', + }, + }); console.log(response); } diff --git a/integrations/ticketing/github/src/models/comment/comment.interface.ts b/integrations/ticketing/github/src/models/comment/comment.interface.ts index 2dcd6013..0c8d0a67 100644 --- a/integrations/ticketing/github/src/models/comment/comment.interface.ts +++ b/integrations/ticketing/github/src/models/comment/comment.interface.ts @@ -20,39 +20,42 @@ export interface GetCommentsParams { queryParams: { limit: number; cursor: string; - created_after?: string; - }; - - pathParams: { collection_id: string; ticket_id: string; }; + + pathParams: {}; } export interface GetCommentParams { - pathParams: { + queryParams: { collection_id: string; ticket_id: string; + }; + pathParams: { comment_id: string; }; } export interface CreateCommentParams { requestBody: CreateCommentBody; - - pathParams: { + queryParams: { collection_id: string; ticket_id: string; }; + + pathParams: {}; } export interface UpdateCommentParams { requestBody: UpdateCommentBody; + queryParams: { + collection_id: string; + ticket_id: string; + }; pathParams: { comment_id: string; - collection_id: string; - ticket_id: string; }; } diff --git a/integrations/ticketing/github/src/models/comment/comment.path.ts b/integrations/ticketing/github/src/models/comment/comment.path.ts index 72eaff4a..eab02f2f 100644 --- a/integrations/ticketing/github/src/models/comment/comment.path.ts +++ b/integrations/ticketing/github/src/models/comment/comment.path.ts @@ -34,7 +34,7 @@ export class CommentPath extends BasePath { params: GetCommentParams | UpdateCommentParams, config: Config, ) { - const url = `${BASE_URL}/repos/${config.org}/${params.pathParams?.collection_id}/issues/comments/${params.pathParams?.comment_id}`; + const url = `${BASE_URL}/repos/${config.org}/${params.queryParams?.collection_id}/issues/comments/${params.pathParams?.comment_id}`; switch (method) { case 'GET': diff --git a/integrations/ticketing/github/src/models/comment/comments.path.ts b/integrations/ticketing/github/src/models/comment/comments.path.ts index 27582f80..104b6e46 100644 --- a/integrations/ticketing/github/src/models/comment/comments.path.ts +++ b/integrations/ticketing/github/src/models/comment/comments.path.ts @@ -70,17 +70,17 @@ export class CommentsPath extends BasePath { let url = ''; switch (method) { case 'GET': - case params.pathParams?.collection_id: - case params.pathParams?.ticket_id: - url = `${BASE_URL}/repos/${config.org}/${params.pathParams?.collection_id}/issues/${params.pathParams?.ticket_id}/comments`; + case params.queryParams?.collection_id: + case params.queryParams?.ticket_id: + url = `${BASE_URL}/repos/${config.org}/${params.queryParams?.collection_id}/issues/${params.queryParams?.ticket_id}/comments`; return this.fetchData(url, headers, params as GetCommentsParams); case 'POST': - url = `${BASE_URL}/repos/${config.org}/${params.pathParams?.collection_id}/issues/${params.pathParams?.ticket_id}/comments`; + url = `${BASE_URL}/repos/${config.org}/${params.queryParams?.collection_id}/issues/${params.queryParams?.ticket_id}/comments`; return this.createComment(url, headers, params as CreateCommentParams); default: - url = `${BASE_URL}/repos/${config.org}/${params.pathParams?.collection_id}/issues/comments`; + url = `${BASE_URL}/repos/${config.org}/${params.queryParams?.collection_id}/issues/comments`; return this.fetchData(url, headers, params as GetCommentsParams); } } diff --git a/integrations/ticketing/github/src/models/tag/tag.interface.ts b/integrations/ticketing/github/src/models/tag/tag.interface.ts index 15bbfcd1..54fb3089 100644 --- a/integrations/ticketing/github/src/models/tag/tag.interface.ts +++ b/integrations/ticketing/github/src/models/tag/tag.interface.ts @@ -21,31 +21,35 @@ export interface GetTagsParams { queryParams: { limit: number; cursor: string; - }; - - pathParams: { collection_id: string; }; + + pathParams: {}; } export interface GetTagParams { - pathParams: { + queryParams: { collection_id: string; }; + pathParams: { + tag_name: string; + }; } export interface CreateTagParams { requestBody: CreateTagBody; - - pathParams: { + queryParams: { collection_id: string; }; + pathParams: {}; } export interface UpdateTagParams { requestBody: UpdateTagBody; - - pathParams: { + queryParams: { collection_id: string; }; + pathParams: { + tag_name: string; + }; } diff --git a/integrations/ticketing/github/src/models/tag/tag.path.ts b/integrations/ticketing/github/src/models/tag/tag.path.ts index 9ecd04e1..886578ac 100644 --- a/integrations/ticketing/github/src/models/tag/tag.path.ts +++ b/integrations/ticketing/github/src/models/tag/tag.path.ts @@ -4,12 +4,12 @@ import { BasePath, Config, Params, convertToRequestBody } from '@poozle/engine-i import axios, { AxiosHeaders } from 'axios'; import { BASE_URL } from 'common'; -import { TagResponse } from './tag.interface'; +import { GetTagParams, TagResponse, UpdateTagParams } from './tag.interface'; import { convertTag, tagMapping } from './tag.utils'; export class TagPath extends BasePath { // eslint-disable-next-line @typescript-eslint/no-unused-vars - async getTag(url: string, headers: AxiosHeaders, _params: Params): Promise { + async getTag(url: string, headers: AxiosHeaders, _params: GetTagParams): Promise { const response = await axios({ url, headers, @@ -27,14 +27,19 @@ export class TagPath extends BasePath { return { data: convertTag(response.data) }; } - async run(method: string, headers: AxiosHeaders, params: Params, config: Config) { - const url = `${BASE_URL}/repos/${config.org}/${params.pathParams?.collection_id}/labels/${params.pathParams?.tag_name}`; + async run( + method: string, + headers: AxiosHeaders, + params: GetTagParams | UpdateTagParams, + config: Config, + ) { + const url = `${BASE_URL}/repos/${config.org}/${params.queryParams?.collection_id}/labels/${params.pathParams?.tag_name}`; switch (method) { case 'GET': - return this.getTag(url, headers, params); + return this.getTag(url, headers, params as GetTagParams); case 'PATCH': - return this.updateTag(url, headers, params); + return this.updateTag(url, headers, params as UpdateTagParams); default: throw new Error('Method not found'); diff --git a/integrations/ticketing/github/src/models/tag/tags.path.ts b/integrations/ticketing/github/src/models/tag/tags.path.ts index c69cb01e..2b95846f 100644 --- a/integrations/ticketing/github/src/models/tag/tags.path.ts +++ b/integrations/ticketing/github/src/models/tag/tags.path.ts @@ -49,7 +49,7 @@ export class TagsPath extends BasePath { params: GetTagsParams | CreateTagParams, config: Config, ) { - const url = `${BASE_URL}/repos/${config.org}/${params.pathParams?.collection_id}/labels`; + const url = `${BASE_URL}/repos/${config.org}/${params.queryParams?.collection_id}/labels`; switch (method) { case 'GET': return this.getTags(url, headers, params as GetTagsParams); diff --git a/integrations/ticketing/github/src/models/ticket/ticket.interface.ts b/integrations/ticketing/github/src/models/ticket/ticket.interface.ts index 11a327f5..4b777e0a 100644 --- a/integrations/ticketing/github/src/models/ticket/ticket.interface.ts +++ b/integrations/ticketing/github/src/models/ticket/ticket.interface.ts @@ -22,33 +22,37 @@ export interface GetTicketsParams { limit: number; cursor: string; created_after?: string; - }; - - pathParams: { collection_id: string; }; + + pathParams: {}; } export interface GetTicketParams { - pathParams: { + queryParams: { collection_id: string; + }; + pathParams: { ticket_id: string; }; } export interface CreateTicketParams { requestBody: CreateTicketBody; - - pathParams: { + queryParams: { collection_id: string; }; + + pathParams: {}; } export interface UpdateTicketParams { requestBody: UpdateTicketBody; + queryParams: { + collection_id: string; + }; pathParams: { ticket_id: string; - collection_id: string; }; } diff --git a/integrations/ticketing/github/src/models/ticket/ticket.path.ts b/integrations/ticketing/github/src/models/ticket/ticket.path.ts index 8b240ef7..612975a7 100644 --- a/integrations/ticketing/github/src/models/ticket/ticket.path.ts +++ b/integrations/ticketing/github/src/models/ticket/ticket.path.ts @@ -33,7 +33,7 @@ export class TicketPath extends BasePath { const response = await axios.patch(url, createBody, { headers }); return { - data: convertTicket(response.data, params.pathParams?.collection_id as string | null), + data: convertTicket(response.data, params.queryParams?.collection_id as string | null), }; } @@ -43,7 +43,7 @@ export class TicketPath extends BasePath { params: UpdateTicketParams | GetTicketParams, config: Config, ) { - const url = `${BASE_URL}/repos/${config.org}/${params.pathParams?.collection_id}/issues/${params.pathParams?.ticket_id}`; + const url = `${BASE_URL}/repos/${config.org}/${params.queryParams?.collection_id}/issues/${params.pathParams?.ticket_id}`; switch (method) { case 'GET': diff --git a/integrations/ticketing/github/src/models/ticket/tickets.path.ts b/integrations/ticketing/github/src/models/ticket/tickets.path.ts index aaed149f..1cca6cd1 100644 --- a/integrations/ticketing/github/src/models/ticket/tickets.path.ts +++ b/integrations/ticketing/github/src/models/ticket/tickets.path.ts @@ -40,7 +40,7 @@ export class TicketsPath extends BasePath { return { // eslint-disable-next-line @typescript-eslint/no-explicit-any data: responseData.map((data: any) => - convertTicket(data, params.pathParams?.collection_id as string | null), + convertTicket(data, params.queryParams?.collection_id as string | null), ), meta: getMetaParams(response.data, limit, page), @@ -60,7 +60,7 @@ export class TicketsPath extends BasePath { const response = await axios.post(url, createBody, { headers }); return { - data: convertTicket(response.data, params.pathParams?.collection_id as string | null), + data: convertTicket(response.data, params.queryParams?.collection_id as string | null), }; } @@ -70,7 +70,7 @@ export class TicketsPath extends BasePath { params: GetTicketsParams | CreateTicketParams, config: Config, ) { - const url = `${BASE_URL}/repos/${config.org}/${params.pathParams?.collection_id}/issues`; + const url = `${BASE_URL}/repos/${config.org}/${params.queryParams?.collection_id}/issues`; switch (method) { case 'GET': diff --git a/integrations/ticketing/github/src/models/user/user.interface.ts b/integrations/ticketing/github/src/models/user/user.interface.ts index 54f6affb..be52e9b3 100644 --- a/integrations/ticketing/github/src/models/user/user.interface.ts +++ b/integrations/ticketing/github/src/models/user/user.interface.ts @@ -21,11 +21,10 @@ export interface GetUsersParams { queryParams: { limit: number; cursor: string; - }; - - pathParams: { collection_id: string; }; + + pathParams: {}; } export interface GetUserParams { diff --git a/integrations/ticketing/github/src/models/user/users.path.ts b/integrations/ticketing/github/src/models/user/users.path.ts index 76acd96f..cae7d0e8 100644 --- a/integrations/ticketing/github/src/models/user/users.path.ts +++ b/integrations/ticketing/github/src/models/user/users.path.ts @@ -21,7 +21,7 @@ export class UsersPath extends BasePath { }; const response = await axios({ - url: `${BASE_URL}/repos/${config.org}/${params.pathParams?.collection_id}/assignees`, + url: `${BASE_URL}/repos/${config.org}/${params.queryParams?.collection_id}/assignees`, headers, params: final_params, }); diff --git a/integrations/ticketing/jira/package.json b/integrations/ticketing/jira/package.json index fe61d3f6..daff5bc0 100644 --- a/integrations/ticketing/jira/package.json +++ b/integrations/ticketing/jira/package.json @@ -48,7 +48,7 @@ }, "dependencies": { "@poozle/engine-edk": "^0.2.13", - "@poozle/engine-idk": "^0.1.36", + "@poozle/engine-idk": "^0.1.44", "axios": "^1.4.0", "dayjs": "^1.11.9" }, diff --git a/integrations/ticketing/jira/public/test.js b/integrations/ticketing/jira/public/test.js index 3189cda8..a91a6e19 100644 --- a/integrations/ticketing/jira/public/test.js +++ b/integrations/ticketing/jira/public/test.js @@ -3,18 +3,23 @@ const { main } = require('../jira/index'); async function run() { - const response = await main('CHECK', { - path: '/collections', + const response = await main('RUN', { + path: '/users', method: 'GET', - config: {}, + config: { + api_key: '', + email_id: '', + authType: '', + jira_domain: '', + }, params: { queryParams: { limit: 5, - raw: true, - }, - pathParams: { + raw: false, + collection_id: '', ticket_id: '', }, + pathParams: { comment_id: '' }, }, }); diff --git a/integrations/ticketing/jira/src/models/collection/collections.path.ts b/integrations/ticketing/jira/src/models/collection/collections.path.ts index b675831d..c80c9185 100644 --- a/integrations/ticketing/jira/src/models/collection/collections.path.ts +++ b/integrations/ticketing/jira/src/models/collection/collections.path.ts @@ -9,9 +9,7 @@ import { convertCollection } from './collection.utils'; function paginate(array: Collection[], page_size: number, page_number: number) { // human-readable page numbers usually start with 1, so we reduce 1 in the first argument - array.slice((page_number - 1) * page_size, page_number * page_size); - - return array; + return array.slice((page_number - 1) * page_size, page_number * page_size); } export class CollectionsPath extends BasePath { diff --git a/integrations/ticketing/jira/src/models/comment/comment.interface.ts b/integrations/ticketing/jira/src/models/comment/comment.interface.ts index 957cfbeb..6b5d7128 100644 --- a/integrations/ticketing/jira/src/models/comment/comment.interface.ts +++ b/integrations/ticketing/jira/src/models/comment/comment.interface.ts @@ -18,8 +18,10 @@ export interface CommentResponse { } export interface GetCommentParams { - pathParams: { + queryParams: { ticket_id: string; + }; + pathParams: { comment_id: string; }; } @@ -32,16 +34,16 @@ export interface GetCommentsParams { queryParams: { limit: number; cursor?: string; - }; - - pathParams: { ticket_id: string; }; + + pathParams: {}; } export interface CreateCommentParams { requestBody: CreateCommentBody; - pathParams: { + queryParams: { ticket_id: string; }; + pathParams: {}; } diff --git a/integrations/ticketing/jira/src/models/comment/comment.path.ts b/integrations/ticketing/jira/src/models/comment/comment.path.ts index 699b146d..3e99aa92 100644 --- a/integrations/ticketing/jira/src/models/comment/comment.path.ts +++ b/integrations/ticketing/jira/src/models/comment/comment.path.ts @@ -18,7 +18,7 @@ export class CommentPath extends BasePath { headers, }); - return { data: convertComments(response.data, params.pathParams.ticket_id) }; + return { data: convertComments(response.data, params.queryParams.ticket_id) }; } async updateComment( @@ -29,7 +29,7 @@ export class CommentPath extends BasePath { const updateBody: UpdateCommentBody = params.requestBody as UpdateCommentBody; const response = await axios.put(url, updateBody, { headers }); - return { data: convertComments(response.data, params.pathParams?.ticket_id) }; + return { data: convertComments(response.data, params.queryParams?.ticket_id) }; } async run( @@ -40,7 +40,7 @@ export class CommentPath extends BasePath { ) { const baseURL = await getBaseUrl(config, headers); - const url = `${baseURL}/issue/${params.pathParams.ticket_id}/comment/${params.pathParams.comment_id}`; + const url = `${baseURL}/issue/${params.queryParams.ticket_id}/comment/${params.pathParams.comment_id}`; switch (method) { case 'GET': return this.fetchSingleComment(url, headers, params); diff --git a/integrations/ticketing/jira/src/models/comment/comments.path.ts b/integrations/ticketing/jira/src/models/comment/comments.path.ts index 6c1dbec5..b682055b 100644 --- a/integrations/ticketing/jira/src/models/comment/comments.path.ts +++ b/integrations/ticketing/jira/src/models/comment/comments.path.ts @@ -17,7 +17,7 @@ export class CommentsPath extends BasePath { async fetchComments( url: string, headers: AxiosHeaders, - { queryParams, pathParams }: GetCommentsParams, + { queryParams }: GetCommentsParams, ): Promise { const page = typeof queryParams?.cursor === 'string' ? parseInt(queryParams?.cursor) : 1; @@ -26,14 +26,14 @@ export class CommentsPath extends BasePath { headers, params: { maxResults: queryParams.limit, - startAt: page, + startAt: page - 1, }, }); return { // eslint-disable-next-line @typescript-eslint/no-explicit-any data: response.data.comments.map((data: any) => - convertComments(data, pathParams.ticket_id as string | null), + convertComments(data, queryParams.ticket_id as string | null), ), meta: getMetaParams(response.data, queryParams.limit, page), }; @@ -48,7 +48,7 @@ export class CommentsPath extends BasePath { const response = await axios.post(url, createBody, { headers }); - return { data: convertComments(response.data, params.pathParams?.ticket_id) }; + return { data: convertComments(response.data, params.queryParams?.ticket_id) }; } async run( @@ -59,7 +59,7 @@ export class CommentsPath extends BasePath { ) { const baseURL = await getBaseUrl(config, headers); - const url = `${baseURL}/issue/${params.pathParams?.ticket_id}/comment`; + const url = `${baseURL}/issue/${params.queryParams?.ticket_id}/comment`; switch (method) { case 'GET': return this.fetchComments(url, headers, params as GetCommentsParams); diff --git a/integrations/ticketing/jira/src/models/ticket/ticket.interface.ts b/integrations/ticketing/jira/src/models/ticket/ticket.interface.ts index 9739ed87..e1e5e6bb 100644 --- a/integrations/ticketing/jira/src/models/ticket/ticket.interface.ts +++ b/integrations/ticketing/jira/src/models/ticket/ticket.interface.ts @@ -9,8 +9,10 @@ export interface TicketWithRaw extends Ticket { /* eslint-disable notice/notice */ export interface FetchTicketParams { - pathParams: { + queryParams: { collection_id: string; + }; + pathParams: { ticket_id: string; }; } @@ -24,21 +26,19 @@ export interface FetchTicketsParams { limit: number; cursor?: string; created_after?: string; - }; - - pathParams: { collection_id: string; }; + + pathParams: {}; } export interface CreateTicketParams { queryParams: { limit: number; cursor?: string; + collection_id: string; }; requestBody: CreateTicketBody; - pathParams: { - collection_id: string; - }; + pathParams: {}; } diff --git a/integrations/ticketing/jira/src/models/ticket/ticket.path.ts b/integrations/ticketing/jira/src/models/ticket/ticket.path.ts index 931e197f..a191f950 100644 --- a/integrations/ticketing/jira/src/models/ticket/ticket.path.ts +++ b/integrations/ticketing/jira/src/models/ticket/ticket.path.ts @@ -16,7 +16,7 @@ export class TicketPath extends BasePath { }); return { - data: convertTicket(response.data, params.pathParams.collection_id), + data: convertTicket(response.data, params.queryParams.collection_id), }; } catch (e) { throw new Error(e); @@ -54,7 +54,7 @@ export class TicketPath extends BasePath { const response = await axios.put(url, cleanedCreateBody, { headers }); return { - data: convertTicket(response.data, params.pathParams.collection_id), + data: convertTicket(response.data, params.queryParams.collection_id), }; } diff --git a/integrations/ticketing/jira/src/models/ticket/tickets.path.ts b/integrations/ticketing/jira/src/models/ticket/tickets.path.ts index 5a704a53..29a3b92f 100644 --- a/integrations/ticketing/jira/src/models/ticket/tickets.path.ts +++ b/integrations/ticketing/jira/src/models/ticket/tickets.path.ts @@ -8,11 +8,7 @@ import { CreateTicketParams, FetchTicketsParams } from './ticket.interface'; import { convertTicket, JIRATicketBody } from './ticket.utils'; export class TicketsPath extends BasePath { - async fetchTickets( - url: string, - headers: AxiosHeaders, - { queryParams, pathParams }: FetchTicketsParams, - ) { + async fetchTickets(url: string, headers: AxiosHeaders, { queryParams }: FetchTicketsParams) { const page = queryParams.cursor ? parseInt(queryParams.cursor) : 0; const startAt = page * queryParams.limit; const since = queryParams.created_after @@ -33,7 +29,7 @@ export class TicketsPath extends BasePath { return { // eslint-disable-next-line @typescript-eslint/no-explicit-any data: response.data.issues.map((data: any) => - convertTicket(data, pathParams?.collection_id as string | null), + convertTicket(data, queryParams?.collection_id as string | null), ), meta: getMetaParams(response.data.issues, queryParams.limit as number, page), }; @@ -46,7 +42,7 @@ export class TicketsPath extends BasePath { const createBody: JIRATicketBody = { fields: { project: { - id: params.pathParams.collection_id as string, + id: params.queryParams.collection_id as string, }, summary: body.name, issuetype: { @@ -76,7 +72,7 @@ export class TicketsPath extends BasePath { const response = await axios.get(createResponse.data.self, { headers }); return { - data: convertTicket(response.data, params.pathParams.collection_id), + data: convertTicket(response.data, params.queryParams.collection_id), }; } catch (e) { throw new Error(e); @@ -94,7 +90,7 @@ export class TicketsPath extends BasePath { switch (method) { case 'GET': - url = `${baseURL}/search?jql=project=${params.pathParams.collection_id}`; + url = `${baseURL}/search?jql=project=${params.queryParams.collection_id}`; return this.fetchTickets(url, headers, params); case 'POST': diff --git a/integrations/ticketing/jira/src/models/user/user.interface.ts b/integrations/ticketing/jira/src/models/user/user.interface.ts index 54f6affb..dadb47b7 100644 --- a/integrations/ticketing/jira/src/models/user/user.interface.ts +++ b/integrations/ticketing/jira/src/models/user/user.interface.ts @@ -21,16 +21,17 @@ export interface GetUsersParams { queryParams: { limit: number; cursor: string; - }; - - pathParams: { collection_id: string; }; + + pathParams: {}; } export interface GetUserParams { - pathParams: { + queryParams: { collection_id: string; + }; + pathParams: { user_id: string; }; } diff --git a/integrations/ticketing/jira/yarn.lock b/integrations/ticketing/jira/yarn.lock index 27bd7cf6..d2cf2a5b 100644 --- a/integrations/ticketing/jira/yarn.lock +++ b/integrations/ticketing/jira/yarn.lock @@ -1116,10 +1116,10 @@ dependencies: axios "^1.3.2" -"@poozle/engine-idk@^0.1.36": - version "0.1.36" - resolved "https://registry.yarnpkg.com/@poozle/engine-idk/-/engine-idk-0.1.36.tgz#1b9578b331c0f7debf8a7ee82cebf3f10b7cd8bc" - integrity sha512-Fi/0Opi/D/mJd4nEX9A8Yz7AgWEUpfFW9CoE8Mt1tq5JAPrZE794BMpYxWa2Sv927Ow5CiwWMRcDp5um/Ts/hg== +"@poozle/engine-idk@^0.1.44": + version "0.1.44" + resolved "https://registry.yarnpkg.com/@poozle/engine-idk/-/engine-idk-0.1.44.tgz#ec8df73cd5c394998c2314f7e8e43415e22d27c0" + integrity sha512-ibZ7H1pjC+z2z2mzgEKBP9wSAxMJq1fZJRv4VeQmojLKmD5G7tZbpjLgtVgmjWnipwJkVuEJgZ1IliJoS/yVQw== dependencies: axios "^1.3.2" qs "^6.11.2" diff --git a/integrations/ticketing/zendesk/src/models/comment/comment.interface.ts b/integrations/ticketing/zendesk/src/models/comment/comment.interface.ts index 8af0089d..3e53c18d 100644 --- a/integrations/ticketing/zendesk/src/models/comment/comment.interface.ts +++ b/integrations/ticketing/zendesk/src/models/comment/comment.interface.ts @@ -21,21 +21,16 @@ export interface GetCommentsParams { limit: number; cursor?: string; created_after?: string; - }; - - pathParams: { - organization_id: string; ticket_id: string; }; + + pathParams: {}; } export interface CreateCommentsParams { - queryParams: {}; + queryParams: { ticket_id: string }; - pathParams: { - organization_id: string; - ticket_id: string; - }; + pathParams: {}; requestBody: CreateCommentBody; } diff --git a/integrations/ticketing/zendesk/src/models/comment/comments.path.ts b/integrations/ticketing/zendesk/src/models/comment/comments.path.ts index 1fa297ab..0cde004b 100644 --- a/integrations/ticketing/zendesk/src/models/comment/comments.path.ts +++ b/integrations/ticketing/zendesk/src/models/comment/comments.path.ts @@ -28,7 +28,7 @@ export class CommentsPath extends BasePath { return { data: response.data.comments?.map((comment: any) => - convertComment(comment, params.pathParams.ticket_id), + convertComment(comment, params.queryParams.ticket_id), ), meta: getPageMeta(response.data, page.toString()), }; @@ -42,7 +42,7 @@ export class CommentsPath extends BasePath { const response = await axios.put(url, { comments: params.requestBody }, { headers }); return response.data.events.map((comment: any) => - convertComment(comment, params.pathParams.ticket_id), + convertComment(comment, params.queryParams.ticket_id), ); } @@ -53,13 +53,13 @@ export class CommentsPath extends BasePath { config: Config, ) { const BASE_URL = getBaseUrl(config); - let url = `${BASE_URL}/tickets/${params.pathParams.ticket_id}/comments`; + let url = `${BASE_URL}/tickets/${params.queryParams.ticket_id}/comments`; switch (method) { case 'GET': return this.fetchData(url, headers, params as GetCommentsParams); case 'POST': - url = `${BASE_URL}/tickets/${params.pathParams.ticket_id}`; + url = `${BASE_URL}/tickets/${params.queryParams.ticket_id}`; return this.createComment(url, headers, params as CreateCommentsParams); default: diff --git a/integrations/ticketing/zendesk/src/models/team/team.interface.ts b/integrations/ticketing/zendesk/src/models/team/team.interface.ts index 00c705a0..e1662746 100644 --- a/integrations/ticketing/zendesk/src/models/team/team.interface.ts +++ b/integrations/ticketing/zendesk/src/models/team/team.interface.ts @@ -32,7 +32,6 @@ export interface GetTeamsParams { export interface GetTeamParams { queryParams: {}; pathParams: { - organization_id: string; team_id: string; }; } diff --git a/integrations/ticketing/zendesk/src/models/ticket/ticket.interface.ts b/integrations/ticketing/zendesk/src/models/ticket/ticket.interface.ts index 5009c45f..349ae05e 100644 --- a/integrations/ticketing/zendesk/src/models/ticket/ticket.interface.ts +++ b/integrations/ticketing/zendesk/src/models/ticket/ticket.interface.ts @@ -26,7 +26,6 @@ export interface GetTicketsParams { }; pathParams: { - organization_id: string; ticket_id: string; }; } @@ -46,16 +45,13 @@ export interface createBody extends CreateTicketBody { export interface CreateTicketParams { requestBody: createBody; - pathParams: { - account_id: string; - }; + pathParams: {}; } export interface UpdateTicketParams { requestBody: createBody; pathParams: { - account_id: string; ticket_id: string; }; }