@ankhorage/data-sources 0.6.0 → 1.0.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 (55) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +5 -5
  3. package/dist/discovery/index.d.ts +3 -3
  4. package/dist/discovery/index.d.ts.map +1 -1
  5. package/dist/discovery/index.js +19 -28
  6. package/dist/discovery/index.js.map +1 -1
  7. package/dist/generated-api/index.d.ts +10 -0
  8. package/dist/generated-api/index.d.ts.map +1 -0
  9. package/dist/generated-api/index.js +274 -0
  10. package/dist/generated-api/index.js.map +1 -0
  11. package/dist/generated-api/validateGeneratedApiCollection.d.ts +3 -0
  12. package/dist/generated-api/validateGeneratedApiCollection.d.ts.map +1 -0
  13. package/dist/generated-api/validateGeneratedApiCollection.js +35 -0
  14. package/dist/generated-api/validateGeneratedApiCollection.js.map +1 -0
  15. package/dist/graphql/index.d.ts +3 -3
  16. package/dist/graphql/index.d.ts.map +1 -1
  17. package/dist/graphql/index.js +24 -60
  18. package/dist/graphql/index.js.map +1 -1
  19. package/dist/index.d.ts +9 -3
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +17 -4
  22. package/dist/index.js.map +1 -1
  23. package/dist/openapi/index.d.ts +2 -2
  24. package/dist/openapi/index.d.ts.map +1 -1
  25. package/dist/openapi/index.js +19 -29
  26. package/dist/openapi/index.js.map +1 -1
  27. package/dist/rest/index.d.ts +3 -3
  28. package/dist/rest/index.d.ts.map +1 -1
  29. package/dist/rest/index.js +51 -51
  30. package/dist/rest/index.js.map +1 -1
  31. package/dist/test-runner/index.d.ts.map +1 -1
  32. package/dist/test-runner/index.js +60 -104
  33. package/dist/test-runner/index.js.map +1 -1
  34. package/package.json +2 -2
  35. package/src/discovery/index.test.ts +25 -101
  36. package/src/discovery/index.ts +22 -35
  37. package/src/{managed-api → generated-api}/index.test.ts +59 -67
  38. package/src/generated-api/index.ts +414 -0
  39. package/src/generated-api/validateGeneratedApiCollection.test.ts +91 -0
  40. package/src/generated-api/validateGeneratedApiCollection.ts +76 -0
  41. package/src/graphql/index.test.ts +28 -134
  42. package/src/graphql/index.ts +29 -89
  43. package/src/index.test.ts +25 -18
  44. package/src/index.ts +28 -7
  45. package/src/openapi/index.test.ts +36 -246
  46. package/src/openapi/index.ts +22 -60
  47. package/src/rest/index.test.ts +22 -173
  48. package/src/rest/index.ts +62 -59
  49. package/src/test-runner/index.test.ts +82 -150
  50. package/src/test-runner/index.ts +73 -143
  51. package/dist/managed-api/index.d.ts +0 -30
  52. package/dist/managed-api/index.d.ts.map +0 -1
  53. package/dist/managed-api/index.js +0 -257
  54. package/dist/managed-api/index.js.map +0 -1
  55. package/src/managed-api/index.ts +0 -364
@@ -0,0 +1,35 @@
1
+ export function validateGeneratedApiCollection(definition, resource) {
2
+ const diagnostics = [];
3
+ const { fields, primaryKey } = resource.collection;
4
+ const fieldNames = new Set();
5
+ if (fields.length === 0) {
6
+ diagnostics.push(diagnostic(definition, resource, 'Generated API resources require fields.', 'fields'));
7
+ }
8
+ fields.forEach((field, index) => {
9
+ const name = field.name.trim();
10
+ if (!name) {
11
+ diagnostics.push(diagnostic(definition, resource, 'Generated API field names must be non-empty.', `fields.${index}.name`));
12
+ return;
13
+ }
14
+ if (fieldNames.has(name)) {
15
+ diagnostics.push(diagnostic(definition, resource, `Generated API field '${name}' is duplicated.`, `fields.${index}.name`));
16
+ return;
17
+ }
18
+ fieldNames.add(name);
19
+ });
20
+ if (primaryKey !== undefined && !fields.some((field) => field.name === primaryKey)) {
21
+ diagnostics.push(diagnostic(definition, resource, `Primary key '${primaryKey}' does not match a collection field.`, 'primaryKey'));
22
+ }
23
+ return diagnostics;
24
+ }
25
+ function diagnostic(definition, resource, message, path) {
26
+ return {
27
+ code: 'invalid-config',
28
+ dataSourceId: definition.id,
29
+ endpointId: resource.id,
30
+ message,
31
+ path: `resources.${resource.id}.collection.${path}`,
32
+ severity: 'error',
33
+ };
34
+ }
35
+ //# sourceMappingURL=validateGeneratedApiCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateGeneratedApiCollection.js","sourceRoot":"","sources":["../../src/generated-api/validateGeneratedApiCollection.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,8BAA8B,CAC5C,UAAkC,EAClC,QAAwC;IAExC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,CACd,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,yCAAyC,EAAE,QAAQ,CAAC,CACtF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,WAAW,CAAC,IAAI,CACd,UAAU,CACR,UAAU,EACV,QAAQ,EACR,8CAA8C,EAC9C,UAAU,KAAK,OAAO,CACvB,CACF,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,WAAW,CAAC,IAAI,CACd,UAAU,CACR,UAAU,EACV,QAAQ,EACR,wBAAwB,IAAI,kBAAkB,EAC9C,UAAU,KAAK,OAAO,CACvB,CACF,CAAC;YACF,OAAO;QACT,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;QACnF,WAAW,CAAC,IAAI,CACd,UAAU,CACR,UAAU,EACV,QAAQ,EACR,gBAAgB,UAAU,sCAAsC,EAChE,YAAY,CACb,CACF,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,UAAU,CACjB,UAAkC,EAClC,QAAwC,EACxC,OAAe,EACf,IAAY;IAEZ,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,UAAU,CAAC,EAAE;QAC3B,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,OAAO;QACP,IAAI,EAAE,aAAa,QAAQ,CAAC,EAAE,eAAe,IAAI,EAAE;QACnD,QAAQ,EAAE,OAAO;KAClB,CAAC;AACJ,CAAC","sourcesContent":["import type {\n DataSourceDiagnostic,\n GeneratedApiDefinition,\n GeneratedApiResourceDefinition,\n} from '@ankhorage/contracts/data';\n\nexport function validateGeneratedApiCollection(\n definition: GeneratedApiDefinition,\n resource: GeneratedApiResourceDefinition,\n): readonly DataSourceDiagnostic[] {\n const diagnostics: DataSourceDiagnostic[] = [];\n const { fields, primaryKey } = resource.collection;\n const fieldNames = new Set<string>();\n\n if (fields.length === 0) {\n diagnostics.push(\n diagnostic(definition, resource, 'Generated API resources require fields.', 'fields'),\n );\n }\n\n fields.forEach((field, index) => {\n const name = field.name.trim();\n if (!name) {\n diagnostics.push(\n diagnostic(\n definition,\n resource,\n 'Generated API field names must be non-empty.',\n `fields.${index}.name`,\n ),\n );\n return;\n }\n if (fieldNames.has(name)) {\n diagnostics.push(\n diagnostic(\n definition,\n resource,\n `Generated API field '${name}' is duplicated.`,\n `fields.${index}.name`,\n ),\n );\n return;\n }\n fieldNames.add(name);\n });\n\n if (primaryKey !== undefined && !fields.some((field) => field.name === primaryKey)) {\n diagnostics.push(\n diagnostic(\n definition,\n resource,\n `Primary key '${primaryKey}' does not match a collection field.`,\n 'primaryKey',\n ),\n );\n }\n\n return diagnostics;\n}\n\nfunction diagnostic(\n definition: GeneratedApiDefinition,\n resource: GeneratedApiResourceDefinition,\n message: string,\n path: string,\n): DataSourceDiagnostic {\n return {\n code: 'invalid-config',\n dataSourceId: definition.id,\n endpointId: resource.id,\n message,\n path: `resources.${resource.id}.collection.${path}`,\n severity: 'error',\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { CredentialRef, DataContractValue, DataSchema, DataSchemaRegistry, DataSourceDiagnostic, DataSourceDiagnosticResult, GraphQlDataSourceConfig, OperationId } from '@ankhorage/contracts/data';
1
+ import type { CredentialRef, DataContractValue, DataSchema, DataSchemaRegistry, DataSourceDiagnostic, DataSourceDiagnosticResult, ExternalGraphQlApiDataSourceConfig, OperationId } from '@ankhorage/contracts/data';
2
2
  export declare const GRAPHQL_INTROSPECTION_QUERY = "query AnkhorageGraphQlIntrospection {\n __schema {\n queryType { name }\n mutationType { name }\n subscriptionType { name }\n types {\n kind\n name\n description\n fields {\n name\n description\n args {\n name\n description\n type { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n defaultValue\n }\n type { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n }\n inputFields {\n name\n description\n type { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n defaultValue\n }\n enumValues { name description }\n possibleTypes { kind name }\n }\n }\n}";
3
3
  export type GraphQlOperationKind = 'mutation' | 'query' | 'subscription';
4
4
  export interface GraphQlIntrospectionTypeRef {
@@ -75,9 +75,9 @@ export interface GraphQlIntrospectionRequest {
75
75
  }
76
76
  export declare function createGraphQlIntrospectionRequest(): GraphQlIntrospectionRequest;
77
77
  export declare function normalizeGraphQlOperationId(kind: GraphQlOperationKind, name: string): OperationId;
78
- export declare function createGraphQlDataSource(definition: GraphQlDataSourceDefinition): DataSourceDiagnosticResult<GraphQlDataSourceConfig>;
78
+ export declare function createGraphQlDataSource(definition: GraphQlDataSourceDefinition): DataSourceDiagnosticResult<ExternalGraphQlApiDataSourceConfig>;
79
79
  export declare function validateGraphQlDataSource(definition: GraphQlDataSourceDefinition): readonly DataSourceDiagnostic[];
80
- export declare function normalizeGraphQlDataSource(definition: GraphQlDataSourceDefinition): GraphQlDataSourceConfig;
80
+ export declare function normalizeGraphQlDataSource(definition: GraphQlDataSourceDefinition): ExternalGraphQlApiDataSourceConfig;
81
81
  export declare function normalizeGraphQlIntrospectionSchemas(introspection: GraphQlIntrospectionResult | undefined): DataSchemaRegistry | undefined;
82
82
  export declare function normalizeGraphQlIntrospectionOperations(introspection: GraphQlIntrospectionResult | undefined): readonly GraphQlOperationDefinition[];
83
83
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graphql/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graphql/index.ts"],"names":[],"mappings":"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"}
@@ -44,9 +44,9 @@ export function normalizeGraphQlOperationId(kind, name) {
44
44
  }
45
45
  export function createGraphQlDataSource(definition) {
46
46
  const diagnostics = validateGraphQlDataSource(definition);
47
- const hasErrors = diagnostics.some((diagnostic) => diagnostic.severity === 'error');
48
- if (hasErrors)
47
+ if (diagnostics.some((diagnostic) => diagnostic.severity === 'error')) {
49
48
  return { ok: false, diagnostics };
49
+ }
50
50
  return {
51
51
  ok: true,
52
52
  data: normalizeGraphQlDataSource(definition),
@@ -86,10 +86,9 @@ export function validateGraphQlDataSource(definition) {
86
86
  }
87
87
  export function normalizeGraphQlDataSource(definition) {
88
88
  const schemas = normalizeGraphQlIntrospectionSchemas(definition.introspection);
89
- const introspectionOperations = normalizeGraphQlIntrospectionOperations(definition.introspection);
90
- const manualOperations = definition.operations ?? [];
89
+ const discovered = normalizeGraphQlIntrospectionOperations(definition.introspection);
91
90
  const operations = {};
92
- for (const operation of [...introspectionOperations, ...manualOperations]) {
91
+ for (const operation of [...discovered, ...(definition.operations ?? [])]) {
93
92
  operations[operation.id] = normalizeGraphQlOperation(operation);
94
93
  }
95
94
  const endpoint = {
@@ -98,20 +97,18 @@ export function normalizeGraphQlDataSource(definition) {
98
97
  baseUrl: definition.endpointUrl,
99
98
  credential: definition.credential,
100
99
  operations,
101
- metadata: {
102
- source: 'graphql',
103
- },
100
+ metadata: { source: 'graphql' },
104
101
  };
105
102
  return {
106
103
  id: definition.id,
107
- kind: 'graphql',
104
+ kind: 'api',
105
+ origin: 'external',
106
+ protocol: 'graphql',
108
107
  name: definition.name,
109
108
  description: definition.description,
110
109
  endpointUrl: definition.endpointUrl,
111
110
  credential: definition.credential,
112
- endpoints: {
113
- graphql: endpoint,
114
- },
111
+ endpoints: { graphql: endpoint },
115
112
  schemas,
116
113
  introspection: {
117
114
  enabled: definition.introspectionEnabled ?? definition.introspection !== undefined,
@@ -156,19 +153,12 @@ function appendRootOperations(operations, kind, rootTypeName, types) {
156
153
  variables: normalizeGraphQlVariablesSchema(field.args ?? []),
157
154
  response: normalizeGraphQlTypeRef(field.type),
158
155
  selectionPath: `$.data.${field.name}`,
159
- metadata: {
160
- rootType: rootTypeName,
161
- source: 'introspection',
162
- },
156
+ metadata: { rootType: rootTypeName, source: 'introspection' },
163
157
  });
164
158
  }
165
159
  }
166
160
  function normalizeGraphQlOperation(operation) {
167
- const response = operation.response === undefined
168
- ? undefined
169
- : {
170
- schema: operation.response,
171
- };
161
+ const response = operation.response === undefined ? undefined : { schema: operation.response };
172
162
  return {
173
163
  id: operation.id,
174
164
  endpointId: 'graphql',
@@ -176,17 +166,13 @@ function normalizeGraphQlOperation(operation) {
176
166
  description: operation.description,
177
167
  protocol: 'graphql',
178
168
  intent: mapGraphQlOperationKindToIntent(operation.kind),
179
- request: {
180
- schema: operation.variables,
181
- },
169
+ request: { schema: operation.variables },
182
170
  response,
183
171
  metadata: createGraphQlOperationMetadata(operation),
184
172
  };
185
173
  }
186
174
  function mapGraphQlOperationKindToIntent(kind) {
187
- if (kind === 'query' || kind === 'subscription')
188
- return 'read';
189
- return 'action';
175
+ return kind === 'query' || kind === 'subscription' ? 'read' : 'action';
190
176
  }
191
177
  function normalizeGraphQlVariablesSchema(args) {
192
178
  const properties = {};
@@ -229,22 +215,17 @@ function normalizeGraphQlType(type) {
229
215
  return {
230
216
  title: type.name ?? undefined,
231
217
  description: type.description ?? undefined,
232
- anyOf: type.possibleTypes?.map((possibleType) => normalizeGraphQlTypeRef(possibleType)),
218
+ anyOf: type.possibleTypes?.map(normalizeGraphQlTypeRef),
233
219
  };
234
220
  }
235
- return {
236
- title: type.name ?? undefined,
237
- description: type.description ?? undefined,
238
- };
221
+ return { title: type.name ?? undefined, description: type.description ?? undefined };
239
222
  }
240
223
  function normalizeGraphQlObjectType(type) {
241
224
  const fields = type.kind === 'INPUT_OBJECT' ? type.inputFields : type.fields;
242
225
  const properties = {};
243
226
  const required = [];
244
227
  for (const field of fields ?? []) {
245
- const fieldType = 'type' in field ? field.type : undefined;
246
- if (fieldType === undefined)
247
- continue;
228
+ const fieldType = field.type;
248
229
  properties[field.name] = {
249
230
  ...normalizeGraphQlTypeRef(fieldType),
250
231
  description: field.description ?? undefined,
@@ -262,23 +243,15 @@ function normalizeGraphQlObjectType(type) {
262
243
  }
263
244
  function normalizeGraphQlTypeRef(type) {
264
245
  if (type.kind === 'NON_NULL' && type.ofType !== undefined && type.ofType !== null) {
265
- return {
266
- ...normalizeGraphQlTypeRef(type.ofType),
267
- nullable: false,
268
- };
246
+ return { ...normalizeGraphQlTypeRef(type.ofType), nullable: false };
269
247
  }
270
248
  if (type.kind === 'LIST' && type.ofType !== undefined && type.ofType !== null) {
271
- return {
272
- type: 'array',
273
- items: normalizeGraphQlTypeRef(type.ofType),
274
- };
249
+ return { type: 'array', items: normalizeGraphQlTypeRef(type.ofType) };
275
250
  }
276
- if (type.kind === 'SCALAR') {
251
+ if (type.kind === 'SCALAR')
277
252
  return normalizeGraphQlNamedScalar(type.name);
278
- }
279
- if (type.name !== undefined && type.name !== null) {
253
+ if (type.name !== undefined && type.name !== null)
280
254
  return { ref: { id: type.name } };
281
- }
282
255
  return {};
283
256
  }
284
257
  function normalizeGraphQlNamedScalar(name) {
@@ -290,10 +263,7 @@ function normalizeGraphQlNamedScalar(name) {
290
263
  return { type: 'string' };
291
264
  if (name === 'Int')
292
265
  return { type: 'integer' };
293
- return {
294
- type: 'string',
295
- format: name ?? undefined,
296
- };
266
+ return { type: 'string', format: name ?? undefined };
297
267
  }
298
268
  function isGraphQlNonNull(type) {
299
269
  return type.kind === 'NON_NULL';
@@ -304,22 +274,16 @@ function isNamedGraphQlType(type) {
304
274
  function createGraphQlOperationMetadata(operation) {
305
275
  const metadata = toMetadataRecord(operation.metadata);
306
276
  metadata.kind = operation.kind;
307
- if (operation.document !== undefined) {
277
+ if (operation.document !== undefined)
308
278
  metadata.document = operation.document;
309
- }
310
- if (operation.selectionPath !== undefined) {
279
+ if (operation.selectionPath !== undefined)
311
280
  metadata.selectionPath = operation.selectionPath;
312
- }
313
281
  return metadata;
314
282
  }
315
283
  function toMetadataRecord(value) {
316
284
  if (!isDataContractRecord(value))
317
285
  return {};
318
- const metadata = {};
319
- for (const [key, item] of Object.entries(value)) {
320
- metadata[key] = item;
321
- }
322
- return metadata;
286
+ return { ...value };
323
287
  }
324
288
  function isDataContractRecord(value) {
325
289
  return (value !== undefined && typeof value === 'object' && value !== null && !Array.isArray(value));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graphql/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CredentialRef,\n DataContractValue,\n DataEndpointConfig,\n DataOperationConfig,\n DataOperationIntent,\n DataOperationResponse,\n DataSchema,\n DataSchemaRegistry,\n DataSourceDiagnostic,\n DataSourceDiagnosticResult,\n GraphQlDataSourceConfig,\n OperationId,\n} from '@ankhorage/contracts/data';\n\nexport const GRAPHQL_INTROSPECTION_QUERY = `query AnkhorageGraphQlIntrospection {\n __schema {\n queryType { name }\n mutationType { name }\n subscriptionType { name }\n types {\n kind\n name\n description\n fields {\n name\n description\n args {\n name\n description\n type { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n defaultValue\n }\n type { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n }\n inputFields {\n name\n description\n type { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n defaultValue\n }\n enumValues { name description }\n possibleTypes { kind name }\n }\n }\n}`;\n\nexport type GraphQlOperationKind = 'mutation' | 'query' | 'subscription';\n\ntype DataContractRecord = Record<string, DataContractValue>;\n\nexport interface GraphQlIntrospectionTypeRef {\n readonly kind: string;\n readonly name?: string | null;\n readonly ofType?: GraphQlIntrospectionTypeRef | null;\n}\n\nexport interface GraphQlIntrospectionInputValue {\n readonly name: string;\n readonly description?: string | null;\n readonly type: GraphQlIntrospectionTypeRef;\n readonly defaultValue?: string | null;\n}\n\nexport interface GraphQlIntrospectionField {\n readonly name: string;\n readonly description?: string | null;\n readonly args?: readonly GraphQlIntrospectionInputValue[] | null;\n readonly type: GraphQlIntrospectionTypeRef;\n}\n\nexport interface GraphQlIntrospectionEnumValue {\n readonly name: string;\n readonly description?: string | null;\n}\n\nexport interface GraphQlIntrospectionType {\n readonly kind: string;\n readonly name?: string | null;\n readonly description?: string | null;\n readonly fields?: readonly GraphQlIntrospectionField[] | null;\n readonly inputFields?: readonly GraphQlIntrospectionInputValue[] | null;\n readonly enumValues?: readonly GraphQlIntrospectionEnumValue[] | null;\n readonly possibleTypes?: readonly GraphQlIntrospectionTypeRef[] | null;\n}\n\nexport interface GraphQlIntrospectionSchema {\n readonly queryType?: { readonly name?: string | null } | null;\n readonly mutationType?: { readonly name?: string | null } | null;\n readonly subscriptionType?: { readonly name?: string | null } | null;\n readonly types?: readonly GraphQlIntrospectionType[] | null;\n}\n\nexport interface GraphQlIntrospectionResult {\n readonly __schema?: GraphQlIntrospectionSchema;\n}\n\nexport interface GraphQlOperationDefinition {\n readonly id: OperationId;\n readonly kind: GraphQlOperationKind;\n readonly name?: string;\n readonly description?: string;\n readonly document?: string;\n readonly variables?: DataSchema;\n readonly response?: DataSchema;\n readonly selectionPath?: string;\n readonly metadata?: DataContractValue;\n}\n\nexport interface GraphQlDataSourceDefinition {\n readonly id: string;\n readonly endpointUrl: string;\n readonly name?: string;\n readonly description?: string;\n readonly credential?: CredentialRef;\n readonly introspection?: GraphQlIntrospectionResult;\n readonly introspectionEnabled?: boolean;\n readonly schemaVersion?: string;\n readonly operations?: readonly GraphQlOperationDefinition[];\n readonly metadata?: DataContractValue;\n}\n\nexport interface GraphQlIntrospectionRequest {\n readonly query: typeof GRAPHQL_INTROSPECTION_QUERY;\n readonly operationName: 'AnkhorageGraphQlIntrospection';\n}\n\nexport function createGraphQlIntrospectionRequest(): GraphQlIntrospectionRequest {\n return {\n query: GRAPHQL_INTROSPECTION_QUERY,\n operationName: 'AnkhorageGraphQlIntrospection',\n };\n}\n\nexport function normalizeGraphQlOperationId(kind: GraphQlOperationKind, name: string): OperationId {\n const normalizedName = name\n .replace(/[^A-Za-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n\n return normalizedName.length > 0 ? `${kind}.${normalizedName}` : `${kind}.operation`;\n}\n\nexport function createGraphQlDataSource(\n definition: GraphQlDataSourceDefinition,\n): DataSourceDiagnosticResult<GraphQlDataSourceConfig> {\n const diagnostics = validateGraphQlDataSource(definition);\n const hasErrors = diagnostics.some((diagnostic) => diagnostic.severity === 'error');\n\n if (hasErrors) return { ok: false, diagnostics };\n\n return {\n ok: true,\n data: normalizeGraphQlDataSource(definition),\n diagnostics,\n };\n}\n\nexport function validateGraphQlDataSource(\n definition: GraphQlDataSourceDefinition,\n): readonly DataSourceDiagnostic[] {\n const diagnostics: DataSourceDiagnostic[] = [];\n\n if (definition.endpointUrl.trim().length === 0) {\n diagnostics.push({\n code: 'invalid-config',\n dataSourceId: definition.id,\n message: 'GraphQL data source requires a non-empty endpointUrl.',\n path: 'endpointUrl',\n severity: 'error',\n });\n }\n\n if (definition.introspectionEnabled === false && definition.introspection !== undefined) {\n diagnostics.push({\n code: 'invalid-config',\n dataSourceId: definition.id,\n message: 'GraphQL introspection data was provided while introspection is disabled.',\n path: 'introspection',\n severity: 'warning',\n });\n }\n\n if (definition.introspectionEnabled !== false && definition.introspection === undefined) {\n diagnostics.push({\n code: 'missing-schema',\n dataSourceId: definition.id,\n message:\n 'GraphQL introspection result was not provided. Manual operations can still be used.',\n path: 'introspection',\n severity: 'info',\n });\n }\n\n return diagnostics;\n}\n\nexport function normalizeGraphQlDataSource(\n definition: GraphQlDataSourceDefinition,\n): GraphQlDataSourceConfig {\n const schemas = normalizeGraphQlIntrospectionSchemas(definition.introspection);\n const introspectionOperations = normalizeGraphQlIntrospectionOperations(definition.introspection);\n const manualOperations = definition.operations ?? [];\n const operations: Record<OperationId, DataOperationConfig> = {};\n\n for (const operation of [...introspectionOperations, ...manualOperations]) {\n operations[operation.id] = normalizeGraphQlOperation(operation);\n }\n\n const endpoint: DataEndpointConfig = {\n id: 'graphql',\n kind: 'graphql',\n baseUrl: definition.endpointUrl,\n credential: definition.credential,\n operations,\n metadata: {\n source: 'graphql',\n },\n };\n\n return {\n id: definition.id,\n kind: 'graphql',\n name: definition.name,\n description: definition.description,\n endpointUrl: definition.endpointUrl,\n credential: definition.credential,\n endpoints: {\n graphql: endpoint,\n },\n schemas,\n introspection: {\n enabled: definition.introspectionEnabled ?? definition.introspection !== undefined,\n schemaVersion: definition.schemaVersion,\n },\n metadata: definition.metadata,\n };\n}\n\nexport function normalizeGraphQlIntrospectionSchemas(\n introspection: GraphQlIntrospectionResult | undefined,\n): DataSchemaRegistry | undefined {\n const types = introspection?.__schema?.types?.filter(isNamedGraphQlType) ?? [];\n if (types.length === 0) return undefined;\n\n const schemas: Record<string, DataSchema> = {};\n\n for (const type of types) {\n if (type.name === undefined || type.name === null || type.name.startsWith('__')) continue;\n schemas[type.name] = normalizeGraphQlType(type);\n }\n\n return schemas;\n}\n\nexport function normalizeGraphQlIntrospectionOperations(\n introspection: GraphQlIntrospectionResult | undefined,\n): readonly GraphQlOperationDefinition[] {\n const schema = introspection?.__schema;\n if (schema === undefined) return [];\n\n const types = schema.types?.filter(isNamedGraphQlType) ?? [];\n const operations: GraphQlOperationDefinition[] = [];\n\n appendRootOperations(operations, 'query', schema.queryType?.name, types);\n appendRootOperations(operations, 'mutation', schema.mutationType?.name, types);\n appendRootOperations(operations, 'subscription', schema.subscriptionType?.name, types);\n\n return operations;\n}\n\nfunction appendRootOperations(\n operations: GraphQlOperationDefinition[],\n kind: GraphQlOperationKind,\n rootTypeName: string | null | undefined,\n types: readonly GraphQlIntrospectionType[],\n): void {\n if (rootTypeName === undefined || rootTypeName === null) return;\n\n const rootType = types.find((type) => type.name === rootTypeName);\n for (const field of rootType?.fields ?? []) {\n operations.push({\n id: normalizeGraphQlOperationId(kind, field.name),\n kind,\n name: field.name,\n description: field.description ?? undefined,\n variables: normalizeGraphQlVariablesSchema(field.args ?? []),\n response: normalizeGraphQlTypeRef(field.type),\n selectionPath: `$.data.${field.name}`,\n metadata: {\n rootType: rootTypeName,\n source: 'introspection',\n },\n });\n }\n}\n\nfunction normalizeGraphQlOperation(operation: GraphQlOperationDefinition): DataOperationConfig {\n const response: DataOperationResponse | undefined =\n operation.response === undefined\n ? undefined\n : {\n schema: operation.response,\n };\n\n return {\n id: operation.id,\n endpointId: 'graphql',\n name: operation.name,\n description: operation.description,\n protocol: 'graphql',\n intent: mapGraphQlOperationKindToIntent(operation.kind),\n request: {\n schema: operation.variables,\n },\n response,\n metadata: createGraphQlOperationMetadata(operation),\n };\n}\n\nfunction mapGraphQlOperationKindToIntent(kind: GraphQlOperationKind): DataOperationIntent {\n if (kind === 'query' || kind === 'subscription') return 'read';\n return 'action';\n}\n\nfunction normalizeGraphQlVariablesSchema(\n args: readonly GraphQlIntrospectionInputValue[],\n): DataSchema {\n const properties: Record<string, DataSchema> = {};\n const required: string[] = [];\n\n for (const arg of args) {\n properties[arg.name] = {\n ...normalizeGraphQlTypeRef(arg.type),\n description: arg.description ?? undefined,\n default: arg.defaultValue ?? undefined,\n };\n if (isGraphQlNonNull(arg.type)) required.push(arg.name);\n }\n\n return {\n type: 'object',\n required: required.length > 0 ? required : undefined,\n properties,\n };\n}\n\nfunction normalizeGraphQlType(type: GraphQlIntrospectionType): DataSchema {\n if (type.kind === 'OBJECT' || type.kind === 'INTERFACE' || type.kind === 'INPUT_OBJECT') {\n return normalizeGraphQlObjectType(type);\n }\n\n if (type.kind === 'ENUM') {\n return {\n type: 'string',\n title: type.name ?? undefined,\n description: type.description ?? undefined,\n enum: type.enumValues?.map((value) => value.name),\n };\n }\n\n if (type.kind === 'SCALAR') {\n return {\n ...normalizeGraphQlNamedScalar(type.name),\n title: type.name ?? undefined,\n description: type.description ?? undefined,\n };\n }\n\n if (type.kind === 'UNION') {\n return {\n title: type.name ?? undefined,\n description: type.description ?? undefined,\n anyOf: type.possibleTypes?.map((possibleType) => normalizeGraphQlTypeRef(possibleType)),\n };\n }\n\n return {\n title: type.name ?? undefined,\n description: type.description ?? undefined,\n };\n}\n\nfunction normalizeGraphQlObjectType(type: GraphQlIntrospectionType): DataSchema {\n const fields = type.kind === 'INPUT_OBJECT' ? type.inputFields : type.fields;\n const properties: Record<string, DataSchema> = {};\n const required: string[] = [];\n\n for (const field of fields ?? []) {\n const fieldType = 'type' in field ? field.type : undefined;\n if (fieldType === undefined) continue;\n\n properties[field.name] = {\n ...normalizeGraphQlTypeRef(fieldType),\n description: field.description ?? undefined,\n };\n\n if (isGraphQlNonNull(fieldType)) required.push(field.name);\n }\n\n return {\n type: 'object',\n title: type.name ?? undefined,\n description: type.description ?? undefined,\n required: required.length > 0 ? required : undefined,\n properties,\n };\n}\n\nfunction normalizeGraphQlTypeRef(type: GraphQlIntrospectionTypeRef): DataSchema {\n if (type.kind === 'NON_NULL' && type.ofType !== undefined && type.ofType !== null) {\n return {\n ...normalizeGraphQlTypeRef(type.ofType),\n nullable: false,\n };\n }\n\n if (type.kind === 'LIST' && type.ofType !== undefined && type.ofType !== null) {\n return {\n type: 'array',\n items: normalizeGraphQlTypeRef(type.ofType),\n };\n }\n\n if (type.kind === 'SCALAR') {\n return normalizeGraphQlNamedScalar(type.name);\n }\n\n if (type.name !== undefined && type.name !== null) {\n return { ref: { id: type.name } };\n }\n\n return {};\n}\n\nfunction normalizeGraphQlNamedScalar(name: string | null | undefined): DataSchema {\n if (name === 'Boolean') return { type: 'boolean' };\n if (name === 'Float') return { type: 'number' };\n if (name === 'ID' || name === 'String') return { type: 'string' };\n if (name === 'Int') return { type: 'integer' };\n\n return {\n type: 'string',\n format: name ?? undefined,\n };\n}\n\nfunction isGraphQlNonNull(type: GraphQlIntrospectionTypeRef): boolean {\n return type.kind === 'NON_NULL';\n}\n\nfunction isNamedGraphQlType(type: GraphQlIntrospectionType): boolean {\n return type.name !== undefined && type.name !== null;\n}\n\nfunction createGraphQlOperationMetadata(operation: GraphQlOperationDefinition): DataContractRecord {\n const metadata = toMetadataRecord(operation.metadata);\n metadata.kind = operation.kind;\n\n if (operation.document !== undefined) {\n metadata.document = operation.document;\n }\n\n if (operation.selectionPath !== undefined) {\n metadata.selectionPath = operation.selectionPath;\n }\n\n return metadata;\n}\n\nfunction toMetadataRecord(value: DataContractValue | undefined): DataContractRecord {\n if (!isDataContractRecord(value)) return {};\n\n const metadata: DataContractRecord = {};\n for (const [key, item] of Object.entries(value)) {\n metadata[key] = item;\n }\n\n return metadata;\n}\n\nfunction isDataContractRecord(value: DataContractValue | undefined): value is DataContractRecord {\n return (\n value !== undefined && typeof value === 'object' && value !== null && !Array.isArray(value)\n );\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graphql/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CredentialRef,\n DataContractValue,\n DataEndpointConfig,\n DataOperationConfig,\n DataOperationIntent,\n DataOperationResponse,\n DataSchema,\n DataSchemaRegistry,\n DataSourceDiagnostic,\n DataSourceDiagnosticResult,\n ExternalGraphQlApiDataSourceConfig,\n OperationId,\n} from '@ankhorage/contracts/data';\n\nexport const GRAPHQL_INTROSPECTION_QUERY = `query AnkhorageGraphQlIntrospection {\n __schema {\n queryType { name }\n mutationType { name }\n subscriptionType { name }\n types {\n kind\n name\n description\n fields {\n name\n description\n args {\n name\n description\n type { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n defaultValue\n }\n type { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n }\n inputFields {\n name\n description\n type { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n defaultValue\n }\n enumValues { name description }\n possibleTypes { kind name }\n }\n }\n}`;\n\nexport type GraphQlOperationKind = 'mutation' | 'query' | 'subscription';\ntype DataContractRecord = Record<string, DataContractValue>;\n\nexport interface GraphQlIntrospectionTypeRef {\n readonly kind: string;\n readonly name?: string | null;\n readonly ofType?: GraphQlIntrospectionTypeRef | null;\n}\n\nexport interface GraphQlIntrospectionInputValue {\n readonly name: string;\n readonly description?: string | null;\n readonly type: GraphQlIntrospectionTypeRef;\n readonly defaultValue?: string | null;\n}\n\nexport interface GraphQlIntrospectionField {\n readonly name: string;\n readonly description?: string | null;\n readonly args?: readonly GraphQlIntrospectionInputValue[] | null;\n readonly type: GraphQlIntrospectionTypeRef;\n}\n\nexport interface GraphQlIntrospectionEnumValue {\n readonly name: string;\n readonly description?: string | null;\n}\n\nexport interface GraphQlIntrospectionType {\n readonly kind: string;\n readonly name?: string | null;\n readonly description?: string | null;\n readonly fields?: readonly GraphQlIntrospectionField[] | null;\n readonly inputFields?: readonly GraphQlIntrospectionInputValue[] | null;\n readonly enumValues?: readonly GraphQlIntrospectionEnumValue[] | null;\n readonly possibleTypes?: readonly GraphQlIntrospectionTypeRef[] | null;\n}\n\nexport interface GraphQlIntrospectionSchema {\n readonly queryType?: { readonly name?: string | null } | null;\n readonly mutationType?: { readonly name?: string | null } | null;\n readonly subscriptionType?: { readonly name?: string | null } | null;\n readonly types?: readonly GraphQlIntrospectionType[] | null;\n}\n\nexport interface GraphQlIntrospectionResult {\n readonly __schema?: GraphQlIntrospectionSchema;\n}\n\nexport interface GraphQlOperationDefinition {\n readonly id: OperationId;\n readonly kind: GraphQlOperationKind;\n readonly name?: string;\n readonly description?: string;\n readonly document?: string;\n readonly variables?: DataSchema;\n readonly response?: DataSchema;\n readonly selectionPath?: string;\n readonly metadata?: DataContractValue;\n}\n\nexport interface GraphQlDataSourceDefinition {\n readonly id: string;\n readonly endpointUrl: string;\n readonly name?: string;\n readonly description?: string;\n readonly credential?: CredentialRef;\n readonly introspection?: GraphQlIntrospectionResult;\n readonly introspectionEnabled?: boolean;\n readonly schemaVersion?: string;\n readonly operations?: readonly GraphQlOperationDefinition[];\n readonly metadata?: DataContractValue;\n}\n\nexport interface GraphQlIntrospectionRequest {\n readonly query: typeof GRAPHQL_INTROSPECTION_QUERY;\n readonly operationName: 'AnkhorageGraphQlIntrospection';\n}\n\nexport function createGraphQlIntrospectionRequest(): GraphQlIntrospectionRequest {\n return {\n query: GRAPHQL_INTROSPECTION_QUERY,\n operationName: 'AnkhorageGraphQlIntrospection',\n };\n}\n\nexport function normalizeGraphQlOperationId(kind: GraphQlOperationKind, name: string): OperationId {\n const normalizedName = name\n .replace(/[^A-Za-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n return normalizedName.length > 0 ? `${kind}.${normalizedName}` : `${kind}.operation`;\n}\n\nexport function createGraphQlDataSource(\n definition: GraphQlDataSourceDefinition,\n): DataSourceDiagnosticResult<ExternalGraphQlApiDataSourceConfig> {\n const diagnostics = validateGraphQlDataSource(definition);\n if (diagnostics.some((diagnostic) => diagnostic.severity === 'error')) {\n return { ok: false, diagnostics };\n }\n\n return {\n ok: true,\n data: normalizeGraphQlDataSource(definition),\n diagnostics,\n };\n}\n\nexport function validateGraphQlDataSource(\n definition: GraphQlDataSourceDefinition,\n): readonly DataSourceDiagnostic[] {\n const diagnostics: DataSourceDiagnostic[] = [];\n\n if (definition.endpointUrl.trim().length === 0) {\n diagnostics.push({\n code: 'invalid-config',\n dataSourceId: definition.id,\n message: 'GraphQL data source requires a non-empty endpointUrl.',\n path: 'endpointUrl',\n severity: 'error',\n });\n }\n\n if (definition.introspectionEnabled === false && definition.introspection !== undefined) {\n diagnostics.push({\n code: 'invalid-config',\n dataSourceId: definition.id,\n message: 'GraphQL introspection data was provided while introspection is disabled.',\n path: 'introspection',\n severity: 'warning',\n });\n }\n\n if (definition.introspectionEnabled !== false && definition.introspection === undefined) {\n diagnostics.push({\n code: 'missing-schema',\n dataSourceId: definition.id,\n message:\n 'GraphQL introspection result was not provided. Manual operations can still be used.',\n path: 'introspection',\n severity: 'info',\n });\n }\n\n return diagnostics;\n}\n\nexport function normalizeGraphQlDataSource(\n definition: GraphQlDataSourceDefinition,\n): ExternalGraphQlApiDataSourceConfig {\n const schemas = normalizeGraphQlIntrospectionSchemas(definition.introspection);\n const discovered = normalizeGraphQlIntrospectionOperations(definition.introspection);\n const operations: Record<OperationId, DataOperationConfig> = {};\n\n for (const operation of [...discovered, ...(definition.operations ?? [])]) {\n operations[operation.id] = normalizeGraphQlOperation(operation);\n }\n\n const endpoint: DataEndpointConfig = {\n id: 'graphql',\n kind: 'graphql',\n baseUrl: definition.endpointUrl,\n credential: definition.credential,\n operations,\n metadata: { source: 'graphql' },\n };\n\n return {\n id: definition.id,\n kind: 'api',\n origin: 'external',\n protocol: 'graphql',\n name: definition.name,\n description: definition.description,\n endpointUrl: definition.endpointUrl,\n credential: definition.credential,\n endpoints: { graphql: endpoint },\n schemas,\n introspection: {\n enabled: definition.introspectionEnabled ?? definition.introspection !== undefined,\n schemaVersion: definition.schemaVersion,\n },\n metadata: definition.metadata,\n };\n}\n\nexport function normalizeGraphQlIntrospectionSchemas(\n introspection: GraphQlIntrospectionResult | undefined,\n): DataSchemaRegistry | undefined {\n const types = introspection?.__schema?.types?.filter(isNamedGraphQlType) ?? [];\n if (types.length === 0) return undefined;\n\n const schemas: Record<string, DataSchema> = {};\n for (const type of types) {\n if (type.name === undefined || type.name === null || type.name.startsWith('__')) continue;\n schemas[type.name] = normalizeGraphQlType(type);\n }\n return schemas;\n}\n\nexport function normalizeGraphQlIntrospectionOperations(\n introspection: GraphQlIntrospectionResult | undefined,\n): readonly GraphQlOperationDefinition[] {\n const schema = introspection?.__schema;\n if (schema === undefined) return [];\n\n const types = schema.types?.filter(isNamedGraphQlType) ?? [];\n const operations: GraphQlOperationDefinition[] = [];\n appendRootOperations(operations, 'query', schema.queryType?.name, types);\n appendRootOperations(operations, 'mutation', schema.mutationType?.name, types);\n appendRootOperations(operations, 'subscription', schema.subscriptionType?.name, types);\n return operations;\n}\n\nfunction appendRootOperations(\n operations: GraphQlOperationDefinition[],\n kind: GraphQlOperationKind,\n rootTypeName: string | null | undefined,\n types: readonly GraphQlIntrospectionType[],\n): void {\n if (rootTypeName === undefined || rootTypeName === null) return;\n const rootType = types.find((type) => type.name === rootTypeName);\n\n for (const field of rootType?.fields ?? []) {\n operations.push({\n id: normalizeGraphQlOperationId(kind, field.name),\n kind,\n name: field.name,\n description: field.description ?? undefined,\n variables: normalizeGraphQlVariablesSchema(field.args ?? []),\n response: normalizeGraphQlTypeRef(field.type),\n selectionPath: `$.data.${field.name}`,\n metadata: { rootType: rootTypeName, source: 'introspection' },\n });\n }\n}\n\nfunction normalizeGraphQlOperation(operation: GraphQlOperationDefinition): DataOperationConfig {\n const response: DataOperationResponse | undefined =\n operation.response === undefined ? undefined : { schema: operation.response };\n\n return {\n id: operation.id,\n endpointId: 'graphql',\n name: operation.name,\n description: operation.description,\n protocol: 'graphql',\n intent: mapGraphQlOperationKindToIntent(operation.kind),\n request: { schema: operation.variables },\n response,\n metadata: createGraphQlOperationMetadata(operation),\n };\n}\n\nfunction mapGraphQlOperationKindToIntent(kind: GraphQlOperationKind): DataOperationIntent {\n return kind === 'query' || kind === 'subscription' ? 'read' : 'action';\n}\n\nfunction normalizeGraphQlVariablesSchema(\n args: readonly GraphQlIntrospectionInputValue[],\n): DataSchema {\n const properties: Record<string, DataSchema> = {};\n const required: string[] = [];\n\n for (const arg of args) {\n properties[arg.name] = {\n ...normalizeGraphQlTypeRef(arg.type),\n description: arg.description ?? undefined,\n default: arg.defaultValue ?? undefined,\n };\n if (isGraphQlNonNull(arg.type)) required.push(arg.name);\n }\n\n return {\n type: 'object',\n required: required.length > 0 ? required : undefined,\n properties,\n };\n}\n\nfunction normalizeGraphQlType(type: GraphQlIntrospectionType): DataSchema {\n if (type.kind === 'OBJECT' || type.kind === 'INTERFACE' || type.kind === 'INPUT_OBJECT') {\n return normalizeGraphQlObjectType(type);\n }\n if (type.kind === 'ENUM') {\n return {\n type: 'string',\n title: type.name ?? undefined,\n description: type.description ?? undefined,\n enum: type.enumValues?.map((value) => value.name),\n };\n }\n if (type.kind === 'SCALAR') {\n return {\n ...normalizeGraphQlNamedScalar(type.name),\n title: type.name ?? undefined,\n description: type.description ?? undefined,\n };\n }\n if (type.kind === 'UNION') {\n return {\n title: type.name ?? undefined,\n description: type.description ?? undefined,\n anyOf: type.possibleTypes?.map(normalizeGraphQlTypeRef),\n };\n }\n return { title: type.name ?? undefined, description: type.description ?? undefined };\n}\n\nfunction normalizeGraphQlObjectType(type: GraphQlIntrospectionType): DataSchema {\n const fields = type.kind === 'INPUT_OBJECT' ? type.inputFields : type.fields;\n const properties: Record<string, DataSchema> = {};\n const required: string[] = [];\n\n for (const field of fields ?? []) {\n const fieldType = field.type;\n properties[field.name] = {\n ...normalizeGraphQlTypeRef(fieldType),\n description: field.description ?? undefined,\n };\n if (isGraphQlNonNull(fieldType)) required.push(field.name);\n }\n\n return {\n type: 'object',\n title: type.name ?? undefined,\n description: type.description ?? undefined,\n required: required.length > 0 ? required : undefined,\n properties,\n };\n}\n\nfunction normalizeGraphQlTypeRef(type: GraphQlIntrospectionTypeRef): DataSchema {\n if (type.kind === 'NON_NULL' && type.ofType !== undefined && type.ofType !== null) {\n return { ...normalizeGraphQlTypeRef(type.ofType), nullable: false };\n }\n if (type.kind === 'LIST' && type.ofType !== undefined && type.ofType !== null) {\n return { type: 'array', items: normalizeGraphQlTypeRef(type.ofType) };\n }\n if (type.kind === 'SCALAR') return normalizeGraphQlNamedScalar(type.name);\n if (type.name !== undefined && type.name !== null) return { ref: { id: type.name } };\n return {};\n}\n\nfunction normalizeGraphQlNamedScalar(name: string | null | undefined): DataSchema {\n if (name === 'Boolean') return { type: 'boolean' };\n if (name === 'Float') return { type: 'number' };\n if (name === 'ID' || name === 'String') return { type: 'string' };\n if (name === 'Int') return { type: 'integer' };\n return { type: 'string', format: name ?? undefined };\n}\n\nfunction isGraphQlNonNull(type: GraphQlIntrospectionTypeRef): boolean {\n return type.kind === 'NON_NULL';\n}\n\nfunction isNamedGraphQlType(type: GraphQlIntrospectionType): boolean {\n return type.name !== undefined && type.name !== null;\n}\n\nfunction createGraphQlOperationMetadata(operation: GraphQlOperationDefinition): DataContractRecord {\n const metadata = toMetadataRecord(operation.metadata);\n metadata.kind = operation.kind;\n if (operation.document !== undefined) metadata.document = operation.document;\n if (operation.selectionPath !== undefined) metadata.selectionPath = operation.selectionPath;\n return metadata;\n}\n\nfunction toMetadataRecord(value: DataContractValue | undefined): DataContractRecord {\n if (!isDataContractRecord(value)) return {};\n return { ...value };\n}\n\nfunction isDataContractRecord(value: DataContractValue | undefined): value is DataContractRecord {\n return (\n value !== undefined && typeof value === 'object' && value !== null && !Array.isArray(value)\n );\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,17 +1,23 @@
1
- import type { DataSourceConfig, DataSourceKind } from '@ankhorage/contracts/data';
1
+ import type { ApiOrigin, ApiProtocol, DataSourceConfig, DataSourceKind } from '@ankhorage/contracts/data';
2
2
  export * from './discovery';
3
+ export * from './generated-api';
3
4
  export * from './graphql';
4
- export * from './managed-api';
5
5
  export * from './openapi';
6
6
  export * from './rest';
7
7
  export * from './test-runner';
8
8
  export declare const DATA_SOURCES_PACKAGE_NAME: "@ankhorage/data-sources";
9
- export declare const SUPPORTED_DATA_SOURCE_KINDS: readonly ["database", "graphql", "managed-api", "openapi", "rest"];
9
+ export declare const SUPPORTED_DATA_SOURCE_KINDS: readonly ["api", "database"];
10
+ export declare const SUPPORTED_API_ORIGINS: readonly ["external", "generated"];
11
+ export declare const SUPPORTED_API_PROTOCOLS: readonly ["graphql", "rest"];
10
12
  export interface DataSourcesPackageInfo {
11
13
  readonly packageName: typeof DATA_SOURCES_PACKAGE_NAME;
12
14
  readonly supportedKinds: typeof SUPPORTED_DATA_SOURCE_KINDS;
15
+ readonly supportedApiOrigins: typeof SUPPORTED_API_ORIGINS;
16
+ readonly supportedApiProtocols: typeof SUPPORTED_API_PROTOCOLS;
13
17
  }
14
18
  export declare function getDataSourcesPackageInfo(): DataSourcesPackageInfo;
15
19
  export declare function isSupportedDataSourceKind(kind: string): kind is DataSourceKind;
20
+ export declare function isSupportedApiOrigin(origin: string): origin is ApiOrigin;
21
+ export declare function isSupportedApiProtocol(protocol: string): protocol is ApiProtocol;
16
22
  export declare function getDataSourceKind(source: DataSourceConfig): DataSourceKind;
17
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAElF,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAE9B,eAAO,MAAM,yBAAyB,EAAG,yBAAkC,CAAC;AAE5E,eAAO,MAAM,2BAA2B,oEAMM,CAAC;AAE/C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,OAAO,yBAAyB,CAAC;IACvD,QAAQ,CAAC,cAAc,EAAE,OAAO,2BAA2B,CAAC;CAC7D;AAED,wBAAgB,yBAAyB,IAAI,sBAAsB,CAKlE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,cAAc,CAE9E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,CAE1E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAEnC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAE9B,eAAO,MAAM,yBAAyB,EAAG,yBAAkC,CAAC;AAC5E,eAAO,MAAM,2BAA2B,8BAGM,CAAC;AAC/C,eAAO,MAAM,qBAAqB,oCAGO,CAAC;AAC1C,eAAO,MAAM,uBAAuB,8BAGO,CAAC;AAE5C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,OAAO,yBAAyB,CAAC;IACvD,QAAQ,CAAC,cAAc,EAAE,OAAO,2BAA2B,CAAC;IAC5D,QAAQ,CAAC,mBAAmB,EAAE,OAAO,qBAAqB,CAAC;IAC3D,QAAQ,CAAC,qBAAqB,EAAE,OAAO,uBAAuB,CAAC;CAChE;AAED,wBAAgB,yBAAyB,IAAI,sBAAsB,CAOlE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,cAAc,CAE9E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,SAAS,CAExE;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,WAAW,CAEhF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,CAE1E"}
package/dist/index.js CHANGED
@@ -1,25 +1,38 @@
1
1
  export * from './discovery';
2
+ export * from './generated-api';
2
3
  export * from './graphql';
3
- export * from './managed-api';
4
4
  export * from './openapi';
5
5
  export * from './rest';
6
6
  export * from './test-runner';
7
7
  export const DATA_SOURCES_PACKAGE_NAME = '@ankhorage/data-sources';
8
8
  export const SUPPORTED_DATA_SOURCE_KINDS = [
9
+ 'api',
9
10
  'database',
11
+ ];
12
+ export const SUPPORTED_API_ORIGINS = [
13
+ 'external',
14
+ 'generated',
15
+ ];
16
+ export const SUPPORTED_API_PROTOCOLS = [
10
17
  'graphql',
11
- 'managed-api',
12
- 'openapi',
13
18
  'rest',
14
19
  ];
15
20
  export function getDataSourcesPackageInfo() {
16
21
  return {
17
22
  packageName: DATA_SOURCES_PACKAGE_NAME,
18
23
  supportedKinds: SUPPORTED_DATA_SOURCE_KINDS,
24
+ supportedApiOrigins: SUPPORTED_API_ORIGINS,
25
+ supportedApiProtocols: SUPPORTED_API_PROTOCOLS,
19
26
  };
20
27
  }
21
28
  export function isSupportedDataSourceKind(kind) {
22
- return SUPPORTED_DATA_SOURCE_KINDS.some((supportedKind) => supportedKind === kind);
29
+ return SUPPORTED_DATA_SOURCE_KINDS.some((supported) => supported === kind);
30
+ }
31
+ export function isSupportedApiOrigin(origin) {
32
+ return SUPPORTED_API_ORIGINS.some((supported) => supported === origin);
33
+ }
34
+ export function isSupportedApiProtocol(protocol) {
35
+ return SUPPORTED_API_PROTOCOLS.some((supported) => supported === protocol);
23
36
  }
24
37
  export function getDataSourceKind(source) {
25
38
  return source.kind;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAE9B,MAAM,CAAC,MAAM,yBAAyB,GAAG,yBAAkC,CAAC;AAE5E,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,UAAU;IACV,SAAS;IACT,aAAa;IACb,SAAS;IACT,MAAM;CACsC,CAAC;AAO/C,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,WAAW,EAAE,yBAAyB;QACtC,cAAc,EAAE,2BAA2B;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAwB;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC","sourcesContent":["import type { DataSourceConfig, DataSourceKind } from '@ankhorage/contracts/data';\n\nexport * from './discovery';\nexport * from './graphql';\nexport * from './managed-api';\nexport * from './openapi';\nexport * from './rest';\nexport * from './test-runner';\n\nexport const DATA_SOURCES_PACKAGE_NAME = '@ankhorage/data-sources' as const;\n\nexport const SUPPORTED_DATA_SOURCE_KINDS = [\n 'database',\n 'graphql',\n 'managed-api',\n 'openapi',\n 'rest',\n] as const satisfies readonly DataSourceKind[];\n\nexport interface DataSourcesPackageInfo {\n readonly packageName: typeof DATA_SOURCES_PACKAGE_NAME;\n readonly supportedKinds: typeof SUPPORTED_DATA_SOURCE_KINDS;\n}\n\nexport function getDataSourcesPackageInfo(): DataSourcesPackageInfo {\n return {\n packageName: DATA_SOURCES_PACKAGE_NAME,\n supportedKinds: SUPPORTED_DATA_SOURCE_KINDS,\n };\n}\n\nexport function isSupportedDataSourceKind(kind: string): kind is DataSourceKind {\n return SUPPORTED_DATA_SOURCE_KINDS.some((supportedKind) => supportedKind === kind);\n}\n\nexport function getDataSourceKind(source: DataSourceConfig): DataSourceKind {\n return source.kind;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAE9B,MAAM,CAAC,MAAM,yBAAyB,GAAG,yBAAkC,CAAC;AAC5E,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,KAAK;IACL,UAAU;CACkC,CAAC;AAC/C,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,UAAU;IACV,WAAW;CAC4B,CAAC;AAC1C,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,SAAS;IACT,MAAM;CACmC,CAAC;AAS5C,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,WAAW,EAAE,yBAAyB;QACtC,cAAc,EAAE,2BAA2B;QAC3C,mBAAmB,EAAE,qBAAqB;QAC1C,qBAAqB,EAAE,uBAAuB;KAC/C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAwB;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC","sourcesContent":["import type {\n ApiOrigin,\n ApiProtocol,\n DataSourceConfig,\n DataSourceKind,\n} from '@ankhorage/contracts/data';\n\nexport * from './discovery';\nexport * from './generated-api';\nexport * from './graphql';\nexport * from './openapi';\nexport * from './rest';\nexport * from './test-runner';\n\nexport const DATA_SOURCES_PACKAGE_NAME = '@ankhorage/data-sources' as const;\nexport const SUPPORTED_DATA_SOURCE_KINDS = [\n 'api',\n 'database',\n] as const satisfies readonly DataSourceKind[];\nexport const SUPPORTED_API_ORIGINS = [\n 'external',\n 'generated',\n] as const satisfies readonly ApiOrigin[];\nexport const SUPPORTED_API_PROTOCOLS = [\n 'graphql',\n 'rest',\n] as const satisfies readonly ApiProtocol[];\n\nexport interface DataSourcesPackageInfo {\n readonly packageName: typeof DATA_SOURCES_PACKAGE_NAME;\n readonly supportedKinds: typeof SUPPORTED_DATA_SOURCE_KINDS;\n readonly supportedApiOrigins: typeof SUPPORTED_API_ORIGINS;\n readonly supportedApiProtocols: typeof SUPPORTED_API_PROTOCOLS;\n}\n\nexport function getDataSourcesPackageInfo(): DataSourcesPackageInfo {\n return {\n packageName: DATA_SOURCES_PACKAGE_NAME,\n supportedKinds: SUPPORTED_DATA_SOURCE_KINDS,\n supportedApiOrigins: SUPPORTED_API_ORIGINS,\n supportedApiProtocols: SUPPORTED_API_PROTOCOLS,\n };\n}\n\nexport function isSupportedDataSourceKind(kind: string): kind is DataSourceKind {\n return SUPPORTED_DATA_SOURCE_KINDS.some((supported) => supported === kind);\n}\n\nexport function isSupportedApiOrigin(origin: string): origin is ApiOrigin {\n return SUPPORTED_API_ORIGINS.some((supported) => supported === origin);\n}\n\nexport function isSupportedApiProtocol(protocol: string): protocol is ApiProtocol {\n return SUPPORTED_API_PROTOCOLS.some((supported) => supported === protocol);\n}\n\nexport function getDataSourceKind(source: DataSourceConfig): DataSourceKind {\n return source.kind;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { CredentialRef, DataContractValue, DataSchema, DataSourceDiagnosticResult, EndpointId, OpenApiDataSourceConfig, OperationId } from '@ankhorage/contracts/data';
1
+ import type { CredentialRef, DataContractValue, DataSchema, DataSourceDiagnosticResult, EndpointId, ExternalRestApiDataSourceConfig, OperationId } from '@ankhorage/contracts/data';
2
2
  declare const OPENAPI_HTTP_METHODS: readonly ["delete", "get", "head", "options", "patch", "post", "put"];
3
3
  export type OpenApiHttpMethod = (typeof OPENAPI_HTTP_METHODS)[number];
4
4
  export interface OpenApiServerObject {
@@ -80,7 +80,7 @@ export interface OpenApiImportInput {
80
80
  readonly description?: string;
81
81
  readonly metadata?: DataContractValue;
82
82
  }
83
- export type OpenApiImportResult = DataSourceDiagnosticResult<OpenApiDataSourceConfig>;
83
+ export type OpenApiImportResult = DataSourceDiagnosticResult<ExternalRestApiDataSourceConfig>;
84
84
  export declare function importOpenApiDocument(input: OpenApiImportInput): OpenApiImportResult;
85
85
  export declare function normalizeOpenApiOperationId(method: OpenApiHttpMethod, path: string, operationId?: string): OperationId;
86
86
  export declare function normalizeOpenApiEndpointId(path: string): EndpointId;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/openapi/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAQjB,UAAU,EAIV,0BAA0B,EAC1B,UAAU,EACV,uBAAuB,EACvB,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAEnC,QAAA,MAAM,oBAAoB,uEAAwE,CAAC;AAWnG,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACpE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACxD,QAAQ,CAAC,WAAW,CAAC,EAAE,wBAAwB,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;CACtE;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC,GAAG;IAC/F,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACzD,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACjE,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACjE,QAAQ,CAAC,UAAU,CAAC,EAAE,uBAAuB,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,MAAM,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;AAEtF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CAmCpF;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,GACnB,WAAW,CASb;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAQnE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,UAAU,CAqB9E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/openapi/index.ts"],"names":[],"mappings":"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"}