diff --git a/.changeset/small-bats-fix.md b/.changeset/small-bats-fix.md new file mode 100644 index 00000000000..86223af657a --- /dev/null +++ b/.changeset/small-bats-fix.md @@ -0,0 +1,9 @@ +--- +'codemirror-graphql': patch +'graphiql': patch +'graphql-language-service-interface': patch +'graphql-language-service-server': patch +'graphql-language-service-utils': patch +--- + +Fix graphql 15 related issues. Should now build & test interchangeably. diff --git a/.github/workflows/pr-graphql-15-check.yml b/.github/workflows/pr-graphql-15-check.yml new file mode 100644 index 00000000000..99dd409ffcb --- /dev/null +++ b/.github/workflows/pr-graphql-15-check.yml @@ -0,0 +1,31 @@ +name: Build & Test PR w/ GraphQL 15 +on: + pull_request: + types: [opened, synchronize] + +# TODO: test matrix? + +jobs: + build: + name: Typescript Build + runs-on: ubuntu-20.04 + steps: + - name: Checkout Code + uses: actions/checkout@v2 + + - name: Use Node + uses: actions/setup-node@v2 + + - name: Yarn Install + uses: bahmutov/npm-install@v1 + + - name: Force GraphQL 15 resolution + run: yarn repo:resolve graphql@15 + + - name: Typescript Build + run: yarn build + + - name: Unit Tests + run: yarn test + + # TODO: add e2e tests, will need more feature flagging \ No newline at end of file diff --git a/package.json b/package.json index 081a11b56a3..b8caa3868c3 100644 --- a/package.json +++ b/package.json @@ -49,15 +49,15 @@ "lint-check": "eslint --print-config .eslintrc.js | eslint-config-prettier-check", "lint-fix": "yarn eslint --fix", "postbuild": "yarn workspace codemirror-graphql run postbuild", - "postpublish": "ts-node ./resources/publishCleanup.ts", "prebuild-bundles": "yarn build-bundles-clean", - "prepublishOnly": "./resources/prepublish.sh", - "pretty": "node resources/pretty.js", - "pretty-check": "node resources/pretty.js --check", + "prepublishOnly": "./scripts/prepublish.sh", + "pretty": "node scripts/pretty.js", + "pretty-check": "node scripts/pretty.js --check", "release": "yarn build && yarn build-bundles && yarn changeset publish", "release:canary": "(node scripts/canary-release.js && yarn build && yarn build-bundles && yarn changeset publish --tag canary) || echo Skipping Canary...", "repo:lint": "manypkg check", "repo:fix": "manypkg fix", + "repo:resolve": "node scripts/set-resolution.js", "start-graphiql": "yarn workspace graphiql dev", "start-monaco": "yarn workspace example-monaco-graphql-webpack start", "t": "yarn run testonly", @@ -111,13 +111,14 @@ "eslint-plugin-prefer-object-spread": "1.2.1", "eslint-plugin-react": "7.19.0", "eslint-plugin-react-hooks": "^3.0.0", + "execa": "^6.0.0", "express": "^4.17.1", "fetch-mock": "6.5.2", "husky": "^4.2.3", "jest": "^27", "jest-environment-jsdom": "^27", - "jest-environment-node": "^27", "jest-environment-jsdom-global": "^2.0.2", + "jest-environment-node": "^27", "js-green-licenses": "3.0.0", "jsdom": "^18.1.1", "lint-staged": "^10.1.2", diff --git a/packages/codemirror-graphql/package.json b/packages/codemirror-graphql/package.json index cca0149c98c..844c1a7e66e 100644 --- a/packages/codemirror-graphql/package.json +++ b/packages/codemirror-graphql/package.json @@ -33,12 +33,12 @@ "scripts": { "build": "yarn build-clean && yarn build-js && yarn build-esm && yarn build-flow .", "build-js": "yarn tsc", - "build-esm": "cross-env ESM=true yarn tsc --project tsconfig.esm.json && node ../../resources/renameFileExtensions.js './esm/{**,!**/__tests__/}/*.js' . .esm.js", + "build-esm": "cross-env ESM=true yarn tsc --project tsconfig.esm.json && node ../../scripts/renameFileExtensions.js './esm/{**,!**/__tests__/}/*.js' . .esm.js", "build-clean": "rimraf {mode,hint,info,jump,lint}.{js,esm.js,js.flow,js.map,d.ts,d.ts.map} && rimraf esm results utils variables coverage cm6-legacy __tests__", - "build-flow": "node ../../resources/buildFlow.js", + "build-flow": "node ../../scripts/buildFlow.js", "watch": "babel --optional runtime resources/watch.js | node", "test": "jest", - "postbuild": "node ../../resources/renameFileExtensions.js './esm/{**,!**/__tests__/}/*.js' . .esm.js" + "postbuild": "node ../../scripts/renameFileExtensions.js './esm/{**,!**/__tests__/}/*.js' . .esm.js" }, "peerDependencies": { "codemirror": "^5.58.2", diff --git a/packages/codemirror-graphql/src/__tests__/hint-test.ts b/packages/codemirror-graphql/src/__tests__/hint-test.ts index 405830347b8..d8f8958bd1a 100644 --- a/packages/codemirror-graphql/src/__tests__/hint-test.ts +++ b/packages/codemirror-graphql/src/__tests__/hint-test.ts @@ -17,6 +17,10 @@ import { GraphQLList, GraphQLNonNull, GraphQLString, + __Directive, + __EnumValue, + __Field, + __InputValue, __Schema, __Type, } from 'graphql'; @@ -613,33 +617,27 @@ describe('graphql-hint', () => { }, { text: '__Schema', - 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.', + description: __Schema.description, }, { text: '__Type', - 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.\n\nDepending 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.', + description: __Type.description, }, { text: '__Field', - 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.', + description: __Field.description, }, { text: '__InputValue', - 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.', + description: __InputValue.description, }, { text: '__EnumValue', - 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.', + description: __EnumValue.description, }, { text: '__Directive', - description: - "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn 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.", + description: __Directive.description, }, ]; const expectedSuggestions = getExpectedSuggestions(list); diff --git a/packages/graphiql/src/components/GraphiQL.tsx b/packages/graphiql/src/components/GraphiQL.tsx index 4c740859086..b94843b6253 100644 --- a/packages/graphiql/src/components/GraphiQL.tsx +++ b/packages/graphiql/src/components/GraphiQL.tsx @@ -1052,16 +1052,11 @@ export class GraphiQL extends React.Component { externalFragments.set(def.name.value, def); }); } else { - visit( - parse(this.props.externalFragments, { - allowLegacyFragmentVariables: true, - }), - { - FragmentDefinition(def) { - externalFragments.set(def.name.value, def); - }, + visit(parse(this.props.externalFragments, {}), { + FragmentDefinition(def) { + externalFragments.set(def.name.value, def); }, - ); + }); } const fragmentDependencies = getFragmentDependenciesForAST( this.state.documentAST!, @@ -1338,9 +1333,7 @@ export class GraphiQL extends React.Component { handlePrettifyQuery = () => { const editor = this.getQueryEditor(); const editorContent = editor?.getValue() ?? ''; - const prettifiedEditorContent = print( - parse(editorContent, { allowLegacyFragmentVariables: true }), - ); + const prettifiedEditorContent = print(parse(editorContent)); if (prettifiedEditorContent !== editorContent) { editor?.setValue(prettifiedEditorContent); diff --git a/packages/graphql-language-service-interface/src/__tests__/getAutocompleteSuggestions-test.ts b/packages/graphql-language-service-interface/src/__tests__/getAutocompleteSuggestions-test.ts index 46318bfd73a..4f024e9583e 100644 --- a/packages/graphql-language-service-interface/src/__tests__/getAutocompleteSuggestions-test.ts +++ b/packages/graphql-language-service-interface/src/__tests__/getAutocompleteSuggestions-test.ts @@ -9,7 +9,7 @@ import { CompletionItem } from 'graphql-language-service-types'; -import fs from 'fs'; +import fs, { readSync } from 'fs'; import { buildSchema, FragmentDefinitionNode, @@ -74,8 +74,10 @@ const suggestionCommand = { }; describe('getAutocompleteSuggestions', () => { + let graphQLVersion; let schema: GraphQLSchema; beforeEach(async () => { + // graphQLVersion = pkg.version; const schemaIDL = fs.readFileSync( path.join(__dirname, '__schema__/StarWarsSchema.graphql'), 'utf8', @@ -121,6 +123,13 @@ describe('getAutocompleteSuggestions', () => { }); } describe('with Operation types', () => { + const pkg = fs + .readFileSync( + path.join(path.parse(require.resolve('graphql')).dir, 'package.json'), + 'utf8', + ) + .toString(); + const { version: graphQLVersion } = JSON.parse(pkg); it('provides correct sortText response', () => { const result = getAutocompleteSuggestions( schema, @@ -432,29 +441,29 @@ describe('getAutocompleteSuggestions', () => { ]); }); + const expectedDirectiveSuggestions = [ + { label: 'include' }, + { label: 'skip' }, + + { label: 'test' }, + ]; + // TODO: remove this once defer and stream are merged to `graphql` + if (graphQLVersion.includes('defer')) { + expectedDirectiveSuggestions.push({ label: 'stream' }); + } + it('provides correct directive suggestions', () => { - expect(testSuggestions('{ test @ }', new Position(0, 8))).toEqual([ - { label: 'include' }, - { label: 'skip' }, - { label: 'stream' }, - { label: 'test' }, - ]); + expect(testSuggestions('{ test @ }', new Position(0, 8))).toEqual( + expectedDirectiveSuggestions, + ); - expect(testSuggestions('{ test @', new Position(0, 8))).toEqual([ - { label: 'include' }, - { label: 'skip' }, - { label: 'stream' }, - { label: 'test' }, - ]); + expect(testSuggestions('{ test @', new Position(0, 8))).toEqual( + expectedDirectiveSuggestions, + ); expect( testSuggestions('{ aliasTest: test @ }', new Position(0, 19)), - ).toEqual([ - { label: 'include' }, - { label: 'skip' }, - { label: 'stream' }, - { label: 'test' }, - ]); + ).toEqual(expectedDirectiveSuggestions); expect(testSuggestions('query @', new Position(0, 7))).toEqual([]); }); diff --git a/packages/graphql-language-service-interface/src/getAutocompleteSuggestions.ts b/packages/graphql-language-service-interface/src/getAutocompleteSuggestions.ts index 994ae059ace..950c99fbb9b 100644 --- a/packages/graphql-language-service-interface/src/getAutocompleteSuggestions.ts +++ b/packages/graphql-language-service-interface/src/getAutocompleteSuggestions.ts @@ -84,16 +84,11 @@ export const SuggestionCommand = { const collectFragmentDefs = (op: string | undefined) => { const externalFragments: FragmentDefinitionNode[] = []; if (op) { - visit( - parse(op, { - allowLegacyFragmentVariables: true, - }), - { - FragmentDefinition(def) { - externalFragments.push(def); - }, + visit(parse(op), { + FragmentDefinition(def) { + externalFragments.push(def); }, - ); + }); } return externalFragments; }; diff --git a/packages/graphql-language-service-server/src/GraphQLCache.ts b/packages/graphql-language-service-server/src/GraphQLCache.ts index fc3fb2c25fb..f3af3f79430 100644 --- a/packages/graphql-language-service-server/src/GraphQLCache.ts +++ b/packages/graphql-language-service-server/src/GraphQLCache.ts @@ -216,9 +216,7 @@ export class GraphQLCache implements GraphQLCacheInterface { // Return an empty array. let parsedQuery; try { - parsedQuery = parse(query, { - allowLegacyFragmentVariables: true, - }); + parsedQuery = parse(query); } catch (error) { return []; } diff --git a/packages/graphql-language-service-utils/src/getVariablesJSONSchema.ts b/packages/graphql-language-service-utils/src/getVariablesJSONSchema.ts index df868c3df3e..3a617d65a79 100644 --- a/packages/graphql-language-service-utils/src/getVariablesJSONSchema.ts +++ b/packages/graphql-language-service-utils/src/getVariablesJSONSchema.ts @@ -72,7 +72,7 @@ function renderType(into: string[], t: GraphQLInputType | GraphQLInputField) { if (isNonNullType(t)) { renderType(into, t.ofType); text(into, '!'); - } else if (t instanceof GraphQLList) { + } else if (isListType(t)) { text(into, '['); renderType(into, t.ofType); text(into, ']'); diff --git a/resources/buildJs.js b/resources/buildJs.js deleted file mode 100644 index f05a4f10bfa..00000000000 --- a/resources/buildJs.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -'use strict'; - -const { exec } = require('./util'); - -const commands = [ - 'babel', - 'src', - '--ignore', - '**/__tests__/**,**/__mocks__/**,**/*.spec.*,**/*-test.*', - '--out-dir', - 'dist', - '--root-mode', - 'upward', -]; -const extraArgs = process.argv[2]; -if (extraArgs) { - commands.push(extraArgs.split(' ')); -} -exec(...commands); diff --git a/resources/publishCleanup.ts b/resources/publishCleanup.ts deleted file mode 100644 index 587722cf904..00000000000 --- a/resources/publishCleanup.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Octokit } from '@octokit/rest'; - -const owner = 'graphql'; -const repo = 'graphiql'; - -const octokit = new Octokit({ - auth: process.env.GITHUB_TOKEN || process.env.GH_TOKEN, - log: { - debug: () => {}, - info: console.log, - warn: console.warn, - error: console.error, - }, -}); - -async function run() { - const releases = await octokit.repos.listReleases({ - owner, - repo, - per_page: 100, - }); - const exampleReleases = releases.data.filter( - ({ name }) => name && (name.includes('example') || name.includes('rfc')), - ); - - console.log( - `deleting ${exampleReleases.length} errant releases created by lerna publish`, - ); - - await Promise.all( - exampleReleases.map(async release => { - await octokit.repos.deleteRelease({ - owner, - repo, - release_id: release.id, - }); - await octokit.git.deleteRef({ - owner, - repo, - ref: `tags/${release.tag_name}`, - }); - }), - ); -} - -(async () => { - try { - await run(); - } catch (err) { - console.error(err); - } -})(); diff --git a/resources/buildFlow.js b/scripts/buildFlow.js similarity index 100% rename from resources/buildFlow.js rename to scripts/buildFlow.js diff --git a/resources/prepublish.sh b/scripts/prepublish.sh similarity index 92% rename from resources/prepublish.sh rename to scripts/prepublish.sh index 195a26c02cf..0fb989e027c 100755 --- a/resources/prepublish.sh +++ b/scripts/prepublish.sh @@ -10,7 +10,7 @@ fi # In order to prevent inadvertently circumventing this, we ensure that a CI # environment exists before continuing. if [ "$CI" != true ]; then - echo "\n\n\n \033[101;30m Only Travis CI can publish to NPM. \033[0m" 1>&2; + echo "\n\n\n \033[101;30m Only CI can publish to NPM. \033[0m" 1>&2; echo " Ensure git is left is a good state by backing out any commits and deleting any tags." 1>&2; echo " Then read CONTRIBUTING.md to learn how to publish to NPM.\n\n\n" 1>&2; exit 1; diff --git a/resources/pretty.js b/scripts/pretty.js similarity index 100% rename from resources/pretty.js rename to scripts/pretty.js diff --git a/resources/renameFileExtensions.js b/scripts/renameFileExtensions.js similarity index 100% rename from resources/renameFileExtensions.js rename to scripts/renameFileExtensions.js diff --git a/scripts/set-resolution.js b/scripts/set-resolution.js new file mode 100644 index 00000000000..846d9150256 --- /dev/null +++ b/scripts/set-resolution.js @@ -0,0 +1,33 @@ +const { readFile, writeFile } = require('fs/promises'); +const path = require('path'); + +async function setResolution() { + const execa = await import('execa'); + + const [, , tag] = process.argv; + if (!tag) { + throw Error('no tag provided'); + } + + const [package, version] = tag.split('@'); + if (!package || !version) { + throw Error(`Invalid tag ${tag}`); + } + const pkgPath = path.resolve(path.join(process.cwd(), 'package.json')); + const pkg = JSON.parse((await readFile(pkgPath, 'utf-8')).toString()); + + if (pkg.resolutions) { + pkg.resolutions[package] = version; + } else { + pkg.resolutions = { [package]: version }; + } + await writeFile(pkgPath, JSON.stringify(pkg, null, 2), 'utf-8'); + await execa.execa('yarn', ['--force']); +} + +setResolution() + .then() + .catch(err => { + console.error(err); + process.exit(1); + }); diff --git a/resources/util.js b/scripts/util.js similarity index 100% rename from resources/util.js rename to scripts/util.js diff --git a/yarn.lock b/yarn.lock index 7a060f1274a..f9f850c6639 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9777,6 +9777,21 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-6.0.0.tgz#598b46f09ae44f5d8097a30cfb1681d0f0371503" + integrity sha512-m4wU9j4Z9nXXoqT8RSfl28JSwmMNLFF69OON8H/lL3NeU0tNpGz313bcOfYoBBHokB0dC2tMl3VUcKgHELhL2Q== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^3.0.1" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.0.1" + onetime "^6.0.0" + signal-exit "^3.0.5" + strip-final-newline "^3.0.0" + executable@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" @@ -10708,7 +10723,7 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-stream@^6.0.0: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -11032,16 +11047,16 @@ grapheme-splitter@^1.0.4: integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== "graphiql@file:packages/graphiql": - version "1.5.8" + version "1.5.11" dependencies: "@graphiql/toolkit" "^0.4.2" codemirror "^5.58.2" - codemirror-graphql "^1.2.5" + codemirror-graphql "^1.2.7" copy-to-clipboard "^3.2.0" dset "^3.1.0" entities "^2.0.0" escape-html "^1.0.3" - graphql-language-service "^3.2.5" + graphql-language-service "^4.1.0" markdown-it "^12.2.0" graphql-config@^4.1.0: @@ -11078,10 +11093,10 @@ graphql-ws@^5.4.1, graphql-ws@^5.5.5: resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.5.5.tgz#f375486d3f196e2a2527b503644693ae3a8670a9" integrity sha512-hvyIS71vs4Tu/yUYHPvGXsTgo0t3arU820+lT5VjZS2go0ewp2LqyCgxEN56CzOG7Iys52eRhHBiD1gGRdiQtw== -graphql@16.0.0-experimental-stream-defer.5: - version "16.0.0-experimental-stream-defer.5" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.0.0-experimental-stream-defer.5.tgz#d668566fd33053a054dc5367c38c20a4ac4e4224" - integrity sha512-bluMjYpxh3a1lwZuNP+FAaEDMWzccVhkv+STcw0ckB2EPtLRTYUdXQhF9YBbUHd3tZSAR7LXzsxIw2GZXhg5rw== +graphql@15, graphql@16.0.0-experimental-stream-defer.5: + version "15.7.2" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.7.2.tgz#85ab0eeb83722977151b3feb4d631b5f2ab287ef" + integrity sha512-AnnKk7hFQFmU/2I9YSQf3xw44ctnSFCfp3zE0N6W174gqe9fWG/2rKaKxROK7CcI3XtERpjEKFqts8o319Kf7A== growly@^1.3.0: version "1.3.0" @@ -11570,6 +11585,11 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +human-signals@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" + integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== + husky@^4.2.3: version "4.3.8" resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.8.tgz#31144060be963fd6850e5cc8f019a1dfe194296d" @@ -12329,6 +12349,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.4, is-string@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" @@ -14572,6 +14597,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -14746,14 +14776,6 @@ monaco-editor@^0.29.1: resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.29.1.tgz#6ee93d8a5320704d48fd7058204deed72429c020" integrity sha512-rguaEG/zrPQSaKzQB7IfX/PpNa0qxF1FY8ZXRkN4WIl8qZdTQRSRJCtRto7IMcSgrU6H53RXI+fTcywOBC4aVw== -monaco-graphql@^0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/monaco-graphql/-/monaco-graphql-0.6.5.tgz#14c52f4ec4e99c6d958d31190c9deaf2caae47d3" - integrity sha512-0zhymVaYkn7jA33l7bnwED1cUtddQYN2NmF1NeXJ1nlyEoug9oy61H8UDOrNk/d6/cTnr7pLt30o3XuQDOMbmA== - dependencies: - graphql-language-service "^3.2.5" - graphql-language-service-utils "^2.6.3" - move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -15066,6 +15088,13 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-run-path@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.0.1.tgz#748dd68ed7de377bb1f7132c7dafe657be5ab400" + integrity sha512-ybBJQUSyFwEEhqO2lXmyKOl9ucHtyZBWVM0h0FiMfT/+WKxCUZFa95qAR2X3w/w6oigN3B0b2UNHZbD+kdfD5w== + dependencies: + path-key "^4.0.0" + npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -15271,6 +15300,13 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + open@^6.3.0: version "6.4.0" resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" @@ -15635,6 +15671,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -18190,7 +18231,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -signal-exit@^3.0.3: +signal-exit@^3.0.3, signal-exit@^3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== @@ -18868,6 +18909,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"