@deepbrainspace/nx-surrealdb
Version:
NX plugin for SurrealDB migrations with modular architecture
120 lines (119 loc) • 4.17 kB
TypeScript
import { SurrealDBClient } from '../infrastructure/client';
import { MigrationRepository } from './migration-repository';
import { DependencyResolver } from './dependency-resolver';
import { type MigrationFile } from '../filesystem/migration-file-processor';
import { type ResolvedFilename } from '../filesystem/pattern-resolver';
import { Migration } from '../configuration/types';
import { ExecutorContext } from '@nx/devkit';
export interface MigrationServiceOptions {
url: string;
user: string;
pass: string;
namespace?: string;
database?: string;
envFile?: string;
useTransactions?: boolean;
initPath?: string;
schemaPath?: string;
force?: boolean;
configPath?: string;
debug?: boolean;
dryRun?: boolean;
}
export interface MigrationExecutionContext {
client: SurrealDBClient;
repository: MigrationRepository;
resolver: DependencyResolver;
options: ResolvedMigrationOptions;
}
export interface ResolvedMigrationOptions {
url: string;
user: string;
pass: string;
namespace: string;
database: string;
useTransactions: boolean;
initPath: string;
schemaPath?: string;
force: boolean;
configPath?: string;
debug?: boolean;
dryRun: boolean;
}
export interface MigrationResult {
success: boolean;
filesProcessed: number;
filesSkipped: number;
executionTimeMs: number;
results: MigrationFileResult[];
}
export interface MigrationFileResult {
file: MigrationFile;
success: boolean;
executionTimeMs: number;
error?: string;
skipped?: boolean;
skipReason?: string;
}
export declare class MigrationService {
private projectContext?;
private context;
private options;
private patternResolver;
private debug;
constructor(projectContext?: ExecutorContext);
static findMatchingSubdirectory(basePath: string, pattern: string): Promise<string | null>;
initialize(options: MigrationServiceOptions): Promise<void>;
findPendingMigrations(targetModules?: string[], direction?: 'up' | 'down'): Promise<MigrationFile[]>;
executeMigrations(targetModules?: string[], operation?: 'migrate' | 'rollback', targetFilenames?: string[]): Promise<MigrationResult>;
validateRollback(targetModules?: string[]): Promise<{
canRollback: boolean;
blockedBy: string[];
warnings: string[];
migrationChecks: Array<{
moduleId: string;
hasAppliedMigrations: boolean;
rollbackFilesAvailable: boolean;
dependencyConflicts: string[];
}>;
}>;
getMigrationStatus(targetModules?: string[]): Promise<{
modules: Array<{
moduleId: string;
appliedMigrations: number;
pendingMigrations: number;
lastApplied?: Date;
dependencies: string[];
dependents: string[];
}>;
totalApplied: number;
totalPending: number;
}>;
getFileStatus(resolvedFilenames: ResolvedFilename[]): Promise<Array<{
filename: string;
moduleId: string;
number: string;
name: string;
direction: 'up' | 'down';
status: 'applied' | 'pending' | 'unknown';
appliedAt?: Date;
checksum?: string;
dependencies: string[];
dependents: string[];
}>>;
private buildMigrationRecord;
findLastMigrations(moduleIds: string[]): Promise<Migration[]>;
close(): Promise<void>;
resolveTargetModules(targetModules: string[]): string[];
resolveTargetFilenames(filenamePatterns: string[], targetModules?: string[], direction?: 'up' | 'down'): Promise<ResolvedFilename[]>;
resolveRollbackFilenames(filenamePatterns: string[], targetModules?: string[]): Promise<{
resolved: ResolvedFilename[];
warnings: string[];
}>;
findModuleMigrations(moduleId: string, direction: 'up' | 'down', basePath: string, includeContent?: boolean): Promise<MigrationFile[]>;
private executeSingleMigration;
private getModuleStatusCounts;
private getAppliedMigrations;
getConfig(): import("..").MigrationsConfig;
getAllModules(): string[];
}