From 0530069b6d3a459f41a77a6b014cdb2178649eef Mon Sep 17 00:00:00 2001 From: Mitchell Hamilton Date: Wed, 31 Aug 2022 11:04:41 +1000 Subject: [PATCH] Upgrade to graphql@16 (#7817) * Upgrade to graphql@16 * add changeset Co-authored-by: Daniel Cousens --- .changeset/go-go-graphql.md | 5 ++ .changeset/great-sloths-bake.md | 2 +- changelog.js | 2 +- examples/basic/package.json | 2 +- .../extend-graphql-schema-nexus/package.json | 4 +- .../extend-graphql-subscriptions/package.json | 2 +- packages/auth/package.json | 2 +- packages/core/package.json | 3 +- packages/core/src/admin-ui/templates/app.ts | 23 ++++---- .../lib/coerceAndValidateForGraphQLInput.ts | 12 +++-- .../context/executeGraphQLFieldToRootVal.ts | 53 ++++++++++--------- .../executeGraphQLFieldWithSelection.ts | 20 ++++--- packages/core/src/lib/context/itemAPI.ts | 2 +- packages/core/src/types/context.ts | 2 +- .../src/types/schema/graphql-ts-schema.ts | 27 +++++++--- packages/fields-document/package.json | 2 +- .../fields-document/src/relationship-data.tsx | 10 ++-- tests/admin-ui-tests/package.json | 2 +- tests/api-tests/package.json | 2 +- yarn.lock | 21 +++----- 20 files changed, 114 insertions(+), 84 deletions(-) create mode 100644 .changeset/go-go-graphql.md diff --git a/.changeset/go-go-graphql.md b/.changeset/go-go-graphql.md new file mode 100644 index 00000000000..083358d408b --- /dev/null +++ b/.changeset/go-go-graphql.md @@ -0,0 +1,5 @@ +--- +'@keystone-6/core': major +--- + +Upgrade to `graphql@16` diff --git a/.changeset/great-sloths-bake.md b/.changeset/great-sloths-bake.md index a276b3946f6..1ab4e0b84b8 100644 --- a/.changeset/great-sloths-bake.md +++ b/.changeset/great-sloths-bake.md @@ -2,4 +2,4 @@ '@keystone-6/core': major --- -Updates Prisma to 4.2.1 +Upgrade to `prisma@4` diff --git a/changelog.js b/changelog.js index 4f00388f926..7cdd2e5d640 100644 --- a/changelog.js +++ b/changelog.js @@ -6,7 +6,7 @@ const { default: getReleasePlan } = require('@changesets/get-release-plan'); const { getInfo } = require('@changesets/get-github-info'); // TODO: move this to CI linting -const verbs = new Set(['Adds', 'Changes', 'Fixes', 'Moves', 'Removes', 'Updates']); +const verbs = new Set(['Adds', 'Changes', 'Fixes', 'Moves', 'Removes', 'Updates', 'Upgrade']); // TODO: derived? const publicPackages = [ diff --git a/examples/basic/package.json b/examples/basic/package.json index e5b7f20a97d..1d6db5fc64c 100644 --- a/examples/basic/package.json +++ b/examples/basic/package.json @@ -20,7 +20,7 @@ "@keystone-ui/icons": "^6.0.1", "@keystone-ui/tooltip": "^6.0.1", "@types/react": "^18.0.9", - "graphql": "^15.8.0", + "graphql": "^16.6.0", "graphql-tag": "^2.12.6", "react": "^18.1.0", "react-dom": "^18.1.0", diff --git a/examples/extend-graphql-schema-nexus/package.json b/examples/extend-graphql-schema-nexus/package.json index b5a377fe462..b90d0b39774 100644 --- a/examples/extend-graphql-schema-nexus/package.json +++ b/examples/extend-graphql-schema-nexus/package.json @@ -11,8 +11,8 @@ "dependencies": { "@graphql-tools/schema": "^8.3.1", "@keystone-6/core": "^2.2.0", - "graphql": "^15.8.0", - "nexus": "1.1.0" + "graphql": "^16.6.0", + "nexus": "1.3.0" }, "repository": "https://github.com/keystonejs/keystone/tree/main/examples/extend-graphql-schema-nexus" } diff --git a/examples/extend-graphql-subscriptions/package.json b/examples/extend-graphql-subscriptions/package.json index 5eac4b5601c..61521abb1da 100644 --- a/examples/extend-graphql-subscriptions/package.json +++ b/examples/extend-graphql-subscriptions/package.json @@ -17,7 +17,7 @@ "@keystone-ui/core": "^5.0.1", "@keystone-ui/fields": "^7.1.1", "@types/ws": "^8.5.3", - "graphql": "^15.8.0", + "graphql": "^16.6.0", "graphql-subscriptions": "^2.0.0", "graphql-ws": "^5.9.1", "react": "^18.1.0", diff --git a/packages/auth/package.json b/packages/auth/package.json index 8b596615743..2007af97884 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -13,7 +13,7 @@ "@keystone-ui/notice": "^6.0.1", "cross-fetch": "^3.1.4", "fast-deep-equal": "^3.1.3", - "graphql": "^15.8.0" + "graphql": "^16.6.0" }, "devDependencies": { "@keystone-6/core": "^2.2.0", diff --git a/packages/core/package.json b/packages/core/package.json index fa801aa0e6e..e72a84e14c3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -95,8 +95,7 @@ "filenamify": "^4.3.0", "form-data": "4.0.0", "fs-extra": "^10.0.0", - "graphql": "^15.8.0", - "graphql-type-json": "^0.3.2", + "graphql": "^16.6.0", "graphql-upload": "^15.0.2", "image-size": "^1.0.0", "image-type": "^4.1.0", diff --git a/packages/core/src/admin-ui/templates/app.ts b/packages/core/src/admin-ui/templates/app.ts index aaa349b18f3..7f2268e9e28 100644 --- a/packages/core/src/admin-ui/templates/app.ts +++ b/packages/core/src/admin-ui/templates/app.ts @@ -8,6 +8,8 @@ import { parse, FragmentDefinitionNode, SelectionNode, + ExecutionResult, + Kind, } from 'graphql'; import { AdminMetaRootVal } from '../../types'; import { staticAdminMetaQuery, StaticAdminMetaQuery } from '../admin-meta-graphql'; @@ -24,7 +26,7 @@ export const appTemplate = ( document: staticAdminMetaQuery, schema: graphQLSchema, contextValue: { isAdminUIBuildProcess: true }, - }); + }) as ExecutionResult; if (result.errors) { throw result.errors[0]; } @@ -136,18 +138,21 @@ function getLazyMetadataQuery( } selections.push({ - kind: 'Field', - name: { kind: 'Name', value: 'authenticatedItem' }, + kind: Kind.FIELD, + name: { kind: Kind.NAME, value: 'authenticatedItem' }, selectionSet: { - kind: 'SelectionSet', + kind: Kind.SELECTION_SET, selections: authenticatedItemType.getTypes().map(({ name }) => ({ - kind: 'InlineFragment', - typeCondition: { kind: 'NamedType', name: { kind: 'Name', value: name } }, + kind: Kind.INLINE_FRAGMENT, + typeCondition: { kind: Kind.NAMED_TYPE, name: { kind: Kind.NAME, value: name } }, selectionSet: { - kind: 'SelectionSet', + kind: Kind.SELECTION_SET, selections: [ - { kind: 'Field', name: { kind: 'Name', value: 'id' } }, - { kind: 'Field', name: { kind: 'Name', value: getListByKey(name)!.labelField } }, + { kind: Kind.FIELD, name: { kind: Kind.NAME, value: 'id' } }, + { + kind: Kind.FIELD, + name: { kind: Kind.NAME, value: getListByKey(name)!.labelField }, + }, ], }, })), diff --git a/packages/core/src/lib/coerceAndValidateForGraphQLInput.ts b/packages/core/src/lib/coerceAndValidateForGraphQLInput.ts index 3f4d5f09c6a..dfbfe231d38 100644 --- a/packages/core/src/lib/coerceAndValidateForGraphQLInput.ts +++ b/packages/core/src/lib/coerceAndValidateForGraphQLInput.ts @@ -1,4 +1,10 @@ -import { GraphQLSchema, VariableDefinitionNode, GraphQLInputType, GraphQLError } from 'graphql'; +import { + GraphQLSchema, + VariableDefinitionNode, + GraphQLInputType, + GraphQLError, + Kind, +} from 'graphql'; import { getVariableValues } from 'graphql/execution/values'; import { getTypeNodeForType } from './context/executeGraphQLFieldToRootVal'; @@ -11,9 +17,9 @@ export function coerceAndValidateForGraphQLInput( ): { kind: 'valid'; value: any } | { kind: 'error'; error: GraphQLError } { const variableDefintions: VariableDefinitionNode[] = [ { - kind: 'VariableDefinition', + kind: Kind.VARIABLE_DEFINITION, type: getTypeNodeForType(type), - variable: { kind: 'Variable', name: { kind: 'Name', value: argName } }, + variable: { kind: Kind.VARIABLE, name: { kind: Kind.NAME, value: argName } }, }, ]; diff --git a/packages/core/src/lib/context/executeGraphQLFieldToRootVal.ts b/packages/core/src/lib/context/executeGraphQLFieldToRootVal.ts index 9e392c62e02..da7996c0b96 100644 --- a/packages/core/src/lib/context/executeGraphQLFieldToRootVal.ts +++ b/packages/core/src/lib/context/executeGraphQLFieldToRootVal.ts @@ -23,6 +23,9 @@ import { GraphQLFieldConfig, GraphQLOutputType, astFromValue, + Kind, + OperationTypeNode, + ConstValueNode, } from 'graphql'; import { KeystoneContext } from '../../types'; @@ -37,33 +40,35 @@ function getNamedOrListTypeNodeForType( | GraphQLList ): NamedTypeNode | ListTypeNode { if (type instanceof GraphQLList) { - return { kind: 'ListType', type: getTypeNodeForType(type.ofType) }; + return { kind: Kind.LIST_TYPE, type: getTypeNodeForType(type.ofType) }; } - return { kind: 'NamedType', name: { kind: 'Name', value: type.name } }; + return { kind: Kind.NAMED_TYPE, name: { kind: Kind.NAME, value: type.name } }; } export function getTypeNodeForType(type: GraphQLType): TypeNode { if (type instanceof GraphQLNonNull) { - return { kind: 'NonNullType', type: getNamedOrListTypeNodeForType(type.ofType) }; + return { kind: Kind.NON_NULL_TYPE, type: getNamedOrListTypeNodeForType(type.ofType) }; } return getNamedOrListTypeNodeForType(type); } export function getVariablesForGraphQLField(field: GraphQLField) { - const variableDefinitions: VariableDefinitionNode[] = field.args.map(arg => ({ - kind: 'VariableDefinition', - type: getTypeNodeForType(arg.type), - variable: { kind: 'Variable', name: { kind: 'Name', value: arg.name } }, - defaultValue: - arg.defaultValue === undefined - ? undefined - : astFromValue(arg.defaultValue, arg.type) ?? undefined, - })); + const variableDefinitions: VariableDefinitionNode[] = field.args.map( + (arg): VariableDefinitionNode => ({ + kind: Kind.VARIABLE_DEFINITION, + type: getTypeNodeForType(arg.type), + variable: { kind: Kind.VARIABLE, name: { kind: Kind.NAME, value: arg.name } }, + defaultValue: + arg.defaultValue === undefined + ? undefined + : (astFromValue(arg.defaultValue, arg.type) as ConstValueNode) ?? undefined, + }) + ); const argumentNodes: ArgumentNode[] = field.args.map(arg => ({ - kind: 'Argument', - name: { kind: 'Name', value: arg.name }, - value: { kind: 'Variable', name: { kind: 'Name', value: arg.name } }, + kind: Kind.ARGUMENT, + name: { kind: Kind.NAME, value: arg.name }, + value: { kind: Kind.VARIABLE, name: { kind: Kind.NAME, value: arg.name } }, })); return { variableDefinitions, argumentNodes }; @@ -97,7 +102,7 @@ type RequiredButStillAllowUndefined< [K in Key]: T[K]; }; -function argsToArgsConfig(args: GraphQLArgument[]) { +function argsToArgsConfig(args: readonly GraphQLArgument[]) { return Object.fromEntries( args.map(arg => { const argConfig: RequiredButStillAllowUndefined = { @@ -144,21 +149,21 @@ function getRootValGivenOutputType(originalType: OutputType, value: any): any { export function executeGraphQLFieldToRootVal(field: GraphQLField) { const { argumentNodes, variableDefinitions } = getVariablesForGraphQLField(field); const document: DocumentNode = { - kind: 'Document', + kind: Kind.DOCUMENT, definitions: [ { - kind: 'OperationDefinition', - operation: 'query', + kind: Kind.OPERATION_DEFINITION, + operation: OperationTypeNode.QUERY, selectionSet: { - kind: 'SelectionSet', + kind: Kind.SELECTION_SET, selections: [ { - kind: 'Field', - name: { kind: 'Name', value: field.name }, + kind: Kind.FIELD, + name: { kind: Kind.NAME, value: field.name }, arguments: argumentNodes, selectionSet: { - kind: 'SelectionSet', - selections: [{ kind: 'Field', name: { kind: 'Name', value: rawField } }], + kind: Kind.SELECTION_SET, + selections: [{ kind: Kind.FIELD, name: { kind: Kind.NAME, value: rawField } }], }, }, ], diff --git a/packages/core/src/lib/context/executeGraphQLFieldWithSelection.ts b/packages/core/src/lib/context/executeGraphQLFieldWithSelection.ts index 2dfc41f7a48..ebe28f05791 100644 --- a/packages/core/src/lib/context/executeGraphQLFieldWithSelection.ts +++ b/packages/core/src/lib/context/executeGraphQLFieldWithSelection.ts @@ -1,10 +1,13 @@ import { + DocumentNode, execute, FragmentDefinitionNode, GraphQLList, GraphQLNonNull, GraphQLOutputType, GraphQLSchema, + Kind, + OperationTypeNode, parse, validate, } from 'graphql'; @@ -42,18 +45,19 @@ export function executeGraphQLFieldWithSelection( parse(`fragment x on ${rootName} {${query}}`).definitions[0] as FragmentDefinitionNode ).selectionSet; - const document = { - kind: 'Document', + const document: DocumentNode = { + kind: Kind.DOCUMENT, definitions: [ { - kind: 'OperationDefinition', - operation, + kind: Kind.OPERATION_DEFINITION, + // OperationTypeNode is an ts enum where the values are 'query' | 'mutation' | 'subscription' + operation: operation as OperationTypeNode, selectionSet: { - kind: 'SelectionSet', + kind: Kind.SELECTION_SET, selections: [ { - kind: 'Field', - name: { kind: 'Name', value: field.name }, + kind: Kind.FIELD, + name: { kind: Kind.NAME, value: field.name }, arguments: argumentNodes, selectionSet: selectionSet, }, @@ -62,7 +66,7 @@ export function executeGraphQLFieldWithSelection( variableDefinitions, }, ], - } as const; + }; const validationErrors = validate(schema, document); diff --git a/packages/core/src/lib/context/itemAPI.ts b/packages/core/src/lib/context/itemAPI.ts index c8216a8e76e..15e54188650 100644 --- a/packages/core/src/lib/context/itemAPI.ts +++ b/packages/core/src/lib/context/itemAPI.ts @@ -60,7 +60,7 @@ export function itemAPIForList( const exec = executeGraphQLFieldWithSelection(context.graphql.schema, operation, field); return ({ query, ...args }: { query?: string } & Record = {}) => { const returnFields = query ?? 'id'; - return exec(args, returnFields, context); + return exec(args, returnFields, context) as any; }; }; const gqlNames = context.gqlNames(listKey); diff --git a/packages/core/src/types/context.ts b/packages/core/src/types/context.ts index 21f3c9eb4a1..f1a19286af9 100644 --- a/packages/core/src/types/context.ts +++ b/packages/core/src/types/context.ts @@ -141,7 +141,7 @@ export type KeystoneDbAPI Promise>; - raw: (args: GraphQLExecutionArguments) => Promise; + raw: (args: GraphQLExecutionArguments) => Promise>>; }; type GraphQLExecutionArguments = { diff --git a/packages/core/src/types/schema/graphql-ts-schema.ts b/packages/core/src/types/schema/graphql-ts-schema.ts index f178b96cc82..45901caae21 100644 --- a/packages/core/src/types/schema/graphql-ts-schema.ts +++ b/packages/core/src/types/schema/graphql-ts-schema.ts @@ -1,6 +1,5 @@ import type { ReadStream } from 'fs'; import * as graphqlTsSchema from '@graphql-ts/schema'; -import { GraphQLJSON } from 'graphql-type-json'; // @ts-ignore import GraphQLUpload from 'graphql-upload/GraphQLUpload.js'; import { GraphQLError, GraphQLScalarType } from 'graphql'; @@ -43,7 +42,15 @@ export { field, fields, interface, interfaceField, object, union } from './schem export type Context = KeystoneContext; -export const JSON = graphqlTsSchema.graphql.scalar(GraphQLJSON); +export const JSON = graphqlTsSchema.graphql.scalar( + new GraphQLScalarType({ + name: 'JSON', + description: + 'The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).', + specifiedByURL: 'http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf', + // the defaults for serialize, parseValue and parseLiteral do what makes sense for JSON + }) +); type FileUpload = { filename: string; @@ -61,12 +68,13 @@ export const Upload = graphqlTsSchema.graphql.scalar>(GraphQ export const Decimal = graphqlTsSchema.graphql.scalar( new GraphQLScalarType({ name: 'Decimal', - serialize(value: DecimalValue & { scaleToPrint?: number }) { + serialize(value) { if (!DecimalValue.isDecimal(value)) { throw new GraphQLError(`unexpected value provided to Decimal scalar: ${value}`); } - if (value.scaleToPrint !== undefined) { - return value.toFixed(value.scaleToPrint); + const cast = value as DecimalValue & { scaleToPrint?: number }; + if (cast.scaleToPrint !== undefined) { + return value.toFixed(cast.scaleToPrint); } return value.toString(); }, @@ -102,7 +110,10 @@ export const Decimal = graphqlTsSchema.graphql.scalar( new GraphQLScalarType({ name: 'BigInt', - serialize(value: bigint) { + serialize(value) { + if (typeof value !== 'bigint') { + throw new GraphQLError(`unexpected value provided to BigInt scalar: ${value}`); + } return value.toString(); }, parseLiteral(value) { @@ -146,7 +157,7 @@ function parseDate(input: string): Date { export const DateTime = graphqlTsSchema.graphql.scalar( new GraphQLScalarType({ name: 'DateTime', - specifiedByUrl: 'https://datatracker.ietf.org/doc/html/rfc3339#section-5.6', + specifiedByURL: 'https://datatracker.ietf.org/doc/html/rfc3339#section-5.6', serialize(value: unknown) { if (!(value instanceof Date) || isNaN(value.valueOf())) { throw new GraphQLError(`unexpected value provided to DateTime scalar: ${value}`); @@ -184,7 +195,7 @@ function validateCalendarDay(input: string) { export const CalendarDay = graphqlTsSchema.graphql.scalar( new GraphQLScalarType({ name: 'CalendarDay', - specifiedByUrl: 'https://datatracker.ietf.org/doc/html/rfc3339#section-5.6', + specifiedByURL: 'https://datatracker.ietf.org/doc/html/rfc3339#section-5.6', serialize(value: unknown) { if (typeof value !== 'string') { throw new GraphQLError(`unexpected value provided to CalendarDay scalar: ${value}`); diff --git a/packages/fields-document/package.json b/packages/fields-document/package.json index 85943b970e7..1e04b0db609 100644 --- a/packages/fields-document/package.json +++ b/packages/fields-document/package.json @@ -40,7 +40,7 @@ "apollo-server-errors": "^3.3.0", "apply-ref": "^1.0.0", "fp-ts": "^2.11.5", - "graphql": "^15.8.0", + "graphql": "^16.6.0", "io-ts": "^2.2.16", "io-ts-excess": "^1.0.1", "is-hotkey": "^0.2.0", diff --git a/packages/fields-document/src/relationship-data.tsx b/packages/fields-document/src/relationship-data.tsx index e4355d2b428..883218aaa27 100644 --- a/packages/fields-document/src/relationship-data.tsx +++ b/packages/fields-document/src/relationship-data.tsx @@ -1,6 +1,6 @@ import { KeystoneContext } from '@keystone-6/core/types'; import { Descendant } from 'slate'; -import { GraphQLSchema, executeSync, parse } from 'graphql'; +import { GraphQLSchema, executeSync, parse, ExecutionResult } from 'graphql'; import weakMemoize from '@emotion/weak-memoize'; import { ComponentBlock, @@ -220,11 +220,11 @@ export const getLabelFieldsForLists = weakMemoize(function getLabelFieldsForList schema, document, contextValue: { isAdminUIBuildProcess: true }, - }); + }) as ExecutionResult<{ + keystone: { adminMeta: { lists: { key: string; labelField: string }[] } }; + }>; if (errors?.length) { throw errors[0]; } - return Object.fromEntries( - data!.keystone.adminMeta.lists.map((x: any) => [x.key, x.labelField as string]) - ); + return Object.fromEntries(data!.keystone.adminMeta.lists.map(x => [x.key, x.labelField])); }); diff --git a/tests/admin-ui-tests/package.json b/tests/admin-ui-tests/package.json index 74df66463c6..342afff6d0c 100644 --- a/tests/admin-ui-tests/package.json +++ b/tests/admin-ui-tests/package.json @@ -12,7 +12,7 @@ "@keystone-6/core": "*", "execa": "^5.1.1", "express": "^4.17.1", - "graphql": "^15.8.0", + "graphql": "^16.6.0", "playwright": "^1.17.1", "treekill": "^1.0.0" }, diff --git a/tests/api-tests/package.json b/tests/api-tests/package.json index c952e64e713..6dc5c9ee729 100644 --- a/tests/api-tests/package.json +++ b/tests/api-tests/package.json @@ -19,7 +19,7 @@ "cuid": "^2.1.8", "fs-extra": "^10.0.0", "globby": "^11.0.4", - "graphql": "^15.8.0", + "graphql": "^16.6.0", "graphql-upload": "^15.0.2", "memoize-one": "^6.0.0", "mime": "^3.0.0", diff --git a/yarn.lock b/yarn.lock index 579b2ffcdb7..e42489941a4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7769,11 +7769,6 @@ graphql-tag@^2.11.0, graphql-tag@^2.12.6: dependencies: tslib "^2.1.0" -graphql-type-json@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.3.2.tgz#f53a851dbfe07bd1c8157d24150064baab41e115" - integrity sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg== - graphql-upload@^15.0.2: version "15.0.2" resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-15.0.2.tgz#851667589439ee617238e2d90253000a2601ac04" @@ -7797,10 +7792,10 @@ graphql-ws@^5.9.1: resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== -graphql@^15.8.0: - version "15.8.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" - integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== +graphql@^16.6.0: + version "16.6.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" + integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== hard-rejection@^2.1.0: version "2.1.0" @@ -10608,10 +10603,10 @@ next@^12.2.4: "@next/swc-win32-ia32-msvc" "12.2.5" "@next/swc-win32-x64-msvc" "12.2.5" -nexus@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/nexus/-/nexus-1.1.0.tgz#3d8fa05c29e7a61aa55f64ef5e0ba43dd76b3ed6" - integrity sha512-jUhbg22gKVY2YwZm726BrbfHaQ7Xzc0hNXklygDhuqaVxCuHCgFMhWa2svNWd1npe8kfeiu5nbwnz+UnhNXzCQ== +nexus@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/nexus/-/nexus-1.3.0.tgz#d7e2671d48bf887e30e2815f509bbf4b0ee2a02b" + integrity sha512-w/s19OiNOs0LrtP7pBmD9/FqJHvZLmCipVRt6v1PM8cRUYIbhEswyNKGHVoC4eHZGPSnD+bOf5A3+gnbt0A5/A== dependencies: iterall "^1.3.0" tslib "^2.0.3"