@graphitation/supermassive 3.0.0-alpha.5 → 3.0.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintcache +1 -1
- package/CHANGELOG.md +18 -2
- package/lib/benchmarks/index.js.map +2 -2
- package/lib/benchmarks/index.mjs.map +2 -2
- package/lib/collectFields.d.ts.map +1 -1
- package/lib/collectFields.js +6 -5
- package/lib/collectFields.js.map +2 -2
- package/lib/collectFields.mjs +6 -5
- package/lib/collectFields.mjs.map +2 -2
- package/lib/executeWithoutSchema.d.ts +1 -3
- package/lib/executeWithoutSchema.d.ts.map +1 -1
- package/lib/executeWithoutSchema.js +153 -69
- package/lib/executeWithoutSchema.js.map +2 -2
- package/lib/executeWithoutSchema.mjs +143 -71
- package/lib/executeWithoutSchema.mjs.map +2 -2
- package/lib/index.d.ts +4 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -1
- package/lib/index.js.map +2 -2
- package/lib/index.mjs +10 -2
- package/lib/index.mjs.map +2 -2
- package/lib/schema/definition.d.ts +43 -33
- package/lib/schema/definition.d.ts.map +1 -1
- package/lib/schema/definition.js +284 -9
- package/lib/schema/definition.js.map +2 -2
- package/lib/schema/definition.mjs +284 -55
- package/lib/schema/definition.mjs.map +3 -3
- package/lib/schema/directives.d.ts.map +1 -1
- package/lib/schema/directives.js +3 -3
- package/lib/schema/directives.js.map +2 -2
- package/lib/schema/directives.mjs +4 -4
- package/lib/schema/directives.mjs.map +2 -2
- package/lib/schema/reference.d.ts +3 -1
- package/lib/schema/reference.d.ts.map +1 -1
- package/lib/schema/reference.js.map +2 -2
- package/lib/schema/reference.mjs.map +2 -2
- package/lib/schema/resolvers.d.ts +10 -4
- package/lib/schema/resolvers.d.ts.map +1 -1
- package/lib/schema/resolvers.js +92 -9
- package/lib/schema/resolvers.js.map +2 -2
- package/lib/schema/resolvers.mjs +99 -9
- package/lib/schema/resolvers.mjs.map +2 -2
- package/lib/types.d.ts +25 -2
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/utilities/coerceInputValue.d.ts +3 -3
- package/lib/utilities/coerceInputValue.d.ts.map +1 -1
- package/lib/utilities/coerceInputValue.js +17 -12
- package/lib/utilities/coerceInputValue.js.map +2 -2
- package/lib/utilities/coerceInputValue.mjs +22 -12
- package/lib/utilities/coerceInputValue.mjs.map +2 -2
- package/lib/utilities/decodeASTSchema.d.ts.map +1 -1
- package/lib/utilities/decodeASTSchema.js +32 -40
- package/lib/utilities/decodeASTSchema.js.map +2 -2
- package/lib/utilities/decodeASTSchema.mjs +51 -49
- package/lib/utilities/decodeASTSchema.mjs.map +2 -2
- package/lib/utilities/encodeASTSchema.d.ts.map +1 -1
- package/lib/utilities/encodeASTSchema.js +16 -20
- package/lib/utilities/encodeASTSchema.js.map +2 -2
- package/lib/utilities/encodeASTSchema.mjs +22 -21
- package/lib/utilities/encodeASTSchema.mjs.map +2 -2
- package/lib/utilities/extractMinimalViableSchemaForRequestDocument.d.ts.map +1 -1
- package/lib/utilities/extractMinimalViableSchemaForRequestDocument.js +20 -22
- package/lib/utilities/extractMinimalViableSchemaForRequestDocument.js.map +2 -2
- package/lib/utilities/extractMinimalViableSchemaForRequestDocument.mjs +35 -29
- package/lib/utilities/extractMinimalViableSchemaForRequestDocument.mjs.map +2 -2
- package/lib/utilities/mergeResolvers.js +1 -2
- package/lib/utilities/mergeResolvers.js.map +2 -2
- package/lib/utilities/mergeResolvers.mjs +1 -2
- package/lib/utilities/mergeResolvers.mjs.map +2 -2
- package/lib/utilities/mergeSchemaDefinitions.d.ts.map +1 -1
- package/lib/utilities/mergeSchemaDefinitions.js +18 -28
- package/lib/utilities/mergeSchemaDefinitions.js.map +2 -2
- package/lib/utilities/mergeSchemaDefinitions.mjs +28 -34
- package/lib/utilities/mergeSchemaDefinitions.mjs.map +2 -2
- package/lib/utilities/valueFromAST.d.ts +3 -3
- package/lib/utilities/valueFromAST.d.ts.map +1 -1
- package/lib/utilities/valueFromAST.js +23 -10
- package/lib/utilities/valueFromAST.js.map +2 -2
- package/lib/utilities/valueFromAST.mjs +13 -10
- package/lib/utilities/valueFromAST.mjs.map +2 -2
- package/lib/values.d.ts +2 -2
- package/lib/values.d.ts.map +1 -1
- package/lib/values.js +14 -14
- package/lib/values.js.map +2 -2
- package/lib/values.mjs +21 -14
- package/lib/values.mjs.map +2 -2
- package/package.json +1 -1
- package/lib/schema/fragment.d.ts +0 -63
- package/lib/schema/fragment.d.ts.map +0 -1
- package/lib/schema/fragment.js +0 -295
- package/lib/schema/fragment.js.map +0 -7
- package/lib/schema/fragment.mjs +0 -292
- package/lib/schema/fragment.mjs.map +0 -7
|
@@ -15,13 +15,21 @@ import {
|
|
|
15
15
|
visitWithTypeInfo
|
|
16
16
|
} from "graphql";
|
|
17
17
|
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
createEnumTypeDefinition,
|
|
19
|
+
createInputObjectTypeDefinition,
|
|
20
|
+
createInterfaceTypeDefinition,
|
|
21
|
+
createObjectTypeDefinition,
|
|
22
|
+
createScalarTypeDefinition,
|
|
23
|
+
createUnionTypeDefinition,
|
|
24
|
+
getDirectiveDefinitionArgs,
|
|
25
|
+
getDirectiveName,
|
|
26
|
+
getFieldArgs,
|
|
27
|
+
getFields,
|
|
28
|
+
getFieldTypeReference,
|
|
29
|
+
getInputObjectFields,
|
|
30
|
+
getInputValueTypeReference,
|
|
31
|
+
isUnionTypeDefinition,
|
|
32
|
+
setDirectiveDefinitionArgs
|
|
25
33
|
} from "../schema/definition.mjs";
|
|
26
34
|
import { isKnownDirective } from "../schema/directives.mjs";
|
|
27
35
|
import { makeReadableErrorPath } from "./makeReadableErrorPath.mjs";
|
|
@@ -43,19 +51,15 @@ function extractMinimalViableSchemaForRequestDocument(schema, requestDocument) {
|
|
|
43
51
|
const parentType = typeInfo.getParentType();
|
|
44
52
|
assertCompositeType(parentType, node, ancestors);
|
|
45
53
|
const typeDef = addCompositeType(types, parentType);
|
|
46
|
-
if (typeDef
|
|
54
|
+
if (isUnionTypeDefinition(typeDef) || node.name.value === "__typename") {
|
|
47
55
|
return;
|
|
48
56
|
}
|
|
49
57
|
const field = typeInfo.getFieldDef();
|
|
50
58
|
assertExistingField(field, node, ancestors);
|
|
51
59
|
assertAllArgumentsAreDefined(field, node, ancestors);
|
|
52
60
|
const fieldDef = addField(typeDef, field, node);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
addReferencedInputTypes(schema, types, fieldDef[FieldKeys.arguments]);
|
|
56
|
-
} else {
|
|
57
|
-
addReferencedOutputType(schema, types, fieldDef);
|
|
58
|
-
}
|
|
61
|
+
addReferencedOutputType(schema, types, getFieldTypeReference(fieldDef));
|
|
62
|
+
addReferencedInputTypes(schema, types, getFieldArgs(fieldDef));
|
|
59
63
|
},
|
|
60
64
|
Directive(node, _key, _parent, _path) {
|
|
61
65
|
if (isKnownDirective(node.name.value)) {
|
|
@@ -108,8 +112,11 @@ function addReferencedOutputType(schema, types, typeRef) {
|
|
|
108
112
|
}
|
|
109
113
|
}
|
|
110
114
|
function addReferencedInputTypes(schema, types, inputValues) {
|
|
115
|
+
if (!inputValues) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
111
118
|
for (const inputValueDef of Object.values(inputValues)) {
|
|
112
|
-
const typeRef =
|
|
119
|
+
const typeRef = getInputValueTypeReference(inputValueDef);
|
|
113
120
|
const name = typeNameFromReference(typeRef);
|
|
114
121
|
const schemaType = schema.getType(name);
|
|
115
122
|
if (!schemaType) {
|
|
@@ -124,7 +131,7 @@ function addReferencedInputTypes(schema, types, inputValues) {
|
|
|
124
131
|
addReferencedInputTypes(
|
|
125
132
|
schema,
|
|
126
133
|
types,
|
|
127
|
-
inputObjectDef
|
|
134
|
+
getInputObjectFields(inputObjectDef)
|
|
128
135
|
);
|
|
129
136
|
} else if (isEnumType(schemaType)) {
|
|
130
137
|
types[name] = encodeEnumType(schemaType);
|
|
@@ -142,11 +149,11 @@ function addCompositeType(types, type) {
|
|
|
142
149
|
return types[type.name] = encodeCompositeType(type);
|
|
143
150
|
}
|
|
144
151
|
function addField(type, field, fieldNode) {
|
|
145
|
-
var _a;
|
|
146
|
-
const fields = type
|
|
152
|
+
var _a, _b;
|
|
153
|
+
const fields = getFields(type);
|
|
147
154
|
const existingFieldDef = fields[field.name];
|
|
148
|
-
const previouslyAddedArgs =
|
|
149
|
-
const nodeArgs = new Set((
|
|
155
|
+
const previouslyAddedArgs = (_a = getFieldArgs(existingFieldDef)) != null ? _a : /* @__PURE__ */ Object.create(null);
|
|
156
|
+
const nodeArgs = new Set((_b = fieldNode.arguments) == null ? void 0 : _b.map((arg) => arg.name.value));
|
|
150
157
|
const argsFilter = (argDef) => Boolean(
|
|
151
158
|
previouslyAddedArgs[argDef.name] || isNonNullType(argDef.type) || argDef.defaultValue !== void 0 || nodeArgs.has(argDef.name)
|
|
152
159
|
);
|
|
@@ -155,36 +162,35 @@ function addField(type, field, fieldNode) {
|
|
|
155
162
|
function addDirective(directives, directive, node) {
|
|
156
163
|
var _a;
|
|
157
164
|
const name = directive.name;
|
|
158
|
-
let tuple = directives.find((d) => d
|
|
165
|
+
let tuple = directives.find((d) => getDirectiveName(d) === name);
|
|
159
166
|
if (!tuple) {
|
|
160
167
|
tuple = [directive.name];
|
|
161
168
|
directives.push(tuple);
|
|
162
169
|
}
|
|
163
|
-
const previouslyAddedArgs = tuple
|
|
170
|
+
const previouslyAddedArgs = getDirectiveDefinitionArgs(tuple);
|
|
164
171
|
const nodeArgs = new Set((_a = node.arguments) == null ? void 0 : _a.map((arg) => arg.name.value));
|
|
165
172
|
const argsFilter = (argDef) => Boolean(
|
|
166
173
|
(previouslyAddedArgs == null ? void 0 : previouslyAddedArgs[argDef.name]) || isNonNullType(argDef.type) || argDef.defaultValue !== void 0 || nodeArgs.has(argDef.name)
|
|
167
174
|
);
|
|
168
175
|
const [hasArgs, argsRecord] = encodeArguments(directive.args, argsFilter);
|
|
169
176
|
if (hasArgs) {
|
|
170
|
-
tuple
|
|
177
|
+
setDirectiveDefinitionArgs(tuple, argsRecord);
|
|
171
178
|
}
|
|
172
179
|
return tuple;
|
|
173
180
|
}
|
|
174
181
|
function encodeCompositeType(type) {
|
|
175
182
|
if (isUnionType(type)) {
|
|
176
|
-
return
|
|
183
|
+
return createUnionTypeDefinition(type.getTypes().map((type2) => type2.name));
|
|
177
184
|
}
|
|
178
185
|
const ifaces = type.getInterfaces().map((iface) => iface.name);
|
|
179
|
-
|
|
180
|
-
return ifaces.length ? [typeKind, {}, ifaces] : [typeKind, {}];
|
|
186
|
+
return isObjectType(type) ? createObjectTypeDefinition({}, ifaces) : createInterfaceTypeDefinition({}, ifaces);
|
|
181
187
|
}
|
|
182
188
|
function encodeInputObjectType(type) {
|
|
183
189
|
const result = /* @__PURE__ */ Object.create(null);
|
|
184
190
|
for (const [fieldName, field] of Object.entries(type.getFields())) {
|
|
185
191
|
result[fieldName] = encodeInputField(field);
|
|
186
192
|
}
|
|
187
|
-
return
|
|
193
|
+
return createInputObjectTypeDefinition(result);
|
|
188
194
|
}
|
|
189
195
|
function encodeInputField(field) {
|
|
190
196
|
const typeReference = typeReferenceFromName(field.type.toString());
|
|
@@ -209,10 +215,10 @@ function encodeArguments(args, argumentsFilter) {
|
|
|
209
215
|
return [hasArgs, argsRecord];
|
|
210
216
|
}
|
|
211
217
|
function encodeEnumType(type) {
|
|
212
|
-
return
|
|
218
|
+
return createEnumTypeDefinition(type.getValues().map((v) => v.name));
|
|
213
219
|
}
|
|
214
220
|
function encodeScalarType(_type) {
|
|
215
|
-
return
|
|
221
|
+
return createScalarTypeDefinition();
|
|
216
222
|
}
|
|
217
223
|
function assertCompositeType(type, node, ancestors) {
|
|
218
224
|
if (!type || !isCompositeType(type)) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utilities/extractMinimalViableSchemaForRequestDocument.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n ASTNode,\n DirectiveNode,\n DocumentNode,\n FieldNode,\n GraphQLArgument,\n GraphQLCompositeType,\n GraphQLDirective,\n GraphQLEnumType,\n GraphQLError,\n GraphQLField,\n GraphQLInputField,\n GraphQLInputObjectType,\n GraphQLOutputType,\n GraphQLScalarType,\n GraphQLSchema,\n isCompositeType,\n isEnumType,\n isInputObjectType,\n isNonNullType,\n isObjectType,\n isScalarType,\n isSpecifiedScalarType,\n isUnionType,\n Kind,\n TypeInfo,\n visit,\n visitWithTypeInfo,\n} from \"graphql\";\nimport {\n CompositeTypeTuple,\n DirectiveDefinitionTuple,\n DirectiveKeys,\n EnumTypeDefinitionTuple,\n FieldDefinition,\n FieldKeys,\n InputObjectKeys,\n InputObjectTypeDefinitionTuple,\n InputValueDefinition,\n InputValueDefinitionRecord,\n InputValueKeys,\n InterfaceKeys,\n InterfaceTypeDefinitionTuple,\n ObjectKeys,\n ObjectTypeDefinitionTuple,\n ScalarTypeDefinitionTuple,\n SchemaDefinitions,\n TypeDefinitionsRecord,\n TypeKind,\n TypeReference,\n} from \"../schema/definition\";\nimport { isKnownDirective } from \"../schema/directives\";\nimport { makeReadableErrorPath } from \"./makeReadableErrorPath\";\nimport {\n inspectTypeReference,\n typeNameFromReference,\n typeReferenceFromName,\n} from \"../schema/reference\";\nimport { invariant } from \"../jsutils/invariant\";\nimport { Maybe } from \"../jsutils/Maybe\";\n\nexport type ExtractMinimalViableSchemaResult = {\n definitions: SchemaDefinitions;\n unknownDirectives: DirectiveNode[];\n};\n\nexport function extractMinimalViableSchemaForRequestDocument(\n schema: GraphQLSchema,\n requestDocument: DocumentNode,\n): ExtractMinimalViableSchemaResult {\n const types: TypeDefinitionsRecord = Object.create(null);\n const directives: DirectiveDefinitionTuple[] = [];\n const unknownDirectives: DirectiveNode[] = [];\n\n const typeInfo = new TypeInfo(schema);\n visit(\n requestDocument,\n visitWithTypeInfo(typeInfo, {\n Field(node, _key, _parent, _path, ancestors): void {\n const parentType = typeInfo.getParentType();\n assertCompositeType(parentType, node, ancestors);\n\n const typeDef = addCompositeType(types, parentType);\n if (typeDef[0] === TypeKind.UNION || node.name.value === \"__typename\") {\n return;\n }\n const field = typeInfo.getFieldDef();\n assertExistingField(field, node, ancestors);\n assertAllArgumentsAreDefined(field, node, ancestors);\n\n const fieldDef = addField(typeDef, field, node);\n if (Array.isArray(fieldDef)) {\n addReferencedOutputType(schema, types, fieldDef[FieldKeys.type]);\n addReferencedInputTypes(schema, types, fieldDef[FieldKeys.arguments]);\n } else {\n addReferencedOutputType(schema, types, fieldDef);\n }\n },\n Directive(node, _key, _parent, _path) {\n if (isKnownDirective(node.name.value)) {\n return;\n }\n const directive = typeInfo.getDirective();\n if (!directive) {\n // This happens whenever a directive is requested that hasn't been defined in schema\n unknownDirectives.push(node);\n return;\n }\n addDirective(directives, directive, node);\n },\n FragmentDefinition(node, _key, _parent, _path, ancestors): void {\n const type = typeInfo.getType();\n assertCompositeType(type, node, ancestors);\n addCompositeType(types, type);\n },\n InlineFragment(node, _key, _parent, _path, ancestors): void {\n if (node?.typeCondition) {\n const type = typeInfo.getType();\n assertCompositeType(type, node, ancestors);\n addCompositeType(types, type);\n }\n },\n Argument() {\n // Perf: no need to visit arguments - they were handled by Field/Directive visitors\n return false;\n },\n }),\n );\n const definitions = directives.length ? { types, directives } : { types };\n return { definitions, unknownDirectives };\n}\n\nfunction addReferencedOutputType(\n schema: GraphQLSchema,\n types: TypeDefinitionsRecord,\n typeRef: TypeReference,\n) {\n const name = typeNameFromReference(typeRef);\n const schemaType = schema.getType(name);\n\n if (!schemaType) {\n throw new Error(`Type ${name} not found in schema`);\n }\n if (types[name] || isSpecifiedScalarType(schemaType)) {\n // Assuming already added\n return;\n }\n if (isCompositeType(schemaType)) {\n addCompositeType(types, schemaType);\n } else if (isEnumType(schemaType)) {\n types[name] = encodeEnumType(schemaType);\n } else if (isScalarType(schemaType)) {\n types[name] = encodeScalarType(schemaType);\n } else {\n invariant(false, \"Got non-output type: \" + inspectTypeReference(typeRef));\n }\n}\n\nfunction addReferencedInputTypes(\n schema: GraphQLSchema,\n types: TypeDefinitionsRecord,\n inputValues: InputValueDefinitionRecord,\n): void {\n for (const inputValueDef of Object.values(inputValues)) {\n const typeRef = Array.isArray(inputValueDef)\n ? inputValueDef[InputValueKeys.type]\n : inputValueDef;\n\n const name = typeNameFromReference(typeRef);\n const schemaType = schema.getType(name);\n\n if (!schemaType) {\n throw new Error(`Type ${name} not found in schema`);\n }\n if (types[name] || isSpecifiedScalarType(schemaType)) {\n // Assuming already fully added\n continue;\n }\n if (isInputObjectType(schemaType)) {\n const inputObjectDef = encodeInputObjectType(schemaType);\n types[name] = inputObjectDef;\n addReferencedInputTypes(\n schema,\n types,\n inputObjectDef[InputObjectKeys.fields],\n );\n } else if (isEnumType(schemaType)) {\n types[name] = encodeEnumType(schemaType);\n } else if (isScalarType(schemaType)) {\n types[name] = encodeScalarType(schemaType);\n } else {\n invariant(false, \"Got non-input type: \" + inspectTypeReference(typeRef));\n }\n }\n}\n\nfunction addCompositeType(\n types: TypeDefinitionsRecord,\n type: GraphQLCompositeType,\n): CompositeTypeTuple {\n if (types[type.name]) {\n // TODO: double check that the kind match?\n return types[type.name] as CompositeTypeTuple;\n }\n return (types[type.name] = encodeCompositeType(type));\n}\n\nfunction addField(\n type: ObjectTypeDefinitionTuple | InterfaceTypeDefinitionTuple,\n field: GraphQLField<unknown, unknown>,\n fieldNode: FieldNode,\n): FieldDefinition {\n const fields =\n type[0] === TypeKind.OBJECT\n ? type[ObjectKeys.fields]\n : type[InterfaceKeys.fields];\n\n const existingFieldDef: FieldDefinition = fields[field.name];\n const previouslyAddedArgs = Array.isArray(existingFieldDef)\n ? existingFieldDef[FieldKeys.arguments]\n : Object.create(null);\n\n const nodeArgs = new Set(fieldNode.arguments?.map((arg) => arg.name.value));\n\n const argsFilter = (argDef: GraphQLArgument) =>\n Boolean(\n previouslyAddedArgs[argDef.name] ||\n isNonNullType(argDef.type) ||\n argDef.defaultValue !== undefined ||\n nodeArgs.has(argDef.name),\n );\n\n return (fields[field.name] = encodeFieldDef(field, argsFilter));\n}\n\nfunction addDirective(\n directives: DirectiveDefinitionTuple[],\n directive: GraphQLDirective,\n node: DirectiveNode,\n) {\n const name = directive.name;\n let tuple = directives.find((d) => d[DirectiveKeys.name] === name);\n if (!tuple) {\n tuple = [directive.name];\n directives.push(tuple);\n }\n\n const previouslyAddedArgs = tuple[DirectiveKeys.arguments];\n const nodeArgs = new Set(node.arguments?.map((arg) => arg.name.value));\n\n const argsFilter = (argDef: GraphQLArgument) =>\n Boolean(\n previouslyAddedArgs?.[argDef.name] ||\n isNonNullType(argDef.type) ||\n argDef.defaultValue !== undefined ||\n nodeArgs.has(argDef.name),\n );\n const [hasArgs, argsRecord] = encodeArguments(directive.args, argsFilter);\n if (hasArgs) {\n tuple[DirectiveKeys.arguments] = argsRecord;\n }\n return tuple;\n}\n\nfunction encodeCompositeType(type: GraphQLCompositeType): CompositeTypeTuple {\n if (isUnionType(type)) {\n return [TypeKind.UNION, type.getTypes().map((type) => type.name)];\n }\n const ifaces = type.getInterfaces().map((iface) => iface.name);\n const typeKind = isObjectType(type) ? TypeKind.OBJECT : TypeKind.INTERFACE;\n return ifaces.length ? [typeKind, {}, ifaces] : [typeKind, {}];\n}\n\nfunction encodeInputObjectType(\n type: GraphQLInputObjectType,\n): InputObjectTypeDefinitionTuple {\n const result = Object.create(null);\n for (const [fieldName, field] of Object.entries(type.getFields())) {\n result[fieldName] = encodeInputField(field);\n }\n return [TypeKind.INPUT, result];\n}\n\nfunction encodeInputField(field: GraphQLInputField): InputValueDefinition {\n const typeReference = typeReferenceFromName(field.type.toString());\n return field.defaultValue === undefined\n ? typeReference\n : [typeReference, field.defaultValue];\n}\n\nfunction encodeFieldDef(\n field: GraphQLField<unknown, unknown>,\n argumentsFilter?: (arg: GraphQLArgument) => boolean,\n): FieldDefinition {\n const typeReference = typeReferenceFromName(field.type.toString());\n const [hasArgs, argsRecord] = encodeArguments(field.args, argumentsFilter);\n return !hasArgs ? typeReference : [typeReference, argsRecord];\n}\n\nfunction encodeArguments(\n args: ReadonlyArray<GraphQLArgument>,\n argumentsFilter?: (arg: GraphQLArgument) => boolean,\n): [boolean, InputValueDefinitionRecord] {\n let hasArgs = false;\n const argsRecord: InputValueDefinitionRecord = {};\n for (const argDef of args) {\n if (argumentsFilter && !argumentsFilter(argDef)) {\n continue;\n }\n const typeReference = typeReferenceFromName(argDef.type.toString());\n argsRecord[argDef.name] =\n argDef.defaultValue === undefined\n ? typeReference\n : [typeReference, argDef.defaultValue];\n hasArgs = true;\n }\n return [hasArgs, argsRecord];\n}\n\nfunction encodeEnumType(type: GraphQLEnumType): EnumTypeDefinitionTuple {\n return [TypeKind.ENUM, type.getValues().map((v) => v.name)];\n}\n\nfunction encodeScalarType(_type: GraphQLScalarType): ScalarTypeDefinitionTuple {\n return [TypeKind.SCALAR];\n}\n\nfunction assertCompositeType(\n type: Maybe<GraphQLOutputType>,\n node: ASTNode,\n ancestors: ReadonlyArray<readonly ASTNode[] | ASTNode>,\n): asserts type is GraphQLCompositeType {\n if (!type || !isCompositeType(type)) {\n const path =\n node.kind === Kind.FIELD\n ? makeReadableErrorPath(ancestors).join(\".\") + \".\" + node.name.value\n : makeReadableErrorPath(ancestors).join(\".\");\n throw new GraphQLError(`Cannot find type for: ${path}`, {\n nodes: node,\n });\n }\n}\n\nfunction assertExistingField(\n field: Maybe<GraphQLField<unknown, unknown>>,\n node: FieldNode,\n ancestors: ReadonlyArray<readonly ASTNode[] | ASTNode>,\n): asserts field is GraphQLField<unknown, unknown> {\n if (!field) {\n const path =\n makeReadableErrorPath(ancestors).join(\".\") + \".\" + node.name.value;\n throw new GraphQLError(`Cannot find field: ${path}`, { nodes: node });\n }\n}\n\nfunction assertAllArgumentsAreDefined(\n field: GraphQLField<unknown, unknown> | GraphQLDirective,\n node: FieldNode | DirectiveNode,\n ancestors: ReadonlyArray<readonly ASTNode[] | ASTNode>,\n) {\n const defArgs = new Set(field.args.map((arg) => arg.name));\n for (const arg of node.arguments ?? []) {\n if (!defArgs.has(arg.name.value)) {\n const path =\n makeReadableErrorPath(ancestors).join(\".\") +\n \".\" +\n node.name.value +\n `(${arg.name.value}: ...)`;\n throw new GraphQLError(`Cannot find type for argument: ${path}`, {\n nodes: arg,\n });\n }\n }\n}\n"],
|
|
5
|
-
"mappings": ";AAAA;AAAA,EASE;AAAA,EAOA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,
|
|
4
|
+
"sourcesContent": ["import {\n ASTNode,\n DirectiveNode,\n DocumentNode,\n FieldNode,\n GraphQLArgument,\n GraphQLCompositeType,\n GraphQLDirective,\n GraphQLEnumType,\n GraphQLError,\n GraphQLField,\n GraphQLInputField,\n GraphQLInputObjectType,\n GraphQLOutputType,\n GraphQLScalarType,\n GraphQLSchema,\n isCompositeType,\n isEnumType,\n isInputObjectType,\n isNonNullType,\n isObjectType,\n isScalarType,\n isSpecifiedScalarType,\n isUnionType,\n Kind,\n TypeInfo,\n visit,\n visitWithTypeInfo,\n} from \"graphql\";\nimport {\n CompositeTypeTuple,\n createEnumTypeDefinition,\n createInputObjectTypeDefinition,\n createInterfaceTypeDefinition,\n createObjectTypeDefinition,\n createScalarTypeDefinition,\n createUnionTypeDefinition,\n DirectiveDefinitionTuple,\n EnumTypeDefinitionTuple,\n FieldDefinition,\n getDirectiveDefinitionArgs,\n getDirectiveName,\n getFieldArgs,\n getFields,\n getFieldTypeReference,\n getInputObjectFields,\n getInputValueTypeReference,\n InputObjectTypeDefinitionTuple,\n InputValueDefinition,\n InputValueDefinitionRecord,\n InterfaceTypeDefinitionTuple,\n isUnionTypeDefinition,\n ObjectTypeDefinitionTuple,\n ScalarTypeDefinitionTuple,\n SchemaDefinitions,\n setDirectiveDefinitionArgs,\n TypeDefinitionsRecord,\n} from \"../schema/definition\";\nimport { isKnownDirective } from \"../schema/directives\";\nimport { makeReadableErrorPath } from \"./makeReadableErrorPath\";\nimport {\n inspectTypeReference,\n typeNameFromReference,\n TypeReference,\n typeReferenceFromName,\n} from \"../schema/reference\";\nimport { invariant } from \"../jsutils/invariant\";\nimport { Maybe } from \"../jsutils/Maybe\";\n\nexport type ExtractMinimalViableSchemaResult = {\n definitions: SchemaDefinitions;\n unknownDirectives: DirectiveNode[];\n};\n\nexport function extractMinimalViableSchemaForRequestDocument(\n schema: GraphQLSchema,\n requestDocument: DocumentNode,\n): ExtractMinimalViableSchemaResult {\n const types: TypeDefinitionsRecord = Object.create(null);\n const directives: DirectiveDefinitionTuple[] = [];\n const unknownDirectives: DirectiveNode[] = [];\n\n const typeInfo = new TypeInfo(schema);\n visit(\n requestDocument,\n visitWithTypeInfo(typeInfo, {\n Field(node, _key, _parent, _path, ancestors): void {\n const parentType = typeInfo.getParentType();\n assertCompositeType(parentType, node, ancestors);\n\n const typeDef = addCompositeType(types, parentType);\n if (\n isUnionTypeDefinition(typeDef) ||\n node.name.value === \"__typename\"\n ) {\n return;\n }\n const field = typeInfo.getFieldDef();\n assertExistingField(field, node, ancestors);\n assertAllArgumentsAreDefined(field, node, ancestors);\n\n const fieldDef = addField(typeDef, field, node);\n addReferencedOutputType(schema, types, getFieldTypeReference(fieldDef));\n addReferencedInputTypes(schema, types, getFieldArgs(fieldDef));\n },\n Directive(node, _key, _parent, _path) {\n if (isKnownDirective(node.name.value)) {\n return;\n }\n const directive = typeInfo.getDirective();\n if (!directive) {\n // This happens whenever a directive is requested that hasn't been defined in schema\n unknownDirectives.push(node);\n return;\n }\n addDirective(directives, directive, node);\n },\n FragmentDefinition(node, _key, _parent, _path, ancestors): void {\n const type = typeInfo.getType();\n assertCompositeType(type, node, ancestors);\n addCompositeType(types, type);\n },\n InlineFragment(node, _key, _parent, _path, ancestors): void {\n if (node?.typeCondition) {\n const type = typeInfo.getType();\n assertCompositeType(type, node, ancestors);\n addCompositeType(types, type);\n }\n },\n Argument() {\n // Perf: no need to visit arguments - they were handled by Field/Directive visitors\n return false;\n },\n }),\n );\n const definitions = directives.length ? { types, directives } : { types };\n return { definitions, unknownDirectives };\n}\n\nfunction addReferencedOutputType(\n schema: GraphQLSchema,\n types: TypeDefinitionsRecord,\n typeRef: TypeReference,\n) {\n const name = typeNameFromReference(typeRef);\n const schemaType = schema.getType(name);\n\n if (!schemaType) {\n throw new Error(`Type ${name} not found in schema`);\n }\n if (types[name] || isSpecifiedScalarType(schemaType)) {\n // Assuming already added\n return;\n }\n if (isCompositeType(schemaType)) {\n addCompositeType(types, schemaType);\n } else if (isEnumType(schemaType)) {\n types[name] = encodeEnumType(schemaType);\n } else if (isScalarType(schemaType)) {\n types[name] = encodeScalarType(schemaType);\n } else {\n invariant(false, \"Got non-output type: \" + inspectTypeReference(typeRef));\n }\n}\n\nfunction addReferencedInputTypes(\n schema: GraphQLSchema,\n types: TypeDefinitionsRecord,\n inputValues: InputValueDefinitionRecord | undefined,\n): void {\n if (!inputValues) {\n return;\n }\n for (const inputValueDef of Object.values(inputValues)) {\n const typeRef = getInputValueTypeReference(inputValueDef);\n const name = typeNameFromReference(typeRef);\n const schemaType = schema.getType(name);\n\n if (!schemaType) {\n throw new Error(`Type ${name} not found in schema`);\n }\n if (types[name] || isSpecifiedScalarType(schemaType)) {\n // Assuming already fully added\n continue;\n }\n if (isInputObjectType(schemaType)) {\n const inputObjectDef = encodeInputObjectType(schemaType);\n types[name] = inputObjectDef;\n addReferencedInputTypes(\n schema,\n types,\n getInputObjectFields(inputObjectDef),\n );\n } else if (isEnumType(schemaType)) {\n types[name] = encodeEnumType(schemaType);\n } else if (isScalarType(schemaType)) {\n types[name] = encodeScalarType(schemaType);\n } else {\n invariant(false, \"Got non-input type: \" + inspectTypeReference(typeRef));\n }\n }\n}\n\nfunction addCompositeType(\n types: TypeDefinitionsRecord,\n type: GraphQLCompositeType,\n): CompositeTypeTuple {\n if (types[type.name]) {\n // TODO: double check that the kind match?\n return types[type.name] as CompositeTypeTuple;\n }\n return (types[type.name] = encodeCompositeType(type));\n}\n\nfunction addField(\n type: ObjectTypeDefinitionTuple | InterfaceTypeDefinitionTuple,\n field: GraphQLField<unknown, unknown>,\n fieldNode: FieldNode,\n): FieldDefinition {\n const fields = getFields(type);\n\n const existingFieldDef: FieldDefinition = fields[field.name];\n const previouslyAddedArgs =\n getFieldArgs(existingFieldDef) ?? Object.create(null);\n\n const nodeArgs = new Set(fieldNode.arguments?.map((arg) => arg.name.value));\n\n const argsFilter = (argDef: GraphQLArgument) =>\n Boolean(\n previouslyAddedArgs[argDef.name] ||\n isNonNullType(argDef.type) ||\n argDef.defaultValue !== undefined ||\n nodeArgs.has(argDef.name),\n );\n\n return (fields[field.name] = encodeFieldDef(field, argsFilter));\n}\n\nfunction addDirective(\n directives: DirectiveDefinitionTuple[],\n directive: GraphQLDirective,\n node: DirectiveNode,\n) {\n const name = directive.name;\n let tuple = directives.find((d) => getDirectiveName(d) === name);\n if (!tuple) {\n tuple = [directive.name];\n directives.push(tuple);\n }\n\n const previouslyAddedArgs = getDirectiveDefinitionArgs(tuple);\n const nodeArgs = new Set(node.arguments?.map((arg) => arg.name.value));\n\n const argsFilter = (argDef: GraphQLArgument) =>\n Boolean(\n previouslyAddedArgs?.[argDef.name] ||\n isNonNullType(argDef.type) ||\n argDef.defaultValue !== undefined ||\n nodeArgs.has(argDef.name),\n );\n const [hasArgs, argsRecord] = encodeArguments(directive.args, argsFilter);\n if (hasArgs) {\n setDirectiveDefinitionArgs(tuple, argsRecord);\n }\n return tuple;\n}\n\nfunction encodeCompositeType(type: GraphQLCompositeType): CompositeTypeTuple {\n if (isUnionType(type)) {\n return createUnionTypeDefinition(type.getTypes().map((type) => type.name));\n }\n const ifaces = type.getInterfaces().map((iface) => iface.name);\n return isObjectType(type)\n ? createObjectTypeDefinition({}, ifaces)\n : createInterfaceTypeDefinition({}, ifaces);\n}\n\nfunction encodeInputObjectType(\n type: GraphQLInputObjectType,\n): InputObjectTypeDefinitionTuple {\n const result = Object.create(null);\n for (const [fieldName, field] of Object.entries(type.getFields())) {\n result[fieldName] = encodeInputField(field);\n }\n return createInputObjectTypeDefinition(result);\n}\n\nfunction encodeInputField(field: GraphQLInputField): InputValueDefinition {\n const typeReference = typeReferenceFromName(field.type.toString());\n return field.defaultValue === undefined\n ? typeReference\n : [typeReference, field.defaultValue];\n}\n\nfunction encodeFieldDef(\n field: GraphQLField<unknown, unknown>,\n argumentsFilter?: (arg: GraphQLArgument) => boolean,\n): FieldDefinition {\n const typeReference = typeReferenceFromName(field.type.toString());\n const [hasArgs, argsRecord] = encodeArguments(field.args, argumentsFilter);\n return !hasArgs ? typeReference : [typeReference, argsRecord];\n}\n\nfunction encodeArguments(\n args: ReadonlyArray<GraphQLArgument>,\n argumentsFilter?: (arg: GraphQLArgument) => boolean,\n): [boolean, InputValueDefinitionRecord] {\n let hasArgs = false;\n const argsRecord: InputValueDefinitionRecord = {};\n for (const argDef of args) {\n if (argumentsFilter && !argumentsFilter(argDef)) {\n continue;\n }\n const typeReference = typeReferenceFromName(argDef.type.toString());\n argsRecord[argDef.name] =\n argDef.defaultValue === undefined\n ? typeReference\n : [typeReference, argDef.defaultValue];\n hasArgs = true;\n }\n return [hasArgs, argsRecord];\n}\n\nfunction encodeEnumType(type: GraphQLEnumType): EnumTypeDefinitionTuple {\n return createEnumTypeDefinition(type.getValues().map((v) => v.name));\n}\n\nfunction encodeScalarType(_type: GraphQLScalarType): ScalarTypeDefinitionTuple {\n return createScalarTypeDefinition();\n}\n\nfunction assertCompositeType(\n type: Maybe<GraphQLOutputType>,\n node: ASTNode,\n ancestors: ReadonlyArray<readonly ASTNode[] | ASTNode>,\n): asserts type is GraphQLCompositeType {\n if (!type || !isCompositeType(type)) {\n const path =\n node.kind === Kind.FIELD\n ? makeReadableErrorPath(ancestors).join(\".\") + \".\" + node.name.value\n : makeReadableErrorPath(ancestors).join(\".\");\n throw new GraphQLError(`Cannot find type for: ${path}`, {\n nodes: node,\n });\n }\n}\n\nfunction assertExistingField(\n field: Maybe<GraphQLField<unknown, unknown>>,\n node: FieldNode,\n ancestors: ReadonlyArray<readonly ASTNode[] | ASTNode>,\n): asserts field is GraphQLField<unknown, unknown> {\n if (!field) {\n const path =\n makeReadableErrorPath(ancestors).join(\".\") + \".\" + node.name.value;\n throw new GraphQLError(`Cannot find field: ${path}`, { nodes: node });\n }\n}\n\nfunction assertAllArgumentsAreDefined(\n field: GraphQLField<unknown, unknown> | GraphQLDirective,\n node: FieldNode | DirectiveNode,\n ancestors: ReadonlyArray<readonly ASTNode[] | ASTNode>,\n) {\n const defArgs = new Set(field.args.map((arg) => arg.name));\n for (const arg of node.arguments ?? []) {\n if (!defArgs.has(arg.name.value)) {\n const path =\n makeReadableErrorPath(ancestors).join(\".\") +\n \".\" +\n node.name.value +\n `(${arg.name.value}: ...)`;\n throw new GraphQLError(`Cannot find type for argument: ${path}`, {\n nodes: arg,\n });\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["type"]
|
|
7
7
|
}
|
|
@@ -37,11 +37,10 @@ function mergeResolversObjMap(accumulator, resolvers) {
|
|
|
37
37
|
const fullTypeResolver = accumulator[typeName];
|
|
38
38
|
if (typeof fullTypeResolver === "undefined" && typeResolver) {
|
|
39
39
|
accumulator[typeName] = typeResolver;
|
|
40
|
-
|
|
40
|
+
continue;
|
|
41
41
|
}
|
|
42
42
|
if ((0, import_isObjectLike.isObjectLike)(fullTypeResolver) && (0, import_isObjectLike.isObjectLike)(typeResolver)) {
|
|
43
43
|
Object.assign(accumulator[typeName], typeResolver);
|
|
44
|
-
return;
|
|
45
44
|
}
|
|
46
45
|
}
|
|
47
46
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utilities/mergeResolvers.ts"],
|
|
4
|
-
"sourcesContent": ["import { Resolvers } from \"../types\";\nimport { isObjectLike } from \"../jsutils/isObjectLike\";\n\nexport function mergeResolvers(\n accumulator: Resolvers,\n resolvers: (Resolvers | Resolvers[])[],\n): Resolvers {\n for (const entry of resolvers) {\n if (Array.isArray(entry)) {\n mergeResolvers(accumulator, entry);\n } else {\n mergeResolversObjMap(accumulator, entry);\n }\n }\n return accumulator;\n}\n\nfunction mergeResolversObjMap(accumulator: Resolvers, resolvers: Resolvers) {\n for (const [typeName, typeResolver] of Object.entries(resolvers)) {\n const fullTypeResolver = accumulator[typeName];\n if (typeof fullTypeResolver === \"undefined\" && typeResolver) {\n accumulator[typeName] = typeResolver;\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,0BAA6B;AAEtB,SAAS,eACd,aACA,WACW;AACX,aAAW,SAAS,WAAW;AAC7B,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,qBAAe,aAAa,KAAK;AAAA,IACnC,OAAO;AACL,2BAAqB,aAAa,KAAK;AAAA,IACzC;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,aAAwB,WAAsB;AAC1E,aAAW,CAAC,UAAU,YAAY,KAAK,OAAO,QAAQ,SAAS,GAAG;AAChE,UAAM,mBAAmB,YAAY,QAAQ;AAC7C,QAAI,OAAO,qBAAqB,eAAe,cAAc;AAC3D,kBAAY,QAAQ,IAAI;AACxB;AAAA,IACF;AACA,YAAI,kCAAa,gBAAgB,SAAK,kCAAa,YAAY,GAAG;AAChE,aAAO,OAAO,YAAY,QAAQ,GAAG,YAAY;
|
|
4
|
+
"sourcesContent": ["import { Resolvers } from \"../types\";\nimport { isObjectLike } from \"../jsutils/isObjectLike\";\n\nexport function mergeResolvers(\n accumulator: Resolvers,\n resolvers: (Resolvers | Resolvers[])[],\n): Resolvers {\n for (const entry of resolvers) {\n if (Array.isArray(entry)) {\n mergeResolvers(accumulator, entry);\n } else {\n mergeResolversObjMap(accumulator, entry);\n }\n }\n return accumulator;\n}\n\nfunction mergeResolversObjMap(accumulator: Resolvers, resolvers: Resolvers) {\n for (const [typeName, typeResolver] of Object.entries(resolvers)) {\n const fullTypeResolver = accumulator[typeName];\n if (typeof fullTypeResolver === \"undefined\" && typeResolver) {\n accumulator[typeName] = typeResolver;\n continue;\n }\n if (isObjectLike(fullTypeResolver) && isObjectLike(typeResolver)) {\n Object.assign(accumulator[typeName], typeResolver);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,0BAA6B;AAEtB,SAAS,eACd,aACA,WACW;AACX,aAAW,SAAS,WAAW;AAC7B,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,qBAAe,aAAa,KAAK;AAAA,IACnC,OAAO;AACL,2BAAqB,aAAa,KAAK;AAAA,IACzC;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,aAAwB,WAAsB;AAC1E,aAAW,CAAC,UAAU,YAAY,KAAK,OAAO,QAAQ,SAAS,GAAG;AAChE,UAAM,mBAAmB,YAAY,QAAQ;AAC7C,QAAI,OAAO,qBAAqB,eAAe,cAAc;AAC3D,kBAAY,QAAQ,IAAI;AACxB;AAAA,IACF;AACA,YAAI,kCAAa,gBAAgB,SAAK,kCAAa,YAAY,GAAG;AAChE,aAAO,OAAO,YAAY,QAAQ,GAAG,YAAY;AAAA,IACnD;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -15,11 +15,10 @@ function mergeResolversObjMap(accumulator, resolvers) {
|
|
|
15
15
|
const fullTypeResolver = accumulator[typeName];
|
|
16
16
|
if (typeof fullTypeResolver === "undefined" && typeResolver) {
|
|
17
17
|
accumulator[typeName] = typeResolver;
|
|
18
|
-
|
|
18
|
+
continue;
|
|
19
19
|
}
|
|
20
20
|
if (isObjectLike(fullTypeResolver) && isObjectLike(typeResolver)) {
|
|
21
21
|
Object.assign(accumulator[typeName], typeResolver);
|
|
22
|
-
return;
|
|
23
22
|
}
|
|
24
23
|
}
|
|
25
24
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utilities/mergeResolvers.ts"],
|
|
4
|
-
"sourcesContent": ["import { Resolvers } from \"../types\";\nimport { isObjectLike } from \"../jsutils/isObjectLike\";\n\nexport function mergeResolvers(\n accumulator: Resolvers,\n resolvers: (Resolvers | Resolvers[])[],\n): Resolvers {\n for (const entry of resolvers) {\n if (Array.isArray(entry)) {\n mergeResolvers(accumulator, entry);\n } else {\n mergeResolversObjMap(accumulator, entry);\n }\n }\n return accumulator;\n}\n\nfunction mergeResolversObjMap(accumulator: Resolvers, resolvers: Resolvers) {\n for (const [typeName, typeResolver] of Object.entries(resolvers)) {\n const fullTypeResolver = accumulator[typeName];\n if (typeof fullTypeResolver === \"undefined\" && typeResolver) {\n accumulator[typeName] = typeResolver;\n
|
|
5
|
-
"mappings": ";AACA,SAAS,oBAAoB;AAEtB,SAAS,eACd,aACA,WACW;AACX,aAAW,SAAS,WAAW;AAC7B,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,qBAAe,aAAa,KAAK;AAAA,IACnC,OAAO;AACL,2BAAqB,aAAa,KAAK;AAAA,IACzC;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,aAAwB,WAAsB;AAC1E,aAAW,CAAC,UAAU,YAAY,KAAK,OAAO,QAAQ,SAAS,GAAG;AAChE,UAAM,mBAAmB,YAAY,QAAQ;AAC7C,QAAI,OAAO,qBAAqB,eAAe,cAAc;AAC3D,kBAAY,QAAQ,IAAI;AACxB;AAAA,IACF;AACA,QAAI,aAAa,gBAAgB,KAAK,aAAa,YAAY,GAAG;AAChE,aAAO,OAAO,YAAY,QAAQ,GAAG,YAAY;
|
|
4
|
+
"sourcesContent": ["import { Resolvers } from \"../types\";\nimport { isObjectLike } from \"../jsutils/isObjectLike\";\n\nexport function mergeResolvers(\n accumulator: Resolvers,\n resolvers: (Resolvers | Resolvers[])[],\n): Resolvers {\n for (const entry of resolvers) {\n if (Array.isArray(entry)) {\n mergeResolvers(accumulator, entry);\n } else {\n mergeResolversObjMap(accumulator, entry);\n }\n }\n return accumulator;\n}\n\nfunction mergeResolversObjMap(accumulator: Resolvers, resolvers: Resolvers) {\n for (const [typeName, typeResolver] of Object.entries(resolvers)) {\n const fullTypeResolver = accumulator[typeName];\n if (typeof fullTypeResolver === \"undefined\" && typeResolver) {\n accumulator[typeName] = typeResolver;\n continue;\n }\n if (isObjectLike(fullTypeResolver) && isObjectLike(typeResolver)) {\n Object.assign(accumulator[typeName], typeResolver);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";AACA,SAAS,oBAAoB;AAEtB,SAAS,eACd,aACA,WACW;AACX,aAAW,SAAS,WAAW;AAC7B,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,qBAAe,aAAa,KAAK;AAAA,IACnC,OAAO;AACL,2BAAqB,aAAa,KAAK;AAAA,IACzC;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,aAAwB,WAAsB;AAC1E,aAAW,CAAC,UAAU,YAAY,KAAK,OAAO,QAAQ,SAAS,GAAG;AAChE,UAAM,mBAAmB,YAAY,QAAQ;AAC7C,QAAI,OAAO,qBAAqB,eAAe,cAAc;AAC3D,kBAAY,QAAQ,IAAI;AACxB;AAAA,IACF;AACA,QAAI,aAAa,gBAAgB,KAAK,aAAa,YAAY,GAAG;AAChE,aAAO,OAAO,YAAY,QAAQ,GAAG,YAAY;AAAA,IACnD;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeSchemaDefinitions.d.ts","sourceRoot":"","sources":["../../src/utilities/mergeSchemaDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,
|
|
1
|
+
{"version":3,"file":"mergeSchemaDefinitions.d.ts","sourceRoot":"","sources":["../../src/utilities/mergeSchemaDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAWxB,iBAAiB,EAGjB,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAG9B,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,iBAAiB,EAC9B,WAAW,EAAE,iBAAiB,EAAE,GAC/B,iBAAiB,CAiBnB;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,wBAAwB,EAAE,EAClC,MAAM,EAAE,wBAAwB,EAAE,QAsBnC;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,qBAAqB,EAC7B,MAAM,EAAE,qBAAqB,GAC5B,IAAI,CAqCN"}
|
|
@@ -47,22 +47,22 @@ function mergeSchemaDefinitions(accumulator, definitions) {
|
|
|
47
47
|
function mergeDirectives(target, source) {
|
|
48
48
|
for (const sourceDirective of source) {
|
|
49
49
|
const targetDirective = target.find(
|
|
50
|
-
(directive) =>
|
|
50
|
+
(directive) => (0, import_definition.getDirectiveName)(directive) === (0, import_definition.getDirectiveName)(sourceDirective)
|
|
51
51
|
);
|
|
52
52
|
if (!targetDirective) {
|
|
53
53
|
target.push(sourceDirective);
|
|
54
54
|
continue;
|
|
55
55
|
}
|
|
56
|
-
|
|
56
|
+
const sourceArgs = (0, import_definition.getDirectiveDefinitionArgs)(sourceDirective);
|
|
57
|
+
if (!sourceArgs) {
|
|
57
58
|
continue;
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
const targetArgs = (0, import_definition.getDirectiveDefinitionArgs)(targetDirective);
|
|
61
|
+
if (!targetArgs) {
|
|
62
|
+
(0, import_definition.setDirectiveDefinitionArgs)(targetDirective, sourceArgs);
|
|
63
|
+
continue;
|
|
61
64
|
}
|
|
62
|
-
mergeInputValues(
|
|
63
|
-
targetDirective[import_definition.DirectiveKeys.arguments],
|
|
64
|
-
sourceDirective[import_definition.DirectiveKeys.arguments]
|
|
65
|
-
);
|
|
65
|
+
mergeInputValues(targetArgs, sourceArgs);
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
function mergeTypes(target, source) {
|
|
@@ -72,21 +72,14 @@ function mergeTypes(target, source) {
|
|
|
72
72
|
target[typeName] = sourceDef;
|
|
73
73
|
continue;
|
|
74
74
|
}
|
|
75
|
-
if (targetDef
|
|
76
|
-
mergeFields(
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
if (targetDef[0] === import_definition.TypeKind.INTERFACE && sourceDef[0] === import_definition.TypeKind.INTERFACE) {
|
|
80
|
-
mergeFields(
|
|
81
|
-
targetDef[import_definition.InterfaceKeys.fields],
|
|
82
|
-
sourceDef[import_definition.InterfaceKeys.fields]
|
|
83
|
-
);
|
|
75
|
+
if ((0, import_definition.isObjectTypeDefinition)(targetDef) && (0, import_definition.isObjectTypeDefinition)(sourceDef) || (0, import_definition.isInterfaceTypeDefinition)(targetDef) && (0, import_definition.isInterfaceTypeDefinition)(sourceDef)) {
|
|
76
|
+
mergeFields((0, import_definition.getFields)(targetDef), (0, import_definition.getFields)(sourceDef));
|
|
84
77
|
continue;
|
|
85
78
|
}
|
|
86
|
-
if (
|
|
79
|
+
if ((0, import_definition.isInputObjectTypeDefinition)(targetDef) && (0, import_definition.isInputObjectTypeDefinition)(sourceDef)) {
|
|
87
80
|
mergeInputValues(
|
|
88
|
-
|
|
89
|
-
|
|
81
|
+
(0, import_definition.getInputObjectFields)(targetDef),
|
|
82
|
+
(0, import_definition.getInputObjectFields)(sourceDef)
|
|
90
83
|
);
|
|
91
84
|
continue;
|
|
92
85
|
}
|
|
@@ -100,20 +93,17 @@ function mergeTypes(target, source) {
|
|
|
100
93
|
}
|
|
101
94
|
}
|
|
102
95
|
function mergeFields(target, source) {
|
|
96
|
+
var _a;
|
|
103
97
|
for (const [fieldName, sourceDef] of Object.entries(source)) {
|
|
104
98
|
const targetDef = target[fieldName];
|
|
105
99
|
if (!target[fieldName] || !Array.isArray(targetDef)) {
|
|
106
100
|
target[fieldName] = sourceDef;
|
|
107
101
|
continue;
|
|
108
102
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
mergeInputValues(
|
|
114
|
-
targetDef[import_definition.FieldKeys.arguments],
|
|
115
|
-
sourceDef[import_definition.FieldKeys.arguments]
|
|
116
|
-
);
|
|
103
|
+
const sourceArgs = (0, import_definition.getFieldArgs)(sourceDef);
|
|
104
|
+
if (sourceArgs) {
|
|
105
|
+
const targetArgs = (_a = (0, import_definition.getFieldArgs)(targetDef)) != null ? _a : (0, import_definition.setFieldArgs)(targetDef, {});
|
|
106
|
+
mergeInputValues(targetArgs, sourceArgs);
|
|
117
107
|
}
|
|
118
108
|
}
|
|
119
109
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utilities/mergeSchemaDefinitions.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n DirectiveDefinitionTuple,\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import {\n DirectiveDefinitionTuple,\n FieldDefinitionRecord,\n getDirectiveDefinitionArgs,\n getDirectiveName,\n getFieldArgs,\n getFields,\n getInputObjectFields,\n InputValueDefinitionRecord,\n isInputObjectTypeDefinition,\n isInterfaceTypeDefinition,\n isObjectTypeDefinition,\n SchemaDefinitions,\n setDirectiveDefinitionArgs,\n setFieldArgs,\n TypeDefinitionsRecord,\n} from \"../schema/definition\";\nimport { inspect } from \"../jsutils/inspect\";\n\nexport function mergeSchemaDefinitions(\n accumulator: SchemaDefinitions,\n definitions: SchemaDefinitions[],\n): SchemaDefinitions {\n if (!definitions.length) {\n return accumulator;\n }\n for (const source of definitions) {\n if (!accumulator.types) {\n accumulator.types = source.types;\n } else if (source.types) {\n mergeTypes(accumulator.types, source.types);\n }\n if (!accumulator.directives) {\n accumulator.directives = source.directives;\n } else if (source.directives?.length) {\n mergeDirectives(accumulator.directives, source.directives);\n }\n }\n return accumulator;\n}\n\nexport function mergeDirectives(\n target: DirectiveDefinitionTuple[],\n source: DirectiveDefinitionTuple[],\n) {\n for (const sourceDirective of source) {\n const targetDirective = target.find(\n (directive) =>\n getDirectiveName(directive) === getDirectiveName(sourceDirective),\n );\n if (!targetDirective) {\n target.push(sourceDirective);\n continue;\n }\n const sourceArgs = getDirectiveDefinitionArgs(sourceDirective);\n if (!sourceArgs) {\n continue;\n }\n const targetArgs = getDirectiveDefinitionArgs(targetDirective);\n if (!targetArgs) {\n setDirectiveDefinitionArgs(targetDirective, sourceArgs);\n continue;\n }\n mergeInputValues(targetArgs, sourceArgs);\n }\n}\n\n/**\n * Adds missing definitions from source into target. Mutates target in place.\n */\nexport function mergeTypes(\n target: TypeDefinitionsRecord,\n source: TypeDefinitionsRecord,\n): void {\n for (const [typeName, sourceDef] of Object.entries(source)) {\n const targetDef = target[typeName];\n if (!targetDef) {\n target[typeName] = sourceDef;\n continue;\n }\n if (\n (isObjectTypeDefinition(targetDef) &&\n isObjectTypeDefinition(sourceDef)) ||\n (isInterfaceTypeDefinition(targetDef) &&\n isInterfaceTypeDefinition(sourceDef))\n ) {\n mergeFields(getFields(targetDef), getFields(sourceDef));\n // Note: not merging implemented interfaces - assuming they are fully defined by the first occurrence\n continue;\n }\n if (\n isInputObjectTypeDefinition(targetDef) &&\n isInputObjectTypeDefinition(sourceDef)\n ) {\n mergeInputValues(\n getInputObjectFields(targetDef),\n getInputObjectFields(sourceDef),\n );\n continue;\n }\n // Note: not merging scalars, unions and enums - assuming they are fully defined by the first occurrence\n if (targetDef[0] !== sourceDef[0]) {\n throw new Error(\n `Type ${typeName} is represented differently in different schema fragments:\\n` +\n inspect(targetDef) +\n `\\n` +\n inspect(sourceDef),\n );\n }\n }\n}\n\nfunction mergeFields(\n target: FieldDefinitionRecord,\n source: FieldDefinitionRecord,\n) {\n for (const [fieldName, sourceDef] of Object.entries(source)) {\n const targetDef = target[fieldName];\n if (!target[fieldName] || !Array.isArray(targetDef)) {\n target[fieldName] = sourceDef;\n continue;\n }\n const sourceArgs = getFieldArgs(sourceDef);\n if (sourceArgs) {\n const targetArgs = getFieldArgs(targetDef) ?? setFieldArgs(targetDef, {});\n mergeInputValues(targetArgs, sourceArgs);\n }\n }\n}\n\nfunction mergeInputValues(\n target: InputValueDefinitionRecord,\n source: InputValueDefinitionRecord,\n) {\n for (const [fieldName, sourceDef] of Object.entries(source)) {\n const targetDef = target[fieldName];\n if (!target[fieldName] || !Array.isArray(targetDef)) {\n target[fieldName] = sourceDef;\n }\n // Note: not merging defaultValue - assuming it is fully defined by the first occurrence\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAgBO;AACP,qBAAwB;AAEjB,SAAS,uBACd,aACA,aACmB;AAtBrB;AAuBE,MAAI,CAAC,YAAY,QAAQ;AACvB,WAAO;AAAA,EACT;AACA,aAAW,UAAU,aAAa;AAChC,QAAI,CAAC,YAAY,OAAO;AACtB,kBAAY,QAAQ,OAAO;AAAA,IAC7B,WAAW,OAAO,OAAO;AACvB,iBAAW,YAAY,OAAO,OAAO,KAAK;AAAA,IAC5C;AACA,QAAI,CAAC,YAAY,YAAY;AAC3B,kBAAY,aAAa,OAAO;AAAA,IAClC,YAAW,YAAO,eAAP,mBAAmB,QAAQ;AACpC,sBAAgB,YAAY,YAAY,OAAO,UAAU;AAAA,IAC3D;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,gBACd,QACA,QACA;AACA,aAAW,mBAAmB,QAAQ;AACpC,UAAM,kBAAkB,OAAO;AAAA,MAC7B,CAAC,kBACC,oCAAiB,SAAS,UAAM,oCAAiB,eAAe;AAAA,IACpE;AACA,QAAI,CAAC,iBAAiB;AACpB,aAAO,KAAK,eAAe;AAC3B;AAAA,IACF;AACA,UAAM,iBAAa,8CAA2B,eAAe;AAC7D,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AACA,UAAM,iBAAa,8CAA2B,eAAe;AAC7D,QAAI,CAAC,YAAY;AACf,wDAA2B,iBAAiB,UAAU;AACtD;AAAA,IACF;AACA,qBAAiB,YAAY,UAAU;AAAA,EACzC;AACF;AAKO,SAAS,WACd,QACA,QACM;AACN,aAAW,CAAC,UAAU,SAAS,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC1D,UAAM,YAAY,OAAO,QAAQ;AACjC,QAAI,CAAC,WAAW;AACd,aAAO,QAAQ,IAAI;AACnB;AAAA,IACF;AACA,YACG,0CAAuB,SAAS,SAC/B,0CAAuB,SAAS,SACjC,6CAA0B,SAAS,SAClC,6CAA0B,SAAS,GACrC;AACA,sBAAY,6BAAU,SAAS,OAAG,6BAAU,SAAS,CAAC;AAEtD;AAAA,IACF;AACA,YACE,+CAA4B,SAAS,SACrC,+CAA4B,SAAS,GACrC;AACA;AAAA,YACE,wCAAqB,SAAS;AAAA,YAC9B,wCAAqB,SAAS;AAAA,MAChC;AACA;AAAA,IACF;AAEA,QAAI,UAAU,CAAC,MAAM,UAAU,CAAC,GAAG;AACjC,YAAM,IAAI;AAAA,QACR,QAAQ;AAAA,QACN,wBAAQ,SAAS,IACjB;AAAA,QACA,wBAAQ,SAAS;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,YACP,QACA,QACA;AAnHF;AAoHE,aAAW,CAAC,WAAW,SAAS,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC3D,UAAM,YAAY,OAAO,SAAS;AAClC,QAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,QAAQ,SAAS,GAAG;AACnD,aAAO,SAAS,IAAI;AACpB;AAAA,IACF;AACA,UAAM,iBAAa,gCAAa,SAAS;AACzC,QAAI,YAAY;AACd,YAAM,cAAa,yCAAa,SAAS,MAAtB,gBAA2B,gCAAa,WAAW,CAAC,CAAC;AACxE,uBAAiB,YAAY,UAAU;AAAA,IACzC;AAAA,EACF;AACF;AAEA,SAAS,iBACP,QACA,QACA;AACA,aAAW,CAAC,WAAW,SAAS,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC3D,UAAM,YAAY,OAAO,SAAS;AAClC,QAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,QAAQ,SAAS,GAAG;AACnD,aAAO,SAAS,IAAI;AAAA,IACtB;AAAA,EAEF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
// src/utilities/mergeSchemaDefinitions.ts
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
getDirectiveDefinitionArgs,
|
|
4
|
+
getDirectiveName,
|
|
5
|
+
getFieldArgs,
|
|
6
|
+
getFields,
|
|
7
|
+
getInputObjectFields,
|
|
8
|
+
isInputObjectTypeDefinition,
|
|
9
|
+
isInterfaceTypeDefinition,
|
|
10
|
+
isObjectTypeDefinition,
|
|
11
|
+
setDirectiveDefinitionArgs,
|
|
12
|
+
setFieldArgs
|
|
9
13
|
} from "../schema/definition.mjs";
|
|
10
14
|
import { inspect } from "../jsutils/inspect.mjs";
|
|
11
15
|
function mergeSchemaDefinitions(accumulator, definitions) {
|
|
@@ -30,22 +34,22 @@ function mergeSchemaDefinitions(accumulator, definitions) {
|
|
|
30
34
|
function mergeDirectives(target, source) {
|
|
31
35
|
for (const sourceDirective of source) {
|
|
32
36
|
const targetDirective = target.find(
|
|
33
|
-
(directive) => directive
|
|
37
|
+
(directive) => getDirectiveName(directive) === getDirectiveName(sourceDirective)
|
|
34
38
|
);
|
|
35
39
|
if (!targetDirective) {
|
|
36
40
|
target.push(sourceDirective);
|
|
37
41
|
continue;
|
|
38
42
|
}
|
|
39
|
-
|
|
43
|
+
const sourceArgs = getDirectiveDefinitionArgs(sourceDirective);
|
|
44
|
+
if (!sourceArgs) {
|
|
40
45
|
continue;
|
|
41
46
|
}
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
const targetArgs = getDirectiveDefinitionArgs(targetDirective);
|
|
48
|
+
if (!targetArgs) {
|
|
49
|
+
setDirectiveDefinitionArgs(targetDirective, sourceArgs);
|
|
50
|
+
continue;
|
|
44
51
|
}
|
|
45
|
-
mergeInputValues(
|
|
46
|
-
targetDirective[DirectiveKeys.arguments],
|
|
47
|
-
sourceDirective[DirectiveKeys.arguments]
|
|
48
|
-
);
|
|
52
|
+
mergeInputValues(targetArgs, sourceArgs);
|
|
49
53
|
}
|
|
50
54
|
}
|
|
51
55
|
function mergeTypes(target, source) {
|
|
@@ -55,21 +59,14 @@ function mergeTypes(target, source) {
|
|
|
55
59
|
target[typeName] = sourceDef;
|
|
56
60
|
continue;
|
|
57
61
|
}
|
|
58
|
-
if (targetDef
|
|
59
|
-
mergeFields(targetDef
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
if (targetDef[0] === TypeKind.INTERFACE && sourceDef[0] === TypeKind.INTERFACE) {
|
|
63
|
-
mergeFields(
|
|
64
|
-
targetDef[InterfaceKeys.fields],
|
|
65
|
-
sourceDef[InterfaceKeys.fields]
|
|
66
|
-
);
|
|
62
|
+
if (isObjectTypeDefinition(targetDef) && isObjectTypeDefinition(sourceDef) || isInterfaceTypeDefinition(targetDef) && isInterfaceTypeDefinition(sourceDef)) {
|
|
63
|
+
mergeFields(getFields(targetDef), getFields(sourceDef));
|
|
67
64
|
continue;
|
|
68
65
|
}
|
|
69
|
-
if (targetDef
|
|
66
|
+
if (isInputObjectTypeDefinition(targetDef) && isInputObjectTypeDefinition(sourceDef)) {
|
|
70
67
|
mergeInputValues(
|
|
71
|
-
targetDef
|
|
72
|
-
sourceDef
|
|
68
|
+
getInputObjectFields(targetDef),
|
|
69
|
+
getInputObjectFields(sourceDef)
|
|
73
70
|
);
|
|
74
71
|
continue;
|
|
75
72
|
}
|
|
@@ -83,20 +80,17 @@ function mergeTypes(target, source) {
|
|
|
83
80
|
}
|
|
84
81
|
}
|
|
85
82
|
function mergeFields(target, source) {
|
|
83
|
+
var _a;
|
|
86
84
|
for (const [fieldName, sourceDef] of Object.entries(source)) {
|
|
87
85
|
const targetDef = target[fieldName];
|
|
88
86
|
if (!target[fieldName] || !Array.isArray(targetDef)) {
|
|
89
87
|
target[fieldName] = sourceDef;
|
|
90
88
|
continue;
|
|
91
89
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
mergeInputValues(
|
|
97
|
-
targetDef[FieldKeys.arguments],
|
|
98
|
-
sourceDef[FieldKeys.arguments]
|
|
99
|
-
);
|
|
90
|
+
const sourceArgs = getFieldArgs(sourceDef);
|
|
91
|
+
if (sourceArgs) {
|
|
92
|
+
const targetArgs = (_a = getFieldArgs(targetDef)) != null ? _a : setFieldArgs(targetDef, {});
|
|
93
|
+
mergeInputValues(targetArgs, sourceArgs);
|
|
100
94
|
}
|
|
101
95
|
}
|
|
102
96
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utilities/mergeSchemaDefinitions.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n DirectiveDefinitionTuple,\n
|
|
5
|
-
"mappings": ";AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import {\n DirectiveDefinitionTuple,\n FieldDefinitionRecord,\n getDirectiveDefinitionArgs,\n getDirectiveName,\n getFieldArgs,\n getFields,\n getInputObjectFields,\n InputValueDefinitionRecord,\n isInputObjectTypeDefinition,\n isInterfaceTypeDefinition,\n isObjectTypeDefinition,\n SchemaDefinitions,\n setDirectiveDefinitionArgs,\n setFieldArgs,\n TypeDefinitionsRecord,\n} from \"../schema/definition\";\nimport { inspect } from \"../jsutils/inspect\";\n\nexport function mergeSchemaDefinitions(\n accumulator: SchemaDefinitions,\n definitions: SchemaDefinitions[],\n): SchemaDefinitions {\n if (!definitions.length) {\n return accumulator;\n }\n for (const source of definitions) {\n if (!accumulator.types) {\n accumulator.types = source.types;\n } else if (source.types) {\n mergeTypes(accumulator.types, source.types);\n }\n if (!accumulator.directives) {\n accumulator.directives = source.directives;\n } else if (source.directives?.length) {\n mergeDirectives(accumulator.directives, source.directives);\n }\n }\n return accumulator;\n}\n\nexport function mergeDirectives(\n target: DirectiveDefinitionTuple[],\n source: DirectiveDefinitionTuple[],\n) {\n for (const sourceDirective of source) {\n const targetDirective = target.find(\n (directive) =>\n getDirectiveName(directive) === getDirectiveName(sourceDirective),\n );\n if (!targetDirective) {\n target.push(sourceDirective);\n continue;\n }\n const sourceArgs = getDirectiveDefinitionArgs(sourceDirective);\n if (!sourceArgs) {\n continue;\n }\n const targetArgs = getDirectiveDefinitionArgs(targetDirective);\n if (!targetArgs) {\n setDirectiveDefinitionArgs(targetDirective, sourceArgs);\n continue;\n }\n mergeInputValues(targetArgs, sourceArgs);\n }\n}\n\n/**\n * Adds missing definitions from source into target. Mutates target in place.\n */\nexport function mergeTypes(\n target: TypeDefinitionsRecord,\n source: TypeDefinitionsRecord,\n): void {\n for (const [typeName, sourceDef] of Object.entries(source)) {\n const targetDef = target[typeName];\n if (!targetDef) {\n target[typeName] = sourceDef;\n continue;\n }\n if (\n (isObjectTypeDefinition(targetDef) &&\n isObjectTypeDefinition(sourceDef)) ||\n (isInterfaceTypeDefinition(targetDef) &&\n isInterfaceTypeDefinition(sourceDef))\n ) {\n mergeFields(getFields(targetDef), getFields(sourceDef));\n // Note: not merging implemented interfaces - assuming they are fully defined by the first occurrence\n continue;\n }\n if (\n isInputObjectTypeDefinition(targetDef) &&\n isInputObjectTypeDefinition(sourceDef)\n ) {\n mergeInputValues(\n getInputObjectFields(targetDef),\n getInputObjectFields(sourceDef),\n );\n continue;\n }\n // Note: not merging scalars, unions and enums - assuming they are fully defined by the first occurrence\n if (targetDef[0] !== sourceDef[0]) {\n throw new Error(\n `Type ${typeName} is represented differently in different schema fragments:\\n` +\n inspect(targetDef) +\n `\\n` +\n inspect(sourceDef),\n );\n }\n }\n}\n\nfunction mergeFields(\n target: FieldDefinitionRecord,\n source: FieldDefinitionRecord,\n) {\n for (const [fieldName, sourceDef] of Object.entries(source)) {\n const targetDef = target[fieldName];\n if (!target[fieldName] || !Array.isArray(targetDef)) {\n target[fieldName] = sourceDef;\n continue;\n }\n const sourceArgs = getFieldArgs(sourceDef);\n if (sourceArgs) {\n const targetArgs = getFieldArgs(targetDef) ?? setFieldArgs(targetDef, {});\n mergeInputValues(targetArgs, sourceArgs);\n }\n }\n}\n\nfunction mergeInputValues(\n target: InputValueDefinitionRecord,\n source: InputValueDefinitionRecord,\n) {\n for (const [fieldName, sourceDef] of Object.entries(source)) {\n const targetDef = target[fieldName];\n if (!target[fieldName] || !Array.isArray(targetDef)) {\n target[fieldName] = sourceDef;\n }\n // Note: not merging defaultValue - assuming it is fully defined by the first occurrence\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Maybe } from "../jsutils/Maybe";
|
|
2
2
|
import type { ObjMap } from "../jsutils/ObjMap";
|
|
3
|
-
import { TypeReference } from "../schema/
|
|
4
|
-
import { PartialSchema } from "../schema/fragment";
|
|
3
|
+
import type { TypeReference } from "../schema/reference";
|
|
5
4
|
import { ValueNode } from "graphql";
|
|
5
|
+
import { SchemaFragment } from "../types";
|
|
6
6
|
/**
|
|
7
7
|
* Produces a JavaScript value given a GraphQL Value AST.
|
|
8
8
|
*
|
|
@@ -23,5 +23,5 @@ import { ValueNode } from "graphql";
|
|
|
23
23
|
* | NullValue | null |
|
|
24
24
|
*
|
|
25
25
|
*/
|
|
26
|
-
export declare function valueFromAST(valueNode: Maybe<ValueNode>, typeRef: TypeReference,
|
|
26
|
+
export declare function valueFromAST(valueNode: Maybe<ValueNode>, typeRef: TypeReference, schemaFragment: SchemaFragment, variables?: Maybe<ObjMap<unknown>>): unknown;
|
|
27
27
|
//# sourceMappingURL=valueFromAST.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valueFromAST.d.ts","sourceRoot":"","sources":["../../src/utilities/valueFromAST.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"valueFromAST.d.ts","sourceRoot":"","sources":["../../src/utilities/valueFromAST.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAQ,MAAM,SAAS,CAAC;AAS1C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,EAC3B,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,cAAc,EAC9B,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GACjC,OAAO,CAqIT"}
|