@algochad/prisma-core
Version:
A comprehensive NestJS library that provides EF-Core-like operations using Prisma and GraphQL. Features LINQ-style query builders, advanced data manipulation, GraphQL integration with genql, and a unified API for both Prisma and GraphQL operations. Includ
167 lines (166 loc) • 5.1 kB
TypeScript
export interface BenchmarkResult {
operation: string;
category: string;
dataSize: number;
synchronous: {
time: number;
result: any;
error?: string;
memoryUsed?: number;
iterations?: number;
};
asynchronous: {
time: number;
result: any;
error?: string;
memoryUsed?: number;
iterations?: number;
};
performanceRatio?: number;
recommendation?: 'sync' | 'async' | 'neutral';
}
export interface BenchmarkSummary {
testDataSize: number;
cpuCount: number;
results: BenchmarkResult[];
summary: {
synchronousTotal: number;
asynchronousTotal: number;
asyncSpeedup: string;
};
}
export interface CustomBenchmarkOperation<T, R> {
name: string;
operation: (input: T) => R | Promise<R>;
input: T;
iterations?: number;
warmupRuns?: number;
}
export interface CustomBenchmarkConfig {
iterations?: number;
warmupRuns?: number;
trackMemory?: boolean;
showProgress?: boolean;
timeout?: number;
}
export interface BatchBenchmarkResult<T> {
operations: Array<{
name: string;
time: number;
result: T;
error?: string;
memoryUsed?: number;
iterations: number;
}>;
summary: {
fastest: string;
slowest: string;
averageTime: number;
totalTime: number;
};
}
export interface QueryBenchmarkOptions {
dataSizes?: number[];
iterations?: number;
warmupRuns?: number;
trackMemory?: boolean;
scalabilityAnalysis?: boolean;
}
export interface BenchmarkComparison<T, R1, R2> {
operation1: {
name: string;
time: number;
result: R1;
error?: string;
memoryUsed?: number;
};
operation2: {
name: string;
time: number;
result: R2;
error?: string;
memoryUsed?: number;
};
comparison: {
fasterOperation: string;
timeDifference: number;
performanceRatio: number;
recommendation: string;
};
}
export declare class BenchmarkUtils {
static measureTime<T>(operation: () => T | Promise<T>, operationName?: string): Promise<{
time: number;
result: T;
error?: string;
memoryUsage?: number;
}>;
static generateTestData(size: number): Array<{
id: number;
value: number;
name: string;
isActive: boolean;
}>;
static complexComputation(item: any): number;
static asyncComputation(item: any): Promise<number>;
static runComprehensiveBenchmark(dataSize?: number): Promise<BenchmarkSummary>;
private static benchmarkOperation;
static printBenchmarkSummary(summary: BenchmarkSummary): void;
static quickBenchmark(dataSize?: number): Promise<void>;
static runStressTest(sizes?: number[]): Promise<void>;
static runScalabilityTest(startSize?: number, endSize?: number, steps?: number): Promise<void>;
static runEdgeCaseTests(): Promise<void>;
static runFullBenchmarkSuite(dataSize?: number): Promise<void>;
static benchmarkCustomOperation<T, R>(operation: CustomBenchmarkOperation<T, R>, config?: CustomBenchmarkConfig): Promise<{
operationName: string;
averageTime: number;
totalTime: number;
iterations: number;
memoryUsed?: number;
result: R;
error?: string;
}>;
static benchmarkOperationsBatch<T>(operations: CustomBenchmarkOperation<any, T>[], config?: CustomBenchmarkConfig): Promise<BatchBenchmarkResult<T>>;
static benchmarkQuery<T, R>(queryOperation: (data: T[]) => R | Promise<R>, dataGenerator: (size: number) => T[], options?: QueryBenchmarkOptions): Promise<{
operation: string;
results: Array<{
dataSize: number;
time: number;
memoryUsed?: number;
result: R;
error?: string;
}>;
scalabilityAnalysis?: {
timeComplexity: string;
recommendation: string;
linearFit?: number;
};
}>;
static compareOperations<T, R1, R2>(operation1: {
name: string;
operation: (input: T) => R1 | Promise<R1>;
}, operation2: {
name: string;
operation: (input: T) => R2 | Promise<R2>;
}, input: T, config?: CustomBenchmarkConfig): Promise<BenchmarkComparison<T, R1, R2>>;
static runCustomBenchmarkSuite<T>(operations: CustomBenchmarkOperation<any, T>[], config?: CustomBenchmarkConfig): Promise<{
suiteName: string;
results: Array<{
operationName: string;
averageTime: number;
totalTime: number;
iterations: number;
memoryUsed?: number;
result: T;
error?: string;
}>;
summary: {
totalOperations: number;
successfulOperations: number;
failedOperations: number;
avgSyncTime: number;
avgAsyncTime: number;
overallRecommendation: string;
};
}>;
}