@effect-gql/core 0.1.0 → 1.1.0
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/README.md +100 -0
- package/builder/index.cjs +1446 -0
- package/builder/index.cjs.map +1 -0
- package/builder/index.d.cts +260 -0
- package/{dist/builder/pipe-api.d.ts → builder/index.d.ts} +50 -21
- package/builder/index.js +1405 -0
- package/builder/index.js.map +1 -0
- package/index.cjs +3469 -0
- package/index.cjs.map +1 -0
- package/index.d.cts +529 -0
- package/index.d.ts +529 -0
- package/index.js +3292 -0
- package/index.js.map +1 -0
- package/package.json +19 -28
- package/schema-builder-DKvkzU_M.d.cts +965 -0
- package/schema-builder-DKvkzU_M.d.ts +965 -0
- package/server/index.cjs +1579 -0
- package/server/index.cjs.map +1 -0
- package/server/index.d.cts +682 -0
- package/server/index.d.ts +682 -0
- package/server/index.js +1548 -0
- package/server/index.js.map +1 -0
- package/dist/analyzer-extension.d.ts +0 -105
- package/dist/analyzer-extension.d.ts.map +0 -1
- package/dist/analyzer-extension.js +0 -137
- package/dist/analyzer-extension.js.map +0 -1
- package/dist/builder/execute.d.ts +0 -26
- package/dist/builder/execute.d.ts.map +0 -1
- package/dist/builder/execute.js +0 -104
- package/dist/builder/execute.js.map +0 -1
- package/dist/builder/field-builders.d.ts +0 -30
- package/dist/builder/field-builders.d.ts.map +0 -1
- package/dist/builder/field-builders.js +0 -200
- package/dist/builder/field-builders.js.map +0 -1
- package/dist/builder/index.d.ts +0 -7
- package/dist/builder/index.d.ts.map +0 -1
- package/dist/builder/index.js +0 -31
- package/dist/builder/index.js.map +0 -1
- package/dist/builder/pipe-api.d.ts.map +0 -1
- package/dist/builder/pipe-api.js +0 -151
- package/dist/builder/pipe-api.js.map +0 -1
- package/dist/builder/schema-builder.d.ts +0 -301
- package/dist/builder/schema-builder.d.ts.map +0 -1
- package/dist/builder/schema-builder.js +0 -566
- package/dist/builder/schema-builder.js.map +0 -1
- package/dist/builder/type-registry.d.ts +0 -80
- package/dist/builder/type-registry.d.ts.map +0 -1
- package/dist/builder/type-registry.js +0 -505
- package/dist/builder/type-registry.js.map +0 -1
- package/dist/builder/types.d.ts +0 -283
- package/dist/builder/types.d.ts.map +0 -1
- package/dist/builder/types.js +0 -3
- package/dist/builder/types.js.map +0 -1
- package/dist/cli/generate-schema.d.ts +0 -29
- package/dist/cli/generate-schema.d.ts.map +0 -1
- package/dist/cli/generate-schema.js +0 -233
- package/dist/cli/generate-schema.js.map +0 -1
- package/dist/cli/index.d.ts +0 -19
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -24
- package/dist/cli/index.js.map +0 -1
- package/dist/context.d.ts +0 -18
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js +0 -11
- package/dist/context.js.map +0 -1
- package/dist/error.d.ts +0 -45
- package/dist/error.d.ts.map +0 -1
- package/dist/error.js +0 -29
- package/dist/error.js.map +0 -1
- package/dist/extensions.d.ts +0 -130
- package/dist/extensions.d.ts.map +0 -1
- package/dist/extensions.js +0 -78
- package/dist/extensions.js.map +0 -1
- package/dist/index.d.ts +0 -12
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -47
- package/dist/index.js.map +0 -1
- package/dist/loader.d.ts +0 -169
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -237
- package/dist/loader.js.map +0 -1
- package/dist/resolver-context.d.ts +0 -154
- package/dist/resolver-context.d.ts.map +0 -1
- package/dist/resolver-context.js +0 -184
- package/dist/resolver-context.js.map +0 -1
- package/dist/schema-mapping.d.ts +0 -30
- package/dist/schema-mapping.d.ts.map +0 -1
- package/dist/schema-mapping.js +0 -280
- package/dist/schema-mapping.js.map +0 -1
- package/dist/server/cache-control.d.ts +0 -96
- package/dist/server/cache-control.d.ts.map +0 -1
- package/dist/server/cache-control.js +0 -308
- package/dist/server/cache-control.js.map +0 -1
- package/dist/server/complexity.d.ts +0 -165
- package/dist/server/complexity.d.ts.map +0 -1
- package/dist/server/complexity.js +0 -433
- package/dist/server/complexity.js.map +0 -1
- package/dist/server/config.d.ts +0 -66
- package/dist/server/config.d.ts.map +0 -1
- package/dist/server/config.js +0 -104
- package/dist/server/config.js.map +0 -1
- package/dist/server/graphiql.d.ts +0 -5
- package/dist/server/graphiql.d.ts.map +0 -1
- package/dist/server/graphiql.js +0 -43
- package/dist/server/graphiql.js.map +0 -1
- package/dist/server/index.d.ts +0 -18
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js +0 -48
- package/dist/server/index.js.map +0 -1
- package/dist/server/router.d.ts +0 -79
- package/dist/server/router.d.ts.map +0 -1
- package/dist/server/router.js +0 -232
- package/dist/server/router.js.map +0 -1
- package/dist/server/schema-builder-extensions.d.ts +0 -42
- package/dist/server/schema-builder-extensions.d.ts.map +0 -1
- package/dist/server/schema-builder-extensions.js +0 -48
- package/dist/server/schema-builder-extensions.js.map +0 -1
- package/dist/server/sse-adapter.d.ts +0 -64
- package/dist/server/sse-adapter.d.ts.map +0 -1
- package/dist/server/sse-adapter.js +0 -227
- package/dist/server/sse-adapter.js.map +0 -1
- package/dist/server/sse-types.d.ts +0 -192
- package/dist/server/sse-types.d.ts.map +0 -1
- package/dist/server/sse-types.js +0 -63
- package/dist/server/sse-types.js.map +0 -1
- package/dist/server/ws-adapter.d.ts +0 -39
- package/dist/server/ws-adapter.d.ts.map +0 -1
- package/dist/server/ws-adapter.js +0 -247
- package/dist/server/ws-adapter.js.map +0 -1
- package/dist/server/ws-types.d.ts +0 -169
- package/dist/server/ws-types.d.ts.map +0 -1
- package/dist/server/ws-types.js +0 -11
- package/dist/server/ws-types.js.map +0 -1
- package/dist/server/ws-utils.d.ts +0 -42
- package/dist/server/ws-utils.d.ts.map +0 -1
- package/dist/server/ws-utils.js +0 -99
- package/dist/server/ws-utils.js.map +0 -1
- package/src/analyzer-extension.ts +0 -254
- package/src/builder/execute.ts +0 -153
- package/src/builder/field-builders.ts +0 -322
- package/src/builder/index.ts +0 -48
- package/src/builder/pipe-api.ts +0 -312
- package/src/builder/schema-builder.ts +0 -970
- package/src/builder/type-registry.ts +0 -670
- package/src/builder/types.ts +0 -305
- package/src/context.ts +0 -23
- package/src/error.ts +0 -32
- package/src/extensions.ts +0 -240
- package/src/index.ts +0 -32
- package/src/loader.ts +0 -363
- package/src/resolver-context.ts +0 -253
- package/src/schema-mapping.ts +0 -307
- package/src/server/cache-control.ts +0 -590
- package/src/server/complexity.ts +0 -774
- package/src/server/config.ts +0 -174
- package/src/server/graphiql.ts +0 -38
- package/src/server/index.ts +0 -96
- package/src/server/router.ts +0 -432
- package/src/server/schema-builder-extensions.ts +0 -51
- package/src/server/sse-adapter.ts +0 -327
- package/src/server/sse-types.ts +0 -234
- package/src/server/ws-adapter.ts +0 -355
- package/src/server/ws-types.ts +0 -192
- package/src/server/ws-utils.ts +0 -136
|
@@ -1,433 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.combineCalculators = exports.depthOnlyCalculator = exports.ComplexityConfigFromEnv = exports.validateComplexity = exports.defaultComplexityCalculator = exports.ComplexityAnalysisError = exports.ComplexityLimitExceededError = void 0;
|
|
4
|
-
const effect_1 = require("effect");
|
|
5
|
-
const graphql_1 = require("graphql");
|
|
6
|
-
// ============================================================================
|
|
7
|
-
// Errors
|
|
8
|
-
// ============================================================================
|
|
9
|
-
/**
|
|
10
|
-
* Error thrown when query complexity exceeds configured limits
|
|
11
|
-
*/
|
|
12
|
-
class ComplexityLimitExceededError extends effect_1.Data.TaggedError("ComplexityLimitExceededError") {
|
|
13
|
-
}
|
|
14
|
-
exports.ComplexityLimitExceededError = ComplexityLimitExceededError;
|
|
15
|
-
/**
|
|
16
|
-
* Error thrown when complexity analysis fails
|
|
17
|
-
*/
|
|
18
|
-
class ComplexityAnalysisError extends effect_1.Data.TaggedError("ComplexityAnalysisError") {
|
|
19
|
-
}
|
|
20
|
-
exports.ComplexityAnalysisError = ComplexityAnalysisError;
|
|
21
|
-
// ============================================================================
|
|
22
|
-
// Default Calculator
|
|
23
|
-
// ============================================================================
|
|
24
|
-
/**
|
|
25
|
-
* Default complexity calculator that walks the AST and computes:
|
|
26
|
-
* - depth: Maximum nesting level
|
|
27
|
-
* - complexity: Sum of field costs
|
|
28
|
-
* - fieldCount: Total number of field selections
|
|
29
|
-
* - aliasCount: Number of aliased fields
|
|
30
|
-
*/
|
|
31
|
-
const defaultComplexityCalculator = (defaultCost = 1) => {
|
|
32
|
-
return (info) => effect_1.Effect.try({
|
|
33
|
-
try: () => {
|
|
34
|
-
const fragments = new Map();
|
|
35
|
-
// Collect fragment definitions
|
|
36
|
-
for (const definition of info.document.definitions) {
|
|
37
|
-
if (definition.kind === graphql_1.Kind.FRAGMENT_DEFINITION) {
|
|
38
|
-
fragments.set(definition.name.value, definition);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// Get the root type for the operation
|
|
42
|
-
const rootType = getRootType(info.schema, info.operation.operation);
|
|
43
|
-
if (!rootType) {
|
|
44
|
-
throw new Error(`No root type found for operation: ${info.operation.operation}`);
|
|
45
|
-
}
|
|
46
|
-
// Analyze the selection set
|
|
47
|
-
const result = analyzeSelectionSet(info.operation.selectionSet, rootType, info.schema, fragments, info.fieldComplexities, info.variables ?? {}, defaultCost, 1, // Starting depth
|
|
48
|
-
new Set() // Visited fragments to prevent infinite loops
|
|
49
|
-
);
|
|
50
|
-
return result;
|
|
51
|
-
},
|
|
52
|
-
catch: (error) => new ComplexityAnalysisError({
|
|
53
|
-
message: `Failed to analyze query complexity: ${error}`,
|
|
54
|
-
cause: error,
|
|
55
|
-
}),
|
|
56
|
-
});
|
|
57
|
-
};
|
|
58
|
-
exports.defaultComplexityCalculator = defaultComplexityCalculator;
|
|
59
|
-
/**
|
|
60
|
-
* Get the root type for an operation
|
|
61
|
-
*/
|
|
62
|
-
function getRootType(schema, operation) {
|
|
63
|
-
switch (operation) {
|
|
64
|
-
case "query":
|
|
65
|
-
return schema.getQueryType() ?? null;
|
|
66
|
-
case "mutation":
|
|
67
|
-
return schema.getMutationType() ?? null;
|
|
68
|
-
case "subscription":
|
|
69
|
-
return schema.getSubscriptionType() ?? null;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Get the named type from a potentially wrapped type
|
|
74
|
-
*/
|
|
75
|
-
function getNamedType(type) {
|
|
76
|
-
if (type instanceof graphql_1.GraphQLNonNull || type instanceof graphql_1.GraphQLList) {
|
|
77
|
-
return getNamedType(type.ofType);
|
|
78
|
-
}
|
|
79
|
-
if (type instanceof graphql_1.GraphQLObjectType) {
|
|
80
|
-
return type;
|
|
81
|
-
}
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Merge a child result into an accumulator (mutates accumulator)
|
|
86
|
-
*/
|
|
87
|
-
function accumulateResult(acc, result) {
|
|
88
|
-
acc.maxDepth = Math.max(acc.maxDepth, result.depth);
|
|
89
|
-
acc.complexity += result.complexity;
|
|
90
|
-
acc.fieldCount += result.fieldCount;
|
|
91
|
-
acc.aliasCount += result.aliasCount;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Analyze a selection set and return complexity metrics
|
|
95
|
-
*/
|
|
96
|
-
function analyzeSelectionSet(selectionSet, parentType, schema, fragments, fieldComplexities, variables, defaultCost, currentDepth, visitedFragments) {
|
|
97
|
-
const ctx = { schema, fragments, fieldComplexities, variables, defaultCost };
|
|
98
|
-
const acc = { maxDepth: currentDepth, complexity: 0, fieldCount: 0, aliasCount: 0 };
|
|
99
|
-
for (const selection of selectionSet.selections) {
|
|
100
|
-
const result = analyzeSelection(selection, parentType, ctx, currentDepth, visitedFragments);
|
|
101
|
-
accumulateResult(acc, result);
|
|
102
|
-
}
|
|
103
|
-
return {
|
|
104
|
-
depth: acc.maxDepth,
|
|
105
|
-
complexity: acc.complexity,
|
|
106
|
-
fieldCount: acc.fieldCount,
|
|
107
|
-
aliasCount: acc.aliasCount,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Analyze a single selection node (field, fragment spread, or inline fragment)
|
|
112
|
-
*/
|
|
113
|
-
function analyzeSelection(selection, parentType, ctx, currentDepth, visitedFragments) {
|
|
114
|
-
switch (selection.kind) {
|
|
115
|
-
case graphql_1.Kind.FIELD:
|
|
116
|
-
return analyzeField(selection, parentType, ctx, currentDepth, visitedFragments);
|
|
117
|
-
case graphql_1.Kind.FRAGMENT_SPREAD:
|
|
118
|
-
return analyzeFragmentSpread(selection, ctx, currentDepth, visitedFragments);
|
|
119
|
-
case graphql_1.Kind.INLINE_FRAGMENT:
|
|
120
|
-
return analyzeInlineFragment(selection, parentType, ctx, currentDepth, visitedFragments);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Analyze a field node
|
|
125
|
-
*/
|
|
126
|
-
function analyzeField(field, parentType, ctx, currentDepth, visitedFragments) {
|
|
127
|
-
const fieldName = field.name.value;
|
|
128
|
-
const aliasCount = field.alias ? 1 : 0;
|
|
129
|
-
// Introspection fields
|
|
130
|
-
if (fieldName.startsWith("__")) {
|
|
131
|
-
return { depth: currentDepth, complexity: 0, fieldCount: 1, aliasCount };
|
|
132
|
-
}
|
|
133
|
-
// Get the field from the schema
|
|
134
|
-
const schemaField = parentType.getFields()[fieldName];
|
|
135
|
-
if (!schemaField) {
|
|
136
|
-
// Field not found - skip (will be caught by validation)
|
|
137
|
-
return { depth: currentDepth, complexity: ctx.defaultCost, fieldCount: 1, aliasCount };
|
|
138
|
-
}
|
|
139
|
-
// Calculate field arguments
|
|
140
|
-
const args = resolveFieldArguments(field, ctx.variables);
|
|
141
|
-
// Get field complexity
|
|
142
|
-
const complexityKey = `${parentType.name}.${fieldName}`;
|
|
143
|
-
const fieldComplexity = ctx.fieldComplexities.get(complexityKey);
|
|
144
|
-
const cost = fieldComplexity !== undefined
|
|
145
|
-
? typeof fieldComplexity === "function"
|
|
146
|
-
? fieldComplexity(args)
|
|
147
|
-
: fieldComplexity
|
|
148
|
-
: ctx.defaultCost;
|
|
149
|
-
// If the field has a selection set, analyze it
|
|
150
|
-
if (field.selectionSet) {
|
|
151
|
-
const fieldType = getNamedType(schemaField.type);
|
|
152
|
-
if (fieldType) {
|
|
153
|
-
const nestedResult = analyzeSelectionSet(field.selectionSet, fieldType, ctx.schema, ctx.fragments, ctx.fieldComplexities, ctx.variables, ctx.defaultCost, currentDepth + 1, visitedFragments);
|
|
154
|
-
return {
|
|
155
|
-
depth: nestedResult.depth,
|
|
156
|
-
complexity: cost + nestedResult.complexity,
|
|
157
|
-
fieldCount: 1 + nestedResult.fieldCount,
|
|
158
|
-
aliasCount: aliasCount + nestedResult.aliasCount,
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return { depth: currentDepth, complexity: cost, fieldCount: 1, aliasCount };
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Analyze a fragment spread
|
|
166
|
-
*/
|
|
167
|
-
function analyzeFragmentSpread(spread, ctx, currentDepth, visitedFragments) {
|
|
168
|
-
const fragmentName = spread.name.value;
|
|
169
|
-
// Prevent infinite loops with fragment cycles
|
|
170
|
-
if (visitedFragments.has(fragmentName)) {
|
|
171
|
-
return { depth: currentDepth, complexity: 0, fieldCount: 0, aliasCount: 0 };
|
|
172
|
-
}
|
|
173
|
-
const fragment = ctx.fragments.get(fragmentName);
|
|
174
|
-
if (!fragment) {
|
|
175
|
-
return { depth: currentDepth, complexity: 0, fieldCount: 0, aliasCount: 0 };
|
|
176
|
-
}
|
|
177
|
-
const fragmentType = ctx.schema.getType(fragment.typeCondition.name.value);
|
|
178
|
-
if (!(fragmentType instanceof graphql_1.GraphQLObjectType)) {
|
|
179
|
-
return { depth: currentDepth, complexity: 0, fieldCount: 0, aliasCount: 0 };
|
|
180
|
-
}
|
|
181
|
-
const newVisited = new Set(visitedFragments);
|
|
182
|
-
newVisited.add(fragmentName);
|
|
183
|
-
return analyzeSelectionSet(fragment.selectionSet, fragmentType, ctx.schema, ctx.fragments, ctx.fieldComplexities, ctx.variables, ctx.defaultCost, currentDepth, newVisited);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Analyze an inline fragment
|
|
187
|
-
*/
|
|
188
|
-
function analyzeInlineFragment(fragment, parentType, ctx, currentDepth, visitedFragments) {
|
|
189
|
-
let targetType = parentType;
|
|
190
|
-
if (fragment.typeCondition) {
|
|
191
|
-
const conditionType = ctx.schema.getType(fragment.typeCondition.name.value);
|
|
192
|
-
if (conditionType instanceof graphql_1.GraphQLObjectType) {
|
|
193
|
-
targetType = conditionType;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
return analyzeSelectionSet(fragment.selectionSet, targetType, ctx.schema, ctx.fragments, ctx.fieldComplexities, ctx.variables, ctx.defaultCost, currentDepth, visitedFragments);
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Resolve field arguments, substituting variables
|
|
200
|
-
*/
|
|
201
|
-
function resolveFieldArguments(field, variables) {
|
|
202
|
-
const args = {};
|
|
203
|
-
if (!field.arguments) {
|
|
204
|
-
return args;
|
|
205
|
-
}
|
|
206
|
-
for (const arg of field.arguments) {
|
|
207
|
-
const value = arg.value;
|
|
208
|
-
switch (value.kind) {
|
|
209
|
-
case graphql_1.Kind.VARIABLE:
|
|
210
|
-
args[arg.name.value] = variables[value.name.value];
|
|
211
|
-
break;
|
|
212
|
-
case graphql_1.Kind.INT:
|
|
213
|
-
args[arg.name.value] = parseInt(value.value, 10);
|
|
214
|
-
break;
|
|
215
|
-
case graphql_1.Kind.FLOAT:
|
|
216
|
-
args[arg.name.value] = parseFloat(value.value);
|
|
217
|
-
break;
|
|
218
|
-
case graphql_1.Kind.STRING:
|
|
219
|
-
args[arg.name.value] = value.value;
|
|
220
|
-
break;
|
|
221
|
-
case graphql_1.Kind.BOOLEAN:
|
|
222
|
-
args[arg.name.value] = value.value;
|
|
223
|
-
break;
|
|
224
|
-
case graphql_1.Kind.NULL:
|
|
225
|
-
args[arg.name.value] = null;
|
|
226
|
-
break;
|
|
227
|
-
case graphql_1.Kind.ENUM:
|
|
228
|
-
args[arg.name.value] = value.value;
|
|
229
|
-
break;
|
|
230
|
-
case graphql_1.Kind.LIST:
|
|
231
|
-
// Simplified - just use empty array for complexity calculation
|
|
232
|
-
args[arg.name.value] = [];
|
|
233
|
-
break;
|
|
234
|
-
case graphql_1.Kind.OBJECT:
|
|
235
|
-
// Simplified - just use empty object for complexity calculation
|
|
236
|
-
args[arg.name.value] = {};
|
|
237
|
-
break;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
return args;
|
|
241
|
-
}
|
|
242
|
-
// ============================================================================
|
|
243
|
-
// Validation
|
|
244
|
-
// ============================================================================
|
|
245
|
-
/**
|
|
246
|
-
* Validate query complexity against configured limits.
|
|
247
|
-
* Returns the complexity result if within limits, or fails with ComplexityLimitExceededError.
|
|
248
|
-
*/
|
|
249
|
-
const validateComplexity = (query, operationName, variables, schema, fieldComplexities, config) => effect_1.Effect.gen(function* () {
|
|
250
|
-
// Parse the query
|
|
251
|
-
const document = yield* effect_1.Effect.try({
|
|
252
|
-
try: () => (0, graphql_1.parse)(query),
|
|
253
|
-
catch: (error) => new ComplexityAnalysisError({
|
|
254
|
-
message: `Failed to parse query: ${error}`,
|
|
255
|
-
cause: error,
|
|
256
|
-
}),
|
|
257
|
-
});
|
|
258
|
-
// Find the operation
|
|
259
|
-
const operation = yield* effect_1.Effect.try({
|
|
260
|
-
try: () => {
|
|
261
|
-
const operations = document.definitions.filter((d) => d.kind === graphql_1.Kind.OPERATION_DEFINITION);
|
|
262
|
-
if (operations.length === 0) {
|
|
263
|
-
throw new Error("No operation found in query");
|
|
264
|
-
}
|
|
265
|
-
if (operationName) {
|
|
266
|
-
const op = operations.find((o) => o.name?.value === operationName);
|
|
267
|
-
if (!op) {
|
|
268
|
-
throw new Error(`Operation "${operationName}" not found`);
|
|
269
|
-
}
|
|
270
|
-
return op;
|
|
271
|
-
}
|
|
272
|
-
if (operations.length > 1) {
|
|
273
|
-
throw new Error("Multiple operations found - operationName required");
|
|
274
|
-
}
|
|
275
|
-
return operations[0];
|
|
276
|
-
},
|
|
277
|
-
catch: (error) => new ComplexityAnalysisError({
|
|
278
|
-
message: String(error),
|
|
279
|
-
cause: error,
|
|
280
|
-
}),
|
|
281
|
-
});
|
|
282
|
-
// Calculate complexity
|
|
283
|
-
const calculator = config.calculator ?? (0, exports.defaultComplexityCalculator)(config.defaultFieldComplexity ?? 1);
|
|
284
|
-
const result = yield* calculator({
|
|
285
|
-
document,
|
|
286
|
-
operation,
|
|
287
|
-
variables,
|
|
288
|
-
schema,
|
|
289
|
-
fieldComplexities,
|
|
290
|
-
});
|
|
291
|
-
// Check limits
|
|
292
|
-
const checkLimit = (limitType, limit, actual) => effect_1.Effect.gen(function* () {
|
|
293
|
-
if (limit !== undefined && actual > limit) {
|
|
294
|
-
const exceededInfo = {
|
|
295
|
-
result,
|
|
296
|
-
exceededLimit: limitType,
|
|
297
|
-
limit,
|
|
298
|
-
actual,
|
|
299
|
-
query,
|
|
300
|
-
operationName,
|
|
301
|
-
};
|
|
302
|
-
// Call onExceeded hook if provided
|
|
303
|
-
if (config.onExceeded) {
|
|
304
|
-
yield* config.onExceeded(exceededInfo);
|
|
305
|
-
}
|
|
306
|
-
yield* effect_1.Effect.fail(new ComplexityLimitExceededError({
|
|
307
|
-
message: `Query ${limitType} of ${actual} exceeds maximum allowed ${limitType} of ${limit}`,
|
|
308
|
-
limit,
|
|
309
|
-
actual,
|
|
310
|
-
limitType,
|
|
311
|
-
}));
|
|
312
|
-
}
|
|
313
|
-
});
|
|
314
|
-
yield* checkLimit("depth", config.maxDepth, result.depth);
|
|
315
|
-
yield* checkLimit("complexity", config.maxComplexity, result.complexity);
|
|
316
|
-
yield* checkLimit("aliases", config.maxAliases, result.aliasCount);
|
|
317
|
-
yield* checkLimit("fields", config.maxFields, result.fieldCount);
|
|
318
|
-
return result;
|
|
319
|
-
});
|
|
320
|
-
exports.validateComplexity = validateComplexity;
|
|
321
|
-
// ============================================================================
|
|
322
|
-
// Environment Configuration
|
|
323
|
-
// ============================================================================
|
|
324
|
-
/**
|
|
325
|
-
* Effect Config for loading complexity configuration from environment variables.
|
|
326
|
-
*
|
|
327
|
-
* Environment variables:
|
|
328
|
-
* - GRAPHQL_MAX_DEPTH: Maximum query depth
|
|
329
|
-
* - GRAPHQL_MAX_COMPLEXITY: Maximum complexity score
|
|
330
|
-
* - GRAPHQL_MAX_ALIASES: Maximum number of aliases
|
|
331
|
-
* - GRAPHQL_MAX_FIELDS: Maximum number of fields
|
|
332
|
-
* - GRAPHQL_DEFAULT_FIELD_COMPLEXITY: Default field complexity (default: 1)
|
|
333
|
-
*/
|
|
334
|
-
exports.ComplexityConfigFromEnv = effect_1.Config.all({
|
|
335
|
-
maxDepth: effect_1.Config.number("GRAPHQL_MAX_DEPTH").pipe(effect_1.Config.option),
|
|
336
|
-
maxComplexity: effect_1.Config.number("GRAPHQL_MAX_COMPLEXITY").pipe(effect_1.Config.option),
|
|
337
|
-
maxAliases: effect_1.Config.number("GRAPHQL_MAX_ALIASES").pipe(effect_1.Config.option),
|
|
338
|
-
maxFields: effect_1.Config.number("GRAPHQL_MAX_FIELDS").pipe(effect_1.Config.option),
|
|
339
|
-
defaultFieldComplexity: effect_1.Config.number("GRAPHQL_DEFAULT_FIELD_COMPLEXITY").pipe(effect_1.Config.withDefault(1)),
|
|
340
|
-
}).pipe(effect_1.Config.map(({ maxDepth, maxComplexity, maxAliases, maxFields, defaultFieldComplexity }) => ({
|
|
341
|
-
maxDepth: effect_1.Option.getOrUndefined(maxDepth),
|
|
342
|
-
maxComplexity: effect_1.Option.getOrUndefined(maxComplexity),
|
|
343
|
-
maxAliases: effect_1.Option.getOrUndefined(maxAliases),
|
|
344
|
-
maxFields: effect_1.Option.getOrUndefined(maxFields),
|
|
345
|
-
defaultFieldComplexity,
|
|
346
|
-
})));
|
|
347
|
-
// ============================================================================
|
|
348
|
-
// Utility Calculators
|
|
349
|
-
// ============================================================================
|
|
350
|
-
/**
|
|
351
|
-
* A simple depth-only calculator that only tracks query depth.
|
|
352
|
-
* Use this when you only care about depth limiting and want fast validation.
|
|
353
|
-
*/
|
|
354
|
-
const depthOnlyCalculator = (info) => effect_1.Effect.try({
|
|
355
|
-
try: () => {
|
|
356
|
-
const fragments = new Map();
|
|
357
|
-
for (const definition of info.document.definitions) {
|
|
358
|
-
if (definition.kind === graphql_1.Kind.FRAGMENT_DEFINITION) {
|
|
359
|
-
fragments.set(definition.name.value, definition);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
const depth = calculateMaxDepth(info.operation.selectionSet, fragments, 1, new Set());
|
|
363
|
-
return {
|
|
364
|
-
depth,
|
|
365
|
-
complexity: 0,
|
|
366
|
-
fieldCount: 0,
|
|
367
|
-
aliasCount: 0,
|
|
368
|
-
};
|
|
369
|
-
},
|
|
370
|
-
catch: (error) => new ComplexityAnalysisError({
|
|
371
|
-
message: `Failed to analyze query depth: ${error}`,
|
|
372
|
-
cause: error,
|
|
373
|
-
}),
|
|
374
|
-
});
|
|
375
|
-
exports.depthOnlyCalculator = depthOnlyCalculator;
|
|
376
|
-
function calculateMaxDepth(selectionSet, fragments, currentDepth, visitedFragments) {
|
|
377
|
-
let maxDepth = currentDepth;
|
|
378
|
-
for (const selection of selectionSet.selections) {
|
|
379
|
-
switch (selection.kind) {
|
|
380
|
-
case graphql_1.Kind.FIELD:
|
|
381
|
-
if (selection.selectionSet) {
|
|
382
|
-
const nestedDepth = calculateMaxDepth(selection.selectionSet, fragments, currentDepth + 1, visitedFragments);
|
|
383
|
-
maxDepth = Math.max(maxDepth, nestedDepth);
|
|
384
|
-
}
|
|
385
|
-
break;
|
|
386
|
-
case graphql_1.Kind.FRAGMENT_SPREAD: {
|
|
387
|
-
const fragmentName = selection.name.value;
|
|
388
|
-
if (!visitedFragments.has(fragmentName)) {
|
|
389
|
-
const fragment = fragments.get(fragmentName);
|
|
390
|
-
if (fragment) {
|
|
391
|
-
const newVisited = new Set(visitedFragments);
|
|
392
|
-
newVisited.add(fragmentName);
|
|
393
|
-
const fragmentDepth = calculateMaxDepth(fragment.selectionSet, fragments, currentDepth, newVisited);
|
|
394
|
-
maxDepth = Math.max(maxDepth, fragmentDepth);
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
break;
|
|
398
|
-
}
|
|
399
|
-
case graphql_1.Kind.INLINE_FRAGMENT: {
|
|
400
|
-
const inlineDepth = calculateMaxDepth(selection.selectionSet, fragments, currentDepth, visitedFragments);
|
|
401
|
-
maxDepth = Math.max(maxDepth, inlineDepth);
|
|
402
|
-
break;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
return maxDepth;
|
|
407
|
-
}
|
|
408
|
-
/**
|
|
409
|
-
* Combine multiple calculators - returns the maximum values from all calculators.
|
|
410
|
-
*/
|
|
411
|
-
const combineCalculators = (...calculators) => {
|
|
412
|
-
return (info) => effect_1.Effect.gen(function* () {
|
|
413
|
-
let maxDepth = 0;
|
|
414
|
-
let maxComplexity = 0;
|
|
415
|
-
let maxFieldCount = 0;
|
|
416
|
-
let maxAliasCount = 0;
|
|
417
|
-
for (const calculator of calculators) {
|
|
418
|
-
const result = yield* calculator(info);
|
|
419
|
-
maxDepth = Math.max(maxDepth, result.depth);
|
|
420
|
-
maxComplexity = Math.max(maxComplexity, result.complexity);
|
|
421
|
-
maxFieldCount = Math.max(maxFieldCount, result.fieldCount);
|
|
422
|
-
maxAliasCount = Math.max(maxAliasCount, result.aliasCount);
|
|
423
|
-
}
|
|
424
|
-
return {
|
|
425
|
-
depth: maxDepth,
|
|
426
|
-
complexity: maxComplexity,
|
|
427
|
-
fieldCount: maxFieldCount,
|
|
428
|
-
aliasCount: maxAliasCount,
|
|
429
|
-
};
|
|
430
|
-
});
|
|
431
|
-
};
|
|
432
|
-
exports.combineCalculators = combineCalculators;
|
|
433
|
-
//# sourceMappingURL=complexity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"complexity.js","sourceRoot":"","sources":["../../src/server/complexity.ts"],"names":[],"mappings":"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"}
|
package/dist/server/config.d.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { Config } from "effect";
|
|
2
|
-
import type { ComplexityConfig } from "./complexity";
|
|
3
|
-
import type { CacheControlConfig } from "./cache-control";
|
|
4
|
-
/**
|
|
5
|
-
* Configuration for the GraphiQL UI
|
|
6
|
-
*/
|
|
7
|
-
export interface GraphiQLConfig {
|
|
8
|
-
/** Path where GraphiQL UI is served (default: "/graphiql") */
|
|
9
|
-
readonly path: string;
|
|
10
|
-
/** URL where GraphiQL sends requests (default: same as graphql path) */
|
|
11
|
-
readonly endpoint: string;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Configuration for the GraphQL router
|
|
15
|
-
*/
|
|
16
|
-
export interface GraphQLRouterConfig {
|
|
17
|
-
/** Path for GraphQL endpoint (default: "/graphql") */
|
|
18
|
-
readonly path: string;
|
|
19
|
-
/** GraphiQL configuration, or false to disable */
|
|
20
|
-
readonly graphiql: false | GraphiQLConfig;
|
|
21
|
-
/** Query complexity limiting configuration */
|
|
22
|
-
readonly complexity?: ComplexityConfig;
|
|
23
|
-
/** Enable introspection queries (default: true). Set to false in production. */
|
|
24
|
-
readonly introspection: boolean;
|
|
25
|
-
/** Cache control configuration for HTTP Cache-Control headers */
|
|
26
|
-
readonly cacheControl?: CacheControlConfig;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Default configuration values
|
|
30
|
-
*/
|
|
31
|
-
export declare const defaultConfig: GraphQLRouterConfig;
|
|
32
|
-
/**
|
|
33
|
-
* Normalize user-provided config (which may use boolean shorthand for graphiql)
|
|
34
|
-
* into the full GraphQLRouterConfig format
|
|
35
|
-
*/
|
|
36
|
-
export interface GraphQLRouterConfigInput {
|
|
37
|
-
readonly path?: string;
|
|
38
|
-
readonly graphiql?: boolean | Partial<GraphiQLConfig>;
|
|
39
|
-
/** Query complexity limiting configuration */
|
|
40
|
-
readonly complexity?: ComplexityConfig;
|
|
41
|
-
/** Enable introspection queries (default: true). Set to false in production. */
|
|
42
|
-
readonly introspection?: boolean;
|
|
43
|
-
/** Cache control configuration for HTTP Cache-Control headers */
|
|
44
|
-
readonly cacheControl?: CacheControlConfig;
|
|
45
|
-
}
|
|
46
|
-
export declare const normalizeConfig: (input?: GraphQLRouterConfigInput) => GraphQLRouterConfig;
|
|
47
|
-
/**
|
|
48
|
-
* Effect Config for loading GraphQL router configuration from environment variables.
|
|
49
|
-
*
|
|
50
|
-
* Environment variables:
|
|
51
|
-
* - GRAPHQL_PATH: Path for GraphQL endpoint (default: "/graphql")
|
|
52
|
-
* - GRAPHQL_INTROSPECTION: Enable introspection queries (default: true)
|
|
53
|
-
* - GRAPHIQL_ENABLED: Enable GraphiQL UI (default: false)
|
|
54
|
-
* - GRAPHIQL_PATH: Path for GraphiQL UI (default: "/graphiql")
|
|
55
|
-
* - GRAPHIQL_ENDPOINT: URL where GraphiQL sends requests (default: same as GRAPHQL_PATH)
|
|
56
|
-
* - GRAPHQL_MAX_DEPTH: Maximum query depth (optional)
|
|
57
|
-
* - GRAPHQL_MAX_COMPLEXITY: Maximum complexity score (optional)
|
|
58
|
-
* - GRAPHQL_MAX_ALIASES: Maximum number of aliases (optional)
|
|
59
|
-
* - GRAPHQL_MAX_FIELDS: Maximum number of fields (optional)
|
|
60
|
-
* - GRAPHQL_DEFAULT_FIELD_COMPLEXITY: Default field complexity (default: 1)
|
|
61
|
-
* - GRAPHQL_CACHE_CONTROL_ENABLED: Enable cache control headers (default: false)
|
|
62
|
-
* - GRAPHQL_CACHE_CONTROL_DEFAULT_MAX_AGE: Default maxAge for root fields (default: 0)
|
|
63
|
-
* - GRAPHQL_CACHE_CONTROL_DEFAULT_SCOPE: Default scope - PUBLIC or PRIVATE (default: PUBLIC)
|
|
64
|
-
*/
|
|
65
|
-
export declare const GraphQLRouterConfigFromEnv: Config.Config<GraphQLRouterConfig>;
|
|
66
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEzD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,cAAc,CAAA;IACzC,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAA;IACtC,gFAAgF;IAChF,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,YAAY,CAAC,EAAE,kBAAkB,CAAA;CAC3C;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,mBAM3B,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACrD,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAA;IACtC,gFAAgF;IAChF,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,iEAAiE;IACjE,QAAQ,CAAC,YAAY,CAAC,EAAE,kBAAkB,CAAA;CAC3C;AAED,eAAO,MAAM,eAAe,GAAI,QAAO,wBAA6B,KAAG,mBAoBtE,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CA6EzE,CAAA"}
|
package/dist/server/config.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GraphQLRouterConfigFromEnv = exports.normalizeConfig = exports.defaultConfig = void 0;
|
|
4
|
-
const effect_1 = require("effect");
|
|
5
|
-
/**
|
|
6
|
-
* Default configuration values
|
|
7
|
-
*/
|
|
8
|
-
exports.defaultConfig = {
|
|
9
|
-
path: "/graphql",
|
|
10
|
-
graphiql: false,
|
|
11
|
-
complexity: undefined,
|
|
12
|
-
introspection: true,
|
|
13
|
-
cacheControl: undefined,
|
|
14
|
-
};
|
|
15
|
-
const normalizeConfig = (input = {}) => {
|
|
16
|
-
const path = input.path ?? exports.defaultConfig.path;
|
|
17
|
-
let graphiql = false;
|
|
18
|
-
if (input.graphiql === true) {
|
|
19
|
-
graphiql = { path: "/graphiql", endpoint: path };
|
|
20
|
-
}
|
|
21
|
-
else if (input.graphiql && typeof input.graphiql === "object") {
|
|
22
|
-
graphiql = {
|
|
23
|
-
path: input.graphiql.path ?? "/graphiql",
|
|
24
|
-
endpoint: input.graphiql.endpoint ?? path,
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
return {
|
|
28
|
-
path,
|
|
29
|
-
graphiql,
|
|
30
|
-
complexity: input.complexity,
|
|
31
|
-
introspection: input.introspection ?? true,
|
|
32
|
-
cacheControl: input.cacheControl,
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
exports.normalizeConfig = normalizeConfig;
|
|
36
|
-
/**
|
|
37
|
-
* Effect Config for loading GraphQL router configuration from environment variables.
|
|
38
|
-
*
|
|
39
|
-
* Environment variables:
|
|
40
|
-
* - GRAPHQL_PATH: Path for GraphQL endpoint (default: "/graphql")
|
|
41
|
-
* - GRAPHQL_INTROSPECTION: Enable introspection queries (default: true)
|
|
42
|
-
* - GRAPHIQL_ENABLED: Enable GraphiQL UI (default: false)
|
|
43
|
-
* - GRAPHIQL_PATH: Path for GraphiQL UI (default: "/graphiql")
|
|
44
|
-
* - GRAPHIQL_ENDPOINT: URL where GraphiQL sends requests (default: same as GRAPHQL_PATH)
|
|
45
|
-
* - GRAPHQL_MAX_DEPTH: Maximum query depth (optional)
|
|
46
|
-
* - GRAPHQL_MAX_COMPLEXITY: Maximum complexity score (optional)
|
|
47
|
-
* - GRAPHQL_MAX_ALIASES: Maximum number of aliases (optional)
|
|
48
|
-
* - GRAPHQL_MAX_FIELDS: Maximum number of fields (optional)
|
|
49
|
-
* - GRAPHQL_DEFAULT_FIELD_COMPLEXITY: Default field complexity (default: 1)
|
|
50
|
-
* - GRAPHQL_CACHE_CONTROL_ENABLED: Enable cache control headers (default: false)
|
|
51
|
-
* - GRAPHQL_CACHE_CONTROL_DEFAULT_MAX_AGE: Default maxAge for root fields (default: 0)
|
|
52
|
-
* - GRAPHQL_CACHE_CONTROL_DEFAULT_SCOPE: Default scope - PUBLIC or PRIVATE (default: PUBLIC)
|
|
53
|
-
*/
|
|
54
|
-
exports.GraphQLRouterConfigFromEnv = effect_1.Config.all({
|
|
55
|
-
path: effect_1.Config.string("GRAPHQL_PATH").pipe(effect_1.Config.withDefault("/graphql")),
|
|
56
|
-
introspection: effect_1.Config.boolean("GRAPHQL_INTROSPECTION").pipe(effect_1.Config.withDefault(true)),
|
|
57
|
-
graphiqlEnabled: effect_1.Config.boolean("GRAPHIQL_ENABLED").pipe(effect_1.Config.withDefault(false)),
|
|
58
|
-
graphiqlPath: effect_1.Config.string("GRAPHIQL_PATH").pipe(effect_1.Config.withDefault("/graphiql")),
|
|
59
|
-
graphiqlEndpoint: effect_1.Config.string("GRAPHIQL_ENDPOINT").pipe(effect_1.Config.option),
|
|
60
|
-
maxDepth: effect_1.Config.number("GRAPHQL_MAX_DEPTH").pipe(effect_1.Config.option),
|
|
61
|
-
maxComplexity: effect_1.Config.number("GRAPHQL_MAX_COMPLEXITY").pipe(effect_1.Config.option),
|
|
62
|
-
maxAliases: effect_1.Config.number("GRAPHQL_MAX_ALIASES").pipe(effect_1.Config.option),
|
|
63
|
-
maxFields: effect_1.Config.number("GRAPHQL_MAX_FIELDS").pipe(effect_1.Config.option),
|
|
64
|
-
defaultFieldComplexity: effect_1.Config.number("GRAPHQL_DEFAULT_FIELD_COMPLEXITY").pipe(effect_1.Config.withDefault(1)),
|
|
65
|
-
cacheControlEnabled: effect_1.Config.boolean("GRAPHQL_CACHE_CONTROL_ENABLED").pipe(effect_1.Config.withDefault(false)),
|
|
66
|
-
cacheControlDefaultMaxAge: effect_1.Config.number("GRAPHQL_CACHE_CONTROL_DEFAULT_MAX_AGE").pipe(effect_1.Config.withDefault(0)),
|
|
67
|
-
cacheControlDefaultScope: effect_1.Config.string("GRAPHQL_CACHE_CONTROL_DEFAULT_SCOPE").pipe(effect_1.Config.withDefault("PUBLIC")),
|
|
68
|
-
}).pipe(effect_1.Config.map(({ path, introspection, graphiqlEnabled, graphiqlPath, graphiqlEndpoint, maxDepth, maxComplexity, maxAliases, maxFields, defaultFieldComplexity, cacheControlEnabled, cacheControlDefaultMaxAge, cacheControlDefaultScope, }) => {
|
|
69
|
-
// Check if any complexity option is set
|
|
70
|
-
const hasComplexity = effect_1.Option.isSome(maxDepth) ||
|
|
71
|
-
effect_1.Option.isSome(maxComplexity) ||
|
|
72
|
-
effect_1.Option.isSome(maxAliases) ||
|
|
73
|
-
effect_1.Option.isSome(maxFields);
|
|
74
|
-
return {
|
|
75
|
-
path,
|
|
76
|
-
introspection,
|
|
77
|
-
graphiql: graphiqlEnabled
|
|
78
|
-
? {
|
|
79
|
-
path: graphiqlPath,
|
|
80
|
-
endpoint: effect_1.Option.isSome(graphiqlEndpoint) ? graphiqlEndpoint.value : path,
|
|
81
|
-
}
|
|
82
|
-
: false,
|
|
83
|
-
complexity: hasComplexity
|
|
84
|
-
? {
|
|
85
|
-
maxDepth: effect_1.Option.getOrUndefined(maxDepth),
|
|
86
|
-
maxComplexity: effect_1.Option.getOrUndefined(maxComplexity),
|
|
87
|
-
maxAliases: effect_1.Option.getOrUndefined(maxAliases),
|
|
88
|
-
maxFields: effect_1.Option.getOrUndefined(maxFields),
|
|
89
|
-
defaultFieldComplexity,
|
|
90
|
-
}
|
|
91
|
-
: undefined,
|
|
92
|
-
cacheControl: cacheControlEnabled
|
|
93
|
-
? {
|
|
94
|
-
enabled: true,
|
|
95
|
-
defaultMaxAge: cacheControlDefaultMaxAge,
|
|
96
|
-
defaultScope: (cacheControlDefaultScope === "PRIVATE"
|
|
97
|
-
? "PRIVATE"
|
|
98
|
-
: "PUBLIC"),
|
|
99
|
-
calculateHttpHeaders: true,
|
|
100
|
-
}
|
|
101
|
-
: undefined,
|
|
102
|
-
};
|
|
103
|
-
}));
|
|
104
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graphiql.d.ts","sourceRoot":"","sources":["../../src/server/graphiql.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,UAAU,MAAM,KAAG,MAkCxC,CAAA"}
|