openreader/src/lib/server/compute/index.ts
Richard R 91d9fe47a5 refactor(compute): standardize compute mode detection for backend initialization
Update backend creation logic to consistently determine compute mode using
a local variable, ensuring correct handling when the mode is undefined. This
improves clarity and robustness in backend selection.
2026-05-20 16:39:25 -06:00

36 lines
1.3 KiB
TypeScript

import type { ComputeBackend, ComputeMode } from '@/lib/server/compute/types';
import { isComputeModeAvailable, readComputeMode } from '@/lib/server/compute/mode';
import { WorkerComputeBackend } from '@/lib/server/compute/worker';
declare const __OPENREADER_COMPUTE_MODE__: 'local' | 'worker' | 'none';
let backendPromise: Promise<ComputeBackend> | null = null;
async function createBackend(): Promise<ComputeBackend> {
const bundledMode =
typeof __OPENREADER_COMPUTE_MODE__ === 'undefined' ? 'none' : __OPENREADER_COMPUTE_MODE__;
if (bundledMode === 'worker') return new WorkerComputeBackend();
if (bundledMode === 'local') {
const { LocalComputeBackend } = await import('@/lib/server/compute/local');
return new LocalComputeBackend();
}
const mode: ComputeMode = readComputeMode();
if (mode === 'worker') return new WorkerComputeBackend();
const { LocalComputeBackend } = await import('@/lib/server/compute/local');
return new LocalComputeBackend();
}
export async function getCompute(): Promise<ComputeBackend> {
if (!backendPromise) {
backendPromise = createBackend().catch((error) => {
backendPromise = null;
throw error;
});
}
return backendPromise;
}
export function isComputeAvailable(): boolean {
return isComputeModeAvailable();
}