@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
TypeScript
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[];
}