Store schema proposal changes on a separate column in the schema chec… (#7531)

This commit is contained in:
jdolle 2026-01-22 14:37:11 -08:00 committed by GitHub
parent c4776b80ab
commit f4eb13f9ed
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
32 changed files with 425 additions and 163 deletions

View file

@ -0,0 +1,5 @@
---
'hive': minor
---
Store schema proposal changes on a separate column in the schema check; update graphql inspector

View file

@ -1807,7 +1807,7 @@ describe('schema publishing changes are persisted', () => {
`,
schemaAfter: /* GraphQL */ `
type Query {
a(a: String): String!
a(a: String): String
}
`,
equalsObject: {

View file

@ -73,9 +73,9 @@
"@graphql-codegen/typescript-resolvers": "5.1.0",
"@graphql-codegen/urql-introspection": "3.0.1",
"@graphql-eslint/eslint-plugin": "3.20.1",
"@graphql-inspector/cli": "6.0.0",
"@graphql-inspector/core": "7.1.0",
"@graphql-inspector/patch": "0.1.0",
"@graphql-inspector/cli": "6.0.6",
"@graphql-inspector/core": "7.1.1",
"@graphql-inspector/patch": "0.1.1",
"@graphql-tools/load": "8.1.2",
"@manypkg/get-packages": "2.2.2",
"@next/eslint-plugin-next": "14.2.23",

View file

@ -49,7 +49,7 @@
},
"dependencies": {
"@graphql-hive/core": "workspace:*",
"@graphql-inspector/core": "7.1.0",
"@graphql-inspector/core": "7.1.1",
"@graphql-tools/code-file-loader": "~8.1.0",
"@graphql-tools/graphql-file-loader": "~8.1.0",
"@graphql-tools/json-file-loader": "~8.0.0",

View file

@ -0,0 +1,15 @@
import { type MigrationExecutor } from '../pg-migrator';
export default {
name: '2026.01.25T00-00-00.checks-proposals-changes.ts',
run: ({ sql }) => [
{
name: 'add schema proposal changes to schema_checks table',
query: sql`
ALTER TABLE IF EXISTS "schema_checks"
ADD COLUMN IF NOT EXISTS "schema_proposal_changes" jsonb
;
`,
},
],
} satisfies MigrationExecutor;

View file

@ -177,5 +177,6 @@ export const runPGMigrations = async (args: { slonik: DatabasePool; runTo?: stri
await import('./actions/2025.12.17T00-00-00.custom-oidc-scopes'),
await import('./actions/2025.12.12T00-00-00.workflows-deduplication'),
await import('./actions/2026.01.09T10.00.00.target-validation-app-deployment-exclusion'),
await import('./actions/2026.01.25T00-00-00.checks-proposals-changes'),
],
});

View file

@ -84,6 +84,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
let schemaCheckCount = await db.oneFirst<number>(
@ -168,6 +169,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
await storage.createSchemaCheck({
@ -195,6 +197,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
let schemaCheckCount = await db.oneFirst<number>(
@ -279,6 +282,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
await storage.createSchemaCheck({
@ -306,6 +310,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
let schemaCheckCount = await db.oneFirst<number>(
@ -400,6 +405,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
await storage.createSchemaCheck({
@ -427,6 +433,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
let schemaCheckCount = await db.oneFirst<number>(
@ -579,6 +586,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
await storage.createSchemaCheck({
@ -606,6 +614,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
let schemaCheckCount = await db.oneFirst<number>(
@ -755,6 +764,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
let sdlStoreCount = await db.oneFirst<number>(sql`SELECT count(*) as total FROM sdl_store`);
@ -867,6 +877,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
let schemaCheckCount = await db.oneFirst<number>(
@ -1028,6 +1039,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
await storage.createSchemaCheck({
@ -1074,6 +1086,7 @@ describe('schema check purging', async () => {
conditionalBreakingChangeMetadata: null,
serviceUrl: null,
schemaProposalId: null,
schemaProposalChanges: null,
});
let schemaCheckCount = await db.oneFirst<number>(

View file

@ -17,7 +17,7 @@
"@date-fns/utc": "2.1.1",
"@graphql-hive/core": "workspace:*",
"@graphql-hive/signal": "1.0.0",
"@graphql-inspector/core": "7.1.0",
"@graphql-inspector/core": "7.1.1",
"@graphql-tools/merge": "9.1.1",
"@hive/cdn-script": "workspace:*",
"@hive/schema": "workspace:*",

View file

@ -453,6 +453,8 @@ export default gql`
| DirectiveUsageArgumentDefinitionAdded
| DirectiveUsageArgumentAdded
| DirectiveUsageArgumentRemoved
| DirectiveRepeatableAdded
| DirectiveRepeatableRemoved
# Directive
@ -662,12 +664,14 @@ export default gql`
addedUnionMemberTypeName: String!
addedDirectiveName: String!
addedToNewType: Boolean
directiveRepeatedTimes: Int!
}
type DirectiveUsageUnionMemberRemoved {
unionName: String!
removedUnionMemberTypeName: String!
removedDirectiveName: String!
directiveRepeatedTimes: Int!
}
type FieldArgumentAdded {
@ -820,11 +824,13 @@ export default gql`
enumName: String!
addedDirectiveName: String!
addedToNewType: Boolean
directiveRepeatedTimes: Int!
}
type DirectiveUsageEnumRemoved {
enumName: String!
removedDirectiveName: String!
directiveRepeatedTimes: Int!
}
type DirectiveUsageEnumValueAdded {
@ -832,12 +838,14 @@ export default gql`
enumValueName: String!
addedDirectiveName: String!
addedToNewType: Boolean
directiveRepeatedTimes: Int!
}
type DirectiveUsageEnumValueRemoved {
enumName: String!
enumValueName: String!
removedDirectiveName: String!
directiveRepeatedTimes: Int!
}
type DirectiveUsageInputObjectRemoved {
@ -846,6 +854,7 @@ export default gql`
isRemovedInputFieldTypeNullable: Boolean
removedInputFieldType: String!
removedDirectiveName: String!
directiveRepeatedTimes: Int!
}
type DirectiveUsageInputObjectAdded {
@ -855,6 +864,7 @@ export default gql`
addedInputFieldType: String!
addedDirectiveName: String!
addedToNewType: Boolean
directiveRepeatedTimes: Int!
}
type DirectiveUsageInputFieldDefinitionAdded {
@ -863,63 +873,74 @@ export default gql`
inputFieldType: String!
addedDirectiveName: String!
addedToNewType: Boolean
directiveRepeatedTimes: Int!
}
type DirectiveUsageInputFieldDefinitionRemoved {
inputObjectName: String!
inputFieldName: String!
removedDirectiveName: String!
directiveRepeatedTimes: Int!
}
type DirectiveUsageFieldAdded {
typeName: String!
fieldName: String!
addedDirectiveName: String!
directiveRepeatedTimes: Int!
}
type DirectiveUsageFieldRemoved {
typeName: String!
fieldName: String!
removedDirectiveName: String!
directiveRepeatedTimes: Int!
}
type DirectiveUsageScalarAdded {
scalarName: String!
addedDirectiveName: String!
addedToNewType: Boolean
directiveRepeatedTimes: Int!
}
type DirectiveUsageScalarRemoved {
scalarName: String!
removedDirectiveName: String!
directiveRepeatedTimes: Int!
}
type DirectiveUsageObjectAdded {
objectName: String!
addedDirectiveName: String!
addedToNewType: Boolean
directiveRepeatedTimes: Int!
}
type DirectiveUsageObjectRemoved {
objectName: String!
removedDirectiveName: String!
directiveRepeatedTimes: Int!
}
type DirectiveUsageInterfaceAdded {
interfaceName: String!
addedDirectiveName: String!
addedToNewType: Boolean
directiveRepeatedTimes: Int!
}
type DirectiveUsageSchemaAdded {
addedDirectiveName: String!
schemaTypeName: String!
addedToNewType: Boolean
directiveRepeatedTimes: Int!
}
type DirectiveUsageSchemaRemoved {
removedDirectiveName: String!
schemaTypeName: String!
directiveRepeatedTimes: Int!
}
type DirectiveUsageFieldDefinitionAdded {
@ -927,12 +948,14 @@ export default gql`
fieldName: String!
addedDirectiveName: String!
addedToNewType: Boolean
directiveRepeatedTimes: Int!
}
type DirectiveUsageFieldDefinitionRemoved {
typeName: String!
fieldName: String!
removedDirectiveName: String!
directiveRepeatedTimes: Int!
}
type DirectiveUsageArgumentDefinitionRemoved {
@ -940,11 +963,13 @@ export default gql`
fieldName: String!
argumentName: String!
removedDirectiveName: String!
directiveRepeatedTimes: Int!
}
type DirectiveUsageInterfaceRemoved {
interfaceName: String!
removedDirectiveName: String!
directiveRepeatedTimes: Int!
}
type DirectiveUsageArgumentDefinitionAdded {
@ -953,6 +978,7 @@ export default gql`
argumentName: String!
addedDirectiveName: String!
addedToNewType: Boolean
directiveRepeatedTimes: Int!
}
type DirectiveUsageArgumentAdded {
@ -964,6 +990,7 @@ export default gql`
parentFieldName: String
parentArgumentName: String
parentEnumValueName: String
directiveRepeatedTimes: Int!
}
type DirectiveUsageArgumentRemoved {
@ -973,5 +1000,14 @@ export default gql`
parentFieldName: String
parentArgumentName: String
parentEnumValueName: String
directiveRepeatedTimes: Int!
}
type DirectiveRepeatableAdded {
directiveName: String!
}
type DirectiveRepeatableRemoved {
directiveName: String!
}
`;

View file

@ -3,7 +3,6 @@
*/
import { Injectable, Scope } from 'graphql-modules';
import { TargetReferenceInput } from 'packages/libraries/core/src/client/__generated__/types';
import { SchemaChangeType } from '@hive/storage';
import { SchemaProposalCheckInput, SchemaProposalStage } from '../../../__generated__/types';
import { HiveError } from '../../../shared/errors';
import { Session } from '../../auth/lib/authz';
@ -57,7 +56,6 @@ export class SchemaProposalManager {
}
const proposal = createProposalResult.proposal;
const changes: SchemaChangeType[] = [];
const checkPromises = args.initialChecks.map(async check => {
const result = await this.schemaPublisher.check({
...check,
@ -66,10 +64,8 @@ export class SchemaProposalManager {
schemaProposalId: proposal.id,
});
if ('changes' in result && result.changes) {
changes.push(...result.changes);
return {
...result,
changes: result.changes,
errors:
result.errors?.map(error => ({
...error,

View file

@ -727,6 +727,11 @@ export default gql`
valid: Boolean!
initial: Boolean!
changes: SchemaChangeConnection
"""
If the check is associated with a schema proposal, then this contains an unfiltered list of changes
to the SDL.
"""
schemaProposalChanges: SchemaChangeConnection
warnings: SchemaWarningConnection
schemaCheck: SchemaCheck
}
@ -740,6 +745,11 @@ export default gql`
type SchemaCheckError {
valid: Boolean!
"""
If the check is associated with a schema proposal, then this contains an unfiltered list of changes
to the SDL.
"""
schemaProposalChanges: SchemaChangeConnection
changes: SchemaChangeConnection
errors: SchemaErrorConnection!
warnings: SchemaWarningConnection
@ -1335,6 +1345,12 @@ export default gql`
"""
hasSchemaChanges: Boolean!
"""
If the check is associated with a schema proposal, then this contains an unfiltered list of changes
to the SDL.
"""
schemaProposalChanges: SchemaChangeConnection
schemaChanges: SchemaChangeConnection @tag(name: "public")
breakingSchemaChanges: SchemaChangeConnection
safeSchemaChanges: SchemaChangeConnection
@ -1486,6 +1502,12 @@ export default gql`
"""
hasSchemaChanges: Boolean!
"""
If the check is associated with a schema proposal, then this contains an unfiltered list of changes
to the SDL.
"""
schemaProposalChanges: SchemaChangeConnection
schemaChanges: SchemaChangeConnection @tag(name: "public")
"""
Breaking changes can exist in an successful schema check if the check was manually approved.
@ -1583,6 +1605,12 @@ export default gql`
"""
hasSchemaChanges: Boolean!
"""
If the check is associated with a schema proposal, then this contains an unfiltered list of changes
to the SDL.
"""
schemaProposalChanges: SchemaChangeConnection
schemaChanges: SchemaChangeConnection @tag(name: "public")
breakingSchemaChanges: SchemaChangeConnection
safeSchemaChanges: SchemaChangeConnection

View file

@ -36,16 +36,13 @@ export class Inspector {
const changes = await diff(existing, incoming, rules);
return changes
.filter(dropTrimmedDescriptionChangedChange)
.map(change =>
HiveSchemaChangeModel.parse({
type: change.type,
meta: change.meta,
isSafeBasedOnUsage: change.criticality.isSafeBasedOnUsage,
}),
)
.sort((a, b) => a.criticality.localeCompare(b.criticality));
return changes.filter(dropTrimmedDescriptionChangedChange).map(change =>
HiveSchemaChangeModel.parse({
type: change.type,
meta: change.meta,
isSafeBasedOnUsage: change.criticality.isSafeBasedOnUsage,
}),
);
}
}

View file

@ -93,6 +93,26 @@ export class CompositeModel {
);
}
@traceFn('Composite modern: diffSchema')
async diffSchema({
input,
latest,
}: {
input: {
sdl: string;
serviceName: string;
url: string | null;
};
latest: {
schemas: Pick<PushedCompositeSchema, 'service_name' | 'sdl'>[];
} | null;
}) {
return this.checks.serviceDiff({
existingSdl: latest?.schemas?.find(s => s.service_name === input.serviceName)?.sdl ?? null,
incomingSdl: input.sdl,
});
}
@traceFn('Composite modern: check', {
initAttributes: args => ({
'hive.project.id': args.selector.projectId,

View file

@ -31,6 +31,24 @@ export class SingleModel {
private appDeployments: AppDeployments,
) {}
@traceFn('Single modern: diffSchema')
async diffSchema({
input,
latest,
}: {
input: {
sdl: string;
};
latest: {
schemas: [SingleSchema];
} | null;
}) {
return this.checks.serviceDiff({
existingSdl: latest?.schemas[0]?.sdl ?? null,
incomingSdl: input.sdl,
});
}
@traceFn('Single modern: check', {
initAttributes: args => ({
'hive.project.id': args.selector.projectId,

View file

@ -426,6 +426,63 @@ export class RegistryChecks {
} satisfies CheckResult;
}
@traceFn('RegistryChecks.serviceDiff')
/**
* Intended to be used for subgraph/service schemas only. This does not check conditional breaking changes
* or policy logic. This function strictly calculates the diff between two SDL and returns the list of changes.
*/
async serviceDiff(args: {
/** The existing SDL */
existingSdl: string | null;
/** The incoming SDL */
incomingSdl: string | null;
}) {
let existingSchema: GraphQLSchema | null;
let incomingSchema: GraphQLSchema | null;
try {
existingSchema = args.existingSdl
? buildSortedSchemaFromSchemaObject(
this.helper.createSchemaObject({
sdl: args.existingSdl,
}),
)
: null;
incomingSchema = args.incomingSdl
? buildSortedSchemaFromSchemaObject(
this.helper.createSchemaObject({
sdl: args.incomingSdl,
}),
)
: null;
} catch (error) {
this.logger.error('Failed to build schema for diff. Skip diff check.');
return {
status: 'skipped',
} satisfies CheckResult;
}
if (!existingSchema || !incomingSchema) {
this.logger.debug('Skip diff check due to either existing or incoming SDL being absent.');
return {
status: 'skipped',
} satisfies CheckResult;
}
if (!incomingSchema) {
return {
status: 'failed',
reason: 'Incoming schema is invalid.',
} satisfies CheckResult;
}
let inspectorChanges = await this.inspector.diff(existingSchema, incomingSchema);
return {
status: 'completed',
result: inspectorChanges,
} satisfies CheckResult;
}
/**
* Diff incoming and existing SDL and generate a list of changes.
* Uses usage stats to determine whether a change is safe or not (if available).

View file

@ -599,9 +599,31 @@ export class SchemaPublisher {
})
: null;
let proposalChanges: Array<SchemaChangeType> | null = null;
switch (project.type) {
case ProjectType.SINGLE:
this.logger.debug('Using SINGLE registry model');
if (input.schemaProposalId) {
try {
const diffSchema = await this.models[project.type].diffSchema({
input: {
sdl,
},
latest: latestVersion
? {
schemas: [ensureSingleSchema(latestVersion.schemas)],
}
: null,
});
if ('result' in diffSchema) {
proposalChanges = diffSchema.result ?? null;
}
} catch (e: any) {
this.logger.error('Could not calculate schema proposal diff: ', e.message ?? e);
}
}
checkResult = await this.models[ProjectType.SINGLE].check({
input,
selector,
@ -626,7 +648,7 @@ export class SchemaPublisher {
conditionalBreakingChangeDiffConfig:
conditionalBreakingChangeConfiguration?.conditionalBreakingChangeDiffConfig ?? null,
failDiffOnDangerousChange,
filterNestedChanges: !input.schemaProposalId,
filterNestedChanges: true,
});
break;
case ProjectType.FEDERATION:
@ -637,6 +659,28 @@ export class SchemaPublisher {
throw new Error('Guard for TypeScript limitations on inferring types. :)');
}
if (input.schemaProposalId) {
try {
const diffSchema = await this.models[project.type].diffSchema({
input: {
sdl,
serviceName: input.service,
url: input.url ?? null,
},
latest: latestVersion
? {
schemas: ensureCompositeSchemas(latestVersion.schemas),
}
: null,
});
if ('result' in diffSchema) {
proposalChanges = diffSchema.result ?? null;
}
} catch (e: any) {
this.logger.error('Could not calculate schema proposal diff: ', e.message ?? e);
}
}
checkResult = await this.models[project.type].check({
input: {
sdl,
@ -672,7 +716,7 @@ export class SchemaPublisher {
conditionalBreakingChangeDiffConfig:
conditionalBreakingChangeConfiguration?.conditionalBreakingChangeDiffConfig ?? null,
failDiffOnDangerousChange,
filterNestedChanges: !input.schemaProposalId,
filterNestedChanges: true,
});
break;
default:
@ -738,6 +782,7 @@ export class SchemaPublisher {
safeSchemaChanges: contract.schemaChanges?.safe ?? null,
})) ?? null,
schemaProposalId: input.schemaProposalId ?? null,
schemaProposalChanges: proposalChanges,
});
this.logger.info('created failed schema check. (schemaCheckId=%s)', schemaCheck.id);
} else if (checkResult.conclusion === SchemaCheckConclusion.Success) {
@ -785,6 +830,7 @@ export class SchemaPublisher {
safeSchemaChanges: contract.schemaChanges?.safe ?? null,
})) ?? null,
schemaProposalId: input.schemaProposalId ?? null,
schemaProposalChanges: proposalChanges,
});
this.logger.info('created successful schema check. (schemaCheckId=%s)', schemaCheck.id);
} else if (checkResult.conclusion === SchemaCheckConclusion.Skip) {
@ -864,6 +910,7 @@ export class SchemaPublisher {
)
: null,
schemaProposalId: input.schemaProposalId ?? null,
schemaProposalChanges: proposalChanges,
});
this.logger.info('created skipped schema check. (schemaCheckId=%s)', schemaCheck.id);
}
@ -975,6 +1022,7 @@ export class SchemaPublisher {
return {
__typename: 'SchemaCheckSuccess',
valid: true,
schemaProposalChanges: schemaCheck.schemaProposalChanges,
changes: [
...(checkResult.state?.schemaChanges?.all ?? []),
...(checkResult.state?.contracts?.flatMap(contract => [

View file

@ -16,6 +16,7 @@ export const schemaCheck: NonNullable<MutationResolvers['schemaCheck']> = async
if ('changes' in result && result.changes) {
return {
...result,
schemaProposalChanges: result.schemaProposalChanges,
changes: result.changes,
errors:
result.errors?.map(error => ({

View file

@ -776,7 +776,11 @@ export interface Storage {
* Persist a schema check record in the database.
*/
createSchemaCheck(
_: SchemaCheckInput & { expiresAt: Date | null; schemaProposalId?: string | null },
_: SchemaCheckInput & {
expiresAt: Date | null;
schemaProposalId?: string | null;
schemaProposalChanges: null | Array<SchemaChangeType>;
},
): Promise<SchemaCheck>;
/**
* Delete the expired schema checks from the database.

View file

@ -16,7 +16,7 @@
"db:generate": "schemats generate --config schemats.cjs -o src/db/types.ts && prettier --write src/db/types.ts"
},
"devDependencies": {
"@graphql-inspector/core": "7.1.0",
"@graphql-inspector/core": "7.1.1",
"@hive/service-common": "workspace:*",
"@sentry/node": "7.120.2",
"@sentry/types": "7.120.2",

View file

@ -288,6 +288,7 @@ export interface schema_checks {
schema_composition_errors: any | null;
schema_policy_errors: any | null;
schema_policy_warnings: any | null;
schema_proposal_changes: any | null;
schema_proposal_id: string | null;
schema_sdl: string | null;
schema_sdl_store_id: string | null;

View file

@ -3970,6 +3970,7 @@ export async function createStorage(
, "has_contract_schema_changes"
, "conditional_breaking_change_metadata"
, "schema_proposal_id"
, "schema_proposal_changes"
)
VALUES (
${schemaSDLHash}
@ -4000,6 +4001,7 @@ export async function createStorage(
}
, ${jsonify(InsertConditionalBreakingChangeMetadataModel.parse(args.conditionalBreakingChangeMetadata))}
, ${args.schemaProposalId ?? null}
, ${jsonify(args.schemaProposalChanges?.map(toSerializableSchemaChange))}
)
RETURNING
"id"
@ -5382,6 +5384,7 @@ const schemaCheckSQLFields = sql`
, c."context_id" as "contextId"
, c."conditional_breaking_change_metadata" as "conditionalBreakingChangeMetadata"
, c."schema_proposal_id" as "schemaProposalId"
, c."schema_proposal_changes" as "schemaProposalChanges"
`;
const schemaVersionSQLFields = (t = sql``) => sql`

View file

@ -1435,13 +1435,17 @@ const NotManuallyApprovedSchemaCheckFields = {
manualApprovalUserId: z.null(),
};
const SchemaProposalOutputFields = {
schemaProposalId: z.string().nullable(),
schemaProposalChanges: z.array(HiveSchemaChangeModel).nullable(),
};
const SchemaCheckSharedOutputFields = {
schemaSDL: z.string(),
serviceName: z.string().nullable(),
serviceUrl: z.string().nullable(),
targetId: z.string(),
schemaVersionId: z.string().nullable(),
schemaProposalId: z.string().nullable(),
meta: z
.object({
author: z.string(),
@ -1455,6 +1459,7 @@ const SchemaCheckSharedOutputFields = {
githubRepository: z.string().nullable(),
githubSha: z.string().nullable(),
contextId: z.string().nullable(),
...SchemaProposalOutputFields,
};
const SchemaCheckSharedInputFields = {

View file

@ -24,8 +24,8 @@
"@graphiql/react": "1.0.0-alpha.4",
"@graphiql/toolkit": "0.9.1",
"@graphql-codegen/client-preset-swc-plugin": "0.2.0",
"@graphql-inspector/core": "7.1.0",
"@graphql-inspector/patch": "0.1.0",
"@graphql-inspector/core": "7.1.1",
"@graphql-inspector/patch": "0.1.1",
"@graphql-tools/mock": "9.0.25",
"@graphql-typed-document-node/core": "3.2.0",
"@headlessui/react": "2.2.0",

View file

@ -54,7 +54,7 @@ export function ChangeBlock(props: {
{props.info && <ChangesBlockTooltip info={props.info} />}
</h2>
<div className="list-inside list-disc space-y-2 text-sm leading-relaxed">
{props.changes.map(({ change, error, mergeStatus }) => {
{props.changes.map(({ change, error, mergeStatus }, i) => {
let icon: ReactNode | undefined;
if (mergeStatus === MergeStatus.CONFLICT) {
icon = (
@ -74,7 +74,7 @@ export function ChangeBlock(props: {
<ProposalChangeDetail
icon={icon}
change={change}
key={`${change.type}-${change.path}`}
key={`${change.type}-${change.path}-${i}`}
error={error}
/>
);

View file

@ -11,8 +11,8 @@ import { SchemaDiff } from './schema-diff/core';
* but this can be done serially because there should not be so many reviews within
* a single screen's height that it matters.
* */
export const ProposalOverview_ReviewsFragment = graphql(/** GraphQL */ `
fragment ProposalOverview_ReviewsFragment on SchemaProposalReviewConnection {
export const Proposal_ReviewsFragment = graphql(/** GraphQL */ `
fragment Proposal_ReviewsFragment on SchemaProposalReviewConnection {
pageInfo {
startCursor
}
@ -31,8 +31,8 @@ export const ProposalOverview_ReviewsFragment = graphql(/** GraphQL */ `
`);
/** Move to utils? */
export const ProposalOverview_ChangeFragment = graphql(/* GraphQL */ `
fragment ProposalOverview_ChangeFragment on SchemaChange {
export const Proposal_ChangeFragment = graphql(/* GraphQL */ `
fragment Proposal_ChangeFragment on SchemaChange {
message(withSafeBasedOnUsageNote: false)
path
severityLevel
@ -184,13 +184,14 @@ export const ProposalOverview_ChangeFragment = graphql(/* GraphQL */ `
... on DirectiveUsageUnionMemberAdded {
addedDirectiveName
addedUnionMemberTypeName
addedUnionMemberTypeName
unionName
directiveRepeatedTimes
}
... on DirectiveUsageUnionMemberRemoved {
removedDirectiveName
removedUnionMemberTypeName
unionName
directiveRepeatedTimes
}
... on FieldArgumentAdded {
addedArgumentName
@ -266,7 +267,6 @@ export const ProposalOverview_ChangeFragment = graphql(/* GraphQL */ `
}
... on TypeKindChanged {
newTypeKind
oldTypeKind
typeName
}
... on TypeDescriptionChanged {
@ -292,117 +292,140 @@ export const ProposalOverview_ChangeFragment = graphql(/* GraphQL */ `
... on DirectiveUsageEnumAdded {
addedDirectiveName
enumName
directiveRepeatedTimes
}
... on DirectiveUsageEnumRemoved {
enumName
removedDirectiveName
directiveRepeatedTimes
}
... on DirectiveUsageEnumValueAdded {
addedDirectiveName
enumName
enumValueName
directiveRepeatedTimes
}
... on DirectiveUsageEnumValueRemoved {
enumName
enumValueName
removedDirectiveName
directiveRepeatedTimes
}
... on DirectiveUsageInputObjectRemoved {
inputObjectName
removedDirectiveName
removedInputFieldName
removedInputFieldType
directiveRepeatedTimes
}
... on DirectiveUsageInputObjectAdded {
addedDirectiveName
addedInputFieldName
addedInputFieldType
inputObjectName
directiveRepeatedTimes
}
... on DirectiveUsageInputFieldDefinitionAdded {
addedDirectiveName
inputFieldName
inputFieldType
inputObjectName
directiveRepeatedTimes
}
... on DirectiveUsageInputFieldDefinitionRemoved {
inputFieldName
inputObjectName
removedDirectiveName
directiveRepeatedTimes
}
... on DirectiveUsageFieldAdded {
addedDirectiveName
fieldName
typeName
directiveRepeatedTimes
}
... on DirectiveUsageFieldRemoved {
fieldName
removedDirectiveName
typeName
directiveRepeatedTimes
}
... on DirectiveUsageScalarAdded {
addedDirectiveName
scalarName
directiveRepeatedTimes
}
... on DirectiveUsageScalarRemoved {
removedDirectiveName
scalarName
directiveRepeatedTimes
}
... on DirectiveUsageObjectAdded {
addedDirectiveName
objectName
directiveRepeatedTimes
}
... on DirectiveUsageObjectRemoved {
objectName
removedDirectiveName
directiveRepeatedTimes
}
... on DirectiveUsageInterfaceAdded {
addedDirectiveName
interfaceName
directiveRepeatedTimes
}
... on DirectiveUsageSchemaAdded {
addedDirectiveName
schemaTypeName
directiveRepeatedTimes
}
... on DirectiveUsageSchemaRemoved {
removedDirectiveName
schemaTypeName
directiveRepeatedTimes
}
... on DirectiveUsageFieldDefinitionAdded {
addedDirectiveName
fieldName
typeName
directiveRepeatedTimes
}
... on DirectiveUsageFieldDefinitionRemoved {
fieldName
removedDirectiveName
typeName
directiveRepeatedTimes
}
... on DirectiveUsageArgumentDefinitionRemoved {
argumentName
fieldName
removedDirectiveName
typeName
directiveRepeatedTimes
}
... on DirectiveUsageInterfaceRemoved {
interfaceName
removedDirectiveName
directiveRepeatedTimes
}
... on DirectiveUsageArgumentDefinitionAdded {
addedDirectiveName
argumentName
fieldName
typeName
directiveRepeatedTimes
}
... on DirectiveUsageArgumentAdded {
addedArgumentName
addedArgumentValue
directiveName
# oldArgumentValue
directiveRepeatedTimes
}
... on DirectiveUsageArgumentRemoved {
directiveName
removedArgumentName
directiveRepeatedTimes
}
}
}
@ -428,7 +451,7 @@ export function toUpperSnakeCase(str: string) {
export function Proposal(props: {
beforeSchema: GraphQLSchema | null;
afterSchema: GraphQLSchema | null;
reviews: FragmentType<typeof ProposalOverview_ReviewsFragment>;
reviews: FragmentType<typeof Proposal_ReviewsFragment>;
serviceName: string;
className?: string;
}) {
@ -439,7 +462,7 @@ export function Proposal(props: {
*
* Odds are there will never be so many reviews/comments that this is even a problem.
*/
const reviewsConnection = useFragment(ProposalOverview_ReviewsFragment, props.reviews);
const reviewsConnection = useFragment(Proposal_ReviewsFragment, props.reviews);
const [annotations, reviewssByCoordinate] = useMemo(() => {
const serviceReviews =
reviewsConnection?.edges?.filter(edge => {

View file

@ -168,6 +168,8 @@ export const urqlClient = createClient({
DirectiveUsageArgumentDefinitionAdded: noKey,
DirectiveUsageArgumentAdded: noKey,
DirectiveUsageArgumentRemoved: noKey,
DirectiveRepeatableAdded: noKey,
DirectiveRepeatableRemoved: noKey,
},
globalIDs: ['SuccessfulSchemaCheck', 'FailedSchemaCheck'],
}),

View file

@ -1,6 +1,6 @@
import { Fragment, useMemo } from 'react';
import { CompositionErrorsSection } from '@/components/target/history/errors-and-changes';
import { ProposalOverview_ReviewsFragment } from '@/components/target/proposals';
import { Proposal_ReviewsFragment } from '@/components/target/proposals';
import { ChangeBlock } from '@/components/target/proposals/change-detail';
import { ServiceHeading, ServiceHeadingType } from '@/components/target/proposals/service-heading';
import { FragmentType } from '@/gql';
@ -24,7 +24,7 @@ export function TargetProposalDetailsPage(props: {
targetSlug: string;
proposalId: string;
services: ServiceProposalDetails[];
reviews: FragmentType<typeof ProposalOverview_ReviewsFragment>;
reviews: FragmentType<typeof Proposal_ReviewsFragment>;
}) {
const mappedServices = useMemo(() => {
return props.services?.map(

View file

@ -1,5 +1,5 @@
import { Fragment, useState } from 'react';
import { Proposal, ProposalOverview_ReviewsFragment } from '@/components/target/proposals';
import { Proposal, Proposal_ReviewsFragment } from '@/components/target/proposals';
import { ServiceHeading, ServiceHeadingType } from '@/components/target/proposals/service-heading';
import { FragmentType } from '@/gql';
import { cn } from '@/lib/utils';
@ -11,7 +11,7 @@ export function TargetProposalSchemaPage(props: {
targetSlug: string;
proposalId: string; // @todo pass to proposal for commenting etc
services: ServiceProposalDetails[];
reviews: FragmentType<typeof ProposalOverview_ReviewsFragment>;
reviews: FragmentType<typeof Proposal_ReviewsFragment>;
}) {
if (props.services.length) {
return (
@ -31,7 +31,7 @@ function Schema({
reviews,
}: {
details: ServiceProposalDetails;
reviews: FragmentType<typeof ProposalOverview_ReviewsFragment>;
reviews: FragmentType<typeof Proposal_ReviewsFragment>;
}) {
const [isVisible, setIsVisible] = useState(true);

View file

@ -1,6 +1,6 @@
import { buildSchema } from 'graphql';
import { useQuery } from 'urql';
import { ProposalOverview_ChangeFragment, toUpperSnakeCase } from '@/components/target/proposals';
import { Proposal_ChangeFragment, toUpperSnakeCase } from '@/components/target/proposals';
import { SchemaDiff } from '@/components/target/proposals/schema-diff/core';
import { Spinner } from '@/components/ui/spinner';
import { FragmentType, graphql, useFragment } from '@/gql';
@ -23,7 +23,7 @@ const ProposalSupergraphChangesQuery = graphql(/* GraphQL */ `
edges {
node {
__typename
...ProposalOverview_ChangeFragment
...Proposal_ChangeFragment
}
}
}
@ -70,8 +70,7 @@ export function TargetProposalSupergraphPage(props: {
});
// @todo use pagination to collect all
const allChanges: (FragmentType<typeof ProposalOverview_ChangeFragment> | null | undefined)[] =
[];
const allChanges: (FragmentType<typeof Proposal_ChangeFragment> | null | undefined)[] = [];
query?.data?.schemaProposal?.checks?.edges?.map(({ node: { schemaChanges } }) => {
if (schemaChanges) {
const changes = schemaChanges.edges.map(edge => edge.node);
@ -92,7 +91,7 @@ export function TargetProposalSupergraphPage(props: {
function SupergraphDiff(props: {
baseSchemaSDL: string;
changes: (FragmentType<typeof ProposalOverview_ChangeFragment> | null | undefined)[] | null;
changes: (FragmentType<typeof Proposal_ChangeFragment> | null | undefined)[] | null;
}) {
if (props.baseSchemaSDL.length === 0) {
return null;
@ -104,7 +103,7 @@ function SupergraphDiff(props: {
for (const change of props.changes ?? []) {
// @todo calling inside a loop can cause errors... fix.
// eslint-disable-next-line react-hooks/rules-of-hooks
const c = useFragment(ProposalOverview_ChangeFragment, change);
const c = useFragment(Proposal_ChangeFragment, change);
if (c) {
changes.push({
criticality: {

View file

@ -1,6 +1,6 @@
import type { GraphQLSchema } from 'graphql';
import type { CompositionErrorsSection_SchemaErrorConnection } from '@/components/target/history/errors-and-changes';
import type { ProposalOverview_ChangeFragment } from '@/components/target/proposals';
import type { Proposal_ChangeFragment } from '@/components/target/proposals';
import { FragmentType } from '@/gql';
import type { Change } from '@graphql-inspector/core';
@ -11,7 +11,7 @@ export type ServiceProposalDetails = {
buildError: Error | null;
allChanges: Change<any>[];
// Required because the component ChangesBlock uses this fragment.
rawChanges: FragmentType<typeof ProposalOverview_ChangeFragment>[];
rawChanges: FragmentType<typeof Proposal_ChangeFragment>[];
ignoredChanges: Array<{
change: Change;
error: Error;

View file

@ -4,8 +4,8 @@ import { useMutation, useQuery, UseQueryExecute } from 'urql';
import { Page, TargetLayout } from '@/components/layouts/target';
import { CompositionErrorsSection_SchemaErrorConnection } from '@/components/target/history/errors-and-changes';
import {
ProposalOverview_ChangeFragment,
ProposalOverview_ReviewsFragment,
Proposal_ChangeFragment,
Proposal_ReviewsFragment,
toUpperSnakeCase,
} from '@/components/target/proposals';
import { StageTransitionSelect } from '@/components/target/proposals/stage-transition-select';
@ -26,7 +26,7 @@ import { FragmentType, graphql, useFragment } from '@/gql';
import { ProjectType } from '@/gql/graphql';
import { Change } from '@graphql-inspector/core';
import { errors, patchSchema } from '@graphql-inspector/patch';
import { NoopError } from '@graphql-inspector/patch/errors';
import { NoopError, ValueMismatchError } from '@graphql-inspector/patch/errors';
import { ListBulletIcon, PieChartIcon } from '@radix-ui/react-icons';
import { Link } from '@tanstack/react-router';
import {
@ -85,7 +85,7 @@ const ProposalQuery = graphql(/* GraphQL */ `
...ProposalOverview_ChecksFragment
}
reviews {
...ProposalOverview_ReviewsFragment
...Proposal_ReviewsFragment
}
...Proposals_EditProposalProposalFragment
}
@ -119,17 +119,17 @@ const ProposalChangesQuery = graphql(/* GraphQL */ `
edges {
node {
id
... on FailedSchemaCheck {
compositionErrors {
...CompositionErrorsSection_SchemaErrorConnection
}
}
# ... on FailedSchemaCheck {
# compositionErrors {
# ...CompositionErrorsSection_SchemaErrorConnection
# }
# }
schemaSDL
serviceName
schemaChanges {
schemaChanges: schemaProposalChanges {
edges {
node {
...ProposalOverview_ChangeFragment
...Proposal_ChangeFragment
}
}
}
@ -233,9 +233,9 @@ const ProposalsContent = (props: Parameters<typeof TargetProposalsSinglePage>[0]
let compositionErrors:
| FragmentType<typeof CompositionErrorsSection_SchemaErrorConnection>
| undefined;
if (proposalVersion.__typename === 'FailedSchemaCheck') {
compositionErrors = proposalVersion.compositionErrors ?? undefined;
}
// if (proposalVersion.__typename === 'FailedSchemaCheck') {
// compositionErrors = proposalVersion.compositionErrors ?? undefined;
// }
const existingSchema = query.data?.latestValidVersion?.schemas.edges.find(
({ node: latestSchema }) =>
@ -255,7 +255,7 @@ const ProposalsContent = (props: Parameters<typeof TargetProposalsSinglePage>[0]
?.map(({ node: change }): Change<any> => {
// @todo don't useFragment here...
// eslint-disable-next-line react-hooks/rules-of-hooks
const c = useFragment(ProposalOverview_ChangeFragment, change);
const c = useFragment(Proposal_ChangeFragment, change);
return {
criticality: {
// isSafeBasedOnUsage: ,
@ -268,6 +268,7 @@ const ProposalsContent = (props: Parameters<typeof TargetProposalsSinglePage>[0]
path: c.path?.join('.'),
};
}) ?? [];
const conflictingChanges: Array<{ change: Change; error: Error }> = [];
const ignoredChanges: Array<{ change: Change; error: Error }> = [];
let buildError: Error | null = null;
@ -277,8 +278,10 @@ const ProposalsContent = (props: Parameters<typeof TargetProposalsSinglePage>[0]
onError(error, change) {
if (error instanceof NoopError) {
ignoredChanges.push({ change, error });
} else if (!(error instanceof ValueMismatchError)) {
// totally ignore value mismatches
conflictingChanges.push({ change, error });
}
conflictingChanges.push({ change, error });
return errors.looseErrorHandler(error, change);
},
});
@ -466,7 +469,7 @@ function TabbedContent(props: {
version?: string;
page?: string;
services: ServiceProposalDetails[];
reviews: FragmentType<typeof ProposalOverview_ReviewsFragment>;
reviews: FragmentType<typeof Proposal_ReviewsFragment>;
checks: FragmentType<typeof ProposalOverview_ChecksFragment> | null;
versions: FragmentType<typeof ProposalQuery_VersionsListFragment> | null;
proposal: FragmentType<typeof Proposals_EditProposalProposalFragment>;

View file

@ -129,14 +129,14 @@ importers:
specifier: 3.20.1
version: 3.20.1(patch_hash=695fba67df25ba9d46472c8398c94c6a2ccf75d902321d8f95150f68e940313e)(@babel/core@7.28.5)(@types/node@22.10.5)(encoding@0.1.13)(graphql@16.9.0)
'@graphql-inspector/cli':
specifier: 6.0.0
version: 6.0.0(@types/node@22.10.5)(encoding@0.1.13)(graphql@16.9.0)
specifier: 6.0.6
version: 6.0.6(@types/node@22.10.5)(encoding@0.1.13)(graphql@16.9.0)
'@graphql-inspector/core':
specifier: 7.1.0
version: 7.1.0(graphql@16.9.0)
specifier: 7.1.1
version: 7.1.1(graphql@16.9.0)
'@graphql-inspector/patch':
specifier: 0.1.0
version: 0.1.0(graphql@16.9.0)
specifier: 0.1.1
version: 0.1.1(graphql@16.9.0)
'@graphql-tools/load':
specifier: 8.1.2
version: 8.1.2(graphql@16.9.0)
@ -456,8 +456,8 @@ importers:
specifier: workspace:*
version: link:../core/dist
'@graphql-inspector/core':
specifier: 7.1.0
version: 7.1.0(graphql@16.9.0)
specifier: 7.1.1
version: 7.1.1(graphql@16.9.0)
'@graphql-tools/code-file-loader':
specifier: ~8.1.0
version: 8.1.0(graphql@16.9.0)
@ -755,8 +755,8 @@ importers:
specifier: 1.0.0
version: 1.0.0
'@graphql-inspector/core':
specifier: 7.1.0
version: 7.1.0(graphql@16.9.0)
specifier: 7.1.1
version: 7.1.1(graphql@16.9.0)
'@graphql-tools/merge':
specifier: 9.1.1
version: 9.1.1(graphql@16.9.0)
@ -1414,8 +1414,8 @@ importers:
packages/services/storage:
devDependencies:
'@graphql-inspector/core':
specifier: 7.1.0
version: 7.1.0(graphql@16.9.0)
specifier: 7.1.1
version: 7.1.1(graphql@16.9.0)
'@hive/service-common':
specifier: workspace:*
version: link:../service-common
@ -1720,11 +1720,11 @@ importers:
specifier: 0.2.0
version: 0.2.0
'@graphql-inspector/core':
specifier: 7.1.0
version: 7.1.0(graphql@16.9.0)
specifier: 7.1.1
version: 7.1.1(graphql@16.9.0)
'@graphql-inspector/patch':
specifier: 0.1.0
version: 0.1.0(graphql@16.9.0)
specifier: 0.1.1
version: 0.1.1(graphql@16.9.0)
'@graphql-tools/mock':
specifier: 9.0.25
version: 9.0.25(graphql@16.9.0)
@ -4289,14 +4289,14 @@ packages:
graphql: ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
graphql-yoga: ^5.10.8
'@graphql-inspector/audit-command@5.0.12':
resolution: {integrity: sha512-ZTt4K1WvJKjZgB6Hx8w8Gky6j3XCY1zioEVPv1rleib/9ULUyp+5QdGNS9g22U12lFSDzOvy95AAIBpfGnNSBg==}
'@graphql-inspector/audit-command@5.0.18':
resolution: {integrity: sha512-2DByUZHBu9bcYv0yBV5wxSLNF64oTDh3rFX0husZFfNm89W09NYJ7RKEEzxYrrTmZwguIj+1+ATlstAim7+fdQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
'@graphql-inspector/cli@6.0.0':
resolution: {integrity: sha512-kNOyaMFtKg5+GDyfcmCEuQHnPtF/SBGha00JJeR4YD6RXtF0Jv9j3LpdeiNbv3Z9e7mX7iuD5YDdvCno1mYpDQ==}
'@graphql-inspector/cli@6.0.6':
resolution: {integrity: sha512-g35G2dh+MFk38ZLLSQrFYKDMBAxFiLav4ZK9gbrN7+uKNQ01WpH3ZOyZA/Qx4vvbNAe750/IsahcChFaeNYEUg==}
engines: {node: '>=18.0.0'}
hasBin: true
peerDependencies:
@ -4323,26 +4323,20 @@ packages:
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
'@graphql-inspector/core@7.0.0':
resolution: {integrity: sha512-ZEKbKqJUqkWlJhab1ywQ2U0hk225lF2nYenZxPCaTEmKx1ovHucgh/3kq+b6bA5aW2S3tXlpuIGcctymCtZ2/g==}
'@graphql-inspector/core@7.1.1':
resolution: {integrity: sha512-EzpOtDMK2q6D89czinZXGGLlxt85fBijZSGuPt+CXv84u7prFU6pUA/0mq6tpSiuQKWyRKu4MMuxB0vTNJZoRw==}
engines: {node: '>=18.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
'@graphql-inspector/core@7.1.0':
resolution: {integrity: sha512-wfyNEOnNjzqCygj7mp3ctVBwQwBWNirDpgJ+tAPu/yA9y7xjAFPPtFuP9Nj9mMFn1Y1hJTnZ2XfA7kJJXrwRkw==}
'@graphql-inspector/coverage-command@6.1.12':
resolution: {integrity: sha512-5XzKVgDYRzYXGsvi/9Y7/2LPV7DhVNe6bp+9ip1kSNozB8LDBl1L6zZn16PEFJB6ROknN1LPuwcnR3SxTlHQ6w==}
engines: {node: '>=18.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
'@graphql-inspector/coverage-command@6.1.6':
resolution: {integrity: sha512-DFCDb1IlpdGEnywFbcZsLgGwZGqlrryOPxXPY2a+GLhFYSJO13ytl7eaVb6lCXCGjFrCtPpcgBWFSC6YxoMYAA==}
engines: {node: '>=18.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
'@graphql-inspector/diff-command@6.0.0':
resolution: {integrity: sha512-qIviI/GNh+SxbV19XhfSWs7mY9CU6XDw2tLc/KFNQEmP9MF6XvT7UB+wD9W9rjxcmTFjjKtcqm0HaPEtFlXT5w==}
'@graphql-inspector/diff-command@6.0.6':
resolution: {integrity: sha512-oGJawa87a1zQ0htRxNlnJzp2spfZ0F3L+PGyBA676WAdm13WV+wQEggJdRy+AILklfkH1W9B7SPH36KyPB/wTA==}
engines: {node: '>=18.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
@ -4371,8 +4365,8 @@ packages:
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
'@graphql-inspector/introspect-command@5.0.12':
resolution: {integrity: sha512-l+P4NeLcWRukPMsBL1pljx1l7I+VVUuLJ1xdtnhmRSUNJzx410SSIgV0wUKOsWR6JIZHdLQKN0ly9S2Tex9Q3Q==}
'@graphql-inspector/introspect-command@5.0.18':
resolution: {integrity: sha512-fr7D4xAYr25vp6kX2j4CvzCsn5DXxx81cdnHKh5ha3FFJgvH/ChC0KfxXW0j8VQQuJLw940QJb0Ta10knDBs/Q==}
engines: {node: '>=18.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
@ -4394,8 +4388,8 @@ packages:
resolution: {integrity: sha512-rEo+HoQt+qjdayy7p5vcR9GeGTdKXmN0LbIm3W+jKKoXeAMlV4zHxnOW6jEhO6E0eVQxf8Sc1TlcH78i2P2a9w==}
engines: {node: '>=18.0.0'}
'@graphql-inspector/patch@0.1.0':
resolution: {integrity: sha512-ZlDk4EESEP4scj7jBsKGoCdNP+uxrdKixxhtS+WAqm5RL5ph9W+gk4pm0Rpw+T3YIJgNqB7XqFDTbVURz7TG/w==}
'@graphql-inspector/patch@0.1.1':
resolution: {integrity: sha512-0+8mCAt5JO3gKWyFzotM5ppKWP520bLVJ9eCHRKJxVEBI2s7Ir5q+VfU/BQx8AuqBD7vJLK96IsE2tZaN4Xacg==}
engines: {node: '>=18.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
@ -4406,8 +4400,8 @@ packages:
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
'@graphql-inspector/similar-command@5.0.12':
resolution: {integrity: sha512-UDC+AvYH/IYLR56Ze5iY+1CW/nOrIOax7Onjl+DuF8WTp4IA9mbjQx//TY4CTaWBM0gTOVdbzzYMTjS4TGoRpw==}
'@graphql-inspector/similar-command@5.0.18':
resolution: {integrity: sha512-91k27cPkkpHkOa5HzwQy7QrQuSCtebNYr7JPATqO2jop7bpom0FeVldM8w8fugwpsfWAOSTNjtiJx8cFoE0CjQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
@ -4418,8 +4412,8 @@ packages:
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
'@graphql-inspector/validate-command@5.0.12':
resolution: {integrity: sha512-pg5ZDLssXj+dW+itkbrR3Pf6HLBlz9LhHN6Aj808GI+vIKS7WhAEMWzngycENazXxAafvLVAHOPKINLEJwuZdQ==}
'@graphql-inspector/validate-command@5.0.18':
resolution: {integrity: sha512-7kcE2Q9IQCE3M8Yo4ezHsdeW/d6Ave/4iraKDEyKXlbIXwFLkb7dqfCEBfQMB59g41nmAY23Vs+RjtMC8VSQvw==}
engines: {node: '>=18.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
@ -22930,10 +22924,10 @@ snapshots:
- pino
- winston
'@graphql-inspector/audit-command@5.0.12(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
'@graphql-inspector/audit-command@5.0.18(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
dependencies:
'@graphql-inspector/commands': 6.0.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/core': 7.0.0(graphql@16.9.0)
'@graphql-inspector/core': 7.1.1(graphql@16.9.0)
'@graphql-inspector/logger': 5.0.1
'@graphql-tools/utils': 10.8.6(graphql@16.9.0)
cli-table3: 0.6.3
@ -22944,26 +22938,26 @@ snapshots:
- '@graphql-inspector/loaders'
- yargs
'@graphql-inspector/cli@6.0.0(@types/node@22.10.5)(encoding@0.1.13)(graphql@16.9.0)':
'@graphql-inspector/cli@6.0.6(@types/node@22.10.5)(encoding@0.1.13)(graphql@16.9.0)':
dependencies:
'@babel/core': 7.26.10
'@graphql-inspector/audit-command': 5.0.12(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/audit-command': 5.0.18(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/code-loader': 5.0.1(graphql@16.9.0)
'@graphql-inspector/commands': 6.0.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/config': 4.0.2(graphql@16.9.0)
'@graphql-inspector/coverage-command': 6.1.6(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/diff-command': 6.0.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/coverage-command': 6.1.12(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/diff-command': 6.0.6(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/docs-command': 5.0.5(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/git-loader': 5.0.1(graphql@16.9.0)
'@graphql-inspector/github-loader': 5.0.1(@types/node@22.10.5)(encoding@0.1.13)(graphql@16.9.0)
'@graphql-inspector/graphql-loader': 5.0.1(graphql@16.9.0)
'@graphql-inspector/introspect-command': 5.0.12(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/introspect-command': 5.0.18(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/json-loader': 5.0.1(graphql@16.9.0)
'@graphql-inspector/loaders': 4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0)
'@graphql-inspector/serve-command': 5.0.7(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/similar-command': 5.0.12(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/similar-command': 5.0.18(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/url-loader': 5.0.1(@types/node@22.10.5)(encoding@0.1.13)(graphql@16.9.0)
'@graphql-inspector/validate-command': 5.0.12(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/validate-command': 5.0.18(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
graphql: 16.9.0
tslib: 2.6.2
yargs: 17.7.2
@ -22995,24 +22989,17 @@ snapshots:
graphql: 16.9.0
tslib: 2.6.2
'@graphql-inspector/core@7.0.0(graphql@16.9.0)':
'@graphql-inspector/core@7.1.1(graphql@16.9.0)':
dependencies:
dependency-graph: 1.0.0
graphql: 16.9.0
object-inspect: 1.13.2
tslib: 2.6.2
'@graphql-inspector/core@7.1.0(graphql@16.9.0)':
dependencies:
dependency-graph: 1.0.0
graphql: 16.9.0
object-inspect: 1.13.2
tslib: 2.6.2
'@graphql-inspector/coverage-command@6.1.6(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
'@graphql-inspector/coverage-command@6.1.12(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
dependencies:
'@graphql-inspector/commands': 6.0.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/core': 7.0.0(graphql@16.9.0)
'@graphql-inspector/core': 7.1.1(graphql@16.9.0)
'@graphql-inspector/logger': 5.0.1
'@graphql-tools/utils': 10.8.6(graphql@16.9.0)
graphql: 16.9.0
@ -23022,10 +23009,10 @@ snapshots:
- '@graphql-inspector/loaders'
- yargs
'@graphql-inspector/diff-command@6.0.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
'@graphql-inspector/diff-command@6.0.6(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
dependencies:
'@graphql-inspector/commands': 6.0.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/core': 7.0.0(graphql@16.9.0)
'@graphql-inspector/core': 7.1.1(graphql@16.9.0)
'@graphql-inspector/logger': 5.0.1
graphql: 16.9.0
tslib: 2.6.2
@ -23069,10 +23056,10 @@ snapshots:
graphql: 16.9.0
tslib: 2.6.2
'@graphql-inspector/introspect-command@5.0.12(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
'@graphql-inspector/introspect-command@5.0.18(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
dependencies:
'@graphql-inspector/commands': 6.0.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/core': 7.0.0(graphql@16.9.0)
'@graphql-inspector/core': 7.1.1(graphql@16.9.0)
'@graphql-inspector/logger': 5.0.1
graphql: 16.9.0
tslib: 2.6.2
@ -23106,7 +23093,7 @@ snapshots:
std-env: 3.7.0
tslib: 2.6.2
'@graphql-inspector/patch@0.1.0(graphql@16.9.0)':
'@graphql-inspector/patch@0.1.1(graphql@16.9.0)':
dependencies:
'@graphql-tools/utils': 10.9.1(graphql@16.9.0)
graphql: 16.9.0
@ -23125,10 +23112,10 @@ snapshots:
- '@graphql-inspector/loaders'
- yargs
'@graphql-inspector/similar-command@5.0.12(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
'@graphql-inspector/similar-command@5.0.18(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
dependencies:
'@graphql-inspector/commands': 6.0.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/core': 7.0.0(graphql@16.9.0)
'@graphql-inspector/core': 7.1.1(graphql@16.9.0)
'@graphql-inspector/logger': 5.0.1
graphql: 16.9.0
tslib: 2.6.2
@ -23148,10 +23135,10 @@ snapshots:
- encoding
- utf-8-validate
'@graphql-inspector/validate-command@5.0.12(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
'@graphql-inspector/validate-command@5.0.18(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
dependencies:
'@graphql-inspector/commands': 6.0.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.1.0(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
'@graphql-inspector/core': 7.0.0(graphql@16.9.0)
'@graphql-inspector/core': 7.1.1(graphql@16.9.0)
'@graphql-inspector/logger': 5.0.1
'@graphql-tools/utils': 10.8.6(graphql@16.9.0)
graphql: 16.9.0
@ -23251,7 +23238,7 @@ snapshots:
'@graphql-tools/merge': 9.1.5(graphql@16.11.0)
'@graphql-tools/stitch': 10.1.3(graphql@16.11.0)
'@graphql-tools/stitching-directives': 4.0.5(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@graphql-tools/wrap': 11.0.5(graphql@16.11.0)
'@whatwg-node/disposablestack': 0.0.6
'@whatwg-node/promise-helpers': 1.3.2
@ -23282,7 +23269,7 @@ snapshots:
'@graphql-tools/merge': 9.1.5(graphql@16.11.0)
'@graphql-tools/stitch': 10.1.3(graphql@16.11.0)
'@graphql-tools/stitching-directives': 4.0.5(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@graphql-tools/wrap': 11.0.5(graphql@16.11.0)
'@whatwg-node/disposablestack': 0.0.6
'@whatwg-node/promise-helpers': 1.3.2
@ -23610,7 +23597,7 @@ snapshots:
'@graphql-mesh/types': 0.104.16(graphql@16.11.0)(ioredis@5.8.2)
'@graphql-tools/executor': 1.4.13(graphql@16.11.0)
'@graphql-tools/executor-common': 1.0.5(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
graphql: 16.11.0
tslib: 2.8.1
transitivePeerDependencies:
@ -23629,7 +23616,7 @@ snapshots:
'@graphql-mesh/types': 0.104.16(graphql@16.11.0)(ioredis@5.8.2)
'@graphql-tools/executor': 1.4.13(graphql@16.11.0)
'@graphql-tools/executor-common': 1.0.5(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
graphql: 16.11.0
tslib: 2.8.1
transitivePeerDependencies:
@ -23648,7 +23635,7 @@ snapshots:
'@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2)
'@graphql-tools/executor': 1.4.13(graphql@16.9.0)
'@graphql-tools/executor-common': 1.0.5(graphql@16.9.0)
'@graphql-tools/utils': 10.10.3(graphql@16.9.0)
'@graphql-tools/utils': 10.11.0(graphql@16.9.0)
graphql: 16.9.0
tslib: 2.8.1
transitivePeerDependencies:
@ -23838,7 +23825,7 @@ snapshots:
'@graphql-tools/batch-delegate@10.0.5(graphql@16.11.0)':
dependencies:
'@graphql-tools/delegate': 11.1.3(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@whatwg-node/promise-helpers': 1.3.2
dataloader: 2.2.3
graphql: 16.11.0
@ -23847,7 +23834,7 @@ snapshots:
'@graphql-tools/batch-delegate@10.0.5(graphql@16.9.0)':
dependencies:
'@graphql-tools/delegate': 11.1.3(graphql@16.9.0)
'@graphql-tools/utils': 10.10.3(graphql@16.9.0)
'@graphql-tools/utils': 10.11.0(graphql@16.9.0)
'@whatwg-node/promise-helpers': 1.3.2
dataloader: 2.2.3
graphql: 16.9.0
@ -24006,7 +23993,7 @@ snapshots:
'@graphql-tools/batch-execute': 10.0.4(graphql@16.11.0)
'@graphql-tools/executor': 1.4.13(graphql@16.11.0)
'@graphql-tools/schema': 10.0.29(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@repeaterjs/repeater': 3.0.6
'@whatwg-node/promise-helpers': 1.3.2
dataloader: 2.2.3
@ -24018,7 +24005,7 @@ snapshots:
'@graphql-tools/batch-execute': 10.0.4(graphql@16.9.0)
'@graphql-tools/executor': 1.4.13(graphql@16.9.0)
'@graphql-tools/schema': 10.0.29(graphql@16.9.0)
'@graphql-tools/utils': 10.10.3(graphql@16.9.0)
'@graphql-tools/utils': 10.11.0(graphql@16.9.0)
'@repeaterjs/repeater': 3.0.6
'@whatwg-node/promise-helpers': 1.3.2
dataloader: 2.2.3
@ -24087,13 +24074,13 @@ snapshots:
'@graphql-tools/executor-common@1.0.5(graphql@16.11.0)':
dependencies:
'@envelop/core': 5.4.0
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
graphql: 16.11.0
'@graphql-tools/executor-common@1.0.5(graphql@16.9.0)':
dependencies:
'@envelop/core': 5.4.0
'@graphql-tools/utils': 10.10.3(graphql@16.9.0)
'@graphql-tools/utils': 10.11.0(graphql@16.9.0)
graphql: 16.9.0
'@graphql-tools/executor-graphql-ws@0.0.14(graphql@16.9.0)':
@ -24158,7 +24145,7 @@ snapshots:
'@graphql-tools/executor-graphql-ws@3.1.3(graphql@16.11.0)':
dependencies:
'@graphql-tools/executor-common': 1.0.5(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@whatwg-node/disposablestack': 0.0.6
graphql: 16.11.0
graphql-ws: 6.0.6(graphql@16.11.0)(ws@8.18.0)
@ -24233,7 +24220,7 @@ snapshots:
dependencies:
'@graphql-hive/signal': 2.0.0
'@graphql-tools/executor-common': 1.0.5(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@repeaterjs/repeater': 3.0.6
'@whatwg-node/disposablestack': 0.0.6
'@whatwg-node/fetch': 0.10.13
@ -24248,7 +24235,7 @@ snapshots:
dependencies:
'@graphql-hive/signal': 2.0.0
'@graphql-tools/executor-common': 1.0.5(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@repeaterjs/repeater': 3.0.6
'@whatwg-node/disposablestack': 0.0.6
'@whatwg-node/fetch': 0.10.13
@ -24263,7 +24250,7 @@ snapshots:
dependencies:
'@graphql-hive/signal': 2.0.0
'@graphql-tools/executor-common': 1.0.5(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@repeaterjs/repeater': 3.0.6
'@whatwg-node/disposablestack': 0.0.6
'@whatwg-node/fetch': 0.10.13
@ -24278,7 +24265,7 @@ snapshots:
dependencies:
'@graphql-hive/signal': 2.0.0
'@graphql-tools/executor-common': 1.0.5(graphql@16.9.0)
'@graphql-tools/utils': 10.10.3(graphql@16.9.0)
'@graphql-tools/utils': 10.11.0(graphql@16.9.0)
'@repeaterjs/repeater': 3.0.6
'@whatwg-node/disposablestack': 0.0.6
'@whatwg-node/fetch': 0.10.13
@ -24422,7 +24409,7 @@ snapshots:
'@graphql-tools/merge': 9.1.5(graphql@16.11.0)
'@graphql-tools/schema': 10.0.29(graphql@16.11.0)
'@graphql-tools/stitch': 10.1.3(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@graphql-tools/wrap': 11.0.5(graphql@16.11.0)
'@graphql-yoga/typed-event-target': 3.0.2
'@whatwg-node/disposablestack': 0.0.6
@ -24442,7 +24429,7 @@ snapshots:
'@graphql-tools/merge': 9.1.5(graphql@16.11.0)
'@graphql-tools/schema': 10.0.29(graphql@16.11.0)
'@graphql-tools/stitch': 10.1.3(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@graphql-tools/wrap': 11.0.5(graphql@16.11.0)
'@graphql-yoga/typed-event-target': 3.0.2
'@whatwg-node/disposablestack': 0.0.6
@ -24661,7 +24648,7 @@ snapshots:
'@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5)
'@babel/traverse': 7.28.5
'@babel/types': 7.26.10
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
graphql: 16.11.0
tslib: 2.8.1
transitivePeerDependencies:
@ -24674,7 +24661,7 @@ snapshots:
'@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5)
'@babel/traverse': 7.28.5
'@babel/types': 7.26.10
'@graphql-tools/utils': 10.10.3(graphql@16.9.0)
'@graphql-tools/utils': 10.11.0(graphql@16.9.0)
graphql: 16.9.0
tslib: 2.8.1
transitivePeerDependencies:
@ -24706,7 +24693,7 @@ snapshots:
'@graphql-tools/import@7.1.7(graphql@16.11.0)':
dependencies:
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@theguild/federation-composition': 0.20.2(graphql@16.11.0)
graphql: 16.11.0
resolve-from: 5.0.0
@ -24847,14 +24834,14 @@ snapshots:
'@graphql-tools/schema@10.0.29(graphql@16.11.0)':
dependencies:
'@graphql-tools/merge': 9.1.5(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
graphql: 16.11.0
tslib: 2.8.1
'@graphql-tools/schema@10.0.29(graphql@16.9.0)':
dependencies:
'@graphql-tools/merge': 9.1.5(graphql@16.9.0)
'@graphql-tools/utils': 10.10.3(graphql@16.9.0)
'@graphql-tools/utils': 10.11.0(graphql@16.9.0)
graphql: 16.9.0
tslib: 2.8.1
@ -24873,7 +24860,7 @@ snapshots:
'@graphql-tools/executor': 1.4.13(graphql@16.11.0)
'@graphql-tools/merge': 9.1.5(graphql@16.11.0)
'@graphql-tools/schema': 10.0.29(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@graphql-tools/wrap': 11.0.5(graphql@16.11.0)
'@whatwg-node/promise-helpers': 1.3.2
graphql: 16.11.0
@ -25152,7 +25139,7 @@ snapshots:
dependencies:
'@graphql-tools/delegate': 11.1.3(graphql@16.11.0)
'@graphql-tools/schema': 10.0.29(graphql@16.11.0)
'@graphql-tools/utils': 10.10.3(graphql@16.11.0)
'@graphql-tools/utils': 10.11.0(graphql@16.11.0)
'@whatwg-node/promise-helpers': 1.3.2
graphql: 16.11.0
tslib: 2.8.1
@ -25161,7 +25148,7 @@ snapshots:
dependencies:
'@graphql-tools/delegate': 11.1.3(graphql@16.9.0)
'@graphql-tools/schema': 10.0.29(graphql@16.9.0)
'@graphql-tools/utils': 10.10.3(graphql@16.9.0)
'@graphql-tools/utils': 10.11.0(graphql@16.9.0)
'@whatwg-node/promise-helpers': 1.3.2
graphql: 16.9.0
tslib: 2.8.1
@ -35638,7 +35625,7 @@ snapshots:
graphql-yoga@5.7.0(graphql@16.9.0):
dependencies:
'@envelop/core': 5.0.2
'@graphql-tools/executor': 1.4.13(graphql@16.9.0)
'@graphql-tools/executor': 1.5.0(graphql@16.9.0)
'@graphql-tools/schema': 10.0.25(graphql@16.9.0)
'@graphql-tools/utils': 10.9.1(graphql@16.9.0)
'@graphql-yoga/logger': 2.0.1