tradingview-screener-ts
Version:
TypeScript port of TradingView Screener with 100% Python parity - Based on the original Python library by shner-elmo (https://github.com/shner-elmo/TradingView-Screener)
192 lines • 6.19 kB
TypeScript
/**
* Advanced architecture patterns and design implementations
*
* This module implements enterprise-grade architectural patterns including
* Factory, Strategy, Observer, Decorator, and Plugin patterns for maximum
* extensibility and maintainability.
*/
import type { FilterOperationDict, ScreenerDataResult, QueryDict } from './types/models';
/**
* Abstract Factory Pattern for creating different types of queries
*/
export declare abstract class QueryFactory {
/**
* Create a query for specific market type
*/
static createMarketQuery(marketType: 'stock' | 'crypto' | 'forex' | 'india'): IQueryBuilder;
/**
* Create query from template
*/
static createFromTemplate(template: QueryTemplate): IQueryBuilder;
}
/**
* Query Builder Interface
*/
export interface IQueryBuilder {
setColumns(columns: string[]): IQueryBuilder;
setFilters(filters: FilterOperationDict[]): IQueryBuilder;
setLimit(limit: number): IQueryBuilder;
setMarkets(...markets: string[]): IQueryBuilder;
build(): QueryDict;
}
/**
* Stock Query Builder Implementation
*/
export declare class StockQueryBuilder implements IQueryBuilder {
private query;
setColumns(columns: string[]): IQueryBuilder;
setFilters(filters: FilterOperationDict[]): IQueryBuilder;
setLimit(limit: number): IQueryBuilder;
setMarkets(...markets: string[]): IQueryBuilder;
build(): QueryDict;
}
/**
* Crypto Query Builder Implementation
*/
export declare class CryptoQueryBuilder implements IQueryBuilder {
private query;
setColumns(columns: string[]): IQueryBuilder;
setFilters(filters: FilterOperationDict[]): IQueryBuilder;
setLimit(limit: number): IQueryBuilder;
setMarkets(..._markets: string[]): IQueryBuilder;
build(): QueryDict;
}
/**
* Forex Query Builder Implementation
*/
export declare class ForexQueryBuilder implements IQueryBuilder {
private query;
setColumns(columns: string[]): IQueryBuilder;
setFilters(filters: FilterOperationDict[]): IQueryBuilder;
setLimit(limit: number): IQueryBuilder;
setMarkets(..._markets: string[]): IQueryBuilder;
build(): QueryDict;
}
/**
* India Stock Query Builder Implementation
*/
export declare class IndiaStockQueryBuilder implements IQueryBuilder {
private query;
setColumns(columns: string[]): IQueryBuilder;
setFilters(filters: FilterOperationDict[]): IQueryBuilder;
setLimit(limit: number): IQueryBuilder;
setMarkets(..._markets: string[]): IQueryBuilder;
build(): QueryDict;
}
/**
* Query Template Interface
*/
export interface QueryTemplate {
name: string;
marketType: 'stock' | 'crypto' | 'forex' | 'india';
columns: string[];
filters: FilterOperationDict[];
limit: number;
description?: string;
}
/**
* Strategy Pattern for different data processing strategies
*/
export interface IDataProcessor {
process(data: ScreenerDataResult): ScreenerDataResult;
}
/**
* Stock Data Processor
*/
export declare class StockDataProcessor implements IDataProcessor {
process(data: ScreenerDataResult): ScreenerDataResult;
private formatMarketCap;
private categorizePE;
}
/**
* India Stock Data Processor
*/
export declare class IndiaStockDataProcessor implements IDataProcessor {
process(data: ScreenerDataResult): ScreenerDataResult;
private formatMarketCapINR;
private categorizeIndianPE;
}
/**
* Crypto Data Processor
*/
export declare class CryptoDataProcessor implements IDataProcessor {
process(data: ScreenerDataResult): ScreenerDataResult;
private categorizeVolatility;
private categorizePriceChange;
}
/**
* Data Processing Context (Strategy Pattern)
*/
export declare class DataProcessingContext {
private processor;
constructor(processor: IDataProcessor);
setProcessor(processor: IDataProcessor): void;
processData(data: ScreenerDataResult): ScreenerDataResult;
}
/**
* Observer Pattern for query events
*/
export interface IQueryObserver {
onQueryStart(query: QueryDict): void;
onQueryComplete(query: QueryDict, result: ScreenerDataResult): void;
onQueryError(query: QueryDict, error: Error): void;
}
/**
* Query Event Manager
*/
export declare class QueryEventManager {
private observers;
addObserver(observer: IQueryObserver): void;
removeObserver(observer: IQueryObserver): void;
notifyQueryStart(query: QueryDict): void;
notifyQueryComplete(query: QueryDict, result: ScreenerDataResult): void;
notifyQueryError(query: QueryDict, error: Error): void;
}
/**
* Performance Observer Implementation
*/
export declare class PerformanceObserver implements IQueryObserver {
private metrics;
onQueryStart(query: QueryDict): void;
onQueryComplete(query: QueryDict, _result: ScreenerDataResult): void;
onQueryError(query: QueryDict, error: Error): void;
getMetrics(): typeof this.metrics;
getAverageQueryTime(): number;
}
/**
* Plugin System for extensibility
*/
export interface IPlugin {
name: string;
version: string;
initialize(): void;
destroy(): void;
}
/**
* Plugin Manager
*/
export declare class PluginManager {
private plugins;
registerPlugin(plugin: IPlugin): void;
unregisterPlugin(name: string): void;
getPlugin(name: string): IPlugin | undefined;
getAllPlugins(): IPlugin[];
}
/**
* Export architecture components
*/
export declare const Architecture: {
readonly QueryFactory: typeof QueryFactory;
readonly StockQueryBuilder: typeof StockQueryBuilder;
readonly CryptoQueryBuilder: typeof CryptoQueryBuilder;
readonly ForexQueryBuilder: typeof ForexQueryBuilder;
readonly IndiaStockQueryBuilder: typeof IndiaStockQueryBuilder;
readonly StockDataProcessor: typeof StockDataProcessor;
readonly IndiaStockDataProcessor: typeof IndiaStockDataProcessor;
readonly CryptoDataProcessor: typeof CryptoDataProcessor;
readonly DataProcessingContext: typeof DataProcessingContext;
readonly QueryEventManager: typeof QueryEventManager;
readonly PerformanceObserver: typeof PerformanceObserver;
readonly PluginManager: typeof PluginManager;
};
//# sourceMappingURL=architecture.d.ts.map