@apollo/federation-internals 2.9.0-connectors.9 → 2.9.1

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.
Files changed (78) hide show
  1. package/dist/argumentCompositionStrategies.d.ts +17 -6
  2. package/dist/argumentCompositionStrategies.d.ts.map +1 -1
  3. package/dist/argumentCompositionStrategies.js +57 -19
  4. package/dist/argumentCompositionStrategies.js.map +1 -1
  5. package/dist/definitions.d.ts +1 -0
  6. package/dist/definitions.d.ts.map +1 -1
  7. package/dist/definitions.js +12 -10
  8. package/dist/definitions.js.map +1 -1
  9. package/dist/error.d.ts +19 -0
  10. package/dist/error.d.ts.map +1 -1
  11. package/dist/error.js +38 -0
  12. package/dist/error.js.map +1 -1
  13. package/dist/extractSubgraphsFromSupergraph.d.ts.map +1 -1
  14. package/dist/extractSubgraphsFromSupergraph.js +77 -21
  15. package/dist/extractSubgraphsFromSupergraph.js.map +1 -1
  16. package/dist/federation.d.ts +9 -2
  17. package/dist/federation.d.ts.map +1 -1
  18. package/dist/federation.js +42 -5
  19. package/dist/federation.js.map +1 -1
  20. package/dist/index.d.ts +2 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +2 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/knownCoreFeatures.d.ts +3 -0
  25. package/dist/knownCoreFeatures.d.ts.map +1 -1
  26. package/dist/knownCoreFeatures.js +12 -1
  27. package/dist/knownCoreFeatures.js.map +1 -1
  28. package/dist/operations.d.ts +3 -1
  29. package/dist/operations.d.ts.map +1 -1
  30. package/dist/operations.js +26 -5
  31. package/dist/operations.js.map +1 -1
  32. package/dist/schemaUpgrader.d.ts.map +1 -1
  33. package/dist/schemaUpgrader.js +50 -31
  34. package/dist/schemaUpgrader.js.map +1 -1
  35. package/dist/specs/coreSpec.d.ts +3 -1
  36. package/dist/specs/coreSpec.d.ts.map +1 -1
  37. package/dist/specs/coreSpec.js +19 -3
  38. package/dist/specs/coreSpec.js.map +1 -1
  39. package/dist/specs/costSpec.d.ts +20 -0
  40. package/dist/specs/costSpec.d.ts.map +1 -0
  41. package/dist/specs/costSpec.js +55 -0
  42. package/dist/specs/costSpec.js.map +1 -0
  43. package/dist/specs/federationSpec.d.ts +6 -1
  44. package/dist/specs/federationSpec.d.ts.map +1 -1
  45. package/dist/specs/federationSpec.js +15 -1
  46. package/dist/specs/federationSpec.js.map +1 -1
  47. package/dist/specs/sourceSpec.d.ts +69 -0
  48. package/dist/specs/sourceSpec.d.ts.map +1 -0
  49. package/dist/specs/sourceSpec.js +345 -0
  50. package/dist/specs/sourceSpec.js.map +1 -0
  51. package/dist/supergraphs.d.ts +9 -2
  52. package/dist/supergraphs.d.ts.map +1 -1
  53. package/dist/supergraphs.js +21 -2
  54. package/dist/supergraphs.js.map +1 -1
  55. package/dist/values.d.ts.map +1 -1
  56. package/dist/values.js +14 -5
  57. package/dist/values.js.map +1 -1
  58. package/package.json +1 -1
  59. package/src/argumentCompositionStrategies.ts +77 -22
  60. package/src/definitions.ts +25 -9
  61. package/src/error.ts +137 -4
  62. package/src/extractSubgraphsFromSupergraph.ts +90 -22
  63. package/src/federation.ts +89 -33
  64. package/src/index.ts +2 -1
  65. package/src/knownCoreFeatures.ts +15 -0
  66. package/src/operations.ts +41 -4
  67. package/src/schemaUpgrader.ts +55 -31
  68. package/src/specs/coreSpec.ts +33 -6
  69. package/src/specs/costSpec.ts +68 -0
  70. package/src/specs/federationSpec.ts +17 -1
  71. package/src/specs/sourceSpec.ts +607 -0
  72. package/src/supergraphs.ts +33 -4
  73. package/src/values.ts +13 -5
  74. package/dist/specs/connectSpec.d.ts +0 -42
  75. package/dist/specs/connectSpec.d.ts.map +0 -1
  76. package/dist/specs/connectSpec.js +0 -83
  77. package/dist/specs/connectSpec.js.map +0 -1
  78. package/src/specs/connectSpec.ts +0 -183
package/src/values.ts CHANGED
@@ -135,8 +135,10 @@ export function valueEquals(a: any, b: any): boolean {
135
135
  if (Array.isArray(a)) {
136
136
  return Array.isArray(b) && arrayValueEquals(a, b) ;
137
137
  }
138
- if (typeof a === 'object') {
139
- return typeof b === 'object' && objectEquals(a, b);
138
+ // Note that typeof null === 'object', so we have to manually rule that out
139
+ // here.
140
+ if (a !== null && typeof a === 'object') {
141
+ return b !== null && typeof b === 'object' && objectEquals(a, b);
140
142
  }
141
143
  return a === b;
142
144
  }
@@ -224,8 +226,10 @@ function applyDefaultValues(value: any, type: InputType): any {
224
226
  if (fieldValue === undefined) {
225
227
  if (field.defaultValue !== undefined) {
226
228
  updated[field.name] = applyDefaultValues(field.defaultValue, field.type);
227
- } else if (isNonNullType(field.type)) {
228
- throw ERRORS.INVALID_GRAPHQL.err(`Field "${field.name}" of required type ${type} was not provided.`);
229
+ } else if (!isNonNullType(field.type)) {
230
+ updated[field.name] = null;
231
+ } else {
232
+ throw ERRORS.INVALID_GRAPHQL.err(`Required field "${field.name}" of type ${type} was not provided.`);
229
233
  }
230
234
  } else {
231
235
  updated[field.name] = applyDefaultValues(fieldValue, field.type);
@@ -249,8 +253,12 @@ export function withDefaultValues(value: any, argument: ArgumentDefinition<any>)
249
253
  throw buildError(`Cannot compute default value for argument ${argument} as the type is undefined`);
250
254
  }
251
255
  if (value === undefined) {
252
- if (argument.defaultValue) {
256
+ if (argument.defaultValue !== undefined) {
253
257
  return applyDefaultValues(argument.defaultValue, argument.type);
258
+ } else if (!isNonNullType(argument.type)) {
259
+ return null;
260
+ } else {
261
+ throw ERRORS.INVALID_GRAPHQL.err(`Required argument "${argument.coordinate}" was not provided.`);
254
262
  }
255
263
  }
256
264
  return applyDefaultValues(value, argument.type);
@@ -1,42 +0,0 @@
1
- import { GraphQLError } from 'graphql';
2
- import { CorePurpose, FeatureDefinition, FeatureDefinitions, FeatureVersion } from "./coreSpec";
3
- import { Schema } from '../definitions';
4
- export declare const connectIdentity = "https://specs.apollo.dev/connect";
5
- export declare class ConnectSpecDefinition extends FeatureDefinition {
6
- readonly minimumFederationVersion: FeatureVersion;
7
- constructor(version: FeatureVersion, minimumFederationVersion: FeatureVersion);
8
- addElementsToSchema(schema: Schema): GraphQLError[];
9
- get defaultCorePurpose(): CorePurpose;
10
- }
11
- export type SourceDirectiveArgs = {
12
- name: string;
13
- http: SourceDirectiveHTTP;
14
- };
15
- export type SourceDirectiveHTTP = {
16
- baseURL: string;
17
- headers?: HTTPHeaderMapping[];
18
- };
19
- type HTTPHeaderMapping = {
20
- name: string;
21
- as?: string;
22
- value?: string;
23
- };
24
- type URLPathTemplate = string;
25
- type JSONSelection = string;
26
- export type ConnectDirectiveArgs = {
27
- source: string;
28
- http: ConnectDirectiveHTTP;
29
- selection?: JSONSelection;
30
- };
31
- export type ConnectDirectiveHTTP = {
32
- GET?: URLPathTemplate;
33
- POST?: URLPathTemplate;
34
- PUT?: URLPathTemplate;
35
- PATCH?: URLPathTemplate;
36
- DELETE?: URLPathTemplate;
37
- body?: JSONSelection;
38
- headers?: HTTPHeaderMapping[];
39
- };
40
- export declare const CONNECT_VERSIONS: FeatureDefinitions<ConnectSpecDefinition>;
41
- export {};
42
- //# sourceMappingURL=connectSpec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connectSpec.d.ts","sourceRoot":"","sources":["../../src/specs/connectSpec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAC,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAc,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5G,OAAO,EACL,MAAM,EAKP,MAAM,gBAAgB,CAAC;AAIxB,eAAO,MAAM,eAAe,qCAAqC,CAAC;AAUlE,qBAAa,qBAAsB,SAAQ,iBAAiB;IACrB,QAAQ,CAAC,wBAAwB,EAAE,cAAc;gBAA1E,OAAO,EAAE,cAAc,EAAW,wBAAwB,EAAE,cAAc;IA2BtF,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE;IAyFnD,IAAI,kBAAkB,IAAI,WAAW,CAEpC;CACF;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,mBAAmB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC/B,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,eAAe,GAAG,MAAM,CAAC;AAC9B,KAAK,aAAa,GAAG,MAAM,CAAC;AAE5B,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,CAAC,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,GAAG,CAAC,EAAE,eAAe,CAAC;IACtB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,2CACwD,CAAC"}
@@ -1,83 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CONNECT_VERSIONS = exports.ConnectSpecDefinition = exports.connectIdentity = void 0;
4
- const graphql_1 = require("graphql");
5
- const coreSpec_1 = require("./coreSpec");
6
- const definitions_1 = require("../definitions");
7
- const knownCoreFeatures_1 = require("../knownCoreFeatures");
8
- const directiveAndTypeSpecification_1 = require("../directiveAndTypeSpecification");
9
- exports.connectIdentity = 'https://specs.apollo.dev/connect';
10
- const CONNECT = "connect";
11
- const SOURCE = "source";
12
- const URL_PATH_TEMPLATE = "URLPathTemplate";
13
- const JSON_SELECTION = "JSONSelection";
14
- const CONNECT_HTTP = "ConnectHTTP";
15
- const SOURCE_HTTP = "SourceHTTP";
16
- const HTTP_HEADER_MAPPING = "HTTPHeaderMapping";
17
- class ConnectSpecDefinition extends coreSpec_1.FeatureDefinition {
18
- constructor(version, minimumFederationVersion) {
19
- super(new coreSpec_1.FeatureUrl(exports.connectIdentity, CONNECT, version), minimumFederationVersion);
20
- this.minimumFederationVersion = minimumFederationVersion;
21
- this.registerDirective((0, directiveAndTypeSpecification_1.createDirectiveSpecification)({
22
- name: CONNECT,
23
- locations: [graphql_1.DirectiveLocation.FIELD_DEFINITION],
24
- repeatable: true,
25
- composes: false,
26
- }));
27
- this.registerDirective((0, directiveAndTypeSpecification_1.createDirectiveSpecification)({
28
- name: SOURCE,
29
- locations: [graphql_1.DirectiveLocation.SCHEMA],
30
- repeatable: true,
31
- composes: false,
32
- }));
33
- this.registerType({ name: URL_PATH_TEMPLATE, checkOrAdd: () => [] });
34
- this.registerType({ name: JSON_SELECTION, checkOrAdd: () => [] });
35
- this.registerType({ name: CONNECT_HTTP, checkOrAdd: () => [] });
36
- this.registerType({ name: SOURCE_HTTP, checkOrAdd: () => [] });
37
- this.registerType({ name: HTTP_HEADER_MAPPING, checkOrAdd: () => [] });
38
- }
39
- addElementsToSchema(schema) {
40
- const URLPathTemplate = this.addScalarType(schema, URL_PATH_TEMPLATE);
41
- const JSONSelection = this.addScalarType(schema, JSON_SELECTION);
42
- const connect = this.addDirective(schema, CONNECT).addLocations(graphql_1.DirectiveLocation.FIELD_DEFINITION);
43
- connect.repeatable = true;
44
- connect.addArgument(SOURCE, schema.stringType());
45
- const HTTPHeaderMapping = schema.addType(new definitions_1.InputObjectType(this.typeNameInSchema(schema, HTTP_HEADER_MAPPING)));
46
- HTTPHeaderMapping.addField(new definitions_1.InputFieldDefinition('name')).type =
47
- new definitions_1.NonNullType(schema.stringType());
48
- HTTPHeaderMapping.addField(new definitions_1.InputFieldDefinition('from')).type =
49
- schema.stringType();
50
- HTTPHeaderMapping.addField(new definitions_1.InputFieldDefinition('value')).type =
51
- schema.stringType();
52
- const ConnectHTTP = schema.addType(new definitions_1.InputObjectType(this.typeNameInSchema(schema, CONNECT_HTTP)));
53
- ConnectHTTP.addField(new definitions_1.InputFieldDefinition('GET')).type = URLPathTemplate;
54
- ConnectHTTP.addField(new definitions_1.InputFieldDefinition('POST')).type = URLPathTemplate;
55
- ConnectHTTP.addField(new definitions_1.InputFieldDefinition('PUT')).type = URLPathTemplate;
56
- ConnectHTTP.addField(new definitions_1.InputFieldDefinition('PATCH')).type = URLPathTemplate;
57
- ConnectHTTP.addField(new definitions_1.InputFieldDefinition('DELETE')).type = URLPathTemplate;
58
- ConnectHTTP.addField(new definitions_1.InputFieldDefinition('body')).type = JSONSelection;
59
- ConnectHTTP.addField(new definitions_1.InputFieldDefinition('headers')).type =
60
- new definitions_1.ListType(new definitions_1.NonNullType(HTTPHeaderMapping));
61
- connect.addArgument('http', new definitions_1.NonNullType(ConnectHTTP));
62
- connect.addArgument('selection', new definitions_1.NonNullType(JSONSelection));
63
- connect.addArgument('entity', schema.booleanType(), false);
64
- const source = this.addDirective(schema, SOURCE).addLocations(graphql_1.DirectiveLocation.SCHEMA);
65
- source.repeatable = true;
66
- source.addArgument('name', new definitions_1.NonNullType(schema.stringType()));
67
- const SourceHTTP = schema.addType(new definitions_1.InputObjectType(this.typeNameInSchema(schema, SOURCE_HTTP)));
68
- SourceHTTP.addField(new definitions_1.InputFieldDefinition('baseURL')).type =
69
- new definitions_1.NonNullType(schema.stringType());
70
- SourceHTTP.addField(new definitions_1.InputFieldDefinition('headers')).type =
71
- new definitions_1.ListType(new definitions_1.NonNullType(HTTPHeaderMapping));
72
- source.addArgument('http', new definitions_1.NonNullType(SourceHTTP));
73
- return [];
74
- }
75
- get defaultCorePurpose() {
76
- return 'EXECUTION';
77
- }
78
- }
79
- exports.ConnectSpecDefinition = ConnectSpecDefinition;
80
- exports.CONNECT_VERSIONS = new coreSpec_1.FeatureDefinitions(exports.connectIdentity)
81
- .add(new ConnectSpecDefinition(new coreSpec_1.FeatureVersion(0, 1), new coreSpec_1.FeatureVersion(2, 9)));
82
- (0, knownCoreFeatures_1.registerKnownFeature)(exports.CONNECT_VERSIONS);
83
- //# sourceMappingURL=connectSpec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connectSpec.js","sourceRoot":"","sources":["../../src/specs/connectSpec.ts"],"names":[],"mappings":"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"}
@@ -1,183 +0,0 @@
1
- import {DirectiveLocation, GraphQLError} from 'graphql';
2
- import { CorePurpose, FeatureDefinition, FeatureDefinitions, FeatureUrl, FeatureVersion } from "./coreSpec";
3
- import {
4
- Schema,
5
- NonNullType,
6
- InputObjectType,
7
- InputFieldDefinition,
8
- ListType,
9
- } from '../definitions';
10
- import { registerKnownFeature } from '../knownCoreFeatures';
11
- import { createDirectiveSpecification } from '../directiveAndTypeSpecification';
12
-
13
- export const connectIdentity = 'https://specs.apollo.dev/connect';
14
-
15
- const CONNECT = "connect";
16
- const SOURCE = "source";
17
- const URL_PATH_TEMPLATE = "URLPathTemplate";
18
- const JSON_SELECTION = "JSONSelection";
19
- const CONNECT_HTTP = "ConnectHTTP";
20
- const SOURCE_HTTP = "SourceHTTP";
21
- const HTTP_HEADER_MAPPING = "HTTPHeaderMapping";
22
-
23
- export class ConnectSpecDefinition extends FeatureDefinition {
24
- constructor(version: FeatureVersion, readonly minimumFederationVersion: FeatureVersion) {
25
- super(new FeatureUrl(connectIdentity, CONNECT, version), minimumFederationVersion);
26
-
27
- this.registerDirective(createDirectiveSpecification({
28
- name: CONNECT,
29
- locations: [DirectiveLocation.FIELD_DEFINITION],
30
- repeatable: true,
31
- // We "compose" these directives using the `@join__directive` mechanism,
32
- // so they do not need to be composed in the way passing `composes: true`
33
- // here implies.
34
- composes: false,
35
- }));
36
-
37
- this.registerDirective(createDirectiveSpecification({
38
- name: SOURCE,
39
- locations: [DirectiveLocation.SCHEMA],
40
- repeatable: true,
41
- composes: false,
42
- }));
43
-
44
- this.registerType({ name: URL_PATH_TEMPLATE, checkOrAdd: () => [] });
45
- this.registerType({ name: JSON_SELECTION, checkOrAdd: () => [] });
46
- this.registerType({ name: CONNECT_HTTP, checkOrAdd: () => [] });
47
- this.registerType({ name: SOURCE_HTTP, checkOrAdd: () => [] });
48
- this.registerType({ name: HTTP_HEADER_MAPPING, checkOrAdd: () => [] });
49
- }
50
-
51
- addElementsToSchema(schema: Schema): GraphQLError[] {
52
- /* scalar URLPathTemplate */
53
- const URLPathTemplate = this.addScalarType(schema, URL_PATH_TEMPLATE);
54
-
55
- /* scalar JSONSelection */
56
- const JSONSelection = this.addScalarType(schema, JSON_SELECTION);
57
-
58
- /*
59
- directive @connect(
60
- source: String
61
- http: ConnectHTTP
62
- selection: JSONSelection!
63
- entity: Boolean = false
64
- ) repeatable on FIELD_DEFINITION
65
- */
66
- const connect = this.addDirective(schema, CONNECT).addLocations(DirectiveLocation.FIELD_DEFINITION);
67
- connect.repeatable = true;
68
-
69
- connect.addArgument(SOURCE, schema.stringType());
70
-
71
- /*
72
- input HTTPHeaderMapping {
73
- name: String!
74
- from: String
75
- value: String
76
- }
77
- */
78
- const HTTPHeaderMapping = schema.addType(new InputObjectType(this.typeNameInSchema(schema, HTTP_HEADER_MAPPING)!));
79
- HTTPHeaderMapping.addField(new InputFieldDefinition('name')).type =
80
- new NonNullType(schema.stringType());
81
- HTTPHeaderMapping.addField(new InputFieldDefinition('from')).type =
82
- schema.stringType();
83
- HTTPHeaderMapping.addField(new InputFieldDefinition('value')).type =
84
- schema.stringType();
85
-
86
- /*
87
- input ConnectHTTP {
88
- GET: URLPathTemplate
89
- POST: URLPathTemplate
90
- PUT: URLPathTemplate
91
- PATCH: URLPathTemplate
92
- DELETE: URLPathTemplate
93
- body: JSONSelection
94
- headers: [HTTPHeaderMapping!]
95
- }
96
- */
97
- const ConnectHTTP = schema.addType(new InputObjectType(this.typeNameInSchema(schema, CONNECT_HTTP)!));
98
- ConnectHTTP.addField(new InputFieldDefinition('GET')).type = URLPathTemplate;
99
- ConnectHTTP.addField(new InputFieldDefinition('POST')).type = URLPathTemplate;
100
- ConnectHTTP.addField(new InputFieldDefinition('PUT')).type = URLPathTemplate;
101
- ConnectHTTP.addField(new InputFieldDefinition('PATCH')).type = URLPathTemplate;
102
- ConnectHTTP.addField(new InputFieldDefinition('DELETE')).type = URLPathTemplate;
103
- ConnectHTTP.addField(new InputFieldDefinition('body')).type = JSONSelection;
104
- ConnectHTTP.addField(new InputFieldDefinition('headers')).type =
105
- new ListType(new NonNullType(HTTPHeaderMapping));
106
- connect.addArgument('http', new NonNullType(ConnectHTTP));
107
-
108
- connect.addArgument('selection', new NonNullType(JSONSelection));
109
- connect.addArgument('entity', schema.booleanType(), false);
110
-
111
- /*
112
- directive @source(
113
- name: String!
114
- http: ConnectHTTP
115
- ) repeatable on SCHEMA
116
- */
117
- const source = this.addDirective(schema, SOURCE).addLocations(
118
- DirectiveLocation.SCHEMA,
119
- );
120
- source.repeatable = true;
121
- source.addArgument('name', new NonNullType(schema.stringType()));
122
-
123
- /*
124
- input SourceHTTP {
125
- baseURL: String!
126
- headers: [HTTPHeaderMapping!]
127
- }
128
- */
129
- const SourceHTTP = schema.addType(new InputObjectType(this.typeNameInSchema(schema, SOURCE_HTTP)!));
130
- SourceHTTP.addField(new InputFieldDefinition('baseURL')).type =
131
- new NonNullType(schema.stringType());
132
- SourceHTTP.addField(new InputFieldDefinition('headers')).type =
133
- new ListType(new NonNullType(HTTPHeaderMapping));
134
-
135
- source.addArgument('http', new NonNullType(SourceHTTP));
136
-
137
- return [];
138
- }
139
-
140
- get defaultCorePurpose(): CorePurpose {
141
- return 'EXECUTION';
142
- }
143
- }
144
-
145
- export type SourceDirectiveArgs = {
146
- name: string;
147
- http: SourceDirectiveHTTP;
148
- };
149
-
150
- export type SourceDirectiveHTTP = {
151
- baseURL: string;
152
- headers?: HTTPHeaderMapping[];
153
- };
154
-
155
- type HTTPHeaderMapping = {
156
- name: string;
157
- as?: string;
158
- value?: string;
159
- };
160
-
161
- type URLPathTemplate = string;
162
- type JSONSelection = string;
163
-
164
- export type ConnectDirectiveArgs = {
165
- source: string;
166
- http: ConnectDirectiveHTTP;
167
- selection?: JSONSelection;
168
- };
169
-
170
- export type ConnectDirectiveHTTP = {
171
- GET?: URLPathTemplate;
172
- POST?: URLPathTemplate;
173
- PUT?: URLPathTemplate;
174
- PATCH?: URLPathTemplate;
175
- DELETE?: URLPathTemplate;
176
- body?: JSONSelection;
177
- headers?: HTTPHeaderMapping[];
178
- };
179
-
180
- export const CONNECT_VERSIONS = new FeatureDefinitions<ConnectSpecDefinition>(connectIdentity)
181
- .add(new ConnectSpecDefinition(new FeatureVersion(0, 1), new FeatureVersion(2, 9)));
182
-
183
- registerKnownFeature(CONNECT_VERSIONS);