mirror of
https://github.com/graphql-hive/console
synced 2026-04-21 14:37:17 +00:00
Store schema proposal changes on a separate column in the schema chec… (#7531)
This commit is contained in:
parent
c4776b80ab
commit
f4eb13f9ed
32 changed files with 425 additions and 163 deletions
5
.changeset/eleven-pugs-send.md
Normal file
5
.changeset/eleven-pugs-send.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
'hive': minor
|
||||
---
|
||||
|
||||
Store schema proposal changes on a separate column in the schema check; update graphql inspector
|
||||
|
|
@ -1807,7 +1807,7 @@ describe('schema publishing changes are persisted', () => {
|
|||
`,
|
||||
schemaAfter: /* GraphQL */ `
|
||||
type Query {
|
||||
a(a: String): String!
|
||||
a(a: String): String
|
||||
}
|
||||
`,
|
||||
equalsObject: {
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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'),
|
||||
],
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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>(
|
||||
|
|
|
|||
|
|
@ -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:*",
|
||||
|
|
|
|||
|
|
@ -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!
|
||||
}
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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 => [
|
||||
|
|
|
|||
|
|
@ -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 => ({
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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`
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
/>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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 => {
|
||||
|
|
|
|||
|
|
@ -168,6 +168,8 @@ export const urqlClient = createClient({
|
|||
DirectiveUsageArgumentDefinitionAdded: noKey,
|
||||
DirectiveUsageArgumentAdded: noKey,
|
||||
DirectiveUsageArgumentRemoved: noKey,
|
||||
DirectiveRepeatableAdded: noKey,
|
||||
DirectiveRepeatableRemoved: noKey,
|
||||
},
|
||||
globalIDs: ['SuccessfulSchemaCheck', 'FailedSchemaCheck'],
|
||||
}),
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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: {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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>;
|
||||
|
|
|
|||
177
pnpm-lock.yaml
177
pnpm-lock.yaml
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue