@apollo/federation-internals 2.11.2 → 2.11.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/dist/argumentCompositionStrategies.d.ts +6 -0
- package/dist/argumentCompositionStrategies.d.ts.map +1 -1
- package/dist/argumentCompositionStrategies.js +77 -0
- package/dist/argumentCompositionStrategies.js.map +1 -1
- package/dist/buildSchema.d.ts.map +1 -1
- package/dist/buildSchema.js +42 -2
- package/dist/buildSchema.js.map +1 -1
- package/dist/directiveAndTypeSpecification.d.ts +8 -3
- package/dist/directiveAndTypeSpecification.d.ts.map +1 -1
- package/dist/directiveAndTypeSpecification.js +2 -1
- package/dist/directiveAndTypeSpecification.js.map +1 -1
- package/dist/error.d.ts +2 -0
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +4 -0
- package/dist/error.js.map +1 -1
- package/dist/federation.d.ts.map +1 -1
- package/dist/federation.js +37 -8
- package/dist/federation.js.map +1 -1
- package/dist/specs/authenticatedSpec.d.ts +2 -0
- package/dist/specs/authenticatedSpec.d.ts.map +1 -1
- package/dist/specs/authenticatedSpec.js +3 -0
- package/dist/specs/authenticatedSpec.js.map +1 -1
- package/dist/specs/connectSpec.d.ts +0 -3
- package/dist/specs/connectSpec.d.ts.map +1 -1
- package/dist/specs/connectSpec.js +228 -60
- package/dist/specs/connectSpec.js.map +1 -1
- package/dist/specs/policySpec.d.ts +4 -0
- package/dist/specs/policySpec.d.ts.map +1 -1
- package/dist/specs/policySpec.js +4 -1
- package/dist/specs/policySpec.js.map +1 -1
- package/dist/specs/requiresScopesSpec.d.ts +4 -0
- package/dist/specs/requiresScopesSpec.d.ts.map +1 -1
- package/dist/specs/requiresScopesSpec.js +4 -1
- package/dist/specs/requiresScopesSpec.js.map +1 -1
- package/package.json +1 -1
- package/src/argumentCompositionStrategies.ts +114 -2
- package/src/buildSchema.ts +51 -0
- package/src/directiveAndTypeSpecification.ts +8 -2
- package/src/error.ts +14 -0
- package/src/federation.ts +45 -8
- package/src/specs/authenticatedSpec.ts +5 -0
- package/src/specs/connectSpec.ts +364 -122
- package/src/specs/policySpec.ts +6 -2
- package/src/specs/requiresScopesSpec.ts +6 -2
|
@@ -6,6 +6,10 @@ const coreSpec_1 = require("./coreSpec");
|
|
|
6
6
|
const definitions_1 = require("../definitions");
|
|
7
7
|
const knownCoreFeatures_1 = require("../knownCoreFeatures");
|
|
8
8
|
const directiveAndTypeSpecification_1 = require("../directiveAndTypeSpecification");
|
|
9
|
+
const error_1 = require("../error");
|
|
10
|
+
const types_1 = require("../types");
|
|
11
|
+
const utils_1 = require("../utils");
|
|
12
|
+
const values_1 = require("../values");
|
|
9
13
|
exports.connectIdentity = 'https://specs.apollo.dev/connect';
|
|
10
14
|
const CONNECT = 'connect';
|
|
11
15
|
const SOURCE = 'source';
|
|
@@ -20,10 +24,165 @@ class ConnectSpecDefinition extends coreSpec_1.FeatureDefinition {
|
|
|
20
24
|
constructor(version, minimumFederationVersion) {
|
|
21
25
|
super(new coreSpec_1.FeatureUrl(exports.connectIdentity, CONNECT, version), minimumFederationVersion);
|
|
22
26
|
this.minimumFederationVersion = minimumFederationVersion;
|
|
27
|
+
function lookupFeatureTypeInSchema(name, kind, schema, feature) {
|
|
28
|
+
(0, utils_1.assert)(feature, `Shouldn't be added without being attached to a @connect spec`);
|
|
29
|
+
const typeName = feature.typeNameInSchema(name);
|
|
30
|
+
const type = schema.typeOfKind(typeName, kind);
|
|
31
|
+
(0, utils_1.assert)(type, () => `Expected "${typeName}" to be defined`);
|
|
32
|
+
return type;
|
|
33
|
+
}
|
|
34
|
+
this.registerType((0, directiveAndTypeSpecification_1.createScalarTypeSpecification)({ name: URL_PATH_TEMPLATE }));
|
|
35
|
+
this.registerType((0, directiveAndTypeSpecification_1.createScalarTypeSpecification)({ name: JSON_SELECTION }));
|
|
36
|
+
this.registerType(createInputObjectTypeSpecification({
|
|
37
|
+
name: CONNECTOR_ERRORS,
|
|
38
|
+
inputFieldsFct: (schema, feature) => {
|
|
39
|
+
const jsonSelectionType = lookupFeatureTypeInSchema(JSON_SELECTION, 'ScalarType', schema, feature);
|
|
40
|
+
return [
|
|
41
|
+
{
|
|
42
|
+
name: 'message',
|
|
43
|
+
type: jsonSelectionType
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'extensions',
|
|
47
|
+
type: jsonSelectionType
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
}));
|
|
52
|
+
this.registerType(createInputObjectTypeSpecification({
|
|
53
|
+
name: HTTP_HEADER_MAPPING,
|
|
54
|
+
inputFieldsFct: (schema) => [
|
|
55
|
+
{
|
|
56
|
+
name: 'name',
|
|
57
|
+
type: new definitions_1.NonNullType(schema.stringType())
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'from',
|
|
61
|
+
type: schema.stringType()
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'value',
|
|
65
|
+
type: schema.stringType()
|
|
66
|
+
},
|
|
67
|
+
]
|
|
68
|
+
}));
|
|
69
|
+
this.registerType(createInputObjectTypeSpecification({
|
|
70
|
+
name: CONNECT_BATCH,
|
|
71
|
+
inputFieldsFct: (schema) => [
|
|
72
|
+
{
|
|
73
|
+
name: 'maxSize',
|
|
74
|
+
type: schema.intType()
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}));
|
|
78
|
+
this.registerType(createInputObjectTypeSpecification({
|
|
79
|
+
name: SOURCE_HTTP,
|
|
80
|
+
inputFieldsFct: (schema, feature) => {
|
|
81
|
+
const jsonSelectionType = lookupFeatureTypeInSchema(JSON_SELECTION, 'ScalarType', schema, feature);
|
|
82
|
+
const httpHeaderMappingType = lookupFeatureTypeInSchema(HTTP_HEADER_MAPPING, 'InputObjectType', schema, feature);
|
|
83
|
+
return [
|
|
84
|
+
{
|
|
85
|
+
name: 'baseURL',
|
|
86
|
+
type: new definitions_1.NonNullType(schema.stringType())
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'headers',
|
|
90
|
+
type: new definitions_1.ListType(new definitions_1.NonNullType(httpHeaderMappingType))
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: 'path',
|
|
94
|
+
type: jsonSelectionType
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'queryParams',
|
|
98
|
+
type: jsonSelectionType
|
|
99
|
+
}
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
}));
|
|
103
|
+
this.registerType(createInputObjectTypeSpecification({
|
|
104
|
+
name: CONNECT_HTTP,
|
|
105
|
+
inputFieldsFct: (schema, feature) => {
|
|
106
|
+
const urlPathTemplateType = lookupFeatureTypeInSchema(URL_PATH_TEMPLATE, 'ScalarType', schema, feature);
|
|
107
|
+
const jsonSelectionType = lookupFeatureTypeInSchema(JSON_SELECTION, 'ScalarType', schema, feature);
|
|
108
|
+
const httpHeaderMappingType = lookupFeatureTypeInSchema(HTTP_HEADER_MAPPING, 'InputObjectType', schema, feature);
|
|
109
|
+
return [
|
|
110
|
+
{
|
|
111
|
+
name: 'GET',
|
|
112
|
+
type: urlPathTemplateType
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: 'POST',
|
|
116
|
+
type: urlPathTemplateType
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'PUT',
|
|
120
|
+
type: urlPathTemplateType
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: 'PATCH',
|
|
124
|
+
type: urlPathTemplateType
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'DELETE',
|
|
128
|
+
type: urlPathTemplateType
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
name: 'body',
|
|
132
|
+
type: jsonSelectionType
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'headers',
|
|
136
|
+
type: new definitions_1.ListType(new definitions_1.NonNullType(httpHeaderMappingType))
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: 'path',
|
|
140
|
+
type: jsonSelectionType
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: 'queryParams',
|
|
144
|
+
type: jsonSelectionType
|
|
145
|
+
},
|
|
146
|
+
];
|
|
147
|
+
}
|
|
148
|
+
}));
|
|
23
149
|
this.registerDirective((0, directiveAndTypeSpecification_1.createDirectiveSpecification)({
|
|
24
150
|
name: CONNECT,
|
|
25
|
-
locations: [graphql_1.DirectiveLocation.FIELD_DEFINITION],
|
|
151
|
+
locations: [graphql_1.DirectiveLocation.FIELD_DEFINITION, graphql_1.DirectiveLocation.OBJECT],
|
|
26
152
|
repeatable: true,
|
|
153
|
+
args: [
|
|
154
|
+
{
|
|
155
|
+
name: 'source',
|
|
156
|
+
type: (schema) => schema.stringType()
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: 'http',
|
|
160
|
+
type: (schema, feature) => {
|
|
161
|
+
const connectHttpType = lookupFeatureTypeInSchema(CONNECT_HTTP, 'InputObjectType', schema, feature);
|
|
162
|
+
return new definitions_1.NonNullType(connectHttpType);
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: 'batch',
|
|
167
|
+
type: (schema, feature) => lookupFeatureTypeInSchema(CONNECT_BATCH, 'InputObjectType', schema, feature)
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: 'errors',
|
|
171
|
+
type: (schema, feature) => lookupFeatureTypeInSchema(CONNECTOR_ERRORS, 'InputObjectType', schema, feature)
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
name: 'selection',
|
|
175
|
+
type: (schema, feature) => {
|
|
176
|
+
const jsonSelectionType = lookupFeatureTypeInSchema(JSON_SELECTION, 'ScalarType', schema, feature);
|
|
177
|
+
return new definitions_1.NonNullType(jsonSelectionType);
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
name: 'entity',
|
|
182
|
+
type: (schema) => schema.booleanType(),
|
|
183
|
+
defaultValue: false
|
|
184
|
+
}
|
|
185
|
+
],
|
|
27
186
|
composes: false,
|
|
28
187
|
}));
|
|
29
188
|
this.registerDirective((0, directiveAndTypeSpecification_1.createDirectiveSpecification)({
|
|
@@ -31,66 +190,24 @@ class ConnectSpecDefinition extends coreSpec_1.FeatureDefinition {
|
|
|
31
190
|
locations: [graphql_1.DirectiveLocation.SCHEMA],
|
|
32
191
|
repeatable: true,
|
|
33
192
|
composes: false,
|
|
193
|
+
args: [
|
|
194
|
+
{
|
|
195
|
+
name: 'name',
|
|
196
|
+
type: (schema) => new definitions_1.NonNullType(schema.stringType())
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
name: 'http',
|
|
200
|
+
type: (schema, feature) => {
|
|
201
|
+
const sourceHttpType = lookupFeatureTypeInSchema(SOURCE_HTTP, 'InputObjectType', schema, feature);
|
|
202
|
+
return new definitions_1.NonNullType(sourceHttpType);
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
name: 'errors',
|
|
207
|
+
type: (schema, feature) => lookupFeatureTypeInSchema(CONNECTOR_ERRORS, 'InputObjectType', schema, feature)
|
|
208
|
+
}
|
|
209
|
+
]
|
|
34
210
|
}));
|
|
35
|
-
this.registerType((0, directiveAndTypeSpecification_1.createScalarTypeSpecification)({ name: URL_PATH_TEMPLATE }));
|
|
36
|
-
this.registerType((0, directiveAndTypeSpecification_1.createScalarTypeSpecification)({ name: JSON_SELECTION }));
|
|
37
|
-
this.registerType({ name: CONNECT_HTTP, checkOrAdd: () => [] });
|
|
38
|
-
this.registerType({ name: SOURCE_HTTP, checkOrAdd: () => [] });
|
|
39
|
-
this.registerType({ name: HTTP_HEADER_MAPPING, checkOrAdd: () => [] });
|
|
40
|
-
}
|
|
41
|
-
addElementsToSchema(schema) {
|
|
42
|
-
const URLPathTemplate = this.addScalarType(schema, URL_PATH_TEMPLATE);
|
|
43
|
-
const JSONSelection = this.addScalarType(schema, JSON_SELECTION);
|
|
44
|
-
const connect = this.addDirective(schema, CONNECT).addLocations(graphql_1.DirectiveLocation.FIELD_DEFINITION, graphql_1.DirectiveLocation.OBJECT);
|
|
45
|
-
connect.repeatable = true;
|
|
46
|
-
connect.addArgument(SOURCE, schema.stringType());
|
|
47
|
-
const HTTPHeaderMapping = schema.addType(new definitions_1.InputObjectType(this.typeNameInSchema(schema, HTTP_HEADER_MAPPING)));
|
|
48
|
-
HTTPHeaderMapping.addField(new definitions_1.InputFieldDefinition('name')).type =
|
|
49
|
-
new definitions_1.NonNullType(schema.stringType());
|
|
50
|
-
HTTPHeaderMapping.addField(new definitions_1.InputFieldDefinition('from')).type =
|
|
51
|
-
schema.stringType();
|
|
52
|
-
HTTPHeaderMapping.addField(new definitions_1.InputFieldDefinition('value')).type =
|
|
53
|
-
schema.stringType();
|
|
54
|
-
const ConnectHTTP = schema.addType(new definitions_1.InputObjectType(this.typeNameInSchema(schema, CONNECT_HTTP)));
|
|
55
|
-
ConnectHTTP.addField(new definitions_1.InputFieldDefinition('GET')).type =
|
|
56
|
-
URLPathTemplate;
|
|
57
|
-
ConnectHTTP.addField(new definitions_1.InputFieldDefinition('POST')).type =
|
|
58
|
-
URLPathTemplate;
|
|
59
|
-
ConnectHTTP.addField(new definitions_1.InputFieldDefinition('PUT')).type =
|
|
60
|
-
URLPathTemplate;
|
|
61
|
-
ConnectHTTP.addField(new definitions_1.InputFieldDefinition('PATCH')).type =
|
|
62
|
-
URLPathTemplate;
|
|
63
|
-
ConnectHTTP.addField(new definitions_1.InputFieldDefinition('DELETE')).type =
|
|
64
|
-
URLPathTemplate;
|
|
65
|
-
ConnectHTTP.addField(new definitions_1.InputFieldDefinition('body')).type = JSONSelection;
|
|
66
|
-
ConnectHTTP.addField(new definitions_1.InputFieldDefinition('headers')).type =
|
|
67
|
-
new definitions_1.ListType(new definitions_1.NonNullType(HTTPHeaderMapping));
|
|
68
|
-
ConnectHTTP.addField(new definitions_1.InputFieldDefinition('path')).type = JSONSelection;
|
|
69
|
-
ConnectHTTP.addField(new definitions_1.InputFieldDefinition('queryParams')).type =
|
|
70
|
-
JSONSelection;
|
|
71
|
-
connect.addArgument('http', new definitions_1.NonNullType(ConnectHTTP));
|
|
72
|
-
const ConnectBatch = schema.addType(new definitions_1.InputObjectType(this.typeNameInSchema(schema, CONNECT_BATCH)));
|
|
73
|
-
ConnectBatch.addField(new definitions_1.InputFieldDefinition('maxSize')).type = schema.intType();
|
|
74
|
-
connect.addArgument('batch', ConnectBatch);
|
|
75
|
-
const ConnectorErrors = schema.addType(new definitions_1.InputObjectType(this.typeNameInSchema(schema, CONNECTOR_ERRORS)));
|
|
76
|
-
ConnectorErrors.addField(new definitions_1.InputFieldDefinition('message')).type = JSONSelection;
|
|
77
|
-
ConnectorErrors.addField(new definitions_1.InputFieldDefinition('extensions')).type = JSONSelection;
|
|
78
|
-
connect.addArgument('errors', ConnectorErrors);
|
|
79
|
-
connect.addArgument('selection', new definitions_1.NonNullType(JSONSelection));
|
|
80
|
-
connect.addArgument('entity', schema.booleanType(), false);
|
|
81
|
-
const source = this.addDirective(schema, SOURCE).addLocations(graphql_1.DirectiveLocation.SCHEMA);
|
|
82
|
-
source.repeatable = true;
|
|
83
|
-
source.addArgument('name', new definitions_1.NonNullType(schema.stringType()));
|
|
84
|
-
const SourceHTTP = schema.addType(new definitions_1.InputObjectType(this.typeNameInSchema(schema, SOURCE_HTTP)));
|
|
85
|
-
SourceHTTP.addField(new definitions_1.InputFieldDefinition('baseURL')).type =
|
|
86
|
-
new definitions_1.NonNullType(schema.stringType());
|
|
87
|
-
SourceHTTP.addField(new definitions_1.InputFieldDefinition('headers')).type =
|
|
88
|
-
new definitions_1.ListType(new definitions_1.NonNullType(HTTPHeaderMapping));
|
|
89
|
-
SourceHTTP.addField(new definitions_1.InputFieldDefinition('path')).type = JSONSelection;
|
|
90
|
-
SourceHTTP.addField(new definitions_1.InputFieldDefinition('queryParams')).type = JSONSelection;
|
|
91
|
-
source.addArgument('http', new definitions_1.NonNullType(SourceHTTP));
|
|
92
|
-
source.addArgument('errors', ConnectorErrors);
|
|
93
|
-
return [];
|
|
94
211
|
}
|
|
95
212
|
get defaultCorePurpose() {
|
|
96
213
|
return 'EXECUTION';
|
|
@@ -101,4 +218,55 @@ exports.CONNECT_VERSIONS = new coreSpec_1.FeatureDefinitions(exports.connectIden
|
|
|
101
218
|
.add(new ConnectSpecDefinition(new coreSpec_1.FeatureVersion(0, 1), new coreSpec_1.FeatureVersion(2, 10)))
|
|
102
219
|
.add(new ConnectSpecDefinition(new coreSpec_1.FeatureVersion(0, 2), new coreSpec_1.FeatureVersion(2, 10)));
|
|
103
220
|
(0, knownCoreFeatures_1.registerKnownFeature)(exports.CONNECT_VERSIONS);
|
|
221
|
+
function createInputObjectTypeSpecification({ name, inputFieldsFct, }) {
|
|
222
|
+
return {
|
|
223
|
+
name,
|
|
224
|
+
checkOrAdd: (schema, feature, asBuiltIn) => {
|
|
225
|
+
var _a;
|
|
226
|
+
const actualName = (_a = feature === null || feature === void 0 ? void 0 : feature.typeNameInSchema(name)) !== null && _a !== void 0 ? _a : name;
|
|
227
|
+
const expectedFields = inputFieldsFct(schema, feature);
|
|
228
|
+
const existing = schema.type(actualName);
|
|
229
|
+
if (existing) {
|
|
230
|
+
let errors = (0, directiveAndTypeSpecification_1.ensureSameTypeKind)('InputObjectType', existing);
|
|
231
|
+
if (errors.length > 0) {
|
|
232
|
+
return errors;
|
|
233
|
+
}
|
|
234
|
+
(0, utils_1.assert)((0, definitions_1.isInputObjectType)(existing), 'Should be an input object type');
|
|
235
|
+
for (const { name: fieldName, type, defaultValue } of expectedFields) {
|
|
236
|
+
const existingField = existing.field(fieldName);
|
|
237
|
+
if (!existingField) {
|
|
238
|
+
if ((0, definitions_1.isNonNullType)(type) && defaultValue === undefined) {
|
|
239
|
+
errors.push(error_1.ERRORS.TYPE_DEFINITION_INVALID.err(`Invalid definition for type ${name}: missing required input field "${fieldName}"`, { nodes: existing.sourceAST }));
|
|
240
|
+
}
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
let existingType = existingField.type;
|
|
244
|
+
if ((0, definitions_1.isNonNullType)(existingType) && !(0, definitions_1.isNonNullType)(type)) {
|
|
245
|
+
existingType = existingType.ofType;
|
|
246
|
+
}
|
|
247
|
+
if (!(0, types_1.sameType)(type, existingType)) {
|
|
248
|
+
errors.push(error_1.ERRORS.TYPE_DEFINITION_INVALID.err(`Invalid definition for type ${name}: input field "${fieldName}" should have type "${type}" but found type "${existingField.type}"`, { nodes: existingField.sourceAST }));
|
|
249
|
+
}
|
|
250
|
+
else if (!(0, values_1.valueEquals)(defaultValue, existingField.defaultValue)) {
|
|
251
|
+
errors.push(error_1.ERRORS.TYPE_DEFINITION_INVALID.err(`Invalid definition type ${name}: input field "${fieldName}" should have default value ${(0, values_1.valueToString)(defaultValue)} but found default value ${(0, values_1.valueToString)(existingField.defaultValue)}`, { nodes: existingField.sourceAST }));
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
for (const existingField of existing.fields()) {
|
|
255
|
+
if (!expectedFields.some((field) => field.name === existingField.name)) {
|
|
256
|
+
errors.push(error_1.ERRORS.TYPE_DEFINITION_INVALID.err(`Invalid definition for type ${name}: unknown/unsupported input field "${existingField.name}"`, { nodes: existingField.sourceAST }));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return errors;
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
const createdType = schema.addType(new definitions_1.InputObjectType(actualName, asBuiltIn));
|
|
263
|
+
for (const { name, type, defaultValue } of expectedFields) {
|
|
264
|
+
const newField = createdType.addField(name, type);
|
|
265
|
+
newField.defaultValue = defaultValue;
|
|
266
|
+
}
|
|
267
|
+
return [];
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
}
|
|
104
272
|
//# sourceMappingURL=connectSpec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connectSpec.js","sourceRoot":"","sources":["../../src/specs/connectSpec.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"connectSpec.js","sourceRoot":"","sources":["../../src/specs/connectSpec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CorePurpose, FeatureDefinition, FeatureDefinitions, FeatureVersion } from "./coreSpec";
|
|
2
|
+
import { DirectiveDefinition, Schema } from "../definitions";
|
|
2
3
|
export declare enum PolicyTypeName {
|
|
3
4
|
POLICY = "Policy"
|
|
4
5
|
}
|
|
@@ -6,6 +7,9 @@ export declare class PolicySpecDefinition extends FeatureDefinition {
|
|
|
6
7
|
static readonly directiveName = "policy";
|
|
7
8
|
static readonly identity: string;
|
|
8
9
|
constructor(version: FeatureVersion);
|
|
10
|
+
policyDirective(schema: Schema): DirectiveDefinition<{
|
|
11
|
+
policies: string[][];
|
|
12
|
+
}> | undefined;
|
|
9
13
|
get defaultCorePurpose(): CorePurpose;
|
|
10
14
|
}
|
|
11
15
|
export declare const POLICY_VERSIONS: FeatureDefinitions<PolicySpecDefinition>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policySpec.d.ts","sourceRoot":"","sources":["../../src/specs/policySpec.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAElB,cAAc,EACf,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"policySpec.d.ts","sourceRoot":"","sources":["../../src/specs/policySpec.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAElB,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAC,mBAAmB,EAAyB,MAAM,EAAC,MAAM,gBAAgB,CAAC;AAMlF,oBAAY,cAAc;IACxB,MAAM,WAAW;CAClB;AACD,qBAAa,oBAAqB,SAAQ,iBAAiB;IACzD,gBAAuB,aAAa,YAAY;IAChD,gBAAuB,QAAQ,SACoC;gBAEvD,OAAO,EAAE,cAAc;IAoCnC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAA;KAAC,CAAC,GAAG,SAAS;IAIxF,IAAI,kBAAkB,IAAI,WAAW,CAEpC;CACF;AAED,eAAO,MAAM,eAAe,0CAG+B,CAAC"}
|
package/dist/specs/policySpec.js
CHANGED
|
@@ -27,7 +27,7 @@ class PolicySpecDefinition extends coreSpec_1.FeatureDefinition {
|
|
|
27
27
|
(0, utils_1.assert)(PolicyType, () => `Expected "${policyName}" to be defined`);
|
|
28
28
|
return new definitions_1.NonNullType(new definitions_1.ListType(new definitions_1.NonNullType(new definitions_1.ListType(new definitions_1.NonNullType(PolicyType)))));
|
|
29
29
|
},
|
|
30
|
-
compositionStrategy: argumentCompositionStrategies_1.ARGUMENT_COMPOSITION_STRATEGIES.
|
|
30
|
+
compositionStrategy: argumentCompositionStrategies_1.ARGUMENT_COMPOSITION_STRATEGIES.DNF_CONJUNCTION,
|
|
31
31
|
}],
|
|
32
32
|
locations: [
|
|
33
33
|
graphql_1.DirectiveLocation.FIELD_DEFINITION,
|
|
@@ -40,6 +40,9 @@ class PolicySpecDefinition extends coreSpec_1.FeatureDefinition {
|
|
|
40
40
|
supergraphSpecification: () => exports.POLICY_VERSIONS.latest(),
|
|
41
41
|
}));
|
|
42
42
|
}
|
|
43
|
+
policyDirective(schema) {
|
|
44
|
+
return this.directive(schema, PolicySpecDefinition.directiveName);
|
|
45
|
+
}
|
|
43
46
|
get defaultCorePurpose() {
|
|
44
47
|
return 'SECURITY';
|
|
45
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policySpec.js","sourceRoot":"","sources":["../../src/specs/policySpec.ts"],"names":[],"mappings":";;;AAAA,qCAA4C;AAC5C,yCAMoB;AACpB,
|
|
1
|
+
{"version":3,"file":"policySpec.js","sourceRoot":"","sources":["../../src/specs/policySpec.ts"],"names":[],"mappings":";;;AAAA,qCAA4C;AAC5C,yCAMoB;AACpB,gDAAkF;AAClF,oFAA+G;AAC/G,4DAA4D;AAC5D,oFAAmF;AACnF,oCAAkC;AAElC,IAAY,cAEX;AAFD,WAAY,cAAc;IACxB,mCAAiB,CAAA;AACnB,CAAC,EAFW,cAAc,8BAAd,cAAc,QAEzB;AACD,MAAa,oBAAqB,SAAQ,4BAAiB;IAKzD,YAAY,OAAuB;QACjC,KAAK,CACH,IAAI,qBAAU,CACZ,oBAAoB,CAAC,QAAQ,EAC7B,oBAAoB,CAAC,aAAa,EAClC,OAAO,CACR,CACF,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,IAAA,6DAA6B,EAAC,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAElF,IAAI,CAAC,iBAAiB,CAAC,IAAA,4DAA4B,EAAC;YAClD,IAAI,EAAE,oBAAoB,CAAC,aAAa;YACxC,IAAI,EAAE,CAAC;oBACL,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;wBACxB,IAAA,cAAM,EAAC,OAAO,EAAE,2DAA2D,CAAC,CAAC;wBAC7E,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;wBACnE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC3C,IAAA,cAAM,EAAC,UAAU,EAAE,GAAG,EAAE,CAAC,aAAa,UAAU,iBAAiB,CAAC,CAAC;wBACnE,OAAO,IAAI,yBAAW,CAAC,IAAI,sBAAQ,CAAC,IAAI,yBAAW,CAAC,IAAI,sBAAQ,CAAC,IAAI,yBAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnG,CAAC;oBACD,mBAAmB,EAAE,+DAA+B,CAAC,eAAe;iBACrE,CAAC;YACF,SAAS,EAAE;gBACT,2BAAiB,CAAC,gBAAgB;gBAClC,2BAAiB,CAAC,MAAM;gBACxB,2BAAiB,CAAC,SAAS;gBAC3B,2BAAiB,CAAC,MAAM;gBACxB,2BAAiB,CAAC,IAAI;aACvB;YACD,QAAQ,EAAE,IAAI;YACd,uBAAuB,EAAE,GAAG,EAAE,CAAC,uBAAe,CAAC,MAAM,EAAE;SACxD,CAAC,CAAC,CAAC;IACN,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,UAAU,CAAC;IACpB,CAAC;;AA/CH,oDAgDC;AA/CwB,kCAAa,GAAG,QAAQ,CAAC;AACzB,6BAAQ,GAC7B,4BAA4B,oBAAoB,CAAC,aAAa,EAAE,CAAC;AA+CxD,QAAA,eAAe,GAC1B,IAAI,6BAAkB,CACpB,oBAAoB,CAAC,QAAQ,CAC9B,CAAC,GAAG,CAAC,IAAI,oBAAoB,CAAC,IAAI,yBAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5D,IAAA,wCAAoB,EAAC,uBAAe,CAAC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CorePurpose, FeatureDefinition, FeatureDefinitions, FeatureVersion } from "./coreSpec";
|
|
2
|
+
import { DirectiveDefinition, Schema } from "../definitions";
|
|
2
3
|
export declare enum RequiresScopesTypeName {
|
|
3
4
|
SCOPE = "Scope"
|
|
4
5
|
}
|
|
@@ -6,6 +7,9 @@ export declare class RequiresScopesSpecDefinition extends FeatureDefinition {
|
|
|
6
7
|
static readonly directiveName = "requiresScopes";
|
|
7
8
|
static readonly identity: string;
|
|
8
9
|
constructor(version: FeatureVersion);
|
|
10
|
+
requiresScopesDirective(schema: Schema): DirectiveDefinition<{
|
|
11
|
+
scopes: string[][];
|
|
12
|
+
}> | undefined;
|
|
9
13
|
get defaultCorePurpose(): CorePurpose;
|
|
10
14
|
}
|
|
11
15
|
export declare const REQUIRES_SCOPES_VERSIONS: FeatureDefinitions<RequiresScopesSpecDefinition>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requiresScopesSpec.d.ts","sourceRoot":"","sources":["../../src/specs/requiresScopesSpec.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAElB,cAAc,EACf,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"requiresScopesSpec.d.ts","sourceRoot":"","sources":["../../src/specs/requiresScopesSpec.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAElB,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAC,mBAAmB,EAAyB,MAAM,EAAC,MAAM,gBAAgB,CAAC;AAMlF,oBAAY,sBAAsB;IAChC,KAAK,UAAU;CAChB;AAED,qBAAa,4BAA6B,SAAQ,iBAAiB;IACjE,gBAAuB,aAAa,oBAAoB;IACxD,gBAAuB,QAAQ,SAC4C;gBAE/D,OAAO,EAAE,cAAc;IAoCnC,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAA;KAAC,CAAC,GAAG,SAAS;IAI9F,IAAI,kBAAkB,IAAI,WAAW,CAEpC;CACF;AAED,eAAO,MAAM,wBAAwB,kDAG8B,CAAC"}
|
|
@@ -27,7 +27,7 @@ class RequiresScopesSpecDefinition extends coreSpec_1.FeatureDefinition {
|
|
|
27
27
|
(0, utils_1.assert)(scopeType, () => `Expected "${scopeName}" to be defined`);
|
|
28
28
|
return new definitions_1.NonNullType(new definitions_1.ListType(new definitions_1.NonNullType(new definitions_1.ListType(new definitions_1.NonNullType(scopeType)))));
|
|
29
29
|
},
|
|
30
|
-
compositionStrategy: argumentCompositionStrategies_1.ARGUMENT_COMPOSITION_STRATEGIES.
|
|
30
|
+
compositionStrategy: argumentCompositionStrategies_1.ARGUMENT_COMPOSITION_STRATEGIES.DNF_CONJUNCTION,
|
|
31
31
|
}],
|
|
32
32
|
locations: [
|
|
33
33
|
graphql_1.DirectiveLocation.FIELD_DEFINITION,
|
|
@@ -40,6 +40,9 @@ class RequiresScopesSpecDefinition extends coreSpec_1.FeatureDefinition {
|
|
|
40
40
|
supergraphSpecification: () => exports.REQUIRES_SCOPES_VERSIONS.latest(),
|
|
41
41
|
}));
|
|
42
42
|
}
|
|
43
|
+
requiresScopesDirective(schema) {
|
|
44
|
+
return this.directive(schema, RequiresScopesSpecDefinition.directiveName);
|
|
45
|
+
}
|
|
43
46
|
get defaultCorePurpose() {
|
|
44
47
|
return 'SECURITY';
|
|
45
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requiresScopesSpec.js","sourceRoot":"","sources":["../../src/specs/requiresScopesSpec.ts"],"names":[],"mappings":";;;AAAA,qCAA4C;AAC5C,yCAMoB;AACpB,
|
|
1
|
+
{"version":3,"file":"requiresScopesSpec.js","sourceRoot":"","sources":["../../src/specs/requiresScopesSpec.ts"],"names":[],"mappings":";;;AAAA,qCAA4C;AAC5C,yCAMoB;AACpB,gDAAkF;AAClF,oFAA+G;AAC/G,4DAA4D;AAC5D,oFAAmF;AACnF,oCAAkC;AAElC,IAAY,sBAEX;AAFD,WAAY,sBAAsB;IAChC,yCAAe,CAAA;AACjB,CAAC,EAFW,sBAAsB,sCAAtB,sBAAsB,QAEjC;AAED,MAAa,4BAA6B,SAAQ,4BAAiB;IAKjE,YAAY,OAAuB;QACjC,KAAK,CACH,IAAI,qBAAU,CACZ,4BAA4B,CAAC,QAAQ,EACrC,4BAA4B,CAAC,aAAa,EAC1C,OAAO,CACR,CACF,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,IAAA,6DAA6B,EAAC,EAAE,IAAI,EAAE,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEzF,IAAI,CAAC,iBAAiB,CAAC,IAAA,4DAA4B,EAAC;YAClD,IAAI,EAAE,4BAA4B,CAAC,aAAa;YAChD,IAAI,EAAE,CAAC;oBACL,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;wBACxB,IAAA,cAAM,EAAC,OAAO,EAAE,2DAA2D,CAAC,CAAC;wBAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;wBACzE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBACzC,IAAA,cAAM,EAAC,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,SAAS,iBAAiB,CAAC,CAAC;wBACjE,OAAO,IAAI,yBAAW,CAAC,IAAI,sBAAQ,CAAC,IAAI,yBAAW,CAAC,IAAI,sBAAQ,CAAC,IAAI,yBAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClG,CAAC;oBACD,mBAAmB,EAAE,+DAA+B,CAAC,eAAe;iBACrE,CAAC;YACF,SAAS,EAAE;gBACT,2BAAiB,CAAC,gBAAgB;gBAClC,2BAAiB,CAAC,MAAM;gBACxB,2BAAiB,CAAC,SAAS;gBAC3B,2BAAiB,CAAC,MAAM;gBACxB,2BAAiB,CAAC,IAAI;aACvB;YACD,QAAQ,EAAE,IAAI;YACd,uBAAuB,EAAE,GAAG,EAAE,CAAC,gCAAwB,CAAC,MAAM,EAAE;SACjE,CAAC,CAAC,CAAC;IACN,CAAC;IAED,uBAAuB,CAAC,MAAc;QACpC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,4BAA4B,CAAC,aAAa,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,UAAU,CAAC;IACpB,CAAC;;AA/CH,oEAgDC;AA/CwB,0CAAa,GAAG,gBAAgB,CAAC;AACjC,qCAAQ,GAC7B,4BAA4B,4BAA4B,CAAC,aAAa,EAAE,CAAC;AA+ChE,QAAA,wBAAwB,GACnC,IAAI,6BAAkB,CACpB,4BAA4B,CAAC,QAAQ,CACtC,CAAC,GAAG,CAAC,IAAI,4BAA4B,CAAC,IAAI,yBAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpE,IAAA,wCAAoB,EAAC,gCAAwB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {InputType, NonNullType, Schema, isListType, isNonNullType} from "./definitions"
|
|
2
2
|
import { sameType } from "./types";
|
|
3
3
|
import { valueEquals } from "./values";
|
|
4
4
|
|
|
@@ -19,6 +19,14 @@ function supportFixedTypes(types: (schema: Schema) => InputType[]): TypeSupportV
|
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
function supportAnyNonNullNestedArray(): TypeSupportValidator {
|
|
23
|
+
return (_, type) =>
|
|
24
|
+
isNonNullType(type) && isListType(type.ofType)
|
|
25
|
+
&& isNonNullType(type.ofType.ofType) && isListType(type.ofType.ofType.ofType)
|
|
26
|
+
? { valid: true }
|
|
27
|
+
: { valid: false, supportedMsg: 'non nullable nested list types of any type' }
|
|
28
|
+
}
|
|
29
|
+
|
|
22
30
|
function supportAnyNonNullArray(): TypeSupportValidator {
|
|
23
31
|
return (_, type) => isNonNullType(type) && isListType(type.ofType)
|
|
24
32
|
? { valid: true }
|
|
@@ -54,6 +62,104 @@ function unionValues(values: any[]): any {
|
|
|
54
62
|
}, []);
|
|
55
63
|
}
|
|
56
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Performs conjunction of 2d arrays that represent conditions in Disjunctive Normal Form.
|
|
67
|
+
*
|
|
68
|
+
* * Each inner array is interpreted as the conjunction of the conditions in the array.
|
|
69
|
+
* * The top-level array is interpreted as the disjunction of the inner arrays
|
|
70
|
+
*
|
|
71
|
+
* Algorithm
|
|
72
|
+
* * filter out duplicate entries to limit the amount of necessary computations
|
|
73
|
+
* * calculate cartesian product of the arrays to find all possible combinations
|
|
74
|
+
* * simplify combinations by dropping duplicate conditions (i.e. p ^ p = p, p ^ q = q ^ p)
|
|
75
|
+
* * eliminate entries that are subsumed by others (i.e. (p ^ q) subsumes (p ^ q ^ r))
|
|
76
|
+
*/
|
|
77
|
+
function dnfConjunction<T>(values: T[][][]): T[][] {
|
|
78
|
+
// should never be the case
|
|
79
|
+
if (values.length == 0) {
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// we first filter out duplicate values from candidates
|
|
84
|
+
// this avoids exponential computation of exactly the same conditions
|
|
85
|
+
const filtered = filterNestedArrayDuplicates(values);
|
|
86
|
+
|
|
87
|
+
// initialize with first entry
|
|
88
|
+
let result: T[][] = filtered[0];
|
|
89
|
+
// perform cartesian product to find all possible entries
|
|
90
|
+
for (let i = 1; i < filtered.length; i++) {
|
|
91
|
+
const current = filtered[i];
|
|
92
|
+
const accumulator: T[][] = [];
|
|
93
|
+
const seen = new Set<string>;
|
|
94
|
+
|
|
95
|
+
for (const accElement of result) {
|
|
96
|
+
for (const currentElement of current) {
|
|
97
|
+
// filter out elements that are already present in accElement
|
|
98
|
+
const filteredElement = currentElement.filter((e) => !accElement.includes(e));
|
|
99
|
+
const candidate = [...accElement, ...filteredElement].sort();
|
|
100
|
+
const key = JSON.stringify(candidate);
|
|
101
|
+
// only add entries which has not been seen yet
|
|
102
|
+
if (!seen.has(key)) {
|
|
103
|
+
seen.add(key);
|
|
104
|
+
accumulator.push(candidate);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Now we need to deduplicate the results. Given that
|
|
109
|
+
// - outer array implies OR requirements
|
|
110
|
+
// - inner array implies AND requirements
|
|
111
|
+
// We can filter out any inner arrays that fully contain other inner arrays, i.e.
|
|
112
|
+
// A OR B OR (A AND B) OR (A AND B AND C) => A OR B
|
|
113
|
+
result = deduplicateSubsumedValues(accumulator);
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function filterNestedArrayDuplicates<T>(values: T[][][]): T[][][] {
|
|
119
|
+
const filtered: T[][][] = [];
|
|
120
|
+
const seen = new Set<string>;
|
|
121
|
+
values.forEach((value) => {
|
|
122
|
+
value.sort();
|
|
123
|
+
const key = JSON.stringify(value);
|
|
124
|
+
if (!seen.has(key)) {
|
|
125
|
+
seen.add(key);
|
|
126
|
+
filtered.push(value);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
return filtered;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function deduplicateSubsumedValues<T>(values: T[][]): T[][] {
|
|
133
|
+
const result: T[][] = [];
|
|
134
|
+
// we first sort by length as the longer ones might be dropped
|
|
135
|
+
values.sort((first, second) => {
|
|
136
|
+
if (first.length < second.length) {
|
|
137
|
+
return -1;
|
|
138
|
+
} else if (first.length > second.length) {
|
|
139
|
+
return 1;
|
|
140
|
+
} else {
|
|
141
|
+
return 0;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
for (const candidate of values) {
|
|
146
|
+
const entry = new Set(candidate);
|
|
147
|
+
let redundant = false;
|
|
148
|
+
for (const r of result) {
|
|
149
|
+
if (r.every(e => entry.has(e))) {
|
|
150
|
+
// if `r` is a subset of a `candidate` then it means `candidate` is redundant
|
|
151
|
+
redundant = true;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (!redundant) {
|
|
157
|
+
result.push(candidate);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
|
|
57
163
|
export const ARGUMENT_COMPOSITION_STRATEGIES = {
|
|
58
164
|
MAX: {
|
|
59
165
|
name: 'MAX',
|
|
@@ -95,7 +201,8 @@ export const ARGUMENT_COMPOSITION_STRATEGIES = {
|
|
|
95
201
|
schema.booleanType(),
|
|
96
202
|
new NonNullType(schema.booleanType())
|
|
97
203
|
]),
|
|
98
|
-
mergeValues:
|
|
204
|
+
mergeValues:
|
|
205
|
+
mergeNullableValues(
|
|
99
206
|
(values: boolean[]) => values.every((v) => v)
|
|
100
207
|
),
|
|
101
208
|
},
|
|
@@ -113,5 +220,10 @@ export const ARGUMENT_COMPOSITION_STRATEGIES = {
|
|
|
113
220
|
name: 'NULLABLE_UNION',
|
|
114
221
|
isTypeSupported: supportAnyArray(),
|
|
115
222
|
mergeValues: mergeNullableValues(unionValues),
|
|
223
|
+
},
|
|
224
|
+
DNF_CONJUNCTION: {
|
|
225
|
+
name: 'DNF_CONJUNCTION',
|
|
226
|
+
isTypeSupported: supportAnyNonNullNestedArray(),
|
|
227
|
+
mergeValues: dnfConjunction
|
|
116
228
|
}
|
|
117
229
|
}
|