feat: add WASM module configuration with pre-configured CDN URLs and update settings UI
This commit is contained in:
@@ -8,6 +8,12 @@ interface WasmProviderConfig {
|
||||
|
||||
const STORAGE_KEY = 'bentopdf:wasm-providers';
|
||||
|
||||
const ENV_DEFAULTS: Record<WasmPackage, string | undefined> = {
|
||||
pymupdf: import.meta.env.VITE_WASM_PYMUPDF_URL || undefined,
|
||||
ghostscript: import.meta.env.VITE_WASM_GS_URL || undefined,
|
||||
cpdf: import.meta.env.VITE_WASM_CPDF_URL || undefined,
|
||||
};
|
||||
|
||||
class WasmProviderManager {
|
||||
private config: WasmProviderConfig;
|
||||
private validationCache: Map<WasmPackage, boolean> = new Map();
|
||||
@@ -31,6 +37,10 @@ class WasmProviderManager {
|
||||
return {};
|
||||
}
|
||||
|
||||
private getEnvDefault(packageName: WasmPackage): string | undefined {
|
||||
return ENV_DEFAULTS[packageName];
|
||||
}
|
||||
|
||||
private saveConfig(): void {
|
||||
try {
|
||||
localStorage.setItem(STORAGE_KEY, JSON.stringify(this.config));
|
||||
@@ -40,7 +50,7 @@ class WasmProviderManager {
|
||||
}
|
||||
|
||||
getUrl(packageName: WasmPackage): string | undefined {
|
||||
return this.config[packageName];
|
||||
return this.config[packageName] || this.getEnvDefault(packageName);
|
||||
}
|
||||
|
||||
setUrl(packageName: WasmPackage, url: string): void {
|
||||
@@ -57,11 +67,22 @@ class WasmProviderManager {
|
||||
}
|
||||
|
||||
isConfigured(packageName: WasmPackage): boolean {
|
||||
return !!(this.config[packageName] || this.getEnvDefault(packageName));
|
||||
}
|
||||
|
||||
isUserConfigured(packageName: WasmPackage): boolean {
|
||||
return !!this.config[packageName];
|
||||
}
|
||||
|
||||
hasEnvDefault(packageName: WasmPackage): boolean {
|
||||
return !!this.getEnvDefault(packageName);
|
||||
}
|
||||
|
||||
hasAnyProvider(): boolean {
|
||||
return Object.keys(this.config).length > 0;
|
||||
return (
|
||||
Object.keys(this.config).length > 0 ||
|
||||
Object.values(ENV_DEFAULTS).some(Boolean)
|
||||
);
|
||||
}
|
||||
|
||||
async validateUrl(
|
||||
@@ -172,13 +193,25 @@ class WasmProviderManager {
|
||||
}
|
||||
|
||||
getAllProviders(): WasmProviderConfig {
|
||||
return { ...this.config };
|
||||
return {
|
||||
pymupdf: this.config.pymupdf || ENV_DEFAULTS.pymupdf,
|
||||
ghostscript: this.config.ghostscript || ENV_DEFAULTS.ghostscript,
|
||||
cpdf: this.config.cpdf || ENV_DEFAULTS.cpdf,
|
||||
};
|
||||
}
|
||||
|
||||
clearAll(): void {
|
||||
this.config = {};
|
||||
this.validationCache.clear();
|
||||
this.saveConfig();
|
||||
try {
|
||||
localStorage.removeItem(STORAGE_KEY);
|
||||
} catch (e) {
|
||||
console.error('[WasmProvider] Failed to clear localStorage:', e);
|
||||
}
|
||||
}
|
||||
|
||||
resetToDefaults(): void {
|
||||
this.clearAll();
|
||||
}
|
||||
|
||||
getPackageDisplayName(packageName: WasmPackage): string {
|
||||
|
||||
Reference in New Issue
Block a user