feat: add WASM module configuration with pre-configured CDN URLs and update settings UI

This commit is contained in:
alam00000
2026-02-02 15:14:30 +05:30
parent 200359d2e2
commit 612f6f9a2d
10 changed files with 404 additions and 72 deletions

View File

@@ -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 {