@graphitation/supermassive 3.0.0-alpha.1 → 3.0.0-alpha.4
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/__testUtils__/execute.d.ts +13 -0
- package/lib/__testUtils__/execute.d.ts.map +1 -0
- package/lib/__testUtils__/execute.js +203 -0
- package/lib/__testUtils__/execute.js.map +7 -0
- package/lib/__testUtils__/execute.mjs +181 -0
- package/lib/__testUtils__/execute.mjs.map +7 -0
- package/lib/__testUtils__/gql.d.ts +7 -0
- package/lib/__testUtils__/gql.d.ts.map +1 -0
- package/lib/{supermassive-ast/TypedAST.js → __testUtils__/gql.js} +8 -10
- package/lib/__testUtils__/gql.js.map +7 -0
- package/lib/__testUtils__/gql.mjs +8 -0
- package/lib/__testUtils__/gql.mjs.map +7 -0
- package/lib/benchmarks/index.js +15 -20
- package/lib/benchmarks/index.js.map +3 -3
- package/lib/benchmarks/index.mjs +16 -23
- package/lib/benchmarks/index.mjs.map +2 -2
- package/lib/collectFields.d.ts +4 -9
- package/lib/collectFields.d.ts.map +1 -1
- package/lib/collectFields.js +38 -99
- package/lib/collectFields.js.map +2 -2
- package/lib/collectFields.mjs +41 -100
- package/lib/collectFields.mjs.map +2 -2
- package/lib/executeWithSchema.d.ts +1 -1
- package/lib/executeWithSchema.d.ts.map +1 -1
- package/lib/executeWithSchema.js +27 -17
- package/lib/executeWithSchema.js.map +2 -2
- package/lib/executeWithSchema.mjs +32 -24
- package/lib/executeWithSchema.mjs.map +2 -2
- package/lib/executeWithoutSchema.d.ts +9 -5
- package/lib/executeWithoutSchema.d.ts.map +1 -1
- package/lib/executeWithoutSchema.js +217 -242
- package/lib/executeWithoutSchema.js.map +3 -3
- package/lib/executeWithoutSchema.mjs +225 -249
- package/lib/executeWithoutSchema.mjs.map +3 -3
- package/lib/index.d.ts +16 -11
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +24 -11
- package/lib/index.js.map +2 -2
- package/lib/index.mjs +32 -11
- package/lib/index.mjs.map +2 -2
- package/lib/schema/definition.d.ts +100 -0
- package/lib/schema/definition.d.ts.map +1 -0
- package/lib/schema/definition.js +77 -0
- package/lib/schema/definition.js.map +7 -0
- package/lib/schema/definition.mjs +58 -0
- package/lib/schema/definition.mjs.map +7 -0
- package/lib/schema/directives.d.ts +42 -0
- package/lib/schema/directives.d.ts.map +1 -0
- package/lib/schema/directives.js +87 -0
- package/lib/schema/directives.js.map +7 -0
- package/lib/schema/directives.mjs +70 -0
- package/lib/schema/directives.mjs.map +7 -0
- package/lib/schema/fragment.d.ts +63 -0
- package/lib/schema/fragment.d.ts.map +1 -0
- package/lib/schema/fragment.js +295 -0
- package/lib/schema/fragment.js.map +7 -0
- package/lib/schema/fragment.mjs +292 -0
- package/lib/schema/fragment.mjs.map +7 -0
- package/lib/schema/reference.d.ts +12 -0
- package/lib/schema/reference.d.ts.map +1 -0
- package/lib/schema/reference.js +137 -0
- package/lib/schema/reference.js.map +7 -0
- package/lib/schema/reference.mjs +118 -0
- package/lib/schema/reference.mjs.map +7 -0
- package/lib/schema/resolvers.d.ts +9 -0
- package/lib/schema/resolvers.d.ts.map +1 -0
- package/lib/schema/resolvers.js +47 -0
- package/lib/schema/resolvers.js.map +7 -0
- package/lib/schema/resolvers.mjs +35 -0
- package/lib/schema/resolvers.mjs.map +7 -0
- package/lib/subscribeWithSchema.d.ts +1 -1
- package/lib/subscribeWithSchema.d.ts.map +1 -1
- package/lib/subscribeWithSchema.js +27 -17
- package/lib/subscribeWithSchema.js.map +2 -2
- package/lib/subscribeWithSchema.mjs +32 -24
- package/lib/subscribeWithSchema.mjs.map +2 -2
- package/lib/types.d.ts +16 -27
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +0 -14
- package/lib/types.js.map +2 -2
- package/lib/types.mjs +0 -11
- package/lib/types.mjs.map +3 -3
- package/lib/utilities/addMinimalViableSchemaToRequestDocument.d.ts +12 -0
- package/lib/utilities/addMinimalViableSchemaToRequestDocument.d.ts.map +1 -0
- package/lib/utilities/addMinimalViableSchemaToRequestDocument.js +116 -0
- package/lib/utilities/addMinimalViableSchemaToRequestDocument.js.map +7 -0
- package/lib/utilities/addMinimalViableSchemaToRequestDocument.mjs +105 -0
- package/lib/utilities/addMinimalViableSchemaToRequestDocument.mjs.map +7 -0
- package/lib/utilities/annotateDocumentGraphQLTransform.d.ts +4 -0
- package/lib/utilities/annotateDocumentGraphQLTransform.d.ts.map +1 -0
- package/lib/{supermassive-ast → utilities}/annotateDocumentGraphQLTransform.js +3 -10
- package/lib/utilities/annotateDocumentGraphQLTransform.js.map +7 -0
- package/lib/utilities/annotateDocumentGraphQLTransform.mjs +10 -0
- package/lib/utilities/annotateDocumentGraphQLTransform.mjs.map +7 -0
- package/lib/utilities/coerceInputValue.d.ts +10 -0
- package/lib/utilities/coerceInputValue.d.ts.map +1 -0
- package/lib/utilities/coerceInputValue.js +181 -0
- package/lib/utilities/coerceInputValue.js.map +7 -0
- package/lib/utilities/coerceInputValue.mjs +167 -0
- package/lib/utilities/coerceInputValue.mjs.map +7 -0
- package/lib/utilities/decodeASTSchema.d.ts +7 -0
- package/lib/utilities/decodeASTSchema.d.ts.map +1 -0
- package/lib/utilities/decodeASTSchema.js +246 -0
- package/lib/utilities/decodeASTSchema.js.map +7 -0
- package/lib/utilities/decodeASTSchema.mjs +245 -0
- package/lib/utilities/decodeASTSchema.mjs.map +7 -0
- package/lib/utilities/encodeASTSchema.d.ts +4 -0
- package/lib/utilities/encodeASTSchema.d.ts.map +1 -0
- package/lib/utilities/encodeASTSchema.js +151 -0
- package/lib/utilities/encodeASTSchema.js.map +7 -0
- package/lib/utilities/encodeASTSchema.mjs +134 -0
- package/lib/utilities/encodeASTSchema.mjs.map +7 -0
- package/lib/utilities/extractMinimalViableSchemaForRequestDocument.d.ts +8 -0
- package/lib/utilities/extractMinimalViableSchemaForRequestDocument.d.ts.map +1 -0
- package/lib/utilities/extractMinimalViableSchemaForRequestDocument.js +238 -0
- package/lib/utilities/extractMinimalViableSchemaForRequestDocument.js.map +7 -0
- package/lib/utilities/extractMinimalViableSchemaForRequestDocument.mjs +245 -0
- package/lib/utilities/extractMinimalViableSchemaForRequestDocument.mjs.map +7 -0
- package/lib/utilities/makeReadableErrorPath.d.ts +3 -0
- package/lib/utilities/makeReadableErrorPath.d.ts.map +1 -0
- package/lib/utilities/makeReadableErrorPath.js +47 -0
- package/lib/utilities/makeReadableErrorPath.js.map +7 -0
- package/lib/utilities/makeReadableErrorPath.mjs +28 -0
- package/lib/utilities/makeReadableErrorPath.mjs.map +7 -0
- package/lib/utilities/mergeResolvers.d.ts +2 -2
- package/lib/utilities/mergeResolvers.d.ts.map +1 -1
- package/lib/utilities/mergeResolvers.js +20 -22
- package/lib/utilities/mergeResolvers.js.map +2 -2
- package/lib/utilities/mergeResolvers.mjs +20 -25
- package/lib/utilities/mergeResolvers.mjs.map +2 -2
- package/lib/utilities/mergeSchemaDefinitions.d.ts +8 -0
- package/lib/utilities/mergeSchemaDefinitions.d.ts.map +1 -0
- package/lib/utilities/mergeSchemaDefinitions.js +126 -0
- package/lib/utilities/mergeSchemaDefinitions.js.map +7 -0
- package/lib/utilities/mergeSchemaDefinitions.mjs +114 -0
- package/lib/utilities/mergeSchemaDefinitions.mjs.map +7 -0
- package/lib/utilities/typeNameFromAST.d.ts +1 -1
- package/lib/utilities/typeNameFromAST.d.ts.map +1 -1
- package/lib/utilities/typeNameFromAST.js.map +2 -2
- package/lib/utilities/typeNameFromAST.mjs.map +2 -2
- package/lib/utilities/valueFromAST.d.ts +27 -0
- package/lib/utilities/valueFromAST.d.ts.map +1 -0
- package/lib/utilities/valueFromAST.js +139 -0
- package/lib/utilities/valueFromAST.js.map +7 -0
- package/lib/utilities/valueFromAST.mjs +125 -0
- package/lib/utilities/valueFromAST.mjs.map +7 -0
- package/lib/utilities/valueFromASTUntyped.d.ts +21 -0
- package/lib/utilities/valueFromASTUntyped.d.ts.map +1 -0
- package/lib/utilities/valueFromASTUntyped.js +51 -0
- package/lib/utilities/valueFromASTUntyped.js.map +7 -0
- package/lib/utilities/valueFromASTUntyped.mjs +32 -0
- package/lib/utilities/valueFromASTUntyped.mjs.map +7 -0
- package/lib/values.d.ts +8 -12
- package/lib/values.d.ts.map +1 -1
- package/lib/values.js +75 -63
- package/lib/values.js.map +2 -2
- package/lib/values.mjs +77 -71
- package/lib/values.mjs.map +2 -2
- package/package.json +8 -6
- package/lib/definition.d.ts +0 -7
- package/lib/definition.d.ts.map +0 -1
- package/lib/definition.js +0 -59
- package/lib/definition.js.map +0 -7
- package/lib/definition.mjs +0 -40
- package/lib/definition.mjs.map +0 -7
- package/lib/directives.d.ts +0 -8
- package/lib/directives.d.ts.map +0 -1
- package/lib/directives.js +0 -47
- package/lib/directives.js.map +0 -7
- package/lib/directives.mjs +0 -37
- package/lib/directives.mjs.map +0 -7
- package/lib/extractImplicitTypesRuntime.d.ts +0 -4
- package/lib/extractImplicitTypesRuntime.d.ts.map +0 -1
- package/lib/extractImplicitTypesRuntime.js +0 -123
- package/lib/extractImplicitTypesRuntime.js.map +0 -7
- package/lib/extractImplicitTypesRuntime.mjs +0 -114
- package/lib/extractImplicitTypesRuntime.mjs.map +0 -7
- package/lib/supermassive-ast/TypedAST.d.ts +0 -370
- package/lib/supermassive-ast/TypedAST.d.ts.map +0 -1
- package/lib/supermassive-ast/TypedAST.js.map +0 -7
- package/lib/supermassive-ast/TypedAST.mjs +0 -10
- package/lib/supermassive-ast/TypedAST.mjs.map +0 -7
- package/lib/supermassive-ast/addTypesToRequestDocument.d.ts +0 -56
- package/lib/supermassive-ast/addTypesToRequestDocument.d.ts.map +0 -1
- package/lib/supermassive-ast/addTypesToRequestDocument.js +0 -473
- package/lib/supermassive-ast/addTypesToRequestDocument.js.map +0 -7
- package/lib/supermassive-ast/addTypesToRequestDocument.mjs +0 -463
- package/lib/supermassive-ast/addTypesToRequestDocument.mjs.map +0 -7
- package/lib/supermassive-ast/annotateDocumentGraphQLTransform.d.ts +0 -3
- package/lib/supermassive-ast/annotateDocumentGraphQLTransform.d.ts.map +0 -1
- package/lib/supermassive-ast/annotateDocumentGraphQLTransform.js.map +0 -7
- package/lib/supermassive-ast/annotateDocumentGraphQLTransform.mjs +0 -17
- package/lib/supermassive-ast/annotateDocumentGraphQLTransform.mjs.map +0 -7
- package/lib/supermassive-ast/directives.d.ts +0 -36
- package/lib/supermassive-ast/directives.d.ts.map +0 -1
- package/lib/supermassive-ast/directives.js +0 -165
- package/lib/supermassive-ast/directives.js.map +0 -7
- package/lib/supermassive-ast/directives.mjs +0 -153
- package/lib/supermassive-ast/directives.mjs.map +0 -7
- package/lib/supermassive-ast/index.d.ts +0 -6
- package/lib/supermassive-ast/index.d.ts.map +0 -1
- package/lib/supermassive-ast/index.js +0 -37
- package/lib/supermassive-ast/index.js.map +0 -7
- package/lib/supermassive-ast/index.mjs +0 -27
- package/lib/supermassive-ast/index.mjs.map +0 -7
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
// src/schema/fragment.ts
|
|
2
|
+
import { GraphQLEnumType, GraphQLScalarType } from "graphql";
|
|
3
|
+
import {
|
|
4
|
+
DirectiveKeys,
|
|
5
|
+
EnumKeys,
|
|
6
|
+
FieldKeys,
|
|
7
|
+
InputObjectKeys,
|
|
8
|
+
InputValueKeys,
|
|
9
|
+
InterfaceKeys,
|
|
10
|
+
ObjectKeys,
|
|
11
|
+
TypeKind,
|
|
12
|
+
UnionKeys
|
|
13
|
+
} from "./definition.mjs";
|
|
14
|
+
import { isObjectLike } from "../jsutils/isObjectLike.mjs";
|
|
15
|
+
import {
|
|
16
|
+
isInterfaceTypeResolver,
|
|
17
|
+
isScalarTypeResolver,
|
|
18
|
+
isSpecifiedScalarType,
|
|
19
|
+
isUnionTypeResolver,
|
|
20
|
+
specifiedScalarResolvers
|
|
21
|
+
} from "./resolvers.mjs";
|
|
22
|
+
import { typeNameFromReference } from "./reference.mjs";
|
|
23
|
+
var specifiedScalarDefinition = [TypeKind.SCALAR];
|
|
24
|
+
var typeNameMetaFieldDef = "String";
|
|
25
|
+
var resolveTypeName = (_source, _args, _context, info) => info.parentTypeName;
|
|
26
|
+
var scalarTypeResolversBySchema = /* @__PURE__ */ new Map();
|
|
27
|
+
var enumTypeResolversBySchema = /* @__PURE__ */ new Map();
|
|
28
|
+
var emptyObject = Object.freeze(/* @__PURE__ */ Object.create(null));
|
|
29
|
+
var PartialSchema = class {
|
|
30
|
+
constructor(fragment) {
|
|
31
|
+
this.schemaId = fragment.schemaId;
|
|
32
|
+
this.definitions = fragment.definitions;
|
|
33
|
+
this.resolvers = fragment.resolvers;
|
|
34
|
+
this.operationTypes = fragment.operationTypes;
|
|
35
|
+
let scalarTypeResolvers = scalarTypeResolversBySchema.get(this.schemaId);
|
|
36
|
+
if (!scalarTypeResolvers) {
|
|
37
|
+
scalarTypeResolvers = /* @__PURE__ */ new Map();
|
|
38
|
+
scalarTypeResolversBySchema.set(this.schemaId, scalarTypeResolvers);
|
|
39
|
+
}
|
|
40
|
+
this.scalarTypeResolvers = scalarTypeResolvers;
|
|
41
|
+
let enumTypeResolvers = enumTypeResolversBySchema.get(this.schemaId);
|
|
42
|
+
if (!enumTypeResolvers) {
|
|
43
|
+
enumTypeResolvers = /* @__PURE__ */ new Map();
|
|
44
|
+
enumTypeResolversBySchema.set(this.schemaId, enumTypeResolvers);
|
|
45
|
+
}
|
|
46
|
+
this.enumTypeResolvers = enumTypeResolvers;
|
|
47
|
+
}
|
|
48
|
+
updateSchemaFragment(fragment) {
|
|
49
|
+
if (this.schemaId !== fragment.schemaId) {
|
|
50
|
+
throw new Error(
|
|
51
|
+
`Cannot use new schema fragment: old and new fragments describe different schemas: ${this.schemaId} vs. ${fragment.schemaId}`
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
this.schemaId = fragment.schemaId;
|
|
55
|
+
this.definitions = fragment.definitions;
|
|
56
|
+
this.resolvers = fragment.resolvers;
|
|
57
|
+
this.operationTypes = fragment.operationTypes;
|
|
58
|
+
}
|
|
59
|
+
getTypeReference(tupleOrRef) {
|
|
60
|
+
return Array.isArray(tupleOrRef) ? tupleOrRef[0] : tupleOrRef;
|
|
61
|
+
}
|
|
62
|
+
getObjectType(typeName) {
|
|
63
|
+
const type = this.definitions.types[typeName];
|
|
64
|
+
return (type == null ? void 0 : type[0]) === TypeKind.OBJECT ? type : void 0;
|
|
65
|
+
}
|
|
66
|
+
getObjectFields(def) {
|
|
67
|
+
return def[ObjectKeys.fields];
|
|
68
|
+
}
|
|
69
|
+
addInterfaceImplementation(interfaceType, objectType) {
|
|
70
|
+
const iface = this.getInterfaceType(interfaceType);
|
|
71
|
+
const type = this.definitions.types[objectType];
|
|
72
|
+
if (!iface) {
|
|
73
|
+
throw new Error(
|
|
74
|
+
`Type ${interfaceType} either doesn't exist or is not an interface`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
if (!type) {
|
|
78
|
+
this.definitions.types[objectType] = [
|
|
79
|
+
TypeKind.OBJECT,
|
|
80
|
+
/* @__PURE__ */ Object.create(null),
|
|
81
|
+
[interfaceType]
|
|
82
|
+
];
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
let knownInterfaces = type[ObjectKeys.interfaces];
|
|
86
|
+
if (!knownInterfaces) {
|
|
87
|
+
knownInterfaces = [];
|
|
88
|
+
type[ObjectKeys.interfaces] = knownInterfaces;
|
|
89
|
+
}
|
|
90
|
+
if (!knownInterfaces.includes(interfaceType)) {
|
|
91
|
+
knownInterfaces.push(interfaceType);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
getField(typeName, fieldName) {
|
|
95
|
+
var _a;
|
|
96
|
+
if (fieldName === "__typename") {
|
|
97
|
+
return typeNameMetaFieldDef;
|
|
98
|
+
}
|
|
99
|
+
return (_a = this.getOwnField(typeName, fieldName)) != null ? _a : this.findInterfaceField(typeName, fieldName);
|
|
100
|
+
}
|
|
101
|
+
getOwnField(typeName, fieldName) {
|
|
102
|
+
var _a, _b;
|
|
103
|
+
const type = this.definitions.types[typeName];
|
|
104
|
+
if (!type) {
|
|
105
|
+
return void 0;
|
|
106
|
+
}
|
|
107
|
+
if (type[0] === TypeKind.OBJECT) {
|
|
108
|
+
return (_a = type[ObjectKeys.fields]) == null ? void 0 : _a[fieldName];
|
|
109
|
+
}
|
|
110
|
+
if (type[0] === TypeKind.INTERFACE) {
|
|
111
|
+
return (_b = type[InterfaceKeys.fields]) == null ? void 0 : _b[fieldName];
|
|
112
|
+
}
|
|
113
|
+
return void 0;
|
|
114
|
+
}
|
|
115
|
+
findInterfaceField(typeName, fieldName) {
|
|
116
|
+
const type = this.definitions.types[typeName];
|
|
117
|
+
if (!type) {
|
|
118
|
+
return void 0;
|
|
119
|
+
}
|
|
120
|
+
if (type[0] === TypeKind.OBJECT && type[ObjectKeys.interfaces]) {
|
|
121
|
+
return this.findField(type[ObjectKeys.interfaces], fieldName);
|
|
122
|
+
}
|
|
123
|
+
if (type[0] === TypeKind.INTERFACE && type[InterfaceKeys.interfaces]) {
|
|
124
|
+
return this.findField(type[InterfaceKeys.interfaces], fieldName);
|
|
125
|
+
}
|
|
126
|
+
return void 0;
|
|
127
|
+
}
|
|
128
|
+
findField(interfaceTypes, fieldName) {
|
|
129
|
+
for (const interfaceName of interfaceTypes) {
|
|
130
|
+
const ownField = this.getOwnField(interfaceName, fieldName);
|
|
131
|
+
if (ownField !== void 0) {
|
|
132
|
+
return ownField;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return void 0;
|
|
136
|
+
}
|
|
137
|
+
getFieldArguments(field) {
|
|
138
|
+
return Array.isArray(field) ? field[FieldKeys.arguments] : void 0;
|
|
139
|
+
}
|
|
140
|
+
getDirectiveArguments(directive) {
|
|
141
|
+
return directive[DirectiveKeys.arguments];
|
|
142
|
+
}
|
|
143
|
+
resolveDefinitionArguments(def) {
|
|
144
|
+
return Array.isArray(def) ? def[FieldKeys.arguments] : void 0;
|
|
145
|
+
}
|
|
146
|
+
getInputObjectType(typeRef) {
|
|
147
|
+
const type = this.definitions.types[typeNameFromReference(typeRef)];
|
|
148
|
+
return (type == null ? void 0 : type[0]) === TypeKind.INPUT ? type : void 0;
|
|
149
|
+
}
|
|
150
|
+
getInputObjectFields(obj) {
|
|
151
|
+
return obj[InputObjectKeys.fields];
|
|
152
|
+
}
|
|
153
|
+
getInputDefaultValue(inputValue) {
|
|
154
|
+
return Array.isArray(inputValue) ? inputValue[InputValueKeys.defaultValue] : void 0;
|
|
155
|
+
}
|
|
156
|
+
getLeafType(typeRef) {
|
|
157
|
+
const typeName = typeNameFromReference(typeRef);
|
|
158
|
+
if (isSpecifiedScalarType(typeName)) {
|
|
159
|
+
return specifiedScalarDefinition;
|
|
160
|
+
}
|
|
161
|
+
const type = this.definitions.types[typeName];
|
|
162
|
+
if ((type == null ? void 0 : type[0]) !== TypeKind.ENUM && (type == null ? void 0 : type[0]) !== TypeKind.SCALAR) {
|
|
163
|
+
return void 0;
|
|
164
|
+
}
|
|
165
|
+
return type;
|
|
166
|
+
}
|
|
167
|
+
isDefined(typeRef) {
|
|
168
|
+
if (typeof typeRef === "number") {
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
const types = this.definitions.types;
|
|
172
|
+
const typeName = typeNameFromReference(typeRef);
|
|
173
|
+
return !!types[typeName] || isSpecifiedScalarType(typeName);
|
|
174
|
+
}
|
|
175
|
+
isInputType(typeRef) {
|
|
176
|
+
var _a;
|
|
177
|
+
if (typeof typeRef === "number") {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
const typeName = typeNameFromReference(typeRef);
|
|
181
|
+
const kind = (_a = this.definitions.types[typeName]) == null ? void 0 : _a[0];
|
|
182
|
+
return isSpecifiedScalarType(typeName) || kind === TypeKind.ENUM || kind === TypeKind.INPUT || kind === TypeKind.SCALAR;
|
|
183
|
+
}
|
|
184
|
+
isObjectType(typeRef) {
|
|
185
|
+
var _a;
|
|
186
|
+
if (typeof typeRef === "number") {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
const types = this.definitions.types;
|
|
190
|
+
const type = (_a = types[typeRef]) != null ? _a : types[typeNameFromReference(typeRef)];
|
|
191
|
+
return (type == null ? void 0 : type[0]) === TypeKind.OBJECT;
|
|
192
|
+
}
|
|
193
|
+
isAbstractType(typeRef) {
|
|
194
|
+
var _a;
|
|
195
|
+
if (typeof typeRef === "number") {
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
const types = this.definitions.types;
|
|
199
|
+
const type = (_a = types[typeRef]) != null ? _a : types[typeNameFromReference(typeRef)];
|
|
200
|
+
return (type == null ? void 0 : type[0]) === TypeKind.UNION || (type == null ? void 0 : type[0]) === TypeKind.INTERFACE;
|
|
201
|
+
}
|
|
202
|
+
getUnionType(typeRef) {
|
|
203
|
+
var _a;
|
|
204
|
+
const types = this.definitions.types;
|
|
205
|
+
const type = (_a = types[typeRef]) != null ? _a : types[typeNameFromReference(typeRef)];
|
|
206
|
+
return (type == null ? void 0 : type[0]) === TypeKind.UNION ? type : void 0;
|
|
207
|
+
}
|
|
208
|
+
getInterfaceType(typeRef) {
|
|
209
|
+
var _a;
|
|
210
|
+
const types = this.definitions.types;
|
|
211
|
+
const type = (_a = types[typeRef]) != null ? _a : types[typeNameFromReference(typeRef)];
|
|
212
|
+
return (type == null ? void 0 : type[0]) === TypeKind.INTERFACE ? type : void 0;
|
|
213
|
+
}
|
|
214
|
+
isSubType(abstractTypeName, maybeSubTypeName) {
|
|
215
|
+
var _a, _b;
|
|
216
|
+
const union = this.getUnionType(abstractTypeName);
|
|
217
|
+
if (union) {
|
|
218
|
+
return union[UnionKeys.types].includes(maybeSubTypeName);
|
|
219
|
+
}
|
|
220
|
+
const object = this.getObjectType(maybeSubTypeName);
|
|
221
|
+
if (object) {
|
|
222
|
+
return !!((_a = object[ObjectKeys.interfaces]) == null ? void 0 : _a.includes(abstractTypeName));
|
|
223
|
+
}
|
|
224
|
+
const iface = this.getInterfaceType(maybeSubTypeName);
|
|
225
|
+
if (iface) {
|
|
226
|
+
return !!((_b = iface[InterfaceKeys.interfaces]) == null ? void 0 : _b.includes(abstractTypeName));
|
|
227
|
+
}
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
getFieldResolver(typeName, fieldName) {
|
|
231
|
+
if (fieldName === "__typename") {
|
|
232
|
+
return resolveTypeName;
|
|
233
|
+
}
|
|
234
|
+
const typeResolvers = this.resolvers[typeName];
|
|
235
|
+
const fieldResolver = typeResolvers == null ? void 0 : typeResolvers[fieldName];
|
|
236
|
+
return typeof fieldResolver === "function" ? fieldResolver : fieldResolver == null ? void 0 : fieldResolver.resolve;
|
|
237
|
+
}
|
|
238
|
+
getSubscriptionFieldResolver(subscriptionTypeName, fieldName) {
|
|
239
|
+
const typeResolvers = this.resolvers[subscriptionTypeName];
|
|
240
|
+
const fieldResolver = typeResolvers == null ? void 0 : typeResolvers[fieldName];
|
|
241
|
+
return typeof fieldResolver === "function" ? fieldResolver : fieldResolver == null ? void 0 : fieldResolver.subscribe;
|
|
242
|
+
}
|
|
243
|
+
getAbstractTypeResolver(typeName) {
|
|
244
|
+
const resolver = this.resolvers[typeName];
|
|
245
|
+
return resolver && (isUnionTypeResolver(resolver) || isInterfaceTypeResolver(resolver)) ? resolver.__resolveType : void 0;
|
|
246
|
+
}
|
|
247
|
+
getLeafTypeResolver(typeRef) {
|
|
248
|
+
var _a;
|
|
249
|
+
const typeName = typeNameFromReference(typeRef);
|
|
250
|
+
if (specifiedScalarResolvers[typeName]) {
|
|
251
|
+
return specifiedScalarResolvers[typeName];
|
|
252
|
+
}
|
|
253
|
+
const typeDef = this.getLeafType(typeRef);
|
|
254
|
+
if (!typeDef) {
|
|
255
|
+
return void 0;
|
|
256
|
+
}
|
|
257
|
+
if (typeDef[0] === TypeKind.SCALAR) {
|
|
258
|
+
let scalarType = this.scalarTypeResolvers.get(typeName);
|
|
259
|
+
if (!scalarType) {
|
|
260
|
+
const tmp = this.resolvers[typeName];
|
|
261
|
+
scalarType = isScalarTypeResolver(tmp) ? tmp : new GraphQLScalarType({ name: typeName, description: "" });
|
|
262
|
+
this.scalarTypeResolvers.set(typeName, scalarType);
|
|
263
|
+
}
|
|
264
|
+
return scalarType;
|
|
265
|
+
}
|
|
266
|
+
if (typeDef[0] === TypeKind.ENUM) {
|
|
267
|
+
let enumType = this.enumTypeResolvers.get(typeName);
|
|
268
|
+
if (!enumType) {
|
|
269
|
+
const tmp = this.resolvers[typeName];
|
|
270
|
+
const customValues = isObjectLike(tmp) ? tmp : emptyObject;
|
|
271
|
+
const values = {};
|
|
272
|
+
for (const value of (_a = typeDef[EnumKeys.values]) != null ? _a : []) {
|
|
273
|
+
values[value] = typeof customValues[value] !== "undefined" ? { value: customValues[value] } : {};
|
|
274
|
+
}
|
|
275
|
+
enumType = new GraphQLEnumType({
|
|
276
|
+
name: typeName,
|
|
277
|
+
values
|
|
278
|
+
});
|
|
279
|
+
this.enumTypeResolvers.set(typeName, enumType);
|
|
280
|
+
}
|
|
281
|
+
return enumType;
|
|
282
|
+
}
|
|
283
|
+
return void 0;
|
|
284
|
+
}
|
|
285
|
+
getDirectiveName(def) {
|
|
286
|
+
return def[DirectiveKeys.name];
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
PartialSchema.parseOptions = { noLocation: true };
|
|
290
|
+
export {
|
|
291
|
+
PartialSchema
|
|
292
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/schema/fragment.ts"],
|
|
4
|
+
"sourcesContent": ["import { GraphQLEnumType, GraphQLLeafType, GraphQLScalarType } from \"graphql\";\nimport {\n DirectiveDefinitionTuple,\n DirectiveKeys,\n EnumKeys,\n EnumTypeDefinitionTuple,\n FieldDefinition,\n FieldDefinitionRecord,\n FieldKeys,\n InputObjectKeys,\n InputObjectTypeDefinitionTuple,\n InputValueDefinition,\n InputValueDefinitionRecord,\n InputValueKeys,\n InterfaceKeys,\n InterfaceTypeDefinitionTuple,\n ObjectKeys,\n ObjectTypeDefinitionTuple,\n OperationTypes,\n ScalarTypeDefinitionTuple,\n SchemaDefinitions,\n TypeKind,\n TypeName,\n TypeReference,\n UnionKeys,\n UnionTypeDefinitionTuple,\n} from \"./definition\";\nimport {\n FunctionFieldResolver,\n ObjectTypeResolver,\n ScalarTypeResolver,\n TypeResolver,\n UserResolvers,\n} from \"../types\";\nimport { isObjectLike } from \"../jsutils/isObjectLike\";\nimport {\n isInterfaceTypeResolver,\n isScalarTypeResolver,\n isSpecifiedScalarType,\n isUnionTypeResolver,\n specifiedScalarResolvers,\n} from \"./resolvers\";\nimport { typeNameFromReference } from \"./reference\";\n\ntype SchemaId = string;\n\nexport type SchemaFragment = {\n schemaId: SchemaId;\n definitions: SchemaDefinitions;\n resolvers: UserResolvers;\n operationTypes?: OperationTypes;\n};\n\nexport type SchemaFragmentLoadByField = {\n kind: \"byField\";\n parentTypeName: TypeName;\n fieldName: string;\n};\n\nexport type SchemaFragmentLoadRequest = SchemaFragmentLoadByField;\nexport type SchemaFragmentLoaderResult = {\n mergedFragment: SchemaFragment;\n mergedContextValue?: unknown;\n};\n\nexport type SchemaFragmentLoader = (\n currentFragment: SchemaFragment,\n currentContextValue: unknown,\n req: SchemaFragmentLoadRequest,\n) => Promise<SchemaFragmentLoaderResult>;\n\nconst specifiedScalarDefinition: ScalarTypeDefinitionTuple = [TypeKind.SCALAR];\nconst typeNameMetaFieldDef: FieldDefinition = \"String\";\nconst resolveTypeName: FunctionFieldResolver<unknown, unknown> = (\n _source,\n _args,\n _context,\n info,\n) => info.parentTypeName;\nconst scalarTypeResolversBySchema = new Map<\n SchemaId,\n Map<TypeName, GraphQLScalarType>\n>();\nconst enumTypeResolversBySchema = new Map<\n SchemaId,\n Map<TypeName, GraphQLEnumType>\n>();\nconst emptyObject = Object.freeze(Object.create(null));\n\nexport class PartialSchema {\n static parseOptions = { noLocation: true };\n\n private schemaId: string;\n private definitions: SchemaDefinitions;\n private resolvers: UserResolvers;\n private operationTypes: OperationTypes | undefined;\n\n private scalarTypeResolvers: Map<TypeName, ScalarTypeResolver>;\n private enumTypeResolvers: Map<TypeName, GraphQLEnumType>;\n\n constructor(fragment: SchemaFragment) {\n this.schemaId = fragment.schemaId;\n this.definitions = fragment.definitions;\n this.resolvers = fragment.resolvers;\n this.operationTypes = fragment.operationTypes;\n\n let scalarTypeResolvers = scalarTypeResolversBySchema.get(this.schemaId);\n if (!scalarTypeResolvers) {\n scalarTypeResolvers = new Map<TypeName, ScalarTypeResolver>();\n scalarTypeResolversBySchema.set(this.schemaId, scalarTypeResolvers);\n }\n this.scalarTypeResolvers = scalarTypeResolvers;\n\n let enumTypeResolvers = enumTypeResolversBySchema.get(this.schemaId);\n if (!enumTypeResolvers) {\n enumTypeResolvers = new Map<TypeName, GraphQLEnumType>();\n enumTypeResolversBySchema.set(this.schemaId, enumTypeResolvers);\n }\n this.enumTypeResolvers = enumTypeResolvers;\n }\n\n public updateSchemaFragment(fragment: SchemaFragment) {\n if (this.schemaId !== fragment.schemaId) {\n throw new Error(\n `Cannot use new schema fragment: old and new fragments describe different schemas:` +\n ` ${this.schemaId} vs. ${fragment.schemaId}`,\n );\n }\n this.schemaId = fragment.schemaId;\n this.definitions = fragment.definitions;\n this.resolvers = fragment.resolvers;\n this.operationTypes = fragment.operationTypes;\n }\n\n public getTypeReference(\n tupleOrRef: FieldDefinition | InputValueDefinition,\n ): TypeReference {\n return Array.isArray(tupleOrRef) ? tupleOrRef[0] : tupleOrRef;\n }\n\n public getObjectType(\n typeName: TypeName,\n ): ObjectTypeDefinitionTuple | undefined {\n const type = this.definitions.types[typeName];\n return type?.[0] === TypeKind.OBJECT ? type : undefined;\n }\n\n public getObjectFields(\n def: ObjectTypeDefinitionTuple,\n ): FieldDefinitionRecord | undefined {\n return def[ObjectKeys.fields];\n }\n\n public addInterfaceImplementation(\n interfaceType: TypeName,\n objectType: TypeName,\n ) {\n const iface = this.getInterfaceType(interfaceType);\n const type = this.definitions.types[objectType];\n\n if (!iface) {\n throw new Error(\n `Type ${interfaceType} either doesn't exist or is not an interface`,\n );\n }\n if (!type) {\n this.definitions.types[objectType] = [\n TypeKind.OBJECT,\n Object.create(null),\n [interfaceType],\n ];\n return;\n }\n let knownInterfaces = type[ObjectKeys.interfaces];\n if (!knownInterfaces) {\n knownInterfaces = [];\n type[ObjectKeys.interfaces] = knownInterfaces;\n }\n if (!knownInterfaces.includes(interfaceType)) {\n knownInterfaces.push(interfaceType);\n }\n }\n\n public getField(typeName: TypeName, fieldName: string) {\n if (fieldName === \"__typename\") {\n return typeNameMetaFieldDef;\n }\n return (\n this.getOwnField(typeName, fieldName) ??\n this.findInterfaceField(typeName, fieldName)\n );\n }\n\n private getOwnField(\n typeName: TypeName,\n fieldName: string,\n ): FieldDefinition | undefined {\n const type = this.definitions.types[typeName];\n if (!type) {\n return undefined;\n }\n if (type[0] === TypeKind.OBJECT) {\n return type[ObjectKeys.fields]?.[fieldName];\n }\n if (type[0] === TypeKind.INTERFACE) {\n return type[InterfaceKeys.fields]?.[fieldName];\n }\n return undefined;\n }\n\n private findInterfaceField(typeName: TypeName, fieldName: string) {\n const type = this.definitions.types[typeName];\n if (!type) {\n return undefined;\n }\n if (type[0] === TypeKind.OBJECT && type[ObjectKeys.interfaces]) {\n return this.findField(type[ObjectKeys.interfaces], fieldName);\n }\n if (type[0] === TypeKind.INTERFACE && type[InterfaceKeys.interfaces]) {\n return this.findField(type[InterfaceKeys.interfaces], fieldName);\n }\n return undefined;\n }\n\n private findField(interfaceTypes: TypeName[], fieldName: string) {\n // TODO: merge field definition from all interface types to ensure all necessary arguments are present\n // (or maybe instead always encode all arguments in the schema fragment for simplicity?)\n for (const interfaceName of interfaceTypes) {\n const ownField = this.getOwnField(interfaceName, fieldName);\n if (ownField !== undefined) {\n return ownField;\n }\n }\n return undefined;\n }\n\n public getFieldArguments(\n field: FieldDefinition,\n ): InputValueDefinitionRecord | undefined {\n return Array.isArray(field) ? field[FieldKeys.arguments] : undefined;\n }\n\n public getDirectiveArguments(\n directive: DirectiveDefinitionTuple,\n ): InputValueDefinitionRecord | undefined {\n return directive[DirectiveKeys.arguments];\n }\n\n public resolveDefinitionArguments(\n def: FieldDefinition | DirectiveDefinitionTuple,\n ): InputValueDefinitionRecord | undefined {\n // Note: both FieldDefinition and DirectiveDefinition store arguments at the same position\n return Array.isArray(def) ? def[FieldKeys.arguments] : undefined;\n }\n\n public getInputObjectType(\n typeRef: TypeReference,\n ): InputObjectTypeDefinitionTuple | undefined {\n const type = this.definitions.types[typeNameFromReference(typeRef)];\n return type?.[0] === TypeKind.INPUT ? type : undefined;\n }\n\n public getInputObjectFields(\n obj: InputObjectTypeDefinitionTuple,\n ): InputValueDefinitionRecord {\n return obj[InputObjectKeys.fields];\n }\n\n public getInputDefaultValue(\n inputValue: InputValueDefinition,\n ): unknown | undefined {\n return Array.isArray(inputValue)\n ? inputValue[InputValueKeys.defaultValue]\n : undefined;\n }\n\n public getLeafType(\n typeRef: TypeReference,\n ): EnumTypeDefinitionTuple | ScalarTypeDefinitionTuple | undefined {\n const typeName = typeNameFromReference(typeRef);\n\n if (isSpecifiedScalarType(typeName)) {\n return specifiedScalarDefinition;\n }\n const type = this.definitions.types[typeName];\n if (type?.[0] !== TypeKind.ENUM && type?.[0] !== TypeKind.SCALAR) {\n return undefined;\n }\n return type;\n }\n\n public isDefined(typeRef: TypeReference): boolean {\n if (typeof typeRef === \"number\") {\n // Fast-path: spec type\n return true;\n }\n const types = this.definitions.types;\n const typeName = typeNameFromReference(typeRef);\n return !!types[typeName] || isSpecifiedScalarType(typeName);\n }\n\n public isInputType(typeRef: TypeReference): boolean {\n if (typeof typeRef === \"number\") {\n // Fast-path: all spec types are input types\n return true;\n }\n const typeName = typeNameFromReference(typeRef);\n const kind = this.definitions.types[typeName]?.[0];\n return (\n isSpecifiedScalarType(typeName) ||\n kind === TypeKind.ENUM ||\n kind === TypeKind.INPUT ||\n kind === TypeKind.SCALAR\n );\n }\n\n public isObjectType(typeRef: TypeReference): boolean {\n if (typeof typeRef === \"number\") {\n // Fast-path: all spec types are scalars\n return false;\n }\n const types = this.definitions.types;\n const type = types[typeRef] ?? types[typeNameFromReference(typeRef)];\n return type?.[0] === TypeKind.OBJECT;\n }\n\n public isAbstractType(typeRef: TypeReference): boolean {\n if (typeof typeRef === \"number\") {\n // Fast-path: all spec types are scalars\n return false;\n }\n const types = this.definitions.types;\n const type = types[typeRef] ?? types[typeNameFromReference(typeRef)];\n return type?.[0] === TypeKind.UNION || type?.[0] === TypeKind.INTERFACE;\n }\n\n public getUnionType(\n typeRef: TypeReference,\n ): UnionTypeDefinitionTuple | undefined {\n const types = this.definitions.types;\n const type = types[typeRef] ?? types[typeNameFromReference(typeRef)];\n return type?.[0] === TypeKind.UNION ? type : undefined;\n }\n\n public getInterfaceType(\n typeRef: TypeReference,\n ): InterfaceTypeDefinitionTuple | undefined {\n const types = this.definitions.types;\n const type = types[typeRef] ?? types[typeNameFromReference(typeRef)];\n return type?.[0] === TypeKind.INTERFACE ? type : undefined;\n }\n\n public isSubType(\n abstractTypeName: TypeName,\n maybeSubTypeName: TypeName,\n ): boolean {\n const union = this.getUnionType(abstractTypeName);\n if (union) {\n return union[UnionKeys.types].includes(maybeSubTypeName);\n }\n const object = this.getObjectType(maybeSubTypeName);\n if (object) {\n return !!object[ObjectKeys.interfaces]?.includes(abstractTypeName);\n }\n const iface = this.getInterfaceType(maybeSubTypeName);\n if (iface) {\n return !!iface[InterfaceKeys.interfaces]?.includes(abstractTypeName);\n }\n return false;\n }\n\n public getFieldResolver(\n typeName: TypeName,\n fieldName: string,\n ): FunctionFieldResolver<unknown, unknown> | undefined {\n if (fieldName === \"__typename\") {\n return resolveTypeName;\n }\n // TODO: sanity check that this is an object type resolver\n const typeResolvers = this.resolvers[typeName] as\n | ObjectTypeResolver<unknown, unknown, unknown>\n | undefined;\n const fieldResolver = typeResolvers?.[fieldName];\n return typeof fieldResolver === \"function\"\n ? fieldResolver\n : fieldResolver?.resolve;\n }\n\n public getSubscriptionFieldResolver(\n subscriptionTypeName: TypeName,\n fieldName: string,\n ): FunctionFieldResolver<unknown, unknown> | undefined {\n // TODO: sanity check that this is an object type resolver\n const typeResolvers = this.resolvers[subscriptionTypeName] as\n | ObjectTypeResolver<unknown, unknown, unknown>\n | undefined;\n const fieldResolver = typeResolvers?.[fieldName];\n return typeof fieldResolver === \"function\"\n ? fieldResolver\n : fieldResolver?.subscribe;\n }\n\n public getAbstractTypeResolver(\n typeName: TypeName,\n ): TypeResolver<unknown, unknown> | undefined {\n const resolver = this.resolvers[typeName];\n return resolver &&\n (isUnionTypeResolver(resolver) || isInterfaceTypeResolver(resolver))\n ? resolver.__resolveType\n : undefined;\n }\n\n public getLeafTypeResolver(\n typeRef: TypeReference,\n ): GraphQLLeafType | undefined {\n // TODO: consider removing GraphQLEnumType and GraphQLScalarType\n const typeName = typeNameFromReference(typeRef);\n\n if (specifiedScalarResolvers[typeName]) {\n return specifiedScalarResolvers[typeName];\n }\n\n const typeDef = this.getLeafType(typeRef);\n if (!typeDef) {\n // TODO: Could be still in resolvers (i.e., add \"found in resolvers, not found in schema\" error?)\n return undefined;\n }\n\n if (typeDef[0] === TypeKind.SCALAR) {\n let scalarType = this.scalarTypeResolvers.get(typeName);\n if (!scalarType) {\n const tmp = this.resolvers[typeName];\n scalarType = isScalarTypeResolver(tmp)\n ? tmp\n : new GraphQLScalarType({ name: typeName, description: \"\" });\n this.scalarTypeResolvers.set(typeName, scalarType);\n }\n return scalarType;\n }\n if (typeDef[0] === TypeKind.ENUM) {\n let enumType = this.enumTypeResolvers.get(typeName);\n if (!enumType) {\n const tmp = this.resolvers[typeName]; // Can only be graphql-tools map\n const customValues = isObjectLike(tmp) ? tmp : emptyObject;\n\n const values: Record<string, object> = {};\n for (const value of typeDef[EnumKeys.values] ?? []) {\n values[value] =\n typeof customValues[value] !== \"undefined\"\n ? { value: customValues[value] }\n : {};\n }\n enumType = new GraphQLEnumType({\n name: typeName,\n values,\n });\n this.enumTypeResolvers.set(typeName, enumType);\n }\n return enumType;\n }\n return undefined;\n }\n\n public getDirectiveName(def: DirectiveDefinitionTuple) {\n return def[DirectiveKeys.name];\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,iBAAkC,yBAAyB;AACpE;AAAA,EAEE;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EAEA;AAAA,EAKA;AAAA,EAGA;AAAA,OAEK;AAQP,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,6BAA6B;AA6BtC,IAAM,4BAAuD,CAAC,SAAS,MAAM;AAC7E,IAAM,uBAAwC;AAC9C,IAAM,kBAA2D,CAC/D,SACA,OACA,UACA,SACG,KAAK;AACV,IAAM,8BAA8B,oBAAI,IAGtC;AACF,IAAM,4BAA4B,oBAAI,IAGpC;AACF,IAAM,cAAc,OAAO,OAAO,uBAAO,OAAO,IAAI,CAAC;AAE9C,IAAM,gBAAN,MAAoB;AAAA,EAWzB,YAAY,UAA0B;AACpC,SAAK,WAAW,SAAS;AACzB,SAAK,cAAc,SAAS;AAC5B,SAAK,YAAY,SAAS;AAC1B,SAAK,iBAAiB,SAAS;AAE/B,QAAI,sBAAsB,4BAA4B,IAAI,KAAK,QAAQ;AACvE,QAAI,CAAC,qBAAqB;AACxB,4BAAsB,oBAAI,IAAkC;AAC5D,kCAA4B,IAAI,KAAK,UAAU,mBAAmB;AAAA,IACpE;AACA,SAAK,sBAAsB;AAE3B,QAAI,oBAAoB,0BAA0B,IAAI,KAAK,QAAQ;AACnE,QAAI,CAAC,mBAAmB;AACtB,0BAAoB,oBAAI,IAA+B;AACvD,gCAA0B,IAAI,KAAK,UAAU,iBAAiB;AAAA,IAChE;AACA,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EAEO,qBAAqB,UAA0B;AACpD,QAAI,KAAK,aAAa,SAAS,UAAU;AACvC,YAAM,IAAI;AAAA,QACR,qFACM,KAAK,gBAAgB,SAAS;AAAA,MACtC;AAAA,IACF;AACA,SAAK,WAAW,SAAS;AACzB,SAAK,cAAc,SAAS;AAC5B,SAAK,YAAY,SAAS;AAC1B,SAAK,iBAAiB,SAAS;AAAA,EACjC;AAAA,EAEO,iBACL,YACe;AACf,WAAO,MAAM,QAAQ,UAAU,IAAI,WAAW,CAAC,IAAI;AAAA,EACrD;AAAA,EAEO,cACL,UACuC;AACvC,UAAM,OAAO,KAAK,YAAY,MAAM,QAAQ;AAC5C,YAAO,6BAAO,QAAO,SAAS,SAAS,OAAO;AAAA,EAChD;AAAA,EAEO,gBACL,KACmC;AACnC,WAAO,IAAI,WAAW,MAAM;AAAA,EAC9B;AAAA,EAEO,2BACL,eACA,YACA;AACA,UAAM,QAAQ,KAAK,iBAAiB,aAAa;AACjD,UAAM,OAAO,KAAK,YAAY,MAAM,UAAU;AAE9C,QAAI,CAAC,OAAO;AACV,YAAM,IAAI;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF;AACA,QAAI,CAAC,MAAM;AACT,WAAK,YAAY,MAAM,UAAU,IAAI;AAAA,QACnC,SAAS;AAAA,QACT,uBAAO,OAAO,IAAI;AAAA,QAClB,CAAC,aAAa;AAAA,MAChB;AACA;AAAA,IACF;AACA,QAAI,kBAAkB,KAAK,WAAW,UAAU;AAChD,QAAI,CAAC,iBAAiB;AACpB,wBAAkB,CAAC;AACnB,WAAK,WAAW,UAAU,IAAI;AAAA,IAChC;AACA,QAAI,CAAC,gBAAgB,SAAS,aAAa,GAAG;AAC5C,sBAAgB,KAAK,aAAa;AAAA,IACpC;AAAA,EACF;AAAA,EAEO,SAAS,UAAoB,WAAmB;AAvLzD;AAwLI,QAAI,cAAc,cAAc;AAC9B,aAAO;AAAA,IACT;AACA,YACE,UAAK,YAAY,UAAU,SAAS,MAApC,YACA,KAAK,mBAAmB,UAAU,SAAS;AAAA,EAE/C;AAAA,EAEQ,YACN,UACA,WAC6B;AApMjC;AAqMI,UAAM,OAAO,KAAK,YAAY,MAAM,QAAQ;AAC5C,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AACA,QAAI,KAAK,CAAC,MAAM,SAAS,QAAQ;AAC/B,cAAO,UAAK,WAAW,MAAM,MAAtB,mBAA0B;AAAA,IACnC;AACA,QAAI,KAAK,CAAC,MAAM,SAAS,WAAW;AAClC,cAAO,UAAK,cAAc,MAAM,MAAzB,mBAA6B;AAAA,IACtC;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,mBAAmB,UAAoB,WAAmB;AAChE,UAAM,OAAO,KAAK,YAAY,MAAM,QAAQ;AAC5C,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AACA,QAAI,KAAK,CAAC,MAAM,SAAS,UAAU,KAAK,WAAW,UAAU,GAAG;AAC9D,aAAO,KAAK,UAAU,KAAK,WAAW,UAAU,GAAG,SAAS;AAAA,IAC9D;AACA,QAAI,KAAK,CAAC,MAAM,SAAS,aAAa,KAAK,cAAc,UAAU,GAAG;AACpE,aAAO,KAAK,UAAU,KAAK,cAAc,UAAU,GAAG,SAAS;AAAA,IACjE;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,UAAU,gBAA4B,WAAmB;AAG/D,eAAW,iBAAiB,gBAAgB;AAC1C,YAAM,WAAW,KAAK,YAAY,eAAe,SAAS;AAC1D,UAAI,aAAa,QAAW;AAC1B,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEO,kBACL,OACwC;AACxC,WAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,UAAU,SAAS,IAAI;AAAA,EAC7D;AAAA,EAEO,sBACL,WACwC;AACxC,WAAO,UAAU,cAAc,SAAS;AAAA,EAC1C;AAAA,EAEO,2BACL,KACwC;AAExC,WAAO,MAAM,QAAQ,GAAG,IAAI,IAAI,UAAU,SAAS,IAAI;AAAA,EACzD;AAAA,EAEO,mBACL,SAC4C;AAC5C,UAAM,OAAO,KAAK,YAAY,MAAM,sBAAsB,OAAO,CAAC;AAClE,YAAO,6BAAO,QAAO,SAAS,QAAQ,OAAO;AAAA,EAC/C;AAAA,EAEO,qBACL,KAC4B;AAC5B,WAAO,IAAI,gBAAgB,MAAM;AAAA,EACnC;AAAA,EAEO,qBACL,YACqB;AACrB,WAAO,MAAM,QAAQ,UAAU,IAC3B,WAAW,eAAe,YAAY,IACtC;AAAA,EACN;AAAA,EAEO,YACL,SACiE;AACjE,UAAM,WAAW,sBAAsB,OAAO;AAE9C,QAAI,sBAAsB,QAAQ,GAAG;AACnC,aAAO;AAAA,IACT;AACA,UAAM,OAAO,KAAK,YAAY,MAAM,QAAQ;AAC5C,SAAI,6BAAO,QAAO,SAAS,SAAQ,6BAAO,QAAO,SAAS,QAAQ;AAChE,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,SAAiC;AAChD,QAAI,OAAO,YAAY,UAAU;AAE/B,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,KAAK,YAAY;AAC/B,UAAM,WAAW,sBAAsB,OAAO;AAC9C,WAAO,CAAC,CAAC,MAAM,QAAQ,KAAK,sBAAsB,QAAQ;AAAA,EAC5D;AAAA,EAEO,YAAY,SAAiC;AA7StD;AA8SI,QAAI,OAAO,YAAY,UAAU;AAE/B,aAAO;AAAA,IACT;AACA,UAAM,WAAW,sBAAsB,OAAO;AAC9C,UAAM,QAAO,UAAK,YAAY,MAAM,QAAQ,MAA/B,mBAAmC;AAChD,WACE,sBAAsB,QAAQ,KAC9B,SAAS,SAAS,QAClB,SAAS,SAAS,SAClB,SAAS,SAAS;AAAA,EAEtB;AAAA,EAEO,aAAa,SAAiC;AA5TvD;AA6TI,QAAI,OAAO,YAAY,UAAU;AAE/B,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,KAAK,YAAY;AAC/B,UAAM,QAAO,WAAM,OAAO,MAAb,YAAkB,MAAM,sBAAsB,OAAO,CAAC;AACnE,YAAO,6BAAO,QAAO,SAAS;AAAA,EAChC;AAAA,EAEO,eAAe,SAAiC;AAtUzD;AAuUI,QAAI,OAAO,YAAY,UAAU;AAE/B,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,KAAK,YAAY;AAC/B,UAAM,QAAO,WAAM,OAAO,MAAb,YAAkB,MAAM,sBAAsB,OAAO,CAAC;AACnE,YAAO,6BAAO,QAAO,SAAS,UAAS,6BAAO,QAAO,SAAS;AAAA,EAChE;AAAA,EAEO,aACL,SACsC;AAlV1C;AAmVI,UAAM,QAAQ,KAAK,YAAY;AAC/B,UAAM,QAAO,WAAM,OAAO,MAAb,YAAkB,MAAM,sBAAsB,OAAO,CAAC;AACnE,YAAO,6BAAO,QAAO,SAAS,QAAQ,OAAO;AAAA,EAC/C;AAAA,EAEO,iBACL,SAC0C;AA1V9C;AA2VI,UAAM,QAAQ,KAAK,YAAY;AAC/B,UAAM,QAAO,WAAM,OAAO,MAAb,YAAkB,MAAM,sBAAsB,OAAO,CAAC;AACnE,YAAO,6BAAO,QAAO,SAAS,YAAY,OAAO;AAAA,EACnD;AAAA,EAEO,UACL,kBACA,kBACS;AAnWb;AAoWI,UAAM,QAAQ,KAAK,aAAa,gBAAgB;AAChD,QAAI,OAAO;AACT,aAAO,MAAM,UAAU,KAAK,EAAE,SAAS,gBAAgB;AAAA,IACzD;AACA,UAAM,SAAS,KAAK,cAAc,gBAAgB;AAClD,QAAI,QAAQ;AACV,aAAO,CAAC,GAAC,YAAO,WAAW,UAAU,MAA5B,mBAA+B,SAAS;AAAA,IACnD;AACA,UAAM,QAAQ,KAAK,iBAAiB,gBAAgB;AACpD,QAAI,OAAO;AACT,aAAO,CAAC,GAAC,WAAM,cAAc,UAAU,MAA9B,mBAAiC,SAAS;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AAAA,EAEO,iBACL,UACA,WACqD;AACrD,QAAI,cAAc,cAAc;AAC9B,aAAO;AAAA,IACT;AAEA,UAAM,gBAAgB,KAAK,UAAU,QAAQ;AAG7C,UAAM,gBAAgB,+CAAgB;AACtC,WAAO,OAAO,kBAAkB,aAC5B,gBACA,+CAAe;AAAA,EACrB;AAAA,EAEO,6BACL,sBACA,WACqD;AAErD,UAAM,gBAAgB,KAAK,UAAU,oBAAoB;AAGzD,UAAM,gBAAgB,+CAAgB;AACtC,WAAO,OAAO,kBAAkB,aAC5B,gBACA,+CAAe;AAAA,EACrB;AAAA,EAEO,wBACL,UAC4C;AAC5C,UAAM,WAAW,KAAK,UAAU,QAAQ;AACxC,WAAO,aACJ,oBAAoB,QAAQ,KAAK,wBAAwB,QAAQ,KAChE,SAAS,gBACT;AAAA,EACN;AAAA,EAEO,oBACL,SAC6B;AA9ZjC;AAgaI,UAAM,WAAW,sBAAsB,OAAO;AAE9C,QAAI,yBAAyB,QAAQ,GAAG;AACtC,aAAO,yBAAyB,QAAQ;AAAA,IAC1C;AAEA,UAAM,UAAU,KAAK,YAAY,OAAO;AACxC,QAAI,CAAC,SAAS;AAEZ,aAAO;AAAA,IACT;AAEA,QAAI,QAAQ,CAAC,MAAM,SAAS,QAAQ;AAClC,UAAI,aAAa,KAAK,oBAAoB,IAAI,QAAQ;AACtD,UAAI,CAAC,YAAY;AACf,cAAM,MAAM,KAAK,UAAU,QAAQ;AACnC,qBAAa,qBAAqB,GAAG,IACjC,MACA,IAAI,kBAAkB,EAAE,MAAM,UAAU,aAAa,GAAG,CAAC;AAC7D,aAAK,oBAAoB,IAAI,UAAU,UAAU;AAAA,MACnD;AACA,aAAO;AAAA,IACT;AACA,QAAI,QAAQ,CAAC,MAAM,SAAS,MAAM;AAChC,UAAI,WAAW,KAAK,kBAAkB,IAAI,QAAQ;AAClD,UAAI,CAAC,UAAU;AACb,cAAM,MAAM,KAAK,UAAU,QAAQ;AACnC,cAAM,eAAe,aAAa,GAAG,IAAI,MAAM;AAE/C,cAAM,SAAiC,CAAC;AACxC,mBAAW,UAAS,aAAQ,SAAS,MAAM,MAAvB,YAA4B,CAAC,GAAG;AAClD,iBAAO,KAAK,IACV,OAAO,aAAa,KAAK,MAAM,cAC3B,EAAE,OAAO,aAAa,KAAK,EAAE,IAC7B,CAAC;AAAA,QACT;AACA,mBAAW,IAAI,gBAAgB;AAAA,UAC7B,MAAM;AAAA,UACN;AAAA,QACF,CAAC;AACD,aAAK,kBAAkB,IAAI,UAAU,QAAQ;AAAA,MAC/C;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEO,iBAAiB,KAA+B;AACrD,WAAO,IAAI,cAAc,IAAI;AAAA,EAC/B;AACF;AAzXa,cACJ,eAAe,EAAE,YAAY,KAAK;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TypeReference } from "./definition";
|
|
2
|
+
import { TypeNode } from "graphql";
|
|
3
|
+
export declare function isNonNullType(typeRef: TypeReference): boolean;
|
|
4
|
+
export declare function isListType(typeRef: TypeReference): boolean;
|
|
5
|
+
export declare function isWrapperType(typeRef: TypeReference): boolean;
|
|
6
|
+
export declare function unwrap(typeRef: TypeReference): TypeReference;
|
|
7
|
+
export declare function unwrapAll(typeRef: TypeReference): TypeReference;
|
|
8
|
+
export declare function typeNameFromReference(typeRef: TypeReference): string;
|
|
9
|
+
export declare function typeReferenceFromNode(typeNode: TypeNode): TypeReference;
|
|
10
|
+
export declare function typeReferenceFromName(name: string): TypeReference;
|
|
11
|
+
export declare function inspectTypeReference(typeRef: TypeReference): string;
|
|
12
|
+
//# sourceMappingURL=reference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/schema/reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAS,QAAQ,EAAE,MAAM,SAAS,CAAC;AA+C1C,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAG7D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAG1D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAE7D;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAW5D;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAG/D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAiBpE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,CAEvE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAEjE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAInE"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var reference_exports = {};
|
|
20
|
+
__export(reference_exports, {
|
|
21
|
+
inspectTypeReference: () => inspectTypeReference,
|
|
22
|
+
isListType: () => isListType,
|
|
23
|
+
isNonNullType: () => isNonNullType,
|
|
24
|
+
isWrapperType: () => isWrapperType,
|
|
25
|
+
typeNameFromReference: () => typeNameFromReference,
|
|
26
|
+
typeReferenceFromName: () => typeReferenceFromName,
|
|
27
|
+
typeReferenceFromNode: () => typeReferenceFromNode,
|
|
28
|
+
unwrap: () => unwrap,
|
|
29
|
+
unwrapAll: () => unwrapAll
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(reference_exports);
|
|
32
|
+
var import_graphql = require("graphql");
|
|
33
|
+
const EncodedSpecTypes = [
|
|
34
|
+
"String",
|
|
35
|
+
"Boolean",
|
|
36
|
+
"Int",
|
|
37
|
+
"Float",
|
|
38
|
+
"ID",
|
|
39
|
+
"String!",
|
|
40
|
+
"Boolean!",
|
|
41
|
+
"Int!",
|
|
42
|
+
"Float!",
|
|
43
|
+
"ID!",
|
|
44
|
+
"[String]",
|
|
45
|
+
"[Boolean]",
|
|
46
|
+
"[Int]",
|
|
47
|
+
"[Float]",
|
|
48
|
+
"[ID]",
|
|
49
|
+
"[String!]",
|
|
50
|
+
"[Boolean!]",
|
|
51
|
+
"[Int!]",
|
|
52
|
+
"[Float!]",
|
|
53
|
+
"[ID!]",
|
|
54
|
+
"[String]!",
|
|
55
|
+
"[Boolean]!",
|
|
56
|
+
"[Int]!",
|
|
57
|
+
"[Float]!",
|
|
58
|
+
"[ID]!",
|
|
59
|
+
"[String!]!",
|
|
60
|
+
"[Boolean!]!",
|
|
61
|
+
"[Int!]!",
|
|
62
|
+
"[Float!]!",
|
|
63
|
+
"[ID!]!"
|
|
64
|
+
];
|
|
65
|
+
const NamedTypeMod = 5;
|
|
66
|
+
const NON_NULL_TOKEN = "!";
|
|
67
|
+
const LIST_START_TOKEN = "[";
|
|
68
|
+
const LIST_END_TOKEN = "]";
|
|
69
|
+
function isNonNullType(typeRef) {
|
|
70
|
+
const ref = decodeRef(typeRef);
|
|
71
|
+
return ref[ref.length - 1] === NON_NULL_TOKEN;
|
|
72
|
+
}
|
|
73
|
+
function isListType(typeRef) {
|
|
74
|
+
const ref = decodeRef(typeRef);
|
|
75
|
+
return ref[ref.length - 1] === LIST_END_TOKEN;
|
|
76
|
+
}
|
|
77
|
+
function isWrapperType(typeRef) {
|
|
78
|
+
return isNonNullType(typeRef) || isListType(typeRef);
|
|
79
|
+
}
|
|
80
|
+
function unwrap(typeRef) {
|
|
81
|
+
const ref = decodeRef(typeRef);
|
|
82
|
+
if (isListType(ref)) {
|
|
83
|
+
return encodeRef(ref.slice(1, ref.length - 1));
|
|
84
|
+
}
|
|
85
|
+
if (isNonNullType(ref)) {
|
|
86
|
+
return encodeRef(ref.slice(0, ref.length - 1));
|
|
87
|
+
}
|
|
88
|
+
throw new Error(
|
|
89
|
+
`Can not unwrap type "${ref}": it is a nullable type and is not a list`
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
function unwrapAll(typeRef) {
|
|
93
|
+
const typeName = typeNameFromReference(typeRef);
|
|
94
|
+
return encodeRef(typeName);
|
|
95
|
+
}
|
|
96
|
+
function typeNameFromReference(typeRef) {
|
|
97
|
+
if (typeof typeRef === "number" && EncodedSpecTypes[typeRef % NamedTypeMod]) {
|
|
98
|
+
return EncodedSpecTypes[typeRef % NamedTypeMod];
|
|
99
|
+
}
|
|
100
|
+
const ref = decodeRef(typeRef);
|
|
101
|
+
let startIndex = 0;
|
|
102
|
+
let endIndex = ref.length - 1;
|
|
103
|
+
while (ref[startIndex] === LIST_START_TOKEN) {
|
|
104
|
+
startIndex++;
|
|
105
|
+
}
|
|
106
|
+
while (ref[endIndex] === LIST_END_TOKEN || ref[endIndex] === NON_NULL_TOKEN) {
|
|
107
|
+
endIndex--;
|
|
108
|
+
}
|
|
109
|
+
return startIndex === 0 && endIndex === ref.length - 1 ? ref : ref.slice(startIndex, endIndex + 1);
|
|
110
|
+
}
|
|
111
|
+
function typeReferenceFromNode(typeNode) {
|
|
112
|
+
return encodeRef((0, import_graphql.print)(typeNode));
|
|
113
|
+
}
|
|
114
|
+
function typeReferenceFromName(name) {
|
|
115
|
+
return encodeRef(name);
|
|
116
|
+
}
|
|
117
|
+
function inspectTypeReference(typeRef) {
|
|
118
|
+
var _a;
|
|
119
|
+
return typeof typeRef === "number" ? (_a = EncodedSpecTypes[typeRef]) != null ? _a : "(UnknownType)" : typeRef;
|
|
120
|
+
}
|
|
121
|
+
function decodeRef(typeRef) {
|
|
122
|
+
if (typeof typeRef === "number") {
|
|
123
|
+
const stringRef = EncodedSpecTypes[typeRef];
|
|
124
|
+
if (!stringRef) {
|
|
125
|
+
const rangeEnd = EncodedSpecTypes.length - 1;
|
|
126
|
+
throw new Error(
|
|
127
|
+
`Unexpected type reference: ${typeRef} (expecting string or numeric id in the range 0-${rangeEnd})`
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
return stringRef;
|
|
131
|
+
}
|
|
132
|
+
return typeRef;
|
|
133
|
+
}
|
|
134
|
+
function encodeRef(typeRef) {
|
|
135
|
+
const index = EncodedSpecTypes.indexOf(typeRef);
|
|
136
|
+
return index === -1 ? typeRef : index;
|
|
137
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/schema/reference.ts"],
|
|
4
|
+
"sourcesContent": ["import { TypeReference } from \"./definition\";\nimport { print, TypeNode } from \"graphql\";\n\n// Assumes strict reference format (i.e. no whitespaces, comments, etc)\n// (must be enforced at build-time)\nconst EncodedSpecTypes = [\n \"String\",\n \"Boolean\",\n \"Int\",\n \"Float\",\n \"ID\",\n\n \"String!\",\n \"Boolean!\",\n \"Int!\",\n \"Float!\",\n \"ID!\",\n\n \"[String]\",\n \"[Boolean]\",\n \"[Int]\",\n \"[Float]\",\n \"[ID]\",\n\n \"[String!]\",\n \"[Boolean!]\",\n \"[Int!]\",\n \"[Float!]\",\n \"[ID!]\",\n\n \"[String]!\",\n \"[Boolean]!\",\n \"[Int]!\",\n \"[Float]!\",\n \"[ID]!\",\n\n \"[String!]!\",\n \"[Boolean!]!\",\n \"[Int!]!\",\n \"[Float!]!\",\n \"[ID!]!\",\n];\nconst NamedTypeMod = 5;\n\nconst NON_NULL_TOKEN = \"!\";\nconst LIST_START_TOKEN = \"[\";\nconst LIST_END_TOKEN = \"]\";\n\nexport function isNonNullType(typeRef: TypeReference): boolean {\n const ref = decodeRef(typeRef);\n return ref[ref.length - 1] === NON_NULL_TOKEN;\n}\n\nexport function isListType(typeRef: TypeReference): boolean {\n const ref = decodeRef(typeRef);\n return ref[ref.length - 1] === LIST_END_TOKEN;\n}\n\nexport function isWrapperType(typeRef: TypeReference): boolean {\n return isNonNullType(typeRef) || isListType(typeRef);\n}\n\nexport function unwrap(typeRef: TypeReference): TypeReference {\n const ref = decodeRef(typeRef);\n if (isListType(ref)) {\n return encodeRef(ref.slice(1, ref.length - 1));\n }\n if (isNonNullType(ref)) {\n return encodeRef(ref.slice(0, ref.length - 1));\n }\n throw new Error(\n `Can not unwrap type \"${ref}\": it is a nullable type and is not a list`,\n );\n}\n\nexport function unwrapAll(typeRef: TypeReference): TypeReference {\n const typeName = typeNameFromReference(typeRef);\n return encodeRef(typeName);\n}\n\nexport function typeNameFromReference(typeRef: TypeReference): string {\n if (typeof typeRef === \"number\" && EncodedSpecTypes[typeRef % NamedTypeMod]) {\n // Fast path for spec types\n return EncodedSpecTypes[typeRef % NamedTypeMod];\n }\n const ref = decodeRef(typeRef);\n let startIndex = 0;\n let endIndex = ref.length - 1;\n while (ref[startIndex] === LIST_START_TOKEN) {\n startIndex++;\n }\n while (ref[endIndex] === LIST_END_TOKEN || ref[endIndex] === NON_NULL_TOKEN) {\n endIndex--;\n }\n return startIndex === 0 && endIndex === ref.length - 1\n ? ref\n : ref.slice(startIndex, endIndex + 1);\n}\n\nexport function typeReferenceFromNode(typeNode: TypeNode): TypeReference {\n return encodeRef(print(typeNode));\n}\n\nexport function typeReferenceFromName(name: string): TypeReference {\n return encodeRef(name);\n}\n\nexport function inspectTypeReference(typeRef: TypeReference): string {\n return typeof typeRef === \"number\"\n ? EncodedSpecTypes[typeRef] ?? \"(UnknownType)\"\n : typeRef;\n}\n\nfunction decodeRef(typeRef: TypeReference): string {\n if (typeof typeRef === \"number\") {\n const stringRef = EncodedSpecTypes[typeRef];\n if (!stringRef) {\n const rangeEnd = EncodedSpecTypes.length - 1;\n throw new Error(\n `Unexpected type reference: ${typeRef} ` +\n `(expecting string or numeric id in the range 0-${rangeEnd})`,\n );\n }\n return stringRef;\n }\n return typeRef;\n}\n\nfunction encodeRef(typeRef: string): TypeReference {\n const index = EncodedSpecTypes.indexOf(typeRef);\n return index === -1 ? typeRef : index;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAAgC;AAIhC,MAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,MAAM,eAAe;AAErB,MAAM,iBAAiB;AACvB,MAAM,mBAAmB;AACzB,MAAM,iBAAiB;AAEhB,SAAS,cAAc,SAAiC;AAC7D,QAAM,MAAM,UAAU,OAAO;AAC7B,SAAO,IAAI,IAAI,SAAS,CAAC,MAAM;AACjC;AAEO,SAAS,WAAW,SAAiC;AAC1D,QAAM,MAAM,UAAU,OAAO;AAC7B,SAAO,IAAI,IAAI,SAAS,CAAC,MAAM;AACjC;AAEO,SAAS,cAAc,SAAiC;AAC7D,SAAO,cAAc,OAAO,KAAK,WAAW,OAAO;AACrD;AAEO,SAAS,OAAO,SAAuC;AAC5D,QAAM,MAAM,UAAU,OAAO;AAC7B,MAAI,WAAW,GAAG,GAAG;AACnB,WAAO,UAAU,IAAI,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC;AAAA,EAC/C;AACA,MAAI,cAAc,GAAG,GAAG;AACtB,WAAO,UAAU,IAAI,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC;AAAA,EAC/C;AACA,QAAM,IAAI;AAAA,IACR,wBAAwB;AAAA,EAC1B;AACF;AAEO,SAAS,UAAU,SAAuC;AAC/D,QAAM,WAAW,sBAAsB,OAAO;AAC9C,SAAO,UAAU,QAAQ;AAC3B;AAEO,SAAS,sBAAsB,SAAgC;AACpE,MAAI,OAAO,YAAY,YAAY,iBAAiB,UAAU,YAAY,GAAG;AAE3E,WAAO,iBAAiB,UAAU,YAAY;AAAA,EAChD;AACA,QAAM,MAAM,UAAU,OAAO;AAC7B,MAAI,aAAa;AACjB,MAAI,WAAW,IAAI,SAAS;AAC5B,SAAO,IAAI,UAAU,MAAM,kBAAkB;AAC3C;AAAA,EACF;AACA,SAAO,IAAI,QAAQ,MAAM,kBAAkB,IAAI,QAAQ,MAAM,gBAAgB;AAC3E;AAAA,EACF;AACA,SAAO,eAAe,KAAK,aAAa,IAAI,SAAS,IACjD,MACA,IAAI,MAAM,YAAY,WAAW,CAAC;AACxC;AAEO,SAAS,sBAAsB,UAAmC;AACvE,SAAO,cAAU,sBAAM,QAAQ,CAAC;AAClC;AAEO,SAAS,sBAAsB,MAA6B;AACjE,SAAO,UAAU,IAAI;AACvB;AAEO,SAAS,qBAAqB,SAAgC;AA3GrE;AA4GE,SAAO,OAAO,YAAY,YACtB,sBAAiB,OAAO,MAAxB,YAA6B,kBAC7B;AACN;AAEA,SAAS,UAAU,SAAgC;AACjD,MAAI,OAAO,YAAY,UAAU;AAC/B,UAAM,YAAY,iBAAiB,OAAO;AAC1C,QAAI,CAAC,WAAW;AACd,YAAM,WAAW,iBAAiB,SAAS;AAC3C,YAAM,IAAI;AAAA,QACR,8BAA8B,0DACsB;AAAA,MACtD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,UAAU,SAAgC;AACjD,QAAM,QAAQ,iBAAiB,QAAQ,OAAO;AAC9C,SAAO,UAAU,KAAK,UAAU;AAClC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// src/schema/reference.ts
|
|
2
|
+
import { print } from "graphql";
|
|
3
|
+
var EncodedSpecTypes = [
|
|
4
|
+
"String",
|
|
5
|
+
"Boolean",
|
|
6
|
+
"Int",
|
|
7
|
+
"Float",
|
|
8
|
+
"ID",
|
|
9
|
+
"String!",
|
|
10
|
+
"Boolean!",
|
|
11
|
+
"Int!",
|
|
12
|
+
"Float!",
|
|
13
|
+
"ID!",
|
|
14
|
+
"[String]",
|
|
15
|
+
"[Boolean]",
|
|
16
|
+
"[Int]",
|
|
17
|
+
"[Float]",
|
|
18
|
+
"[ID]",
|
|
19
|
+
"[String!]",
|
|
20
|
+
"[Boolean!]",
|
|
21
|
+
"[Int!]",
|
|
22
|
+
"[Float!]",
|
|
23
|
+
"[ID!]",
|
|
24
|
+
"[String]!",
|
|
25
|
+
"[Boolean]!",
|
|
26
|
+
"[Int]!",
|
|
27
|
+
"[Float]!",
|
|
28
|
+
"[ID]!",
|
|
29
|
+
"[String!]!",
|
|
30
|
+
"[Boolean!]!",
|
|
31
|
+
"[Int!]!",
|
|
32
|
+
"[Float!]!",
|
|
33
|
+
"[ID!]!"
|
|
34
|
+
];
|
|
35
|
+
var NamedTypeMod = 5;
|
|
36
|
+
var NON_NULL_TOKEN = "!";
|
|
37
|
+
var LIST_START_TOKEN = "[";
|
|
38
|
+
var LIST_END_TOKEN = "]";
|
|
39
|
+
function isNonNullType(typeRef) {
|
|
40
|
+
const ref = decodeRef(typeRef);
|
|
41
|
+
return ref[ref.length - 1] === NON_NULL_TOKEN;
|
|
42
|
+
}
|
|
43
|
+
function isListType(typeRef) {
|
|
44
|
+
const ref = decodeRef(typeRef);
|
|
45
|
+
return ref[ref.length - 1] === LIST_END_TOKEN;
|
|
46
|
+
}
|
|
47
|
+
function isWrapperType(typeRef) {
|
|
48
|
+
return isNonNullType(typeRef) || isListType(typeRef);
|
|
49
|
+
}
|
|
50
|
+
function unwrap(typeRef) {
|
|
51
|
+
const ref = decodeRef(typeRef);
|
|
52
|
+
if (isListType(ref)) {
|
|
53
|
+
return encodeRef(ref.slice(1, ref.length - 1));
|
|
54
|
+
}
|
|
55
|
+
if (isNonNullType(ref)) {
|
|
56
|
+
return encodeRef(ref.slice(0, ref.length - 1));
|
|
57
|
+
}
|
|
58
|
+
throw new Error(
|
|
59
|
+
`Can not unwrap type "${ref}": it is a nullable type and is not a list`
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
function unwrapAll(typeRef) {
|
|
63
|
+
const typeName = typeNameFromReference(typeRef);
|
|
64
|
+
return encodeRef(typeName);
|
|
65
|
+
}
|
|
66
|
+
function typeNameFromReference(typeRef) {
|
|
67
|
+
if (typeof typeRef === "number" && EncodedSpecTypes[typeRef % NamedTypeMod]) {
|
|
68
|
+
return EncodedSpecTypes[typeRef % NamedTypeMod];
|
|
69
|
+
}
|
|
70
|
+
const ref = decodeRef(typeRef);
|
|
71
|
+
let startIndex = 0;
|
|
72
|
+
let endIndex = ref.length - 1;
|
|
73
|
+
while (ref[startIndex] === LIST_START_TOKEN) {
|
|
74
|
+
startIndex++;
|
|
75
|
+
}
|
|
76
|
+
while (ref[endIndex] === LIST_END_TOKEN || ref[endIndex] === NON_NULL_TOKEN) {
|
|
77
|
+
endIndex--;
|
|
78
|
+
}
|
|
79
|
+
return startIndex === 0 && endIndex === ref.length - 1 ? ref : ref.slice(startIndex, endIndex + 1);
|
|
80
|
+
}
|
|
81
|
+
function typeReferenceFromNode(typeNode) {
|
|
82
|
+
return encodeRef(print(typeNode));
|
|
83
|
+
}
|
|
84
|
+
function typeReferenceFromName(name) {
|
|
85
|
+
return encodeRef(name);
|
|
86
|
+
}
|
|
87
|
+
function inspectTypeReference(typeRef) {
|
|
88
|
+
var _a;
|
|
89
|
+
return typeof typeRef === "number" ? (_a = EncodedSpecTypes[typeRef]) != null ? _a : "(UnknownType)" : typeRef;
|
|
90
|
+
}
|
|
91
|
+
function decodeRef(typeRef) {
|
|
92
|
+
if (typeof typeRef === "number") {
|
|
93
|
+
const stringRef = EncodedSpecTypes[typeRef];
|
|
94
|
+
if (!stringRef) {
|
|
95
|
+
const rangeEnd = EncodedSpecTypes.length - 1;
|
|
96
|
+
throw new Error(
|
|
97
|
+
`Unexpected type reference: ${typeRef} (expecting string or numeric id in the range 0-${rangeEnd})`
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
return stringRef;
|
|
101
|
+
}
|
|
102
|
+
return typeRef;
|
|
103
|
+
}
|
|
104
|
+
function encodeRef(typeRef) {
|
|
105
|
+
const index = EncodedSpecTypes.indexOf(typeRef);
|
|
106
|
+
return index === -1 ? typeRef : index;
|
|
107
|
+
}
|
|
108
|
+
export {
|
|
109
|
+
inspectTypeReference,
|
|
110
|
+
isListType,
|
|
111
|
+
isNonNullType,
|
|
112
|
+
isWrapperType,
|
|
113
|
+
typeNameFromReference,
|
|
114
|
+
typeReferenceFromName,
|
|
115
|
+
typeReferenceFromNode,
|
|
116
|
+
unwrap,
|
|
117
|
+
unwrapAll
|
|
118
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/schema/reference.ts"],
|
|
4
|
+
"sourcesContent": ["import { TypeReference } from \"./definition\";\nimport { print, TypeNode } from \"graphql\";\n\n// Assumes strict reference format (i.e. no whitespaces, comments, etc)\n// (must be enforced at build-time)\nconst EncodedSpecTypes = [\n \"String\",\n \"Boolean\",\n \"Int\",\n \"Float\",\n \"ID\",\n\n \"String!\",\n \"Boolean!\",\n \"Int!\",\n \"Float!\",\n \"ID!\",\n\n \"[String]\",\n \"[Boolean]\",\n \"[Int]\",\n \"[Float]\",\n \"[ID]\",\n\n \"[String!]\",\n \"[Boolean!]\",\n \"[Int!]\",\n \"[Float!]\",\n \"[ID!]\",\n\n \"[String]!\",\n \"[Boolean]!\",\n \"[Int]!\",\n \"[Float]!\",\n \"[ID]!\",\n\n \"[String!]!\",\n \"[Boolean!]!\",\n \"[Int!]!\",\n \"[Float!]!\",\n \"[ID!]!\",\n];\nconst NamedTypeMod = 5;\n\nconst NON_NULL_TOKEN = \"!\";\nconst LIST_START_TOKEN = \"[\";\nconst LIST_END_TOKEN = \"]\";\n\nexport function isNonNullType(typeRef: TypeReference): boolean {\n const ref = decodeRef(typeRef);\n return ref[ref.length - 1] === NON_NULL_TOKEN;\n}\n\nexport function isListType(typeRef: TypeReference): boolean {\n const ref = decodeRef(typeRef);\n return ref[ref.length - 1] === LIST_END_TOKEN;\n}\n\nexport function isWrapperType(typeRef: TypeReference): boolean {\n return isNonNullType(typeRef) || isListType(typeRef);\n}\n\nexport function unwrap(typeRef: TypeReference): TypeReference {\n const ref = decodeRef(typeRef);\n if (isListType(ref)) {\n return encodeRef(ref.slice(1, ref.length - 1));\n }\n if (isNonNullType(ref)) {\n return encodeRef(ref.slice(0, ref.length - 1));\n }\n throw new Error(\n `Can not unwrap type \"${ref}\": it is a nullable type and is not a list`,\n );\n}\n\nexport function unwrapAll(typeRef: TypeReference): TypeReference {\n const typeName = typeNameFromReference(typeRef);\n return encodeRef(typeName);\n}\n\nexport function typeNameFromReference(typeRef: TypeReference): string {\n if (typeof typeRef === \"number\" && EncodedSpecTypes[typeRef % NamedTypeMod]) {\n // Fast path for spec types\n return EncodedSpecTypes[typeRef % NamedTypeMod];\n }\n const ref = decodeRef(typeRef);\n let startIndex = 0;\n let endIndex = ref.length - 1;\n while (ref[startIndex] === LIST_START_TOKEN) {\n startIndex++;\n }\n while (ref[endIndex] === LIST_END_TOKEN || ref[endIndex] === NON_NULL_TOKEN) {\n endIndex--;\n }\n return startIndex === 0 && endIndex === ref.length - 1\n ? ref\n : ref.slice(startIndex, endIndex + 1);\n}\n\nexport function typeReferenceFromNode(typeNode: TypeNode): TypeReference {\n return encodeRef(print(typeNode));\n}\n\nexport function typeReferenceFromName(name: string): TypeReference {\n return encodeRef(name);\n}\n\nexport function inspectTypeReference(typeRef: TypeReference): string {\n return typeof typeRef === \"number\"\n ? EncodedSpecTypes[typeRef] ?? \"(UnknownType)\"\n : typeRef;\n}\n\nfunction decodeRef(typeRef: TypeReference): string {\n if (typeof typeRef === \"number\") {\n const stringRef = EncodedSpecTypes[typeRef];\n if (!stringRef) {\n const rangeEnd = EncodedSpecTypes.length - 1;\n throw new Error(\n `Unexpected type reference: ${typeRef} ` +\n `(expecting string or numeric id in the range 0-${rangeEnd})`,\n );\n }\n return stringRef;\n }\n return typeRef;\n}\n\nfunction encodeRef(typeRef: string): TypeReference {\n const index = EncodedSpecTypes.indexOf(typeRef);\n return index === -1 ? typeRef : index;\n}\n"],
|
|
5
|
+
"mappings": ";AACA,SAAS,aAAuB;AAIhC,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAM,eAAe;AAErB,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AACzB,IAAM,iBAAiB;AAEhB,SAAS,cAAc,SAAiC;AAC7D,QAAM,MAAM,UAAU,OAAO;AAC7B,SAAO,IAAI,IAAI,SAAS,CAAC,MAAM;AACjC;AAEO,SAAS,WAAW,SAAiC;AAC1D,QAAM,MAAM,UAAU,OAAO;AAC7B,SAAO,IAAI,IAAI,SAAS,CAAC,MAAM;AACjC;AAEO,SAAS,cAAc,SAAiC;AAC7D,SAAO,cAAc,OAAO,KAAK,WAAW,OAAO;AACrD;AAEO,SAAS,OAAO,SAAuC;AAC5D,QAAM,MAAM,UAAU,OAAO;AAC7B,MAAI,WAAW,GAAG,GAAG;AACnB,WAAO,UAAU,IAAI,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC;AAAA,EAC/C;AACA,MAAI,cAAc,GAAG,GAAG;AACtB,WAAO,UAAU,IAAI,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC;AAAA,EAC/C;AACA,QAAM,IAAI;AAAA,IACR,wBAAwB;AAAA,EAC1B;AACF;AAEO,SAAS,UAAU,SAAuC;AAC/D,QAAM,WAAW,sBAAsB,OAAO;AAC9C,SAAO,UAAU,QAAQ;AAC3B;AAEO,SAAS,sBAAsB,SAAgC;AACpE,MAAI,OAAO,YAAY,YAAY,iBAAiB,UAAU,YAAY,GAAG;AAE3E,WAAO,iBAAiB,UAAU,YAAY;AAAA,EAChD;AACA,QAAM,MAAM,UAAU,OAAO;AAC7B,MAAI,aAAa;AACjB,MAAI,WAAW,IAAI,SAAS;AAC5B,SAAO,IAAI,UAAU,MAAM,kBAAkB;AAC3C;AAAA,EACF;AACA,SAAO,IAAI,QAAQ,MAAM,kBAAkB,IAAI,QAAQ,MAAM,gBAAgB;AAC3E;AAAA,EACF;AACA,SAAO,eAAe,KAAK,aAAa,IAAI,SAAS,IACjD,MACA,IAAI,MAAM,YAAY,WAAW,CAAC;AACxC;AAEO,SAAS,sBAAsB,UAAmC;AACvE,SAAO,UAAU,MAAM,QAAQ,CAAC;AAClC;AAEO,SAAS,sBAAsB,MAA6B;AACjE,SAAO,UAAU,IAAI;AACvB;AAEO,SAAS,qBAAqB,SAAgC;AA3GrE;AA4GE,SAAO,OAAO,YAAY,YACtB,sBAAiB,OAAO,MAAxB,YAA6B,kBAC7B;AACN;AAEA,SAAS,UAAU,SAAgC;AACjD,MAAI,OAAO,YAAY,UAAU;AAC/B,UAAM,YAAY,iBAAiB,OAAO;AAC1C,QAAI,CAAC,WAAW;AACd,YAAM,WAAW,iBAAiB,SAAS;AAC3C,YAAM,IAAI;AAAA,QACR,8BAA8B,0DACsB;AAAA,MACtD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,UAAU,SAAgC;AACjD,QAAM,QAAQ,iBAAiB,QAAQ,OAAO;AAC9C,SAAO,UAAU,KAAK,UAAU;AAClC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Resolver, UserUnionTypeResolver, UserInterfaceTypeResolver, ScalarTypeResolver } from "../types";
|
|
2
|
+
export declare function isInterfaceTypeResolver(resolver: Resolver<unknown, unknown>): resolver is UserInterfaceTypeResolver;
|
|
3
|
+
export declare function isUnionTypeResolver(resolver: Resolver<unknown, unknown>): resolver is UserUnionTypeResolver;
|
|
4
|
+
export declare function isScalarTypeResolver(resolver: unknown): resolver is ScalarTypeResolver;
|
|
5
|
+
export declare const specifiedScalarResolvers: {
|
|
6
|
+
[key: string]: ScalarTypeResolver;
|
|
7
|
+
};
|
|
8
|
+
export declare function isSpecifiedScalarType(typeName: string): boolean;
|
|
9
|
+
//# sourceMappingURL=resolvers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../src/schema/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAUlB,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,GACnC,QAAQ,IAAI,yBAAyB,CAEvC;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,GACnC,QAAQ,IAAI,qBAAqB,CAEnC;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,OAAO,GAChB,QAAQ,IAAI,kBAAkB,CAEhC;AAED,eAAO,MAAM,wBAAwB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAMzE,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE/D"}
|