UNPKG

@dataql/node

Version:

DataQL core SDK for unified data management with MongoDB and GraphQL - Production Multi-Cloud Ready

62 lines (61 loc) 2.36 kB
import { DatabaseConnection, IntrospectionOptions, IntrospectionResult, CollectionIntrospection, FieldAnalysis } from "./types.js"; /** * Base class for database introspection */ export declare abstract class DatabaseIntrospector { protected connection: DatabaseConnection; protected options: IntrospectionOptions; constructor(connection: DatabaseConnection, options?: IntrospectionOptions); /** * Main introspection method - to be implemented by database-specific classes */ abstract introspect(): Promise<IntrospectionResult>; /** * Connect to the database - to be implemented by database-specific classes */ protected abstract connect(): Promise<any>; /** * Disconnect from the database - to be implemented by database-specific classes */ protected abstract disconnect(): Promise<void>; /** * Get list of collections/tables - to be implemented by database-specific classes */ protected abstract getCollections(): Promise<string[]>; /** * Get collection introspection - to be implemented by database-specific classes */ protected abstract introspectCollection(name: string): Promise<CollectionIntrospection>; /** * Analyze field type from sample values */ protected analyzeFieldType(values: any[], fieldName: string): FieldAnalysis; /** * Get DataQL type for a JavaScript value */ protected getValueType(value: any): string; /** * Detect string format (email, URL, etc.) */ protected detectStringFormat(values: string[]): string | undefined; /** * Analyze nested object structure */ protected analyzeNestedObject(objects: any[]): Record<string, FieldAnalysis>; /** * Convert introspection results to DataQL schemas */ protected generateDataQLSchemas(collections: CollectionIntrospection[]): Record<string, any>; /** * Convert field analysis to DataQL schema format */ protected convertFieldsToSchema(fields: Record<string, FieldAnalysis>): any; /** * Convert single field analysis to DataQL schema field */ protected convertFieldAnalysisToSchemaField(analysis: FieldAnalysis): any; /** * Filter collections based on include/exclude options */ protected filterCollections(collections: string[]): string[]; }