From 41c619d38ca04172d4a27ef5ea43168b9ce87401 Mon Sep 17 00:00:00 2001 From: Arda TANRIKULU Date: Wed, 27 Oct 2021 20:21:51 +0300 Subject: [PATCH 1/2] GraphQL v16 compatibility --- .eslintrc.json | 46 + .github/workflows/build.yml | 14 +- .prettierrc | 3 + examples/blog/src/query-store.ts | 2 + package.json | 29 +- scripts/match-graphql.js | 20 + src/__benchmarks__/benchmarks.ts | 40 +- src/__benchmarks__/profillable.ts | 1 + src/__benchmarks__/schema-many-resolvers.ts | 22 +- src/__benchmarks__/schema-nested-array.ts | 30 +- .../__snapshots__/schema.test.ts.snap | 1260 ----------------- src/__tests__/abstract.test.ts | 67 +- src/__tests__/alias.test.ts | 8 +- src/__tests__/directives.test.ts | 18 +- src/__tests__/error.test.ts | 2 +- src/__tests__/execution.test.ts | 29 +- src/__tests__/inspect.test.ts | 1 + src/__tests__/json.test.ts | 81 +- src/__tests__/lists.test.ts | 17 +- src/__tests__/mutations.test.ts | 5 +- src/__tests__/nonnull.test.ts | 37 +- src/__tests__/resolve.test.ts | 1 + src/__tests__/scalars.test.ts | 8 +- src/__tests__/schema.test.ts | 22 +- src/__tests__/subscription.test.ts | 43 +- src/__tests__/union-interface.test.ts | 17 +- src/__tests__/variables.test.ts | 59 +- src/ast.ts | 87 +- src/error.ts | 13 +- src/execution.ts | 178 ++- src/inspect.ts | 2 +- src/json.ts | 5 +- src/memoize.ts | 3 - src/resolve-info.ts | 20 +- src/variables.ts | 7 +- stryker.conf.js | 2 +- tsconfig.build.json | 9 + tsconfig.json | 8 +- tslint.json | 14 - yarn.lock | 1209 +++++++++++++++- 40 files changed, 1689 insertions(+), 1750 deletions(-) create mode 100644 .eslintrc.json create mode 100644 .prettierrc create mode 100644 scripts/match-graphql.js delete mode 100644 src/__tests__/__snapshots__/schema.test.ts.snap create mode 100644 tsconfig.build.json delete mode 100644 tslint.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..217c08a --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,46 @@ +{ + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "./tsconfig.json" + }, + "extends": [ + "eslint:recommended", + "standard", + "prettier", + "plugin:@typescript-eslint/recommended" + ], + "plugins": ["@typescript-eslint"], + "rules": { + "@typescript-eslint/no-explicit-any": "off", + "max-len": "off", + "arrow-parens": "off", + "no-shadow": "off", + "@typescript-eslint/interface-name-prefix": "off", + "comma-dangle": "off", + "sort-keys": "off", + "max-classes-per-file": "off" + }, + "env": { + "es6": true, + "node": true + }, + "overrides": [ + { + "files": [ + "**/{test,tests,testing}/**/*.{ts,js}", + "*.{spec,test}.{ts,js}" + ], + "env": { + "jest": true + }, + "rules": { + "@typescript-eslint/no-unused-vars": "off", + "import/no-extraneous-dependencies": "off" + } + } + ], + "ignorePatterns": [ + "dist", + "node_modules" + ] +} \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 299dc76..23fd543 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,8 +12,9 @@ jobs: strategy: matrix: - node-version: [10, 12, 14, 15] + node-version: [12, 14, 16] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + graphql-version: [15, 16] steps: - uses: actions/checkout@v2 @@ -33,17 +34,20 @@ jobs: id: yarn-cache with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + key: ${{ runner.os }}-${{matrix.node-version}}-${{matrix.graphql-version}}-yarn-${{ hashFiles('yarn.lock') }} restore-keys: | - ${{ runner.os }}-yarn- + ${{ runner.os }}-${{matrix.node-version}}-${{matrix.graphql-version}}-yarn- + + - name: Use GraphQL v${{matrix.graphql-version}} + run: node ./scripts/match-graphql.js ${{matrix.graphql-version}} - name: Install from network when no cache hit if: steps.yarn-cache.outputs.cache-hit != 'true' - run: yarn install --frozen-lockfile --ignore-optional --prefer-offline + run: yarn install --ignore-optional --prefer-offline - name: Install from cache on cache-hit if: steps.yarn-cache.outputs.cache-hit == 'true' - run: yarn install --frozen-lockfile --ignore-optional --offline + run: yarn install --ignore-optional --offline - name: Format and Lint check run: yarn check-format && yarn lint diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..36b3563 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "trailingComma": "none" +} diff --git a/examples/blog/src/query-store.ts b/examples/blog/src/query-store.ts index 1daf704..fc0e7ec 100644 --- a/examples/blog/src/query-store.ts +++ b/examples/blog/src/query-store.ts @@ -13,6 +13,7 @@ class ValidationError extends Error { */ export default class QueryStore { private store = new Map(); + // eslint-disable-next-line no-useless-constructor constructor(private schema: GraphQLSchema) {} get(id: string): CompiledQuery | undefined { @@ -27,6 +28,7 @@ export default class QueryStore { const compiledQuery = compileQuery(this.schema, parse(query)); if (!isCompiledQuery(compiledQuery)) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion throw new ValidationError(compiledQuery.errors!); } diff --git a/package.json b/package.json index 68d273d..7a11489 100644 --- a/package.json +++ b/package.json @@ -13,11 +13,11 @@ "scripts": { "precommit": "lint-staged", "prepublishOnly": "yarn && yarn build", - "format": "prettier --no-config --write 'src/**/*.ts' '*.js'", - "check-format": "prettier --no-config -l 'src/**/*.ts' '*.js'", - "lint": "tslint --project .", - "lint-fix": "tslint --project . --fix", - "build": "tsc", + "format": "prettier --write 'src/**/*.ts' '*.js'", + "check-format": "prettier -l 'src/**/*.ts' '*.js'", + "lint": "eslint --ext .ts .", + "lint-fix": "eslint --ext .ts . --fix", + "build": "tsc --project tsconfig.build.json", "test": "jest", "mutation-test": "stryker run", "codecov": "codecov", @@ -61,18 +61,27 @@ "@types/lodash.merge": "^4.6.6", "@types/lodash.mergewith": "^4.6.6", "@types/node": "^10.17.26", + "@typescript-eslint/eslint-plugin": "5.2.0", + "@typescript-eslint/parser": "5.2.0", "benchmark": "^2.1.4", "codecov": "^3.3.0", - "graphql": "^15.1.0", + "eslint": "^8.1.0", + "eslint-config-prettier": "^8.3.0", + "eslint-config-standard": "^16.0.3", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^5.1.1", + "eslint-plugin-standard": "^5.0.0", + "graphql": "^16.0.0", "jest": "^24.7.1", "lint-staged": "^8.1.5", - "prettier": "^1.19.1", + "prettier": "^2.4.1", "ts-jest": "^24.0.2", "ts-node": "^8.0.3", "tslint": "^5.15.0", "tslint-config-prettier": "^1.18.0", "tslint-plugin-prettier": "^2.0.1", - "typescript": "^3.9.5" + "typescript": "^4.4.4" }, "dependencies": { "@graphql-typed-document-node/core": "3.1.0", @@ -86,7 +95,7 @@ "lint-staged": { "linters": { "*.ts": [ - "tslint -c tslint.json -p tsconfig.json --fix", + "eslint --fix", "prettier --no-config --write", "git add" ], @@ -96,4 +105,4 @@ ] } } -} +} \ No newline at end of file diff --git a/scripts/match-graphql.js b/scripts/match-graphql.js new file mode 100644 index 0000000..79a8ff8 --- /dev/null +++ b/scripts/match-graphql.js @@ -0,0 +1,20 @@ +const { writeFileSync } = require('fs'); +const { resolve } = require('path'); +const { argv, cwd } = require('process'); + +const pkgPath = resolve(cwd(), './package.json'); + +const pkg = require(pkgPath); + +const version = argv[2]; + +if (pkg.devDependencies.graphql.startsWith(version)) { + console.info(`GraphQL v${version} is match! Skipping.`); + return; +} + +// If it is not stable version, use pinned version +const npmVersion = version.includes('-') ? version : `^${version}`; +pkg.devDependencies.graphql = npmVersion; + +writeFileSync(pkgPath, JSON.stringify(pkg, null, 2), 'utf8'); diff --git a/src/__benchmarks__/benchmarks.ts b/src/__benchmarks__/benchmarks.ts index cda00af..0161546 100644 --- a/src/__benchmarks__/benchmarks.ts +++ b/src/__benchmarks__/benchmarks.ts @@ -58,24 +58,22 @@ async function runBenchmarks() { debug: true } as any); if (!isCompiledQuery(compiledQuery)) { - // tslint:disable-next-line:no-console + // eslint-disable-next-line no-console console.error(`${bench} failed to compile`); return null; } - // tslint:disable-next-line:no-console + // eslint-disable-next-line no-console console.log( `size of function for ${bench}: ${ (compiledQuery as any) .__DO_NOT_USE_THIS_OR_YOU_WILL_BE_FIRED_compilation.length }` ); - const graphqlJsResult = await execute( + const graphqlJsResult = await execute({ schema, - query, - undefined, - undefined, - variables || {} - ); + document: query, + variableValues: variables || {} + }); const graphqlJitResult = await compiledQuery.query( undefined, undefined, @@ -84,7 +82,7 @@ async function runBenchmarks() { if ( JSON.stringify(graphqlJitResult) !== JSON.stringify(graphqlJsResult) ) { - // tslint:disable-next-line:no-console + // eslint-disable-next-line no-console console.error( JSON.stringify(graphqlJitResult), "is different of", @@ -98,15 +96,13 @@ async function runBenchmarks() { minSamples: 150, defer: true, fn(deferred: any) { - const result = execute( + const result = execute({ schema, - query, - undefined, - undefined, - variables || {} - ); + document: query, + variableValues: variables || {} + }); if (isPromise(result)) { - return result.then(res => + return result.then((res) => deferred.resolve(skipJSON ? res : JSON.stringify(res)) ); } @@ -127,7 +123,7 @@ async function runBenchmarks() { variables || {} ); if (isPromise(result)) { - return result.then(res => + return result.then((res) => deferred.resolve( skipJSON ? res : compiledQuery.stringify(res) ) @@ -140,11 +136,11 @@ async function runBenchmarks() { }) // add listeners .on("cycle", (event: any) => { - // tslint:disable-next-line:no-console + // eslint-disable-next-line no-console console.log(String(event.target)); }) .on("start", () => { - // tslint:disable-next-line:no-console + // eslint-disable-next-line no-console console.log("Starting", bench); }); return suite; @@ -154,7 +150,7 @@ async function runBenchmarks() { const benchsToRun = benchs.filter(isNotNull); let benchRunning = 1; - benchsToRun.forEach(bench => + benchsToRun.forEach((bench) => bench.on("complete", () => { if (benchRunning < benchsToRun.length) { benchsToRun[benchRunning++].run(); @@ -164,12 +160,12 @@ async function runBenchmarks() { if (benchsToRun.length > 0) { benchsToRun[0].run(); } else { - // tslint:disable-next-line + // eslint-disable-next-line console.log("No benchmarks to run"); } } -// tslint:disable-next-line +// eslint-disable-next-line runBenchmarks().catch(console.error); function isNotNull(a: T | null | undefined): a is T { diff --git a/src/__benchmarks__/profillable.ts b/src/__benchmarks__/profillable.ts index ba09d35..53c74e5 100644 --- a/src/__benchmarks__/profillable.ts +++ b/src/__benchmarks__/profillable.ts @@ -9,6 +9,7 @@ if (isCompiledQuery(compiled)) { const now = Date.now(); let operations = 0; const timelimit = getTimelimit(); + // eslint-disable-next-line no-inner-declarations function benchmark() { if (Date.now() - now > timelimit) { console.log(`Ran ${operations} operations in ${timelimit / 1000}s`); diff --git a/src/__benchmarks__/schema-many-resolvers.ts b/src/__benchmarks__/schema-many-resolvers.ts index 4b65353..e555e73 100644 --- a/src/__benchmarks__/schema-many-resolvers.ts +++ b/src/__benchmarks__/schema-many-resolvers.ts @@ -16,15 +16,15 @@ export function schema() { fields: { url: { type: GraphQLString, - resolve: image => Promise.resolve(image.url) + resolve: (image) => Promise.resolve(image.url) }, width: { type: GraphQLInt, - resolve: image => Promise.resolve(image.width) + resolve: (image) => Promise.resolve(image.width) }, height: { type: GraphQLInt, - resolve: image => Promise.resolve(image.height) + resolve: (image) => Promise.resolve(image.height) } } }); @@ -34,11 +34,11 @@ export function schema() { fields: () => ({ id: { type: GraphQLString, - resolve: author => Promise.resolve(author.id) + resolve: (author) => Promise.resolve(author.id) }, name: { type: GraphQLString, - resolve: author => Promise.resolve(author.name) + resolve: (author) => Promise.resolve(author.name) }, pic: { args: { width: { type: GraphQLInt }, height: { type: GraphQLInt } }, @@ -47,7 +47,7 @@ export function schema() { }, recentArticle: { type: BlogArticle, - resolve: author => Promise.resolve(author.recentArticle) + resolve: (author) => Promise.resolve(author.recentArticle) } }) }); @@ -57,24 +57,24 @@ export function schema() { fields: { id: { type: new GraphQLNonNull(GraphQLID), - resolve: article => Promise.resolve(article.id) + resolve: (article) => Promise.resolve(article.id) }, isPublished: { type: GraphQLBoolean, - resolve: article => Promise.resolve(article.isPublished) + resolve: (article) => Promise.resolve(article.isPublished) }, author: { type: BlogAuthor }, title: { type: GraphQLString, - resolve: article => Promise.resolve(article && article.title) + resolve: (article) => Promise.resolve(article && article.title) }, body: { type: GraphQLString, - resolve: article => Promise.resolve(article.body) + resolve: (article) => Promise.resolve(article.body) }, keywords: { type: new GraphQLList(GraphQLString), - resolve: article => Promise.resolve(article.keywords) + resolve: (article) => Promise.resolve(article.keywords) } } }); diff --git a/src/__benchmarks__/schema-nested-array.ts b/src/__benchmarks__/schema-nested-array.ts index 849e329..e5c66ed 100644 --- a/src/__benchmarks__/schema-nested-array.ts +++ b/src/__benchmarks__/schema-nested-array.ts @@ -20,15 +20,15 @@ export function schema() { fields: { url: { type: GraphQLString, - resolve: image => Promise.resolve(image.url) + resolve: (image) => Promise.resolve(image.url) }, width: { type: GraphQLInt, - resolve: image => Promise.resolve(image.width) + resolve: (image) => Promise.resolve(image.width) }, height: { type: GraphQLInt, - resolve: image => Promise.resolve(image.height) + resolve: (image) => Promise.resolve(image.height) } } }); @@ -42,11 +42,11 @@ export function schema() { fields: () => ({ id: { type: GraphQLString, - resolve: author => Promise.resolve(author.id) + resolve: (author) => Promise.resolve(author.id) }, name: { type: GraphQLString, - resolve: author => Promise.resolve(author.name) + resolve: (author) => Promise.resolve(author.name) }, pic: { args: { width: { type: GraphQLInt }, height: { type: GraphQLInt } }, @@ -55,7 +55,7 @@ export function schema() { }, articles: { type: new GraphQLList(BlogArticle), - resolve: _ => Promise.resolve(articles) + resolve: () => Promise.resolve(articles) } }) }); @@ -65,11 +65,11 @@ export function schema() { fields: { color: { type: GraphQLString, - resolve: badge => Promise.resolve(badge && badge.color) + resolve: (badge) => Promise.resolve(badge && badge.color) }, text: { type: GraphQLString, - resolve: badge => Promise.resolve(badge && badge.text) + resolve: (badge) => Promise.resolve(badge && badge.text) } } }); @@ -79,11 +79,11 @@ export function schema() { fields: { text: { type: GraphQLString, - resolve: advert => Promise.resolve(advert && advert.text) + resolve: (advert) => Promise.resolve(advert && advert.text) }, image: { type: BlogImage, - resolve: advert => Promise.resolve(advert && advert.image) + resolve: (advert) => Promise.resolve(advert && advert.image) } } }); @@ -93,24 +93,24 @@ export function schema() { fields: { id: { type: new GraphQLNonNull(GraphQLID), - resolve: article => Promise.resolve(article.id) + resolve: (article) => Promise.resolve(article.id) }, isPublished: { type: GraphQLBoolean, - resolve: article => Promise.resolve(article.isPublished) + resolve: (article) => Promise.resolve(article.isPublished) }, author: { type: BlogAuthor }, title: { type: GraphQLString, - resolve: article => Promise.resolve(article && article.title) + resolve: (article) => Promise.resolve(article && article.title) }, body: { type: GraphQLString, - resolve: article => Promise.resolve(article.body) + resolve: (article) => Promise.resolve(article.body) }, keywords: { type: new GraphQLList(GraphQLString), - resolve: article => Promise.resolve(article.keywords) + resolve: (article) => Promise.resolve(article.keywords) }, badges: { type: new GraphQLList(BlogArticleBadge) diff --git a/src/__tests__/__snapshots__/schema.test.ts.snap b/src/__tests__/__snapshots__/schema.test.ts.snap deleted file mode 100644 index b2aa75f..0000000 --- a/src/__tests__/__snapshots__/schema.test.ts.snap +++ /dev/null @@ -1,1260 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Execute: Handles execution with a complex schema executes IntrospectionQuery 1`] = ` -Object { - "data": Object { - "__schema": Object { - "directives": Array [ - Object { - "args": Array [ - Object { - "defaultValue": null, - "description": "Included when true.", - "name": "if", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null, - }, - }, - }, - ], - "description": "Directs the executor to include this field or fragment only when the \`if\` argument is true.", - "locations": Array [ - "FIELD", - "FRAGMENT_SPREAD", - "INLINE_FRAGMENT", - ], - "name": "include", - }, - Object { - "args": Array [ - Object { - "defaultValue": null, - "description": "Skipped when true.", - "name": "if", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null, - }, - }, - }, - ], - "description": "Directs the executor to skip this field or fragment when the \`if\` argument is true.", - "locations": Array [ - "FIELD", - "FRAGMENT_SPREAD", - "INLINE_FRAGMENT", - ], - "name": "skip", - }, - Object { - "args": Array [ - Object { - "defaultValue": "\\"No longer supported\\"", - "description": "Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).", - "name": "reason", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - ], - "description": "Marks an element of a GraphQL schema as no longer supported.", - "locations": Array [ - "FIELD_DEFINITION", - "ENUM_VALUE", - ], - "name": "deprecated", - }, - Object { - "args": Array [ - Object { - "defaultValue": null, - "description": "The URL that specifies the behaviour of this scalar.", - "name": "url", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - }, - ], - "description": "Exposes a URL that specifies the behaviour of this scalar.", - "locations": Array [ - "SCALAR", - ], - "name": "specifiedBy", - }, - ], - "mutationType": null, - "queryType": Object { - "name": "Query", - }, - "subscriptionType": null, - "types": Array [ - Object { - "description": null, - "enumValues": null, - "fields": Array [ - Object { - "args": Array [ - Object { - "defaultValue": null, - "description": null, - "name": "id", - "type": Object { - "kind": "SCALAR", - "name": "ID", - "ofType": null, - }, - }, - ], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "article", - "type": Object { - "kind": "OBJECT", - "name": "Article", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "feed", - "type": Object { - "kind": "LIST", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "Article", - "ofType": null, - }, - }, - }, - ], - "inputFields": null, - "interfaces": Array [], - "kind": "OBJECT", - "name": "Query", - "possibleTypes": null, - }, - Object { - "description": null, - "enumValues": null, - "fields": Array [ - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "id", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "SCALAR", - "name": "ID", - "ofType": null, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "isPublished", - "type": Object { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "author", - "type": Object { - "kind": "OBJECT", - "name": "Author", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "title", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "body", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "keywords", - "type": Object { - "kind": "LIST", - "name": null, - "ofType": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - }, - ], - "inputFields": null, - "interfaces": Array [], - "kind": "OBJECT", - "name": "Article", - "possibleTypes": null, - }, - Object { - "description": "The \`ID\` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as \`\\"4\\"\`) or integer (such as \`4\`) input value will be accepted as an ID.", - "enumValues": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "kind": "SCALAR", - "name": "ID", - "possibleTypes": null, - }, - Object { - "description": "The \`Boolean\` scalar type represents \`true\` or \`false\`.", - "enumValues": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "kind": "SCALAR", - "name": "Boolean", - "possibleTypes": null, - }, - Object { - "description": null, - "enumValues": null, - "fields": Array [ - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "id", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "name", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [ - Object { - "defaultValue": null, - "description": null, - "name": "width", - "type": Object { - "kind": "SCALAR", - "name": "Int", - "ofType": null, - }, - }, - Object { - "defaultValue": null, - "description": null, - "name": "height", - "type": Object { - "kind": "SCALAR", - "name": "Int", - "ofType": null, - }, - }, - ], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "pic", - "type": Object { - "kind": "OBJECT", - "name": "Image", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "recentArticle", - "type": Object { - "kind": "OBJECT", - "name": "Article", - "ofType": null, - }, - }, - ], - "inputFields": null, - "interfaces": Array [], - "kind": "OBJECT", - "name": "Author", - "possibleTypes": null, - }, - Object { - "description": "The \`String\` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", - "enumValues": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "kind": "SCALAR", - "name": "String", - "possibleTypes": null, - }, - Object { - "description": null, - "enumValues": null, - "fields": Array [ - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "url", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "width", - "type": Object { - "kind": "SCALAR", - "name": "Int", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "height", - "type": Object { - "kind": "SCALAR", - "name": "Int", - "ofType": null, - }, - }, - ], - "inputFields": null, - "interfaces": Array [], - "kind": "OBJECT", - "name": "Image", - "possibleTypes": null, - }, - Object { - "description": "The \`Int\` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.", - "enumValues": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "kind": "SCALAR", - "name": "Int", - "possibleTypes": null, - }, - Object { - "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.", - "enumValues": null, - "fields": Array [ - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "description", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": "A list of all types supported by this server.", - "isDeprecated": false, - "name": "types", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "LIST", - "name": null, - "ofType": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "__Type", - "ofType": null, - }, - }, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": "The type that query operations will be rooted at.", - "isDeprecated": false, - "name": "queryType", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "__Type", - "ofType": null, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": "If this server supports mutation, the type that mutation operations will be rooted at.", - "isDeprecated": false, - "name": "mutationType", - "type": Object { - "kind": "OBJECT", - "name": "__Type", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": "If this server support subscription, the type that subscription operations will be rooted at.", - "isDeprecated": false, - "name": "subscriptionType", - "type": Object { - "kind": "OBJECT", - "name": "__Type", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": "A list of all directives supported by this server.", - "isDeprecated": false, - "name": "directives", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "LIST", - "name": null, - "ofType": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "__Directive", - "ofType": null, - }, - }, - }, - }, - }, - ], - "inputFields": null, - "interfaces": Array [], - "kind": "OBJECT", - "name": "__Schema", - "possibleTypes": null, - }, - Object { - "description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the \`__TypeKind\` enum. - -Depending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional \`specifiedByUrl\`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.", - "enumValues": null, - "fields": Array [ - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "kind", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "ENUM", - "name": "__TypeKind", - "ofType": null, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "name", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "description", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "specifiedByUrl", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [ - Object { - "defaultValue": "false", - "description": null, - "name": "includeDeprecated", - "type": Object { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null, - }, - }, - ], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "fields", - "type": Object { - "kind": "LIST", - "name": null, - "ofType": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "__Field", - "ofType": null, - }, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "interfaces", - "type": Object { - "kind": "LIST", - "name": null, - "ofType": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "__Type", - "ofType": null, - }, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "possibleTypes", - "type": Object { - "kind": "LIST", - "name": null, - "ofType": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "__Type", - "ofType": null, - }, - }, - }, - }, - Object { - "args": Array [ - Object { - "defaultValue": "false", - "description": null, - "name": "includeDeprecated", - "type": Object { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null, - }, - }, - ], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "enumValues", - "type": Object { - "kind": "LIST", - "name": null, - "ofType": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "__EnumValue", - "ofType": null, - }, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "inputFields", - "type": Object { - "kind": "LIST", - "name": null, - "ofType": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "__InputValue", - "ofType": null, - }, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "ofType", - "type": Object { - "kind": "OBJECT", - "name": "__Type", - "ofType": null, - }, - }, - ], - "inputFields": null, - "interfaces": Array [], - "kind": "OBJECT", - "name": "__Type", - "possibleTypes": null, - }, - Object { - "description": "An enum describing what kind of type a given \`__Type\` is.", - "enumValues": Array [ - Object { - "deprecationReason": null, - "description": "Indicates this type is a scalar.", - "isDeprecated": false, - "name": "SCALAR", - }, - Object { - "deprecationReason": null, - "description": "Indicates this type is an object. \`fields\` and \`interfaces\` are valid fields.", - "isDeprecated": false, - "name": "OBJECT", - }, - Object { - "deprecationReason": null, - "description": "Indicates this type is an interface. \`fields\`, \`interfaces\`, and \`possibleTypes\` are valid fields.", - "isDeprecated": false, - "name": "INTERFACE", - }, - Object { - "deprecationReason": null, - "description": "Indicates this type is a union. \`possibleTypes\` is a valid field.", - "isDeprecated": false, - "name": "UNION", - }, - Object { - "deprecationReason": null, - "description": "Indicates this type is an enum. \`enumValues\` is a valid field.", - "isDeprecated": false, - "name": "ENUM", - }, - Object { - "deprecationReason": null, - "description": "Indicates this type is an input object. \`inputFields\` is a valid field.", - "isDeprecated": false, - "name": "INPUT_OBJECT", - }, - Object { - "deprecationReason": null, - "description": "Indicates this type is a list. \`ofType\` is a valid field.", - "isDeprecated": false, - "name": "LIST", - }, - Object { - "deprecationReason": null, - "description": "Indicates this type is a non-null. \`ofType\` is a valid field.", - "isDeprecated": false, - "name": "NON_NULL", - }, - ], - "fields": null, - "inputFields": null, - "interfaces": null, - "kind": "ENUM", - "name": "__TypeKind", - "possibleTypes": null, - }, - Object { - "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.", - "enumValues": null, - "fields": Array [ - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "name", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "description", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "args", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "LIST", - "name": null, - "ofType": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "__InputValue", - "ofType": null, - }, - }, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "type", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "__Type", - "ofType": null, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "isDeprecated", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "deprecationReason", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - ], - "inputFields": null, - "interfaces": Array [], - "kind": "OBJECT", - "name": "__Field", - "possibleTypes": null, - }, - Object { - "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.", - "enumValues": null, - "fields": Array [ - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "name", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "description", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "type", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "__Type", - "ofType": null, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": "A GraphQL-formatted string representing the default value for this input value.", - "isDeprecated": false, - "name": "defaultValue", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - ], - "inputFields": null, - "interfaces": Array [], - "kind": "OBJECT", - "name": "__InputValue", - "possibleTypes": null, - }, - Object { - "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.", - "enumValues": null, - "fields": Array [ - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "name", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "description", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "isDeprecated", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "deprecationReason", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - ], - "inputFields": null, - "interfaces": Array [], - "kind": "OBJECT", - "name": "__EnumValue", - "possibleTypes": null, - }, - Object { - "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document. - -In some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.", - "enumValues": null, - "fields": Array [ - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "name", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "description", - "type": Object { - "kind": "SCALAR", - "name": "String", - "ofType": null, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "isRepeatable", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "locations", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "LIST", - "name": null, - "ofType": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "ENUM", - "name": "__DirectiveLocation", - "ofType": null, - }, - }, - }, - }, - }, - Object { - "args": Array [], - "deprecationReason": null, - "description": null, - "isDeprecated": false, - "name": "args", - "type": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "LIST", - "name": null, - "ofType": Object { - "kind": "NON_NULL", - "name": null, - "ofType": Object { - "kind": "OBJECT", - "name": "__InputValue", - "ofType": null, - }, - }, - }, - }, - }, - ], - "inputFields": null, - "interfaces": Array [], - "kind": "OBJECT", - "name": "__Directive", - "possibleTypes": null, - }, - Object { - "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.", - "enumValues": Array [ - Object { - "deprecationReason": null, - "description": "Location adjacent to a query operation.", - "isDeprecated": false, - "name": "QUERY", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to a mutation operation.", - "isDeprecated": false, - "name": "MUTATION", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to a subscription operation.", - "isDeprecated": false, - "name": "SUBSCRIPTION", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to a field.", - "isDeprecated": false, - "name": "FIELD", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to a fragment definition.", - "isDeprecated": false, - "name": "FRAGMENT_DEFINITION", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to a fragment spread.", - "isDeprecated": false, - "name": "FRAGMENT_SPREAD", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to an inline fragment.", - "isDeprecated": false, - "name": "INLINE_FRAGMENT", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to a variable definition.", - "isDeprecated": false, - "name": "VARIABLE_DEFINITION", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to a schema definition.", - "isDeprecated": false, - "name": "SCHEMA", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to a scalar definition.", - "isDeprecated": false, - "name": "SCALAR", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to an object type definition.", - "isDeprecated": false, - "name": "OBJECT", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to a field definition.", - "isDeprecated": false, - "name": "FIELD_DEFINITION", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to an argument definition.", - "isDeprecated": false, - "name": "ARGUMENT_DEFINITION", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to an interface definition.", - "isDeprecated": false, - "name": "INTERFACE", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to a union definition.", - "isDeprecated": false, - "name": "UNION", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to an enum definition.", - "isDeprecated": false, - "name": "ENUM", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to an enum value definition.", - "isDeprecated": false, - "name": "ENUM_VALUE", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to an input object type definition.", - "isDeprecated": false, - "name": "INPUT_OBJECT", - }, - Object { - "deprecationReason": null, - "description": "Location adjacent to an input object field definition.", - "isDeprecated": false, - "name": "INPUT_FIELD_DEFINITION", - }, - ], - "fields": null, - "inputFields": null, - "interfaces": null, - "kind": "ENUM", - "name": "__DirectiveLocation", - "possibleTypes": null, - }, - ], - }, - }, -} -`; diff --git a/src/__tests__/abstract.test.ts b/src/__tests__/abstract.test.ts index c6df950..c3a2a94 100644 --- a/src/__tests__/abstract.test.ts +++ b/src/__tests__/abstract.test.ts @@ -25,18 +25,21 @@ function graphql(schema: GraphQLSchema, query: string) { } class Dog { + // eslint-disable-next-line no-useless-constructor constructor(public name: string, public woofs: boolean, public other?: any) {} } class Cat { + // eslint-disable-next-line no-useless-constructor constructor(public name: string, public meows: boolean) {} } class Human { + // eslint-disable-next-line no-useless-constructor constructor(public name: string, public pets?: any) {} } -// tslint:disable-next-line +// eslint-disable-next-line describe("Execute: Handles execution of abstract types", () => { test("isTypeOf used to resolve runtime type for Interface", () => { const PetType = new GraphQLInterfaceType({ @@ -49,7 +52,7 @@ describe("Execute: Handles execution of abstract types", () => { const DogType = new GraphQLObjectType({ name: "Dog", interfaces: [PetType], - isTypeOf: obj => obj instanceof Dog, + isTypeOf: (obj) => obj instanceof Dog, fields: { name: { type: GraphQLString }, woofs: { type: GraphQLBoolean } @@ -59,7 +62,7 @@ describe("Execute: Handles execution of abstract types", () => { const CatType = new GraphQLObjectType({ name: "Cat", interfaces: [PetType], - isTypeOf: obj => obj instanceof Cat, + isTypeOf: (obj) => obj instanceof Cat, fields: { name: { type: GraphQLString }, meows: { type: GraphQLBoolean } @@ -114,7 +117,7 @@ describe("Execute: Handles execution of abstract types", () => { test("isTypeOf used to resolve runtime type for Union", () => { const DogType = new GraphQLObjectType({ name: "Dog", - isTypeOf: obj => obj instanceof Dog, + isTypeOf: (obj) => obj instanceof Dog, fields: { name: { type: GraphQLString }, woofs: { type: GraphQLBoolean } @@ -123,7 +126,7 @@ describe("Execute: Handles execution of abstract types", () => { const CatType = new GraphQLObjectType({ name: "Cat", - isTypeOf: obj => obj instanceof Cat, + isTypeOf: (obj) => obj instanceof Cat, fields: { name: { type: GraphQLString }, meows: { type: GraphQLBoolean } @@ -185,12 +188,12 @@ describe("Execute: Handles execution of abstract types", () => { name: "Pet", resolveType(obj) { return obj instanceof Dog - ? DogType + ? DogType.toString() : obj instanceof Cat - ? CatType + ? CatType.toString() : obj instanceof Human - ? HumanType - : null; + ? HumanType.toString() + : undefined; }, fields: { name: { type: GraphQLString } @@ -255,7 +258,7 @@ describe("Execute: Handles execution of abstract types", () => { const result = graphql(schema, query); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { pets: [ { @@ -306,15 +309,15 @@ describe("Execute: Handles execution of abstract types", () => { const PetType = new GraphQLUnionType({ name: "Pet", - // tslint:disable-next-line + // eslint-disable-next-line resolveType(obj) { return obj instanceof Dog - ? DogType + ? DogType.toString() : obj instanceof Cat - ? CatType + ? CatType.toString() : obj instanceof Human - ? HumanType - : null; + ? HumanType.toString() + : undefined; }, types: [DogType, CatType] }); @@ -325,7 +328,7 @@ describe("Execute: Handles execution of abstract types", () => { fields: { pets: { type: new GraphQLList(PetType), - // tslint:disable-next-line + // eslint-disable-next-line resolve() { return [ new Dog("Odie", true), @@ -353,7 +356,7 @@ describe("Execute: Handles execution of abstract types", () => { const result = graphql(schema, query); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { pets: [ { @@ -406,7 +409,7 @@ describe("Execute: Handles execution of abstract types", () => { const result = graphql(schema, "{ foo { bar } }"); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { foo: null }, errors: [ { @@ -426,7 +429,11 @@ describe("Execute: Handles execution of abstract types", () => { const PetType = new GraphQLInterfaceType({ name: "Pet", resolveType(obj) { - return obj instanceof Dog ? "Dog" : obj instanceof Cat ? "Cat" : null; + return obj instanceof Dog + ? "Dog" + : obj instanceof Cat + ? "Cat" + : undefined; }, fields: { name: { type: GraphQLString } @@ -528,15 +535,15 @@ describe("Execute: Handles execution of abstract types", () => { friend: { type: new GraphQLUnionType({ name: "DogFriend", - // tslint:disable-next-line + // eslint-disable-next-line resolveType(obj) { return obj instanceof Dog - ? DogType + ? DogType.toString() : obj instanceof Cat - ? CatType + ? CatType.toString() : obj instanceof Human - ? HumanType - : null; + ? HumanType.toString() + : undefined; }, types: [CatType] }) @@ -552,15 +559,15 @@ describe("Execute: Handles execution of abstract types", () => { const PetType = new GraphQLUnionType({ name: "Pet", - // tslint:disable-next-line + // eslint-disable-next-line resolveType(obj) { return obj instanceof Dog - ? DogType + ? DogType.toString() : obj instanceof Cat - ? CatType + ? CatType.toString() : obj instanceof Human - ? HumanType - : null; + ? HumanType.toString() + : undefined; }, types: [DogType, CatType] }); @@ -621,7 +628,7 @@ describe("Execute: Handles execution of abstract types", () => { const result = await graphql(schema, query); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { owner: { pets: [ diff --git a/src/__tests__/alias.test.ts b/src/__tests__/alias.test.ts index 3f8e0b7..a56cc46 100644 --- a/src/__tests__/alias.test.ts +++ b/src/__tests__/alias.test.ts @@ -1,4 +1,4 @@ -/* tslint:disable:no-big-function */ +/* eslint-disable max-lines-per-function */ import { DocumentNode, GraphQLBoolean, @@ -167,13 +167,13 @@ describe("alias resolveinfo", () => { await executeQuery(schema, ast, rootValue, { var: 123 }); // we don't rely on the order of execution expect( - infos.find(info => info.fieldNodes[0].alias.value === "a") + infos.find((info) => info.fieldNodes[0].alias.value === "a") ).toBeDefined(); expect( - infos.find(info => info.fieldNodes[0].alias.value === "b") + infos.find((info) => info.fieldNodes[0].alias.value === "b") ).toBeDefined(); expect( - infos.find(info => info.fieldNodes[0].alias.value === "c") + infos.find((info) => info.fieldNodes[0].alias.value === "c") ).toBeDefined(); }); diff --git a/src/__tests__/directives.test.ts b/src/__tests__/directives.test.ts index fca8278..123ef8e 100644 --- a/src/__tests__/directives.test.ts +++ b/src/__tests__/directives.test.ts @@ -36,7 +36,7 @@ function executeTestQuery(query: string, variables = {}, schema = testSchema) { return compiled.query(data, undefined, variables); } -// tslint:disable-next-line +// eslint-disable-next-line describe("Execute: handles directives", () => { describe("works without directives", () => { test("basic query works", () => { @@ -49,7 +49,7 @@ describe("Execute: handles directives", () => { }); describe("works on scalars", () => { - // tslint:disable-next-line + // eslint-disable-next-line test("if true includes scalar", () => { const result = executeTestQuery("{ a, b @include(if: true) }"); @@ -66,7 +66,7 @@ describe("Execute: handles directives", () => { }); }); - // tslint:disable-next-line + // eslint-disable-next-line test("unless false includes scalar", () => { const result = executeTestQuery("{ a, b @skip(if: false) }"); @@ -75,7 +75,7 @@ describe("Execute: handles directives", () => { }); }); - // tslint:disable-next-line + // eslint-disable-next-line test("unless true omits scalar", () => { const result = executeTestQuery("{ a, b @skip(if: true) }"); @@ -1188,7 +1188,7 @@ describe("Execute: handles directives", () => { } `; const result = await executeTestQuery(query, { skip: true }, schema); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ expect.objectContaining({ message: "Directive 'skip' is missing required arguments: 'if'" @@ -1206,7 +1206,7 @@ describe("Execute: handles directives", () => { } `; const result = await executeTestQuery(query, { skip: 0 }, schema); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ expect.objectContaining({ message: @@ -1225,7 +1225,7 @@ describe("Execute: handles directives", () => { } `; const result = await executeTestQuery(query, { skip: 0 }, schema); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ expect.objectContaining({ message: `Variable 'skip' is not defined` @@ -1243,7 +1243,7 @@ describe("Execute: handles directives", () => { } `; const result = await executeTestQuery(query, { skip: 0 }, schema); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ expect.objectContaining({ message: `Variable 'skip' of type 'Int!' used in position expecting type 'Boolean!'` @@ -1261,7 +1261,7 @@ describe("Execute: handles directives", () => { } `; const result = await executeTestQuery(query, { skip: [0] }, schema); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ expect.objectContaining({ message: `Variable 'skip' of type '[Int!]!' used in position expecting type 'Boolean!'` diff --git a/src/__tests__/error.test.ts b/src/__tests__/error.test.ts index 71d6e8a..93b8f5f 100644 --- a/src/__tests__/error.test.ts +++ b/src/__tests__/error.test.ts @@ -69,7 +69,7 @@ describe("error generation", () => { }); test("fallbacks if Error.captureStackTrace is not defined", () => { const captureStackTrace = Error.captureStackTrace; - Error.captureStackTrace = (null as unknown) as any; + Error.captureStackTrace = null as unknown as any; const resp = executeTestQuery("{ b }", false, { b: "error" }); expect(resp.errors[0].stack).toBeDefined(); Error.captureStackTrace = captureStackTrace; diff --git a/src/__tests__/execution.test.ts b/src/__tests__/execution.test.ts index d3ace17..85d77fc 100644 --- a/src/__tests__/execution.test.ts +++ b/src/__tests__/execution.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable prefer-promise-reject-errors */ /** * Based on https://github.com/graphql/graphql-js/blob/master/src/execution/__tests__/execution-test.js */ @@ -360,7 +361,7 @@ describe("Execute: Handles basic execution tasks", () => { throw new Error("Error getting asyncError"); }); }, - // tslint:disable-next-line + // eslint-disable-next-line asyncRawError() { return new Promise(() => { /* eslint-disable */ @@ -470,7 +471,7 @@ describe("Execute: Handles basic execution tasks", () => { const result = await executeQuery(schema, ast, data); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { sync: "sync", syncError: null, @@ -585,7 +586,7 @@ describe("Execute: Handles basic execution tasks", () => { const ast = parse(query); const result = await executeQuery(schema, ast); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { foods: null }, @@ -652,7 +653,7 @@ describe("Execute: Handles basic execution tasks", () => { `; const result = await executeQuery(schema, parse(query)); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { nullableA: { aliasedA: null @@ -686,7 +687,7 @@ describe("Execute: Handles basic execution tasks", () => { expect(result).toEqual({ data: { a: "b" } }); }); - // tslint:disable-next-line + // eslint-disable-next-line test("uses the only operation if no operation name is provided", async () => { const doc = "query Example { a }"; const data = { a: "b" }; @@ -743,12 +744,12 @@ describe("Execute: Handles basic execution tasks", () => { }) }); - expect(executeQuery(schema, ast, data)).toEqual({ + expect(executeQuery(schema, ast, data)).toMatchObject({ errors: [{ message: "Must provide an operation." }] }); }); - // tslint:disable-next-line + // eslint-disable-next-line test("errors if no op name is provided with multiple operations", async () => { const doc = "query Example { a } query OtherExample { a }"; const data = { a: "b" }; @@ -762,7 +763,7 @@ describe("Execute: Handles basic execution tasks", () => { }) }); - expect(executeQuery(schema, ast, data)).toEqual({ + expect(executeQuery(schema, ast, data)).toMatchObject({ errors: [ { message: @@ -790,7 +791,7 @@ describe("Execute: Handles basic execution tasks", () => { document: ast, operationName: "UnknownExample" }) - ).toEqual({ + ).toMatchObject({ errors: [{ message: 'Unknown operation named "UnknownExample".' }] }); }); @@ -1049,10 +1050,12 @@ describe("Execute: Handles basic execution tasks", () => { it("fails when an isTypeOf check is not met", async () => { class Special { + // eslint-disable-next-line no-useless-constructor constructor(public value: any) {} } class NotSpecial { + // eslint-disable-next-line no-useless-constructor constructor(public value: any) {} } @@ -1072,11 +1075,11 @@ describe("Execute: Handles basic execution tasks", () => { fields: { special: { type: SpecialType, - resolve: rootValue => rootValue.special + resolve: (rootValue) => rootValue.special }, specials: { type: new GraphQLList(SpecialType), - resolve: rootValue => rootValue.specials + resolve: (rootValue) => rootValue.specials } } }) @@ -1089,7 +1092,7 @@ describe("Execute: Handles basic execution tasks", () => { }; const result = await executeQuery(schema, query, value); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { special: null, specials: [{ value: "foo" }, null] @@ -1236,7 +1239,7 @@ describe("Checks if the output of the compilation was a compiled query", () => { test("returns true for a compiled query object", () => { expect( isCompiledQuery({ - query: (jest.fn() as unknown) as CompiledQuery["query"], + query: jest.fn() as unknown as CompiledQuery["query"], stringify: JSON.stringify }) ).toBeTruthy(); diff --git a/src/__tests__/inspect.test.ts b/src/__tests__/inspect.test.ts index 7bc4cda..a9b446f 100644 --- a/src/__tests__/inspect.test.ts +++ b/src/__tests__/inspect.test.ts @@ -37,6 +37,7 @@ describe("inspect", () => { it("function", () => { expect(inspect(() => 0)).toEqual("[function]"); + // eslint-disable-next-line @typescript-eslint/no-empty-function function testFunc() {} expect(inspect(testFunc)).toEqual("[function testFunc]"); }); diff --git a/src/__tests__/json.test.ts b/src/__tests__/json.test.ts index c316f58..6ac6eb1 100644 --- a/src/__tests__/json.test.ts +++ b/src/__tests__/json.test.ts @@ -11,7 +11,8 @@ import { GraphQLString, parse, GraphQLInt, - GraphQLScalarType + GraphQLScalarType, + versionInfo } from "graphql"; import { buildExecutionContext } from "graphql/execution/execute"; import { compileQuery } from "../index"; @@ -94,49 +95,47 @@ describe("json schema creator", () => { query: BlogQuery }); - const query = ` - { - feed { - id, - title - }, - article(id: "1") { - ...articleFields, - author { - id, - name, - pic(width: 640, height: 480) { - url, - width, - height - }, - recentArticle { - ...articleFields, - keywords - } + const document = parse(/* GraphQL */ ` + { + feed { + id + title + } + article(id: "1") { + ...articleFields + author { + id + name + pic(width: 640, height: 480) { + url + width + height + } + recentArticle { + ...articleFields + keywords } } } + } - fragment articleFields on Article { - id, - isPublished, - title, - body, - hidden, - notdefined - } - `; + fragment articleFields on Article { + id + isPublished + title + body + hidden + notdefined + } + `); - const context: any = buildExecutionContext( - blogSchema, - parse(query), - null, - null, - null, - null, - null - ); + const context: any = + versionInfo.major > 15 + ? (buildExecutionContext as any)({ + schema: blogSchema, + document + }) + : (buildExecutionContext as any)(blogSchema, document); const jsonSchema = queryToJSONSchema(context); test("json schema creation", () => { expect(jsonSchema).toMatchSnapshot(); @@ -147,7 +146,7 @@ describe("json schema creator", () => { expect(typeof fastJson(jsonSchema) === "function").toBeTruthy(); }); test("valid response serialization", async () => { - const prepared: any = compileQuery(blogSchema, parse(query), "", { + const prepared: any = compileQuery(blogSchema, document, "", { customJSONSerializer: true }); const response = await prepared.query(undefined, undefined, {}); @@ -155,7 +154,7 @@ describe("json schema creator", () => { expect(prepared.stringify(response)).toEqual(JSON.stringify(response)); }); test("valid response serialization 2", async () => { - const prepared: any = compileQuery(blogSchema, parse(query), "", { + const prepared: any = compileQuery(blogSchema, document, "", { customJSONSerializer: false }); expect(prepared.stringify).toBe(JSON.stringify); diff --git a/src/__tests__/lists.test.ts b/src/__tests__/lists.test.ts index d5bdaf6..50cdd7c 100644 --- a/src/__tests__/lists.test.ts +++ b/src/__tests__/lists.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable prefer-promise-reject-errors */ /** * Based on https://github.com/graphql/graphql-js/blob/master/src/execution/__tests__/lists-test.js */ @@ -8,9 +9,9 @@ import { GraphQLList, GraphQLNonNull, GraphQLObjectType, + GraphQLOutputType, GraphQLSchema, GraphQLString, - GraphQLType, parse } from "graphql"; import { compileQuery, isCompiledQuery } from "../index"; @@ -46,7 +47,7 @@ function check(testType: any, testData: any, expected: any) { throw prepared; } const response = await prepared.query(data, undefined, {}); - expect(response).toEqual(expected); + expect(response).toMatchObject(expected); }; } @@ -117,7 +118,7 @@ describe("Execute: Accepts any iterable as list value", () => { const containsValues = "Contains values"; const containsNull = "Contains null"; -// tslint:disable-next-line +// eslint-disable-next-line describe("Execute: Handles list nullability", () => { describe("[T]", () => { const type = new GraphQLList(GraphQLInt); @@ -276,7 +277,7 @@ describe("Execute: Handles list nullability", () => { ); }); - // tslint:disable-next-line + // eslint-disable-next-line describe("Array>", () => { test( containsValues, @@ -545,7 +546,7 @@ describe("Execute: Handles list nullability", () => { describe("Execute: Handles nested lists", () => { function check( - testType: GraphQLType, + testType: GraphQLOutputType, query: string | undefined, testData: any, expected: any @@ -567,7 +568,7 @@ describe("Execute: Handles nested lists", () => { throw prepared; } const response = await prepared.query(testData, undefined, {}); - expect(response).toEqual(expected); + expect(response).toMatchObject(expected); }; } @@ -737,7 +738,7 @@ describe("resolved fields in object list", () => { const article: GraphQLObjectType = new GraphQLObjectType({ name: "Article", fields: { - id: { type: new GraphQLNonNull(GraphQLID), resolve: obj => obj.id } + id: { type: new GraphQLNonNull(GraphQLID), resolve: (obj) => obj.id } } }); @@ -811,7 +812,7 @@ describe("resolved fields in object list", () => { "" ); const response = await prepared.query(undefined, undefined, {}); - expect(response).toEqual({ + expect(response).toMatchObject({ data: { feed: [{ id: "123" }, null] }, diff --git a/src/__tests__/mutations.test.ts b/src/__tests__/mutations.test.ts index db7200b..4257221 100644 --- a/src/__tests__/mutations.test.ts +++ b/src/__tests__/mutations.test.ts @@ -32,7 +32,7 @@ class Root { } promiseToChangeTheNumber(newNumber: number): Promise { - return new Promise(resolve => { + return new Promise((resolve) => { process.nextTick(() => { resolve(this.immediatelyChangeTheNumber(newNumber)); }); @@ -44,6 +44,7 @@ class Root { } promiseAndFailToChangeTheNumber(): Promise { + // eslint-disable-next-line promise/param-names return new Promise((_, reject) => { process.nextTick(() => { reject(new Error("Cannot change the number")); @@ -169,7 +170,7 @@ describe("Execute: Handles mutation execution ordering", () => { const result = await executeQuery(schema, parse(doc), new Root(6)); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { first: { theNumber: 1 }, second: { theNumber: 2 }, diff --git a/src/__tests__/nonnull.test.ts b/src/__tests__/nonnull.test.ts index dc471b3..7ff31b3 100644 --- a/src/__tests__/nonnull.test.ts +++ b/src/__tests__/nonnull.test.ts @@ -151,16 +151,16 @@ function patch(data: any) { ); } -// tslint:disable-next-line +// eslint-disable-next-line async function executeSyncAndAsync(query: string, rootValue: any) { const syncResult = await executeQuery(query, rootValue); const asyncResult = await executeQuery(patch(query), rootValue); - expect(asyncResult).toEqual(patch(syncResult)); + expect(asyncResult).toMatchObject(patch(syncResult)); return syncResult; } -// tslint:disable-next-line +// eslint-disable-next-line describe("Execute: handles non-nullable types", () => { describe("nulls a nullable field", () => { const query = ` @@ -178,7 +178,7 @@ describe("Execute: handles non-nullable types", () => { test("that throws", async () => { const result = await executeSyncAndAsync(query, throwingData); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { sync: null }, errors: [ { @@ -202,7 +202,7 @@ describe("Execute: handles non-nullable types", () => { test("that returns null", async () => { const result = await executeSyncAndAsync(query, nullingData); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { syncNest: null }, errors: [ { @@ -217,7 +217,7 @@ describe("Execute: handles non-nullable types", () => { test("that throws", async () => { const result = await executeSyncAndAsync(query, throwingData); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { syncNest: null }, errors: [ { @@ -241,7 +241,7 @@ describe("Execute: handles non-nullable types", () => { test("that returns null", async () => { const result = await executeSyncAndAsync(query, nullingData); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { promiseNest: null }, errors: [ { @@ -256,7 +256,7 @@ describe("Execute: handles non-nullable types", () => { test("that throws", async () => { const result = await executeSyncAndAsync(query, throwingData); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { promiseNest: null }, errors: [ { @@ -308,7 +308,7 @@ describe("Execute: handles non-nullable types", () => { test("that throws", async () => { const result = await executeQuery(query, throwingData); - expect(result).toEqual({ + expect(result).toMatchObject({ data, errors: [ { @@ -434,7 +434,7 @@ describe("Execute: handles non-nullable types", () => { test("that returns null", async () => { const result = await executeQuery(query, nullingData); - expect(result).toEqual({ + expect(result).toMatchObject({ data, errors: [ { @@ -495,7 +495,7 @@ describe("Execute: handles non-nullable types", () => { test("that throws", async () => { const result = await executeQuery(query, throwingData); - expect(result).toEqual({ + expect(result).toMatchObject({ data, errors: [ { @@ -560,7 +560,7 @@ describe("Execute: handles non-nullable types", () => { test("that returns null", async () => { const result = await executeSyncAndAsync(query, nullingData); - expect(result).toEqual({ + expect(result).toMatchObject({ data: null, errors: [ { @@ -575,7 +575,7 @@ describe("Execute: handles non-nullable types", () => { test("that throws", async () => { const result = await executeSyncAndAsync(query, throwingData); - expect(result).toEqual({ + expect(result).toMatchObject({ data: null, errors: [ { @@ -600,11 +600,10 @@ describe("Execute: handles non-nullable types", () => { type: new GraphQLNonNull(GraphQLString) } }, - resolve: (_, args) => { + resolve: (_, args): any => { if (typeof args.cannotBeNull === "string") { return "Passed: " + args.cannotBeNull; } - return; } } } @@ -680,7 +679,7 @@ describe("Execute: handles non-nullable types", () => { `) }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { locations: [{ column: 13, line: 3 }], @@ -703,7 +702,7 @@ describe("Execute: handles non-nullable types", () => { } `) }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { locations: [{ column: 42, line: 3 }], @@ -730,7 +729,7 @@ describe("Execute: handles non-nullable types", () => { } }); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { withNonNullArg: null }, @@ -759,7 +758,7 @@ describe("Execute: handles non-nullable types", () => { } }); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { withNonNullArg: null }, diff --git a/src/__tests__/resolve.test.ts b/src/__tests__/resolve.test.ts index dee54c3..87e01f3 100644 --- a/src/__tests__/resolve.test.ts +++ b/src/__tests__/resolve.test.ts @@ -64,6 +64,7 @@ describe("Execute: resolve function", () => { }); class Adder { + // eslint-disable-next-line no-useless-constructor constructor(private num: number) {} test({ addend1 }: any, context: any) { diff --git a/src/__tests__/scalars.test.ts b/src/__tests__/scalars.test.ts index 5e4e755..9b0b06a 100644 --- a/src/__tests__/scalars.test.ts +++ b/src/__tests__/scalars.test.ts @@ -1,4 +1,4 @@ -/* tslint:disable:no-big-function */ +/* eslint-disable max-lines-per-function */ import { DocumentNode, GraphQLObjectType, @@ -77,7 +77,7 @@ describe("Scalars: Is able to serialize custom scalar", () => { ), parse(request) ); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { scalar: null }, @@ -109,7 +109,7 @@ describe("Scalars: Is able to serialize custom scalar", () => { ), parse(request) ); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { scalar: null }, @@ -141,7 +141,7 @@ describe("Scalars: Is able to serialize custom scalar", () => { ), parse(request) ); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { scalar: null }, diff --git a/src/__tests__/schema.test.ts b/src/__tests__/schema.test.ts index 141c782..8a4a1fb 100644 --- a/src/__tests__/schema.test.ts +++ b/src/__tests__/schema.test.ts @@ -2,9 +2,11 @@ * Based on https://github.com/graphql/graphql-js/blob/master/src/execution/__tests__/schema-test.js */ -/* tslint:disable:no-big-function */ +/* eslint-disable max-lines-per-function */ import { + buildClientSchema, DocumentNode, + ExecutionResult, getIntrospectionQuery, GraphQLBoolean, GraphQLID, @@ -14,7 +16,10 @@ import { GraphQLObjectType, GraphQLSchema, GraphQLString, - parse + IntrospectionQuery, + parse, + printSchema, + versionInfo } from "graphql"; import { compileQuery, isCompiledQuery } from "../index"; @@ -57,7 +62,7 @@ const BlogArticle: GraphQLObjectType = new GraphQLObjectType({ author: { type: BlogAuthor }, title: { type: GraphQLString, - resolve: article => Promise.resolve(article && article.title) + resolve: (article) => Promise.resolve(article && article.title) }, body: { type: GraphQLString }, keywords: { type: new GraphQLList(GraphQLString) } @@ -398,7 +403,14 @@ describe("Execute: Handles execution with a complex schema", () => { test("executes IntrospectionQuery", () => { const queryAST = parse(getIntrospectionQuery({ descriptions: true })); - const result = executeQuery(BlogSchema, queryAST); - expect(result).toMatchSnapshot(); + const result = executeQuery( + BlogSchema, + queryAST + ) as ExecutionResult; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const schemaFromIntrospection = buildClientSchema(result.data!); + expect(printSchema(schemaFromIntrospection)).toEqual( + printSchema(BlogSchema) + ); }); }); diff --git a/src/__tests__/subscription.test.ts b/src/__tests__/subscription.test.ts index e2220dc..18c4464 100644 --- a/src/__tests__/subscription.test.ts +++ b/src/__tests__/subscription.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ /** * Based on https://github.com/graphql/graphql-js/blob/main/src/subscription/__tests__/subscribe-test.js * This test suite includes certain deviations from the original: @@ -41,11 +42,12 @@ const InboxType = new GraphQLObjectType({ fields: { total: { type: GraphQLInt, - resolve: inbox => inbox.emails.length + resolve: (inbox) => inbox.emails.length }, unread: { type: GraphQLInt, - resolve: inbox => inbox.emails.filter((email: any) => email.unread).length + resolve: (inbox) => + inbox.emails.filter((email: any) => email.unread).length }, emails: { type: new GraphQLList(EmailType) } } @@ -71,6 +73,7 @@ async function subscribe({ > { const prepared = compileQuery(schema, document, operationName || ""); if (!isCompiledQuery(prepared)) return prepared; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return prepared.subscribe!(rootValue, contextValue, variableValues); } @@ -120,7 +123,7 @@ function createSubscription(pubsub: SimplePubSub) { }, // FIXME: we shouldn't use mapAsyncIterator here since it makes tests way more complex subscribe() { - return pubsub.getSubscriber(newEmail => { + return pubsub.getSubscriber((newEmail) => { emails.push(newEmail); return { @@ -197,7 +200,7 @@ describe("Subscription Initialization Phase", () => { }); // Close subscription - await subscription.return!(); + await subscription.return?.(); }); it("accepts type definition with sync subscribe function", async () => { @@ -230,7 +233,7 @@ describe("Subscription Initialization Phase", () => { }); // Close subscription - await subscription.return!(); + await subscription.return?.(); }); it("accepts type definition with async subscribe function", async () => { @@ -266,7 +269,7 @@ describe("Subscription Initialization Phase", () => { }); // Close subscription - await subscription.return!(); + await subscription.return?.(); }); it("should only resolve the first field of invalid multi-field", async () => { @@ -311,7 +314,7 @@ describe("Subscription Initialization Phase", () => { expect(await subscription.next()).toHaveProperty("done", false); // Close subscription - await subscription.return!(); + await subscription.return?.(); }); it("throws an error if some of required arguments are missing", async () => { @@ -360,7 +363,7 @@ describe("Subscription Initialization Phase", () => { const document = parse("subscription { unknownField }"); const result = await subscribe({ schema, document }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: 'The subscription field "unknownField" is not defined.', @@ -436,24 +439,24 @@ describe("Subscription Initialization Phase", () => { expect( // Returning an error await subscribeWithFn(() => new Error("test error")) - ).toEqual(expectedResult); + ).toMatchObject(expectedResult); expect( // Throwing an error await subscribeWithFn(() => { throw new Error("test error"); }) - ).toEqual(expectedResult); + ).toMatchObject(expectedResult); expect( // Resolving to an error await subscribeWithFn(() => Promise.resolve(new Error("test error"))) - ).toEqual(expectedResult); + ).toMatchObject(expectedResult); expect( // Rejecting with an error await subscribeWithFn(() => Promise.reject(new Error("test error"))) - ).toEqual(expectedResult); + ).toMatchObject(expectedResult); }); it("resolves to an error if variables were wrong type", async () => { @@ -480,7 +483,7 @@ describe("Subscription Initialization Phase", () => { // If we receive variables that cannot be coerced correctly, subscribe() will // resolve to an ExecutionResult that contains an informative error description. const result = await subscribe({ schema, document, variableValues }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -611,7 +614,7 @@ describe("Subscription Publish Phase", () => { }); // The client decides to disconnect. - expect(await subscription.return!()).toEqual({ + expect(await subscription.return?.()).toEqual({ done: true, value: undefined }); @@ -739,7 +742,7 @@ describe("Subscription Publish Phase", () => { }); payload = subscription.next(); - await subscription.return!(); + await subscription.return?.(); // A new email arrives! expect( @@ -799,7 +802,7 @@ describe("Subscription Publish Phase", () => { // Throw error let caughtError; try { - await subscription.throw!("ouch"); + await subscription.throw?.("ouch"); } catch (e) { caughtError = e; } @@ -920,7 +923,7 @@ describe("Subscription Publish Phase", () => { }); // An error in execution is presented as such. - expect(await subscription.next()).toEqual({ + expect(await subscription.next()).toMatchObject({ done: false, value: { data: { newMessage: null }, @@ -957,7 +960,7 @@ describe("Subscription Publish Phase", () => { fields: { newMessage: { type: GraphQLString, - resolve: message => message, + resolve: (message) => message, subscribe: generateMessages } } @@ -1026,7 +1029,7 @@ class SimplePubSub { if (pushQueue.length > 0) { return Promise.resolve({ value: pushQueue.shift(), done: false }); } - return new Promise(resolve => pullQueue.push(resolve)); + return new Promise((resolve) => pullQueue.push(resolve)); }, return(): Promise> { emptyQueue(); @@ -1044,7 +1047,7 @@ class SimplePubSub { function pushValue(event: T): void { const value: R = transform(event); if (pullQueue.length > 0) { - pullQueue.shift()!({ value, done: false }); + pullQueue.shift()?.({ value, done: false }); } else { pushQueue.push(value); } diff --git a/src/__tests__/union-interface.test.ts b/src/__tests__/union-interface.test.ts index 502d39d..d77ec2b 100644 --- a/src/__tests__/union-interface.test.ts +++ b/src/__tests__/union-interface.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-useless-constructor */ /** * Based on https://github.com/graphql/graphql-js/blob/master/src/execution/__tests__/union-interface-test.js */ @@ -55,7 +56,7 @@ const DogType = new GraphQLObjectType({ name: { type: GraphQLString }, barks: { type: GraphQLBoolean } }, - isTypeOf: value => value instanceof Dog + isTypeOf: (value) => value instanceof Dog }); const CatType = new GraphQLObjectType({ @@ -65,7 +66,7 @@ const CatType = new GraphQLObjectType({ name: { type: GraphQLString }, meows: { type: GraphQLBoolean } }, - isTypeOf: value => value instanceof Cat + isTypeOf: (value) => value instanceof Cat }); const PetType = new GraphQLUnionType({ @@ -73,12 +74,12 @@ const PetType = new GraphQLUnionType({ types: [DogType, CatType], resolveType(value) { if (value instanceof Dog) { - return DogType; + return DogType.toString(); } if (value instanceof Cat) { - return CatType; + return CatType.toString(); } - return null; + return undefined; } }); @@ -90,7 +91,7 @@ const PersonType = new GraphQLObjectType({ pets: { type: new GraphQLList(PetType) }, friends: { type: new GraphQLList(NamedType) } }, - isTypeOf: value => value instanceof Person + isTypeOf: (value) => value instanceof Person }); const schema = new GraphQLSchema({ @@ -103,7 +104,7 @@ const odie = new Dog("Odie", true); const liz = new Person("Liz"); const john = new Person("John", [garfield, odie], [liz, odie]); -// tslint:disable-next-line +// eslint-disable-next-line describe("Execute: Union and intersection types", () => { test("can introspect on union and intersection types", () => { const ast = parse(` @@ -279,7 +280,7 @@ describe("Execute: Union and intersection types", () => { encounteredContext = context; encounteredSchema = receivedSchema; encounteredRootValue = rootValue; - return PersonType2; + return PersonType2.toString(); } }); diff --git a/src/__tests__/variables.test.ts b/src/__tests__/variables.test.ts index 178c120..666d52c 100644 --- a/src/__tests__/variables.test.ts +++ b/src/__tests__/variables.test.ts @@ -2,7 +2,7 @@ * Based on https://github.com/graphql/graphql-js/blob/master/src/execution/__tests__/variables-test.js */ -/* tslint:disable:no-big-function */ +/* eslint-disable max-lines-per-function */ import { GraphQLBoolean, GraphQLEnumType, @@ -32,7 +32,7 @@ const TestComplexScalar = new GraphQLScalarType({ } return null; }, - // tslint:disable-next-line + // eslint-disable-next-line parseValue(value: any) { if (value === "SerializedValue") { return "DeserializedValue"; @@ -104,6 +104,7 @@ function fieldWithInputArg(inputArg: GraphQLArgumentConfig) { type: GraphQLString, args: { input: inputArg }, resolve(_: any, args: any) { + // eslint-disable-next-line no-prototype-builtins if (args.hasOwnProperty("input")) { return inspect(args.input); } @@ -249,7 +250,7 @@ describe("Execute: Handles inputs", () => { } `); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -267,7 +268,7 @@ describe("Execute: Handles inputs", () => { } `); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -522,7 +523,7 @@ describe("Execute: Handles inputs", () => { params ); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -540,7 +541,7 @@ describe("Execute: Handles inputs", () => { const params = { input: { a: "foo", b: "bar", c: null } }; const result = await executeQuery(doc, params); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -555,7 +556,7 @@ describe("Execute: Handles inputs", () => { test("errors on incorrect type", async () => { const result = await executeQuery(doc, { input: "foo bar" }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -572,7 +573,7 @@ describe("Execute: Handles inputs", () => { input: { a: "foo", b: "bar" } }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -590,7 +591,7 @@ describe("Execute: Handles inputs", () => { }; const result = await executeQuery(doc, params); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -634,7 +635,7 @@ describe("Execute: Handles inputs", () => { } `); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { locations: [ @@ -657,7 +658,7 @@ describe("Execute: Handles inputs", () => { } `); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { locations: [ @@ -783,7 +784,7 @@ describe("Execute: Handles inputs", () => { test("errors on incorrect type", async () => { const result = await executeQuery(doc, { input: "foo bar" }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -973,7 +974,7 @@ describe("Execute: Handles inputs", () => { { int: Number.MAX_SAFE_INTEGER + 1 } ); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { locations: [ @@ -999,7 +1000,7 @@ describe("Execute: Handles inputs", () => { boolean: "hello" }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { locations: [ @@ -1088,7 +1089,7 @@ describe("Execute: Handles inputs", () => { test("does not allow non-nullable inputs to be omitted in a variable", async () => { const result = await executeQuery(doc); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { locations: [{ line: 2, column: 16 }], @@ -1146,7 +1147,7 @@ describe("Execute: Handles inputs", () => { boolean: null }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { locations: [ @@ -1245,7 +1246,7 @@ describe("Execute: Handles inputs", () => { test("reports error for missing non-nullable inputs", async () => { const result = await executeQuery("{ fieldWithNonNullableStringInput }"); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -1264,7 +1265,7 @@ describe("Execute: Handles inputs", () => { `; const result = await executeQuery(doc, { value: [1, 2, 3] }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -1289,7 +1290,7 @@ describe("Execute: Handles inputs", () => { } `); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { fieldWithNonNullableStringInput: null }, @@ -1363,7 +1364,7 @@ describe("Execute: Handles inputs", () => { `; const result = await executeQuery(doc); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { locations: [ @@ -1386,7 +1387,7 @@ describe("Execute: Handles inputs", () => { `; const result = await executeQuery(doc); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { locations: [ @@ -1410,7 +1411,7 @@ describe("Execute: Handles inputs", () => { `; const result = await executeQuery(doc, { input: null }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -1473,7 +1474,7 @@ describe("Execute: Handles inputs", () => { `; const result = await executeQuery(doc, { input: ["A", null, "B"] }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -1493,7 +1494,7 @@ describe("Execute: Handles inputs", () => { `; const result = await executeQuery(doc, { input: null }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -1523,7 +1524,7 @@ describe("Execute: Handles inputs", () => { `; const result = await executeQuery(doc, { input: ["A", null, "B"] }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -1543,7 +1544,7 @@ describe("Execute: Handles inputs", () => { `; const result = await executeQuery(doc, { input: { list: ["A", "B"] } }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -1563,7 +1564,7 @@ describe("Execute: Handles inputs", () => { `; const result = await executeQuery(doc, { input: "whoknows" }); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -1608,7 +1609,7 @@ describe("Execute: Handles inputs", () => { } `); - expect(result).toEqual({ + expect(result).toMatchObject({ errors: [ { message: @@ -1643,7 +1644,7 @@ describe("Execute: Handles inputs", () => { { optional: null } ); - expect(result).toEqual({ + expect(result).toMatchObject({ data: { fieldWithNonNullableStringInputAndDefaultArgumentValue: null }, diff --git a/src/ast.ts b/src/ast.ts index de1c91f..2d39c07 100644 --- a/src/ast.ts +++ b/src/ast.ts @@ -26,7 +26,8 @@ import { typeFromAST, valueFromASTUntyped, ValueNode, - VariableNode + VariableNode, + versionInfo } from "graphql"; import { getFieldDef } from "graphql/execution/execute"; import { Kind, SelectionNode, TypeNode } from "graphql/language"; @@ -83,7 +84,7 @@ function collectFieldsImpl( ): FieldsAndNodes { for (const selection of selectionSet.selections) { switch (selection.kind) { - case Kind.FIELD: + case Kind.FIELD: { const name = getFieldEntryKey(selection); if (!fields[name]) { fields[name] = []; @@ -123,6 +124,7 @@ function collectFieldsImpl( fields[name].push(fieldNode); break; + } case Kind.INLINE_FRAGMENT: if ( @@ -149,7 +151,7 @@ function collectFieldsImpl( ); break; - case Kind.FRAGMENT_SPREAD: + case Kind.FRAGMENT_SPREAD: { const fragName = selection.name.value; if (visitedFragmentNames[fragName]) { continue; @@ -176,6 +178,7 @@ function collectFieldsImpl( ) ); break; + } } } return fields; @@ -242,7 +245,7 @@ function augmentFieldNodeTree( function handle( parentFieldNode: JitFieldNode, selection: SelectionNode, - comesFromFragmentSpread: boolean = false + comesFromFragmentSpread = false ) { switch (selection.kind) { case Kind.FIELD: { @@ -311,11 +314,11 @@ function joinShouldIncludeCompilations(...compilations: string[]) { // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length // remove empty strings - let filteredCompilations = compilations.filter(it => it); + let filteredCompilations = compilations.filter((it) => it); // Split conditions by && and flatten it filteredCompilations = ([] as string[]).concat( - ...filteredCompilations.map(e => e.split(" && ").map(it => it.trim())) + ...filteredCompilations.map((e) => e.split(" && ").map((it) => it.trim())) ); // Deduplicate items filteredCompilations = Array.from(new Set(filteredCompilations)); @@ -375,10 +378,10 @@ function compileSkipIncludeDirectiveValues( node: SelectionNode ) { const skipDirective = node.directives?.find( - it => it.name.value === GraphQLSkipDirective.name + (it) => it.name.value === GraphQLSkipDirective.name ); const includeDirective = node.directives?.find( - it => it.name.value === GraphQLIncludeDirective.name + (it) => it.name.value === GraphQLIncludeDirective.name ); const skipValue = skipDirective @@ -407,7 +410,7 @@ function compileSkipIncludeDirective( compilationContext: CompilationContext, directive: DirectiveNode ) { - const ifNode = directive.arguments?.find(it => it.name.value === "if"); + const ifNode = directive.arguments?.find((it) => it.name.value === "if"); if (ifNode == null) { throw new GraphQLError( `Directive '${directive.name.value}' is missing required arguments: 'if'`, @@ -446,9 +449,10 @@ function validateSkipIncludeVariableType( compilationContext: CompilationContext, variable: VariableNode ) { - const variableDefinition = compilationContext.operation.variableDefinitions?.find( - it => it.variable.name.value === variable.name.value - ); + const variableDefinition = + compilationContext.operation.variableDefinitions?.find( + (it) => it.variable.name.value === variable.name.value + ); if (variableDefinition == null) { throw new GraphQLError(`Variable '${variable.name.value}' is not defined`, [ variable @@ -510,7 +514,7 @@ function doesFragmentConditionMatch( return false; } if (isAbstractType(conditionalType)) { - return compilationContext.schema.isPossibleType(conditionalType, type); + return compilationContext.schema.isSubType(conditionalType, type); } return false; } @@ -534,9 +538,13 @@ export function resolveFieldDef( fieldNodes: FieldNode[] ): Maybe> { const fieldNode = fieldNodes[0]; - const fieldName = fieldNode.name.value; - return getFieldDef(compilationContext.schema, parentType, fieldName); + if (versionInfo.major < 16) { + const fieldName = fieldNode.name.value; + return getFieldDef(compilationContext.schema, parentType, fieldName as any); + } + + return getFieldDef(compilationContext.schema, parentType, fieldNode as any); } /** @@ -603,6 +611,7 @@ function memoize3( cache2 = new WeakMap(); cache1.set(a2, cache2); } + // eslint-disable-next-line prefer-rest-params const newValue = (fn as any)(...arguments); cache2.set(a3, newValue); return newValue; @@ -611,6 +620,24 @@ function memoize3( return memoized; } +// response path is used for identifying +// the info resolver function as well as the path in errros, +// the meta type is used for elements that are only to be used for +// the function name +type ResponsePathType = "variable" | "literal" | "meta"; + +export interface ObjectPath { + prev: ObjectPath | undefined; + key: string; + type: ResponsePathType; +} + +interface MissingVariablePath { + valueNode: VariableNode; + path?: ObjectPath; + argument?: { definition: GraphQLArgument; node: ArgumentNode }; +} + export interface Arguments { values: { [argument: string]: any }; missing: MissingVariablePath[]; @@ -632,7 +659,7 @@ export function getArgumentDefs( const missing: MissingVariablePath[] = []; const argDefs = def.args; const argNodes = node.arguments || []; - const argNodeMap = keyMap(argNodes, arg => arg.name.value); + const argNodeMap = keyMap(argNodes, (arg) => arg.name.value); for (const argDef of argDefs) { const name = argDef.name; if (argDef.defaultValue !== undefined) { @@ -656,7 +683,7 @@ export function getArgumentDefs( // execution. This is a runtime check to ensure execution does not // continue with an invalid argument value. throw new GraphQLError( - `Argument "${name}" of type \"${argType}\" has invalid value ${print( + `Argument "${name}" of type "${argType}" has invalid value ${print( argumentNode.value )}.`, argumentNode.value @@ -689,12 +716,6 @@ export function getArgumentDefs( return { values, missing }; } -interface MissingVariablePath { - valueNode: VariableNode; - path?: ObjectPath; - argument?: { definition: GraphQLArgument; node: ArgumentNode }; -} - interface ASTValueWithVariables { value: object | string | boolean | symbol | number | null | any[]; variables: MissingVariablePath[]; @@ -785,7 +806,7 @@ export function valueFromAST( } const coercedObj = Object.create(null); const variables: MissingVariablePath[] = []; - const fieldNodes = keyMap(valueNode.fields, field => field.name.value); + const fieldNodes = keyMap(valueNode.fields, (field) => field.name.value); const fields = Object.values(type.getFields()); for (const field of fields) { if (field.defaultValue !== undefined) { @@ -827,10 +848,10 @@ export function valueFromAST( // Scalars fulfill parsing a literal value via parseLiteral(). // Invalid values represent a failure to parse correctly, in which case // no value is returned. - let result; + let result: any; try { if (type.parseLiteral.length > 1) { - // tslint:disable-next-line + // eslint-disable-next-line console.error( "Scalar with variable inputs detected for parsing AST literals. This is not supported." ); @@ -878,6 +899,7 @@ function keyMap( keyFn: (item: T) => string ): { [key: string]: T } { return list.reduce( + // eslint-disable-next-line no-sequences (map, item) => ((map[keyFn(item)] = item), map), Object.create(null) ); @@ -892,18 +914,6 @@ export function computeLocations(nodes: ASTNode[]): SourceLocation[] { }, [] as SourceLocation[]); } -export interface ObjectPath { - prev: ObjectPath | undefined; - key: string; - type: ResponsePathType; -} - -// response path is used for identifying -// the info resolver function as well as the path in errros, -// the meta type is used for elements that are only to be used for -// the function name -type ResponsePathType = "variable" | "literal" | "meta"; - export function addPath( responsePath: ObjectPath | undefined, key: string, @@ -925,5 +935,6 @@ export function flattenPath( } function isInvalid(value: any): boolean { + // eslint-disable-next-line no-self-compare return value === undefined || value !== value; } diff --git a/src/error.ts b/src/error.ts index be7ec44..405c99a 100644 --- a/src/error.ts +++ b/src/error.ts @@ -2,11 +2,7 @@ * Based on https://github.com/graphql/graphql-js/blob/master/src/error/GraphQLError.js */ -import { - GraphQLError as UpstreamGraphQLError, - printError, - SourceLocation -} from "graphql"; +import { GraphQLError as UpstreamGraphQLError, SourceLocation } from "graphql"; export function GraphQLError( message: string, @@ -64,11 +60,6 @@ export function GraphQLError( UpstreamGraphQLError.prototype, { constructor: { value: GraphQLError }, - name: { value: "GraphQLError" }, - toString: { - value: function toString() { - return printError(this); - } - } + name: { value: "GraphQLError" } } ); diff --git a/src/execution.ts b/src/execution.ts index ba86362..b1fc6e7 100644 --- a/src/execution.ts +++ b/src/execution.ts @@ -83,6 +83,45 @@ export interface CompilerOptions { resolverInfoEnricher?: (inp: ResolveInfoEnricherInput) => object; } +interface ExecutionContext { + promiseCounter: number; + data: any; + errors: GraphQLError[]; + nullErrors: GraphQLError[]; + resolve?: () => void; + inspect: typeof inspect; + variables: { [key: string]: any }; + context: any; + rootValue: any; + safeMap: typeof safeMap; + GraphQLError: typeof GraphqlJitError; + resolvers: { [key: string]: GraphQLFieldResolver }; + trimmer: NullTrimmer; + serializers: { + [key: string]: ( + c: ExecutionContext, + v: any, + onError: (c: ExecutionContext, msg: string) => void + ) => any; + }; + typeResolvers: { [key: string]: GraphQLTypeResolver }; + isTypeOfs: { [key: string]: GraphQLIsTypeOfFn }; + resolveInfos: { [key: string]: any }; +} + +interface DeferredField { + name: string; + responsePath: ObjectPath; + originPaths: string[]; + destinationPaths: string[]; + parentType: GraphQLObjectType; + fieldName: string; + jsFieldName: string; + fieldType: GraphQLOutputType; + fieldNodes: FieldNode[]; + args: Arguments; +} + /** * The context used during compilation. * @@ -124,45 +163,6 @@ const GLOBAL_RESOLVE = "__context.resolve"; const GLOBAL_PARENT_NAME = "__parent"; const LOCAL_JS_FIELD_NAME_PREFIX = "__field"; -interface ExecutionContext { - promiseCounter: number; - data: any; - errors: GraphQLError[]; - nullErrors: GraphQLError[]; - resolve?: () => void; - inspect: typeof inspect; - variables: { [key: string]: any }; - context: any; - rootValue: any; - safeMap: typeof safeMap; - GraphQLError: typeof GraphqlJitError; - resolvers: { [key: string]: GraphQLFieldResolver }; - trimmer: NullTrimmer; - serializers: { - [key: string]: ( - c: ExecutionContext, - v: any, - onError: (c: ExecutionContext, msg: string) => void - ) => any; - }; - typeResolvers: { [key: string]: GraphQLTypeResolver }; - isTypeOfs: { [key: string]: GraphQLIsTypeOfFn }; - resolveInfos: { [key: string]: any }; -} - -interface DeferredField { - name: string; - responsePath: ObjectPath; - originPaths: string[]; - destinationPaths: string[]; - parentType: GraphQLObjectType; - fieldName: string; - jsFieldName: string; - fieldType: GraphQLOutputType; - fieldNodes: FieldNode[]; - args: Arguments; -} - export interface CompiledQuery< TResult = { [key: string]: any }, TVariables = { [key: string]: any } @@ -263,6 +263,7 @@ export function compileQuery< query: createBoundQuery( context, document, + // eslint-disable-next-line no-new-func new Function("return " + functionBody)(), getVariables, context.operation.name != null @@ -292,10 +293,11 @@ export function compileQuery< if ((options as any).debug) { // result of the compilation useful for debugging issues // and visualization tools like try-jit. - compiledQuery.__DO_NOT_USE_THIS_OR_YOU_WILL_BE_FIRED_compilation = functionBody; + compiledQuery.__DO_NOT_USE_THIS_OR_YOU_WILL_BE_FIRED_compilation = + functionBody; } return compiledQuery as CompiledQuery; - } catch (err) { + } catch (err: any) { return { errors: normalizeErrors(err) }; @@ -317,17 +319,12 @@ export function createBoundQuery( getVariableValues: (inputs: { [key: string]: any }) => CoercedVariableValues, operationName?: string ) { - const { - resolvers, - typeResolvers, - isTypeOfs, - serializers, - resolveInfos - } = compilationContext; + const { resolvers, typeResolvers, isTypeOfs, serializers, resolveInfos } = + compilationContext; const trimmer = createNullTrimmer(compilationContext); - const fnName = operationName ? operationName : "query"; + const fnName = operationName || "query"; - /* tslint:disable */ + /* eslint-disable */ /** * In-order to assign a debuggable name to the bound query function, * we create an intermediate object with a method named as the @@ -338,7 +335,7 @@ export function createBoundQuery( * * section: 14.3.9.3 - calls SetFunctionName */ - /* tslint:enable */ + /* eslint-enable */ const ret = { [fnName]( rootValue: any, @@ -370,6 +367,7 @@ export function createBoundQuery( nullErrors: [], errors: [] }; + // eslint-disable-next-line no-useless-call const result = func.call(null, executionContext); if (isPromise(result)) { return result.then(postProcessResult); @@ -592,7 +590,7 @@ function compileDeferredField( ${generateUniqueDeclarations(subContext)} ${GLOBAL_PARENT_NAME}.${name} = ${nodeBody}; ${compileDeferredFields(subContext)} - ${appendix ? appendix : ""} + ${appendix || ""} } `); return body; @@ -600,7 +598,7 @@ function compileDeferredField( function compileDeferredFieldsSerially(context: CompilationContext): string { let body = ""; - context.deferred.forEach(deferredField => { + context.deferred.forEach((deferredField) => { const { name, fieldName, parentType } = deferredField; const resolverName = getResolverName(parentType.name, fieldName); const mutationHandler = getHoistedFunctionName( @@ -852,10 +850,12 @@ function compileObjectType( */ body(` ( - ${fieldNodes - .map(it => it.__internalShouldInclude) - .filter(it => it) - .join(" || ") || /* if(true) - default */ "true"} + ${ + fieldNodes + .map((it) => it.__internalShouldInclude) + .filter((it) => it) + .join(" || ") || /* if(true) - default */ "true" + } ) `); @@ -871,7 +871,7 @@ function compileObjectType( let resolver = field.resolve; if (!resolver && alwaysDefer) { const fieldName = field.name; - resolver = parent => parent && parent[fieldName]; + resolver = (parent) => parent && parent[fieldName]; } if (resolver) { context.deferred.push({ @@ -948,7 +948,7 @@ function compileAbstractType( context.typeResolvers[typeResolverName] = resolveType; const collectedTypes = context.schema .getPossibleTypes(type) - .map(objectType => { + .map((objectType) => { const subContext = createSubCompilationContext(context); const object = compileType( subContext, @@ -969,8 +969,9 @@ function compileAbstractType( .join("\n"); const finalTypeName = "finalType"; const nullTypeError = `"Runtime Object type is not a possible type for \\"${type.name}\\"."`; - // tslint:disable:max-line-length + /* eslint-disable max-len */ const notPossibleTypeError = + // eslint-disable-next-line no-template-curly-in-string '`Runtime Object type "${nodeType}" is not a possible type for "' + type.name + '".`'; @@ -981,7 +982,7 @@ function compileAbstractType( }.${getFieldNodesName(fieldNodes)}. Either the ${ type.name } type should provide a \\"resolveType\\" function or each possible types should provide an \\"isTypeOf\\" function."`; - // tslint:enable:max-line-length + /* eslint-enable max-len */ return `((nodeType, err) => { if (err != null) { @@ -1282,9 +1283,7 @@ function compileArguments( if (variable.argument && isNonNullType(variable.argument.definition.type)) { const message = `'Argument "${ variable.argument.definition.name - }" of non-null type "${inspect( - variable.argument.definition.type - )}" must not be null.'`; + }" of non-null type "${variable.argument.definition.type.toString()}" must not be null.'`; body += `if (${GLOBAL_VARIABLES_NAME}['${ variable.valueNode.name.value }'] == null) { @@ -1311,9 +1310,7 @@ function compileArguments( ) { const message = `'Argument "${ variable.argument.definition.name - }" of required type "${inspect( - variable.argument.definition.type - )}" was provided the variable "$${varName}" which was not provided a runtime value.'`; + }" of required type "${variable.argument.definition.type.toString()}" was provided the variable "$${varName}" which was not provided a runtime value.'`; body += ` else { ${errorDestination}.push(${createErrorObject( context, @@ -1340,7 +1337,7 @@ function compileArguments( */ function generateUniqueDeclarations( context: CompilationContext, - defaultValue: boolean = false + defaultValue = false ) { return context.deferred .map( @@ -1398,7 +1395,7 @@ function getErrorDestination(type: GraphQLType): string { function createResolveInfoName(path: ObjectPath) { return ( flattenPath(path) - .map(p => p.key) + .map((p) => p.key) .join("_") + "Info" ); } @@ -1434,9 +1431,7 @@ function getSerializer( customSerializer?: GraphQLScalarSerializer ) { const { name } = scalar; - const serialize = customSerializer - ? customSerializer - : (val: any) => scalar.serialize(val); + const serialize = customSerializer || ((val: any) => scalar.serialize(val)); return function leafSerializer( context: ExecutionContext, v: any, @@ -1454,7 +1449,7 @@ function getSerializer( return null; } return value; - } catch (e) { + } catch (e: any) { onError( context, (e && e.message) || @@ -1474,14 +1469,14 @@ function getSerializer( * @param contextValue * @param {GraphQLResolveInfo} info * @param {GraphQLAbstractType} abstractType - * @returns {string | GraphQLObjectType} + * @returns {string} */ function defaultResolveTypeFn( value: any, contextValue: any, info: GraphQLResolveInfo, abstractType: GraphQLAbstractType -): string | GraphQLObjectType { +): string { // First, look for `__typename`. if ( value != null && @@ -1502,7 +1497,7 @@ function defaultResolveTypeFn( `Promises are not supported for resolving type of ${value}` ); } else if (isTypeOfResult) { - return type; + return type.name; } } } @@ -1525,9 +1520,8 @@ function buildCompilationContext( const errors: GraphQLError[] = []; let operation: OperationDefinitionNode | void; let hasMultipleAssumedOperations = false; - const fragments: { [key: string]: FragmentDefinitionNode } = Object.create( - null - ); + const fragments: { [key: string]: FragmentDefinitionNode } = + Object.create(null); for (const definition of document.definitions) { switch (definition.kind) { case Kind.OPERATION_DEFINITION: @@ -1575,9 +1569,8 @@ function buildCompilationContext( deferred: [], depth: -1, variableValues: {}, - fieldResolver: undefined as any, - errors: errors as any - }; + errors + } as unknown as CompilationContext; } function getFieldNodesName(nodes: FieldNode[]) { @@ -1606,7 +1599,7 @@ function createErrorObject( return `new ${GRAPHQL_ERROR}(${message}, ${JSON.stringify(computeLocations(nodes))}, ${serializeResponsePathAsArray(path)}, - ${originalError ? originalError : "undefined"}, + ${originalError || "undefined"}, ${context.options.disablingCapturingStackErrors ? "true" : "false"})`; } @@ -1640,7 +1633,7 @@ function promiseDone() { function normalizeErrors(err: Error[] | Error): GraphQLError[] { if (Array.isArray(err)) { - return err.map(e => normalizeError(e)); + return err.map((e) => normalizeError(e)); } return [normalizeError(err)]; } @@ -1660,6 +1653,7 @@ function normalizeError(err: Error): GraphQLError { * Returns true if a value is undefined, or NaN. */ function isInvalid(value: any): boolean { + // eslint-disable-next-line no-self-compare return value === undefined || value !== value; } @@ -1716,7 +1710,7 @@ function compileSubscriptionOperation( ); try { - const eventStream = await subscriber!( + const eventStream = await subscriber?.( executionContext.rootValue, executionContext.variables, executionContext.context, @@ -1788,15 +1782,10 @@ function createBoundSubscribe( getVariableValues: (inputs: { [key: string]: any }) => CoercedVariableValues, operationName: string | undefined ): CompiledQuery["subscribe"] { - const { - resolvers, - typeResolvers, - isTypeOfs, - serializers, - resolveInfos - } = compilationContext; + const { resolvers, typeResolvers, isTypeOfs, serializers, resolveInfos } = + compilationContext; const trimmer = createNullTrimmer(compilationContext); - const fnName = operationName ? operationName : "subscribe"; + const fnName = operationName || "subscribe"; const ret = { async [fnName]( @@ -1831,6 +1820,7 @@ function createBoundSubscribe( data: {} }; + // eslint-disable-next-line no-useless-call return func.call(null, executionContext); } }; @@ -1876,7 +1866,7 @@ function mapAsyncIterator( async return(): Promise> { return typeof iterator.return === "function" ? mapResult(await iterator.return()) - : { value: (undefined as unknown) as R, done: true }; + : { value: undefined as unknown as R, done: true }; }, async throw(error?: Error) { return typeof iterator.throw === "function" diff --git a/src/inspect.ts b/src/inspect.ts index a7b482f..6460e08 100644 --- a/src/inspect.ts +++ b/src/inspect.ts @@ -71,7 +71,7 @@ export default function createInspect( return "[" + getObjectTag(object) + "]"; } - const properties = keys.map(key => { + const properties = keys.map((key) => { const value = formatValue(object[key], seenValues); return key + ": " + value; }); diff --git a/src/json.ts b/src/json.ts index f037dd8..078f40a 100644 --- a/src/json.ts +++ b/src/json.ts @@ -14,9 +14,8 @@ import { isObjectType, isScalarType } from "graphql"; -import { collectFields, ExecutionContext } from "graphql/execution/execute"; import { JSONSchema6, JSONSchema6TypeName } from "json-schema"; -import { collectSubfields, resolveFieldDef } from "./ast"; +import { collectFields, collectSubfields, resolveFieldDef } from "./ast"; import { CompilationContext } from "./execution"; const PRIMITIVES: { [key: string]: JSONSchema6TypeName } = { @@ -147,7 +146,7 @@ function transformNode( if (isNonNullType(type)) { const nullable = transformNode(compilationContext, fieldNodes, type.ofType); if (nullable.type && Array.isArray(nullable.type)) { - const nonNullable = nullable.type.filter(x => x !== "null"); + const nonNullable = nullable.type.filter((x) => x !== "null"); return { ...nullable, type: nonNullable.length === 1 ? nonNullable[0] : nonNullable diff --git a/src/memoize.ts b/src/memoize.ts index 4af4612..4ee78af 100644 --- a/src/memoize.ts +++ b/src/memoize.ts @@ -49,7 +49,6 @@ function uncurry4( export function memoize2(fn: T): T { type A = Args2[0]; type B = Args2[1]; - type R = Args2["return"]; return uncurry2(memoize((a: A) => memoize((b: B) => fn(a, b)))) as T; } @@ -58,7 +57,6 @@ export function memoize3(fn: T): T { type A = Args3[0]; type B = Args3[1]; type C = Args3[2]; - type R = Args2["return"]; return uncurry3( memoize((a: A) => memoize((b: B) => memoize((c: C) => fn(a, b, c)))) @@ -70,7 +68,6 @@ export function memoize4(fn: T): T { type B = Args4[1]; type C = Args4[2]; type D = Args4[3]; - type R = Args2["return"]; return uncurry4( memoize((a: A) => diff --git a/src/resolve-info.ts b/src/resolve-info.ts index 3c6c24b..2111e18 100644 --- a/src/resolve-info.ts +++ b/src/resolve-info.ts @@ -41,21 +41,22 @@ export interface ResolveInfoEnricherInput { export interface FieldExpansion { // The possible return types that the field can return // It includes all the types in the Schema that intersect with the actual return type + // eslint-disable-next-line no-use-before-define [returnType: string]: TypeExpansion; } -export interface TypeExpansion { - // The fields that are requested in the Query for a particular type - // `true` indicates a leaf node - [fieldName: string]: FieldExpansion | LeafField; -} - const LeafFieldSymbol = Symbol("LeafFieldSymbol"); export interface LeafField { [LeafFieldSymbol]: true; } +export interface TypeExpansion { + // The fields that are requested in the Query for a particular type + // `true` indicates a leaf node + [fieldName: string]: FieldExpansion | LeafField; +} + function createLeafField(props: T): T & LeafField { return { [LeafFieldSymbol]: true, @@ -123,10 +124,11 @@ export function createResolveInfoThunk( rootValue, operation, variableValues,`); - Object.keys(enrichedInfo).forEach(key => { + Object.keys(enrichedInfo).forEach((key) => { gen(`${key}: enrichedInfo["${key}"],\n`); }); gen(`};};`); + // eslint-disable-next-line return new Function( "fieldName", "fieldNodes", @@ -329,7 +331,7 @@ function hasField(typ: GraphQLObjectLike, fieldName: string) { // This is because lodash does not support merging keys // which are symbols. We require them for leaf fields function deepMerge(obj: TObject, src: TSource) { - mergeWith(obj, src, (objValue, srcValue) => { + mergeWith(obj, src, (objValue, srcValue): LeafField | undefined => { if (isLeafField(objValue)) { if (isLeafField(srcValue)) { return { @@ -343,6 +345,6 @@ function deepMerge(obj: TObject, src: TSource) { return srcValue; } - return; + return undefined; }); } diff --git a/src/variables.ts b/src/variables.ts index 494df12..fc1e795 100644 --- a/src/variables.ts +++ b/src/variables.ts @@ -25,8 +25,6 @@ import createInspect from "./inspect"; const inspect = createInspect(); -export type CoercedVariableValues = FailedVariableCoercion | VariableValues; - interface FailedVariableCoercion { errors: ReadonlyArray; } @@ -35,6 +33,8 @@ interface VariableValues { coerced: { [key: string]: any }; } +export type CoercedVariableValues = FailedVariableCoercion | VariableValues; + export function failToParseVariables(x: any): x is FailedVariableCoercion { return x.errors; } @@ -79,7 +79,7 @@ export function compileVariableParsing( new (GraphQLJITError as any)( `Variable "$${varName}" expected value of type ` + `"${ - varType ? varType : print(varDefNode.type) + varType || print(varDefNode.type) }" which cannot be used as an input type.`, computeLocations([varDefNode.type]) ) @@ -118,6 +118,7 @@ export function compileVariableParsing( } `); + // eslint-disable-next-line return Function.apply( null, ["GraphQLJITError", "inspect"] diff --git a/stryker.conf.js b/stryker.conf.js index 99653fa..602496c 100644 --- a/stryker.conf.js +++ b/stryker.conf.js @@ -1,4 +1,4 @@ -module.exports = function(config) { +module.exports = function (config) { config.set({ mutator: "typescript", packageManager: "yarn", diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..b9ae344 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/", "types/"], + "exclude": [ + "**/__mocks__/*.ts", + "**/__benchmarks__/*.ts", + "**/__tests__/*.ts" + ] +} diff --git a/tsconfig.json b/tsconfig.json index 36e6832..e410049 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,11 +16,5 @@ "outDir": "./dist", "lib": ["esnext.asynciterable", "es2018"], "typeRoots": ["./types", "./node_modules/@types"] - }, - "include": ["src/", "types/"], - "exclude": [ - "**/__mocks__/*.ts", - "**/__benchmarks__/*.ts", - "**/__tests__/*.ts" - ] + } } diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 5915a80..0000000 --- a/tslint.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": [ - "tslint:recommended" - ], - "rules": { - "max-line-length": false, - "arrow-parens": false, - "no-shadowed-variable": false, - "interface-name": false, - "trailing-comma": false, - "object-literal-sort-keys": false, - "max-classes-per-file": [false, 0] - } -} diff --git a/yarn.lock b/yarn.lock index 4d465a1..f1983c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -146,6 +146,21 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@eslint/eslintrc@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.3.tgz#41f08c597025605f672251dcc4e8be66b5ed7366" + integrity sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.0.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@graphql-tools/schema@^6.0.10": version "6.0.10" resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-6.0.10.tgz#69b36fad35ea5780f8539c92e776f9e83d929575" @@ -167,6 +182,20 @@ resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.0.tgz#0eee6373e11418bfe0b5638f654df7a4ca6a3950" integrity sha512-wYn6r8zVZyQJ6rQaALBEln5B1pzxb9shV5Ef97kTvn6yVGrqyXVnDqnU24MXnFubR+rZjBY9NWuxX3FB2sTsjg== +"@humanwhocodes/config-array@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.6.0.tgz#b5621fdb3b32309d2d16575456cbc277fa8f021a" + integrity sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + "@jest/console@^24.7.1": version "24.7.1" resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545" @@ -311,6 +340,27 @@ "@types/istanbul-lib-coverage" "^2.0.0" "@types/yargs" "^12.0.9" +"@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": + 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" + "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" @@ -442,6 +492,16 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.1.tgz#fcaa655260285b8061850789f8268c51a4ec8ee1" integrity sha512-NVQEMviDWjuen3UW+mU1J6fZ0WhOfG1yRce/2OTcbaz+fgmTw2cahx6N2wh0Yl+a+hg2UZj/oElZmtULWyGIsA== +"@types/json-schema@^7.0.9": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/lodash.memoize@^4.1.6": version "4.1.6" resolved "https://registry.yarnpkg.com/@types/lodash.memoize/-/lodash.memoize-4.1.6.tgz#3221f981790a415cab1a239f25c17efd8b604c23" @@ -483,6 +543,76 @@ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.11.tgz#a090d88e1f40a910e6443c95493c1c035c76ebdc" integrity sha512-IsU1TD+8cQCyG76ZqxP0cVFnofvfzT8p/wO8ENT4jbN/KKN3grsHFgHNl/U+08s33ayX4LwI85cEhYXCOlOkMw== +"@typescript-eslint/eslint-plugin@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.2.0.tgz#2bdb247cc2e2afce7efbce09afb9a6f0a8a08434" + integrity sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw== + dependencies: + "@typescript-eslint/experimental-utils" "5.2.0" + "@typescript-eslint/scope-manager" "5.2.0" + debug "^4.3.2" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.2.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.2.0.tgz#e3b2cb9cd0aff9b50f68d9a414c299fd26b067e6" + integrity sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.2.0" + "@typescript-eslint/types" "5.2.0" + "@typescript-eslint/typescript-estree" "5.2.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/parser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.2.0.tgz#dc081aa89de16b5676b10215519af3aa7b58fb72" + integrity sha512-Uyy4TjJBlh3NuA8/4yIQptyJb95Qz5PX//6p8n7zG0QnN4o3NF9Je3JHbVU7fxf5ncSXTmnvMtd/LDQWDk0YqA== + dependencies: + "@typescript-eslint/scope-manager" "5.2.0" + "@typescript-eslint/types" "5.2.0" + "@typescript-eslint/typescript-estree" "5.2.0" + debug "^4.3.2" + +"@typescript-eslint/scope-manager@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.2.0.tgz#7ce8e4ab2baaa0ad5282913ea8e13ce03ec6a12a" + integrity sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ== + dependencies: + "@typescript-eslint/types" "5.2.0" + "@typescript-eslint/visitor-keys" "5.2.0" + +"@typescript-eslint/types@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.2.0.tgz#7ad32d15abddb0ee968a330f0ea182ea544ef7cf" + integrity sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ== + +"@typescript-eslint/typescript-estree@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.2.0.tgz#c22e0ff6f8a4a3f78504a80ebd686fe2870a68ae" + integrity sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g== + dependencies: + "@typescript-eslint/types" "5.2.0" + "@typescript-eslint/visitor-keys" "5.2.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.2.0.tgz#03522d35df98474f08e0357171a7d1b259a88f55" + integrity sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg== + dependencies: + "@typescript-eslint/types" "5.2.0" + eslint-visitor-keys "^3.0.0" + abab@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" @@ -501,6 +631,11 @@ acorn-globals@^4.1.0: acorn "^6.0.1" acorn-walk "^6.0.1" +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + acorn-walk@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.0.tgz#c957f4a1460da46af4a0388ce28b4c99355b0cbc" @@ -516,6 +651,11 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.2.tgz#6a459041c320ab17592c6317abbfdf4bbaa98ca4" integrity sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg== +acorn@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== + agent-base@5: version "5.1.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" @@ -546,6 +686,16 @@ ajv@^5.3.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" +ajv@^6.10.0, 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" + ajv@^6.8.1: version "6.10.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" @@ -556,6 +706,11 @@ ajv@^6.8.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" @@ -581,6 +736,11 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.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@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -593,6 +753,13 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: 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" + any-observable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" @@ -638,6 +805,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +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== + argv@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" @@ -663,6 +835,17 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +array-includes@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" + integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -670,6 +853,11 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -680,6 +868,15 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.flat@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" + integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -739,15 +936,6 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -babel-code-frame@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - babel-jest@^24.7.1: version "24.7.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.7.1.tgz#73902c9ff15a7dfbdc9994b0b17fcefd96042178" @@ -842,6 +1030,13 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" +braces@^3.0.1: + 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" + browser-process-hrtime@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" @@ -893,6 +1088,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +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" + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -958,7 +1161,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0: +chalk@^2.0.0, chalk@^2.0.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== @@ -967,7 +1170,7 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1: +chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -976,6 +1179,14 @@ chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.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" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -1071,11 +1282,23 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.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.6: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" @@ -1091,9 +1314,9 @@ combined-stream@~1.0.6: delayed-stream "~1.0.0" commander@^2.12.1: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^2.14.1, commander@^2.9.0, commander@~2.20.0: version "2.20.0" @@ -1158,6 +1381,15 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.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" + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" @@ -1196,14 +1428,14 @@ date-format@^2.0.0: resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.0.0.tgz#7cf7b172f1ec564f0003b39ea302c5498fb98c8f" integrity sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA== -debug@4: +debug@4, debug@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" -debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: +debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -1217,6 +1449,13 @@ debug@^3.1.0, debug@^3.2.6: dependencies: ms "^2.1.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.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -1244,6 +1483,11 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +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== + deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -1261,7 +1505,7 @@ default-require-extensions@^2.0.0: dependencies: strip-bom "^3.0.0" -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -1327,11 +1571,37 @@ diff-sequences@^24.3.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== -diff@^3.1.0, diff@^3.2.0: +diff@^3.1.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +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" + domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -1359,6 +1629,13 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1366,6 +1643,32 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.19.0, es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + es-abstract@^1.5.1: version "1.12.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" @@ -1386,11 +1689,25 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +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" + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^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== + escodegen@^1.9.1: version "1.11.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" @@ -1403,6 +1720,72 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== + +eslint-config-standard@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516" + integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg== + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-module-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz#b435001c9f8dd4ab7f6d0efcae4b9696d4c24b7c" + integrity sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ== + dependencies: + debug "^3.2.7" + find-up "^2.1.0" + pkg-dir "^2.0.0" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.25.2: + version "2.25.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz#b3b9160efddb702fc1636659e71ba1d10adbe9e9" + integrity sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.0" + has "^1.0.3" + is-core-module "^2.7.0" + is-glob "^4.0.3" + minimatch "^3.0.4" + object.values "^1.1.5" + resolve "^1.20.0" + tsconfig-paths "^3.11.0" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + eslint-plugin-prettier@^2.2.0: version "2.7.0" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" @@ -1411,6 +1794,114 @@ eslint-plugin-prettier@^2.2.0: fast-diff "^1.1.1" jest-docblock "^21.0.0" +eslint-plugin-promise@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.1.1.tgz#9674d11c056d1bafac38e4a3a9060be740988d90" + integrity sha512-XgdcdyNzHfmlQyweOPTxmc7pIsS6dE4MvwhXWMQ2Dxs1XAL2GJDilUsjWen6TWik0aSI+zD/PqocZBblcm9rdA== + +eslint-plugin-standard@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-5.0.0.tgz#c43f6925d669f177db46f095ea30be95476b1ee4" + integrity sha512-eSIXPc9wBM4BrniMzJRBm2uoVuXz2EPa+NXPk2+itrVt+r5SbKFERx/IgrK/HmfjddyKVz2f+j+7gBRvu19xLg== + +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@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-6.0.0.tgz#9cf45b13c5ac8f3d4c50f46a5121f61b3e318978" + integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186" + integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q== + +eslint@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.1.0.tgz#00f1f7dbf4134f26588e6c9f2efe970760f64664" + integrity sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw== + dependencies: + "@eslint/eslintrc" "^1.0.3" + "@humanwhocodes/config-array" "^0.6.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^6.0.0" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.0.0" + espree "^9.0.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.2.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.0.0.tgz#e90a2965698228502e771c7a58489b1a9d107090" + integrity sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ== + dependencies: + acorn "^8.5.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^3.0.0" + esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -1421,11 +1912,35 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.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@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= +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== + esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -1542,11 +2057,27 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +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.1: version "1.2.0" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== +fast-glob@^3.1.1: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -1560,11 +2091,18 @@ fast-json-stringify@^1.13.0: ajv "^6.8.1" deepmerge "^3.0.0" -fast-levenshtein@~2.0.4: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" @@ -1587,6 +2125,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + fileset@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" @@ -1605,11 +2150,25 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + find-parent-dir@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -1617,11 +2176,24 @@ find-up@^3.0.0: dependencies: locate-path "^3.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@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== +flatted@^3.1.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" + integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== + fn-name@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" @@ -1687,6 +2259,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + g-status@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" @@ -1722,6 +2299,15 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" @@ -1741,6 +2327,14 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" +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" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -1753,6 +2347,20 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +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.1: + 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.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" @@ -1782,6 +2390,25 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== +globals@^13.6.0, globals@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.4: + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -1803,10 +2430,10 @@ graceful-fs@^4.1.15, graceful-fs@^4.1.6: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== -graphql@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.1.0.tgz#b93e28de805294ec08e1630d901db550cb8960a1" - integrity sha512-0TVyfOlCGhv/DBczQkJmwXOK6fjWkjzY3Pt7wY8i0gcYXq8aogG3weCsg48m72lywKSeOqedEHvVPOvZvSD51Q== +graphql@^16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.0.0.tgz#5724f2767aefa543418e83671372117c39408c8f" + integrity sha512-n9NxoRfwnpYBZB/WJ7L166gyrShuZ8qYgVaX8oxVyELcJfAwkvwPt6WlYIl90WRlzqDjaNWvLmNOSnKs5llZWQ== growly@^1.3.0: version "1.3.0" @@ -1845,16 +2472,38 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -1891,7 +2540,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1: +has@^1.0.1, 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== @@ -1950,6 +2599,16 @@ ignore-walk@3.0.3, ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -1958,6 +2617,14 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -2018,6 +2685,15 @@ inquirer@~6.3.1: strip-ansi "^5.1.0" through "^2.3.6" +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -2049,6 +2725,21 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-bigint@^1.0.1: + version "1.0.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-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -2066,6 +2757,11 @@ is-callable@^1.1.3, is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -2073,6 +2769,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-core-module@^2.2.0, is-core-module@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -2156,6 +2859,25 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +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-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -2163,6 +2885,11 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -2218,16 +2945,36 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +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-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-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: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -2235,11 +2982,25 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" +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-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-weakref@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" + integrity sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ== + dependencies: + call-bind "^1.0.0" + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -2723,11 +3484,6 @@ jest@^24.7.1: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - js-yaml@3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" @@ -2736,7 +3492,7 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.12.0, js-yaml@^3.13.0: +js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -2744,6 +3500,13 @@ js-yaml@^3.12.0, js-yaml@^3.13.0: argparse "^1.0.7" esprima "^4.0.0" +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" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -2806,6 +3569,11 @@ json-schema@0.2.3, json-schema@^0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -2818,6 +3586,13 @@ json5@2.x, json5@^2.1.0: dependencies: minimist "^1.2.0" +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -2881,6 +3656,14 @@ leven@^2.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -2979,6 +3762,14 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -3002,7 +3793,7 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.merge@4.6.2: +lodash.merge@4.6.2, 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== @@ -3070,6 +3861,13 @@ lower-case@^2.0.1: dependencies: tslib "^1.10.0" +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" + make-dir@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -3131,6 +3929,11 @@ merge-stream@^1.0.1: dependencies: readable-stream "^2.0.1" +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -3150,6 +3953,14 @@ micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + mime-db@~1.36.0: version "1.36.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" @@ -3442,11 +4253,21 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.11.0, object-inspect@^1.9.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + object-keys@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -3454,6 +4275,16 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" @@ -3469,6 +4300,15 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -3495,6 +4335,18 @@ optionator@^0.8.1: type-check "~0.3.2" wordwrap "~1.0.0" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -3544,6 +4396,13 @@ p-is-promise@^2.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + p-limit@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" @@ -3551,6 +4410,13 @@ p-limit@^2.0.0: dependencies: p-try "^2.0.0" +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -3573,11 +4439,23 @@ p-reduce@^1.0.0: resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -3624,6 +4502,11 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +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.5, path-parse@^1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -3636,11 +4519,21 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -3670,6 +4563,13 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -3699,15 +4599,20 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" + integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== pretty-format@^24.7.0: version "24.7.0" @@ -3724,7 +4629,7 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== -progress@~2.0.0: +progress@^2.0.0, progress@~2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -3770,6 +4675,11 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +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== + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -3835,6 +4745,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpp@^3.0.0, 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== + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -3914,6 +4829,11 @@ resolve-from@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -3931,6 +4851,14 @@ resolve@1.x: dependencies: path-parse "^1.0.6" +resolve@^1.10.1, resolve@^1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + resolve@^1.3.2: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" @@ -3951,6 +4879,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +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== + rfdc@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" @@ -3970,6 +4903,13 @@ rimraf@^2.5.4, rimraf@^2.6.1: dependencies: glob "^7.0.5" +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" + rsvp@^4.8.4: version "4.8.4" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" @@ -3982,6 +4922,13 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" +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" + rxjs@^6.3.3: version "6.4.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" @@ -4053,6 +5000,18 @@ semver@^6.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== +semver@^6.1.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + semver@~6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" @@ -4090,16 +5049,37 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -4122,6 +5102,11 @@ slash@^2.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" @@ -4321,6 +5306,22 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -4358,6 +5359,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + 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" @@ -4368,6 +5376,11 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -4397,6 +5410,13 @@ supports-color@^6.0.0, supports-color@^6.1.0: dependencies: has-flag "^3.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" + surrial@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/surrial/-/surrial-1.0.0.tgz#3ac560cc7038a8ff446920a4f7c3495e1f03a578" @@ -4451,6 +5471,11 @@ test-exclude@^5.0.0: read-pkg-up "^4.0.0" require-main-filename "^1.0.1" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" @@ -4493,6 +5518,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -4559,12 +5591,27 @@ ts-node@^8.0.3: source-map-support "^0.5.6" yn "^3.0.0" +tsconfig-paths@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz#954c1fe973da6339c78e06b03ce2e48810b65f36" + integrity sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + tslib@^1.10.0: version "1.11.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.2.tgz#9c79d83272c9a7aaf166f73915c9667ecdde3cc9" integrity sha512-tTSkux6IGPnUGUd1XAZHcpu85MOkIl5zX49pO+jfsie3eP0B6pyhOlLXm3cAC6T7s+euSDDUUV+Acop5WmtkVg== -tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@~1.9.3: +tslib@^1.7.1, tslib@^1.8.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^1.8.1, tslib@^1.9.0, tslib@~1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== @@ -4580,26 +5627,26 @@ tslint-config-prettier@^1.18.0: integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== tslint-plugin-prettier@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-2.0.1.tgz#95b6a3b766622ffc44375825d7760225c50c3680" - integrity sha512-4FX9JIx/1rKHIPJNfMb+ooX1gPk5Vg3vNi7+dyFYpLO+O57F4g+b/fo1+W/G0SUOkBLHB/YKScxjX/P+7ZT/Tw== + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-2.3.0.tgz#73fe71bf9f03842ac48c104122ca9b1de012ecf4" + integrity sha512-F9e4K03yc9xuvv+A0v1EmjcnDwpz8SpCD8HzqSDe0eyg34cBinwn9JjmnnRrNAs4HdleRQj7qijp+P/JTxt4vA== dependencies: eslint-plugin-prettier "^2.2.0" lines-and-columns "^1.1.6" tslib "^1.7.1" tslint@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.15.0.tgz#6ffb180986d63afa1e531feb2a134dbf961e27d3" - integrity sha512-6bIEujKR21/3nyeoX2uBnE8s+tMXCQXhqMmaIPJpHmXJoBJPTLcI7/VHRtUwMhnLVdwLqqY3zmd8Dxqa5CVdJA== + version "5.20.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" + integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== dependencies: - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" chalk "^2.3.0" commander "^2.12.1" - diff "^3.2.0" + diff "^4.0.1" glob "^7.1.1" - js-yaml "^3.13.0" + js-yaml "^3.13.1" minimatch "^3.0.4" mkdirp "^0.5.1" resolve "^1.3.2" @@ -4614,6 +5661,13 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -4631,6 +5685,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -4638,6 +5699,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" @@ -4656,16 +5722,26 @@ typed-rest-client@~1.4.0: tunnel "0.0.4" underscore "1.8.3" -typescript@^3.9.5: - version "3.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36" - integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== +typescript@^4.4.4: + version "4.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" + integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== uglify-js@^3.1.4: version "3.13.10" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.10.tgz#a6bd0d28d38f592c3adb6b180ea6e07e1e540a8d" integrity sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg== +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + underscore@1.8.3: version "1.8.3" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" @@ -4734,6 +5810,11 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -4800,6 +5881,17 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -4812,6 +5904,13 @@ which@^1.2.10, which@^1.2.9, which@^1.3.0: dependencies: isexe "^2.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" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -4819,6 +5918,11 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wordwrap@^1.0.0, wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -4876,6 +5980,11 @@ yallist@^3.0.0, yallist@^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== + yargs-parser@10.x: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" From 05af8954d2cc362fc6c09462453110394e928934 Mon Sep 17 00:00:00 2001 From: Arda TANRIKULU Date: Tue, 2 Nov 2021 17:30:17 +0300 Subject: [PATCH 2/2] Remove TSLint --- package.json | 3 -- yarn.lock | 82 ++-------------------------------------------------- 2 files changed, 2 insertions(+), 83 deletions(-) diff --git a/package.json b/package.json index 7a11489..546b0d3 100644 --- a/package.json +++ b/package.json @@ -78,9 +78,6 @@ "prettier": "^2.4.1", "ts-jest": "^24.0.2", "ts-node": "^8.0.3", - "tslint": "^5.15.0", - "tslint-config-prettier": "^1.18.0", - "tslint-plugin-prettier": "^2.0.1", "typescript": "^4.4.4" }, "dependencies": { diff --git a/yarn.lock b/yarn.lock index f1983c4..2309578 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1068,7 +1068,7 @@ buffer-from@1.x, buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -builtin-modules@^1.0.0, builtin-modules@^1.1.1: +builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= @@ -1170,7 +1170,7 @@ chalk@^2.0.0, chalk@^2.0.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1: +chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1313,11 +1313,6 @@ combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.12.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - commander@^2.14.1, commander@^2.9.0, commander@~2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" @@ -1576,11 +1571,6 @@ diff@^3.1.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1786,14 +1776,6 @@ eslint-plugin-node@^11.1.0: resolve "^1.10.1" semver "^6.1.0" -eslint-plugin-prettier@^2.2.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" - integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA== - dependencies: - fast-diff "^1.1.1" - jest-docblock "^21.0.0" - eslint-plugin-promise@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.1.1.tgz#9674d11c056d1bafac38e4a3a9060be740988d90" @@ -2062,11 +2044,6 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^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.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - fast-glob@^3.1.1: version "3.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" @@ -3183,11 +3160,6 @@ jest-diff@^24.7.0: jest-get-type "^24.3.0" pretty-format "^24.7.0" -jest-docblock@^21.0.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" - integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== - jest-docblock@^24.3.0: version "24.3.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd" @@ -3672,11 +3644,6 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - lint-staged@^8.1.5: version "8.1.5" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.5.tgz#372476fe1a58b8834eb562ed4c99126bd60bdd79" @@ -5606,11 +5573,6 @@ tslib@^1.10.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.2.tgz#9c79d83272c9a7aaf166f73915c9667ecdde3cc9" integrity sha512-tTSkux6IGPnUGUd1XAZHcpu85MOkIl5zX49pO+jfsie3eP0B6pyhOlLXm3cAC6T7s+euSDDUUV+Acop5WmtkVg== -tslib@^1.7.1, tslib@^1.8.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - tslib@^1.8.1, tslib@^1.9.0, tslib@~1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -5621,46 +5583,6 @@ tslib@~2.0.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.0.tgz#18d13fc2dce04051e20f074cc8387fd8089ce4f3" integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== -tslint-config-prettier@^1.18.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" - integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== - -tslint-plugin-prettier@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-2.3.0.tgz#73fe71bf9f03842ac48c104122ca9b1de012ecf4" - integrity sha512-F9e4K03yc9xuvv+A0v1EmjcnDwpz8SpCD8HzqSDe0eyg34cBinwn9JjmnnRrNAs4HdleRQj7qijp+P/JTxt4vA== - dependencies: - eslint-plugin-prettier "^2.2.0" - lines-and-columns "^1.1.6" - tslib "^1.7.1" - -tslint@^5.15.0: - version "5.20.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"