@ankhorage/data-sources 0.5.5 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +12 -5
- package/dist/discovery/index.d.ts +64 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +195 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/generated-api/index.d.ts +10 -0
- package/dist/generated-api/index.d.ts.map +1 -0
- package/dist/generated-api/index.js +272 -0
- package/dist/generated-api/index.js.map +1 -0
- package/dist/graphql/index.d.ts +3 -3
- package/dist/graphql/index.d.ts.map +1 -1
- package/dist/graphql/index.js +24 -60
- package/dist/graphql/index.js.map +1 -1
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -4
- package/dist/index.js.map +1 -1
- package/dist/openapi/index.d.ts +2 -2
- package/dist/openapi/index.d.ts.map +1 -1
- package/dist/openapi/index.js +19 -29
- package/dist/openapi/index.js.map +1 -1
- package/dist/rest/index.d.ts +3 -3
- package/dist/rest/index.d.ts.map +1 -1
- package/dist/rest/index.js +51 -51
- package/dist/rest/index.js.map +1 -1
- package/dist/test-runner/index.d.ts.map +1 -1
- package/dist/test-runner/index.js +60 -104
- package/dist/test-runner/index.js.map +1 -1
- package/package.json +2 -2
- package/src/discovery/index.test.ts +133 -0
- package/src/discovery/index.ts +340 -0
- package/src/{managed-api → generated-api}/index.test.ts +59 -67
- package/src/generated-api/index.ts +410 -0
- package/src/graphql/index.test.ts +28 -134
- package/src/graphql/index.ts +29 -89
- package/src/index.test.ts +25 -18
- package/src/index.ts +29 -7
- package/src/openapi/index.test.ts +36 -246
- package/src/openapi/index.ts +22 -60
- package/src/rest/index.test.ts +22 -173
- package/src/rest/index.ts +62 -59
- package/src/test-runner/index.test.ts +82 -150
- package/src/test-runner/index.ts +73 -143
- package/dist/managed-api/index.d.ts +0 -30
- package/dist/managed-api/index.d.ts.map +0 -1
- package/dist/managed-api/index.js +0 -257
- package/dist/managed-api/index.js.map +0 -1
- package/src/managed-api/index.ts +0 -364
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generated-api/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n DataContractValue,\n DataEndpointConfig,\n DataOperationConfig,\n DataOperationIntent,\n DataOperationParameter,\n DataSchema,\n DataSourceDiagnostic,\n DataSourceDiagnosticResult,\n GeneratedApiAuthRequirement,\n GeneratedApiCrudOperation,\n GeneratedApiDefinition,\n GeneratedApiOperationPolicyRef,\n GeneratedApiResourceDefinition,\n GeneratedRestApiDataSourceConfig,\n OperationId,\n} from '@ankhorage/contracts/data';\nimport type {\n DbCollectionDefinition,\n DbFieldDefinition,\n DbFieldType,\n} from '@ankhorage/contracts/db';\n\nexport function createGeneratedApiDataSource(\n definition: GeneratedApiDefinition,\n): DataSourceDiagnosticResult<GeneratedRestApiDataSourceConfig> {\n const diagnostics = validateGeneratedApiDefinition(definition);\n if (diagnostics.some((diagnostic) => diagnostic.severity === 'error')) {\n return { ok: false, diagnostics };\n }\n\n return {\n ok: true,\n data: normalizeGeneratedApiDataSource(definition),\n diagnostics,\n };\n}\n\nexport function validateGeneratedApiDefinition(\n definition: GeneratedApiDefinition,\n): readonly DataSourceDiagnostic[] {\n const diagnostics: DataSourceDiagnostic[] = [];\n const resourceIds = new Set<string>();\n\n if (definition.basePath.trim().length === 0 || !definition.basePath.startsWith('/')) {\n diagnostics.push({\n code: 'invalid-config',\n dataSourceId: definition.id,\n message: 'Generated API basePath must be a non-empty absolute path.',\n path: 'basePath',\n severity: 'error',\n });\n }\n\n if (definition.resources.length === 0) {\n diagnostics.push({\n code: 'invalid-config',\n dataSourceId: definition.id,\n message: 'Generated API requires at least one resource.',\n path: 'resources',\n severity: 'error',\n });\n }\n\n for (const resource of definition.resources) {\n validateGeneratedApiResource(definition, resource, resourceIds, diagnostics);\n }\n\n return diagnostics;\n}\n\nexport function normalizeGeneratedApiDataSource(\n definition: GeneratedApiDefinition,\n): GeneratedRestApiDataSourceConfig {\n const endpoints: Record<string, DataEndpointConfig> = {};\n const schemas: Record<string, DataSchema> = {};\n\n for (const resource of definition.resources) {\n endpoints[resource.id] = createGeneratedApiEndpoint(definition, resource);\n schemas[resource.id] = createGeneratedApiResourceSchema(resource.collection);\n }\n\n return {\n id: definition.id,\n kind: 'api',\n origin: 'generated',\n protocol: 'rest',\n generatedApiId: definition.id,\n name: definition.name,\n description: definition.description,\n adapter: definition.database,\n endpoints,\n schemas,\n metadata: createGeneratedApiSourceMetadata(definition),\n };\n}\n\nexport function createGeneratedApiEndpoint(\n definition: GeneratedApiDefinition,\n resource: GeneratedApiResourceDefinition,\n): DataEndpointConfig {\n const operations: Record<OperationId, DataOperationConfig> = {};\n\n for (const operation of resource.operations) {\n const config = createGeneratedApiOperation(definition, resource, operation);\n operations[config.id] = config;\n }\n\n return {\n id: resource.id,\n kind: 'database',\n name: resource.name,\n description: resource.description,\n path: resource.path,\n operations,\n metadata: createGeneratedApiResourceMetadata(definition, resource),\n };\n}\n\nexport function createGeneratedApiOperation(\n definition: GeneratedApiDefinition,\n resource: GeneratedApiResourceDefinition,\n operation: GeneratedApiCrudOperation,\n): DataOperationConfig {\n const operationId = createGeneratedApiOperationId(resource.id, operation);\n const primaryKey = resolveGeneratedApiPrimaryKey(resource.collection);\n const primaryKeyParameter =\n primaryKey === undefined ? undefined : createPrimaryKeyParameter(primaryKey);\n\n return {\n id: operationId,\n endpointId: resource.id,\n name: createGeneratedApiOperationName(resource, operation),\n protocol: 'database',\n intent: mapGeneratedApiOperationIntent(operation),\n path: resource.path,\n request: createGeneratedApiOperationRequest(\n resource.collection,\n operation,\n primaryKeyParameter,\n ),\n response: createGeneratedApiOperationResponse(resource.collection, operation),\n metadata: createGeneratedApiOperationMetadata(definition, resource, operation),\n };\n}\n\nexport function createGeneratedApiOperationId(\n resourceId: string,\n operation: GeneratedApiCrudOperation,\n): OperationId {\n return `${resourceId}.${operation}`;\n}\n\nexport function createGeneratedApiResourceSchema(collection: DbCollectionDefinition): DataSchema {\n const properties: Record<string, DataSchema> = {};\n const required: string[] = [];\n\n for (const field of collection.fields) {\n properties[field.name] = createGeneratedApiFieldSchema(field);\n if (field.required === true) required.push(field.name);\n }\n\n return {\n type: 'object',\n title: collection.name,\n required: required.length > 0 ? required : undefined,\n properties,\n };\n}\n\nfunction validateGeneratedApiResource(\n definition: GeneratedApiDefinition,\n resource: GeneratedApiResourceDefinition,\n resourceIds: Set<string>,\n diagnostics: DataSourceDiagnostic[],\n): void {\n if (resource.id.trim().length === 0) {\n diagnostics.push(\n resourceDiagnostic(definition, resource, 'Resource IDs must be non-empty.', 'id'),\n );\n } else if (resourceIds.has(resource.id)) {\n diagnostics.push(\n resourceDiagnostic(definition, resource, `Resource ID '${resource.id}' is duplicated.`, 'id'),\n );\n }\n resourceIds.add(resource.id);\n\n if (!resource.path.startsWith('/')) {\n diagnostics.push(\n resourceDiagnostic(\n definition,\n resource,\n 'Generated API resource paths must start with `/`.',\n 'path',\n ),\n );\n }\n\n if (resource.collection.name.trim().length === 0) {\n diagnostics.push(\n resourceDiagnostic(\n definition,\n resource,\n 'Generated API resource collections must have a non-empty name.',\n 'collection.name',\n ),\n );\n }\n\n if (resource.operations.length === 0) {\n diagnostics.push(\n resourceDiagnostic(\n definition,\n resource,\n 'Generated API resources require at least one operation.',\n 'operations',\n ),\n );\n }\n\n const primaryKey = resolveGeneratedApiPrimaryKey(resource.collection);\n if (\n primaryKey === undefined &&\n resource.operations.some((operation) => operation !== 'list' && operation !== 'create')\n ) {\n diagnostics.push(\n resourceDiagnostic(\n definition,\n resource,\n 'Generated API resources need a primaryKey field for read/update/delete operations.',\n 'collection.primaryKey',\n ),\n );\n }\n}\n\nfunction resourceDiagnostic(\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}.${path}`,\n severity: 'error',\n };\n}\n\nfunction createGeneratedApiSourceMetadata(definition: GeneratedApiDefinition): DataContractValue {\n return {\n ...readMetadataRecord(definition.metadata),\n basePath: definition.basePath,\n source: 'generated-api',\n auth: createGeneratedApiAuthMetadata(definition.auth),\n };\n}\n\nfunction createGeneratedApiResourceMetadata(\n definition: GeneratedApiDefinition,\n resource: GeneratedApiResourceDefinition,\n): DataContractValue {\n return {\n ...readMetadataRecord(resource.metadata),\n adapterId: definition.database.id,\n collection: resource.collection.name,\n schema: resource.collection.schema ?? null,\n source: 'generated-api',\n seed: resource.seed ?? [],\n policies: createGeneratedApiPolicyMetadata(resource.policies),\n };\n}\n\nfunction createGeneratedApiOperationMetadata(\n definition: GeneratedApiDefinition,\n resource: GeneratedApiResourceDefinition,\n operation: GeneratedApiCrudOperation,\n): DataContractValue {\n return {\n adapterId: definition.database.id,\n collection: resource.collection.name,\n operation,\n schema: resource.collection.schema ?? null,\n source: 'generated-api',\n policies: createGeneratedApiPolicyMetadata(\n resource.policies?.filter(\n (policy) => policy.operation === undefined || policy.operation === operation,\n ),\n ),\n };\n}\n\nfunction createGeneratedApiAuthMetadata(\n auth: GeneratedApiAuthRequirement | undefined,\n): DataContractValue {\n if (auth === undefined) return null;\n\n const metadata: Record<string, DataContractValue> = {};\n if (auth.required !== undefined) metadata.required = auth.required;\n if (auth.roles !== undefined) metadata.roles = auth.roles;\n if (auth.permissions !== undefined) metadata.permissions = auth.permissions;\n if (auth.policy !== undefined) metadata.policy = auth.policy;\n if (auth.metadata !== undefined) metadata.metadata = auth.metadata;\n return metadata;\n}\n\nfunction createGeneratedApiPolicyMetadata(\n policies: readonly GeneratedApiOperationPolicyRef[] | undefined,\n): readonly DataContractValue[] {\n return (policies ?? []).map((policy) => {\n const metadata: Record<string, DataContractValue> = { id: policy.id };\n if (policy.operation !== undefined) metadata.operation = policy.operation;\n return metadata;\n });\n}\n\nfunction createGeneratedApiOperationName(\n resource: GeneratedApiResourceDefinition,\n operation: GeneratedApiCrudOperation,\n): string {\n return `${operation} ${resource.name ?? resource.id}`;\n}\n\nfunction mapGeneratedApiOperationIntent(operation: GeneratedApiCrudOperation): DataOperationIntent {\n if (operation === 'list' || operation === 'read') return 'read';\n if (operation === 'create') return 'create';\n if (operation === 'update') return 'update';\n return 'delete';\n}\n\nfunction createGeneratedApiOperationRequest(\n collection: DbCollectionDefinition,\n operation: GeneratedApiCrudOperation,\n primaryKeyParameter: DataOperationParameter | undefined,\n): DataOperationConfig['request'] {\n if (operation === 'list') {\n return {\n parameters: [\n { name: 'limit', location: 'query', schema: { type: 'integer' } },\n { name: 'offset', location: 'query', schema: { type: 'integer' } },\n ],\n };\n }\n\n if (operation === 'read' || operation === 'delete') {\n return primaryKeyParameter === undefined ? undefined : { parameters: [primaryKeyParameter] };\n }\n\n const parameters =\n operation === 'update' && primaryKeyParameter !== undefined ? [primaryKeyParameter] : undefined;\n\n return {\n parameters,\n schema: createGeneratedApiResourceSchema(collection),\n };\n}\n\nfunction createGeneratedApiOperationResponse(\n collection: DbCollectionDefinition,\n operation: GeneratedApiCrudOperation,\n): DataOperationConfig['response'] {\n const schema = createGeneratedApiResourceSchema(collection);\n\n if (operation === 'list') return { schema: { type: 'array', items: schema } };\n if (operation === 'delete') {\n return { schema: { type: 'object', properties: { deleted: { type: 'boolean' } } } };\n }\n return { schema };\n}\n\nfunction createPrimaryKeyParameter(primaryKey: string): DataOperationParameter {\n return {\n name: primaryKey,\n location: 'path',\n required: true,\n schema: { type: 'string' },\n };\n}\n\nfunction resolveGeneratedApiPrimaryKey(collection: DbCollectionDefinition): string | undefined {\n return collection.primaryKey ?? collection.fields.find((field) => field.unique === true)?.name;\n}\n\nfunction createGeneratedApiFieldSchema(field: DbFieldDefinition): DataSchema {\n return {\n ...mapDbFieldTypeToDataSchema(field.type),\n default: field.defaultValue,\n };\n}\n\nfunction mapDbFieldTypeToDataSchema(type: DbFieldType): DataSchema {\n if (type === 'boolean') return { type: 'boolean' };\n if (type === 'datetime') return { type: 'string', format: 'date-time' };\n if (type === 'json') return { type: 'object' };\n if (type === 'number') return { type: 'number' };\n if (type === 'uuid') return { type: 'string', format: 'uuid' };\n return { type: 'string' };\n}\n\nfunction readMetadataRecord(\n value: DataContractValue | undefined,\n): Record<string, DataContractValue> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return {};\n const metadata: Record<string, DataContractValue> = {};\n for (const [key, item] of Object.entries(value)) metadata[key] = item;\n return metadata;\n}\n"]}
|
package/dist/graphql/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CredentialRef, DataContractValue, DataSchema, DataSchemaRegistry, DataSourceDiagnostic, DataSourceDiagnosticResult,
|
|
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<
|
|
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):
|
|
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":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAKjB,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graphql/index.ts"],"names":[],"mappings":"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"}
|
package/dist/graphql/index.js
CHANGED
|
@@ -44,9 +44,9 @@ export function normalizeGraphQlOperationId(kind, name) {
|
|
|
44
44
|
}
|
|
45
45
|
export function createGraphQlDataSource(definition) {
|
|
46
46
|
const diagnostics = validateGraphQlDataSource(definition);
|
|
47
|
-
|
|
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
|
|
90
|
-
const manualOperations = definition.operations ?? [];
|
|
89
|
+
const discovered = normalizeGraphQlIntrospectionOperations(definition.introspection);
|
|
91
90
|
const operations = {};
|
|
92
|
-
for (const operation of [...
|
|
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: '
|
|
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
|
-
|
|
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(
|
|
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 =
|
|
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
|
-
|
|
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,16 +1,23 @@
|
|
|
1
|
-
import type { DataSourceConfig, DataSourceKind } from '@ankhorage/contracts/data';
|
|
1
|
+
import type { ApiOrigin, ApiProtocol, DataSourceConfig, DataSourceKind } from '@ankhorage/contracts/data';
|
|
2
|
+
export * from './discovery';
|
|
3
|
+
export * from './generated-api';
|
|
2
4
|
export * from './graphql';
|
|
3
|
-
export * from './managed-api';
|
|
4
5
|
export * from './openapi';
|
|
5
6
|
export * from './rest';
|
|
6
7
|
export * from './test-runner';
|
|
7
8
|
export declare const DATA_SOURCES_PACKAGE_NAME: "@ankhorage/data-sources";
|
|
8
|
-
export declare const SUPPORTED_DATA_SOURCE_KINDS: readonly ["
|
|
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"];
|
|
9
12
|
export interface DataSourcesPackageInfo {
|
|
10
13
|
readonly packageName: typeof DATA_SOURCES_PACKAGE_NAME;
|
|
11
14
|
readonly supportedKinds: typeof SUPPORTED_DATA_SOURCE_KINDS;
|
|
15
|
+
readonly supportedApiOrigins: typeof SUPPORTED_API_ORIGINS;
|
|
16
|
+
readonly supportedApiProtocols: typeof SUPPORTED_API_PROTOCOLS;
|
|
12
17
|
}
|
|
13
18
|
export declare function getDataSourcesPackageInfo(): DataSourcesPackageInfo;
|
|
14
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;
|
|
15
22
|
export declare function getDataSourceKind(source: DataSourceConfig): DataSourceKind;
|
|
16
23
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
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,24 +1,38 @@
|
|
|
1
|
+
export * from './discovery';
|
|
2
|
+
export * from './generated-api';
|
|
1
3
|
export * from './graphql';
|
|
2
|
-
export * from './managed-api';
|
|
3
4
|
export * from './openapi';
|
|
4
5
|
export * from './rest';
|
|
5
6
|
export * from './test-runner';
|
|
6
7
|
export const DATA_SOURCES_PACKAGE_NAME = '@ankhorage/data-sources';
|
|
7
8
|
export const SUPPORTED_DATA_SOURCE_KINDS = [
|
|
9
|
+
'api',
|
|
8
10
|
'database',
|
|
11
|
+
];
|
|
12
|
+
export const SUPPORTED_API_ORIGINS = [
|
|
13
|
+
'external',
|
|
14
|
+
'generated',
|
|
15
|
+
];
|
|
16
|
+
export const SUPPORTED_API_PROTOCOLS = [
|
|
9
17
|
'graphql',
|
|
10
|
-
'managed-api',
|
|
11
|
-
'openapi',
|
|
12
18
|
'rest',
|
|
13
19
|
];
|
|
14
20
|
export function getDataSourcesPackageInfo() {
|
|
15
21
|
return {
|
|
16
22
|
packageName: DATA_SOURCES_PACKAGE_NAME,
|
|
17
23
|
supportedKinds: SUPPORTED_DATA_SOURCE_KINDS,
|
|
24
|
+
supportedApiOrigins: SUPPORTED_API_ORIGINS,
|
|
25
|
+
supportedApiProtocols: SUPPORTED_API_PROTOCOLS,
|
|
18
26
|
};
|
|
19
27
|
}
|
|
20
28
|
export function isSupportedDataSourceKind(kind) {
|
|
21
|
-
return SUPPORTED_DATA_SOURCE_KINDS.some((
|
|
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);
|
|
22
36
|
}
|
|
23
37
|
export function getDataSourceKind(source) {
|
|
24
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":"
|
|
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"]}
|
package/dist/openapi/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CredentialRef, DataContractValue, DataSchema, DataSourceDiagnosticResult, EndpointId,
|
|
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<
|
|
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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/openapi/index.ts"],"names":[],"mappings":"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"}
|