@aituber-onair/kizuna
Version:
A sophisticated bond system (絆 - Kizuna) for managing relationships between users and AI characters in AITuber OnAir.
90 lines • 3.33 kB
JavaScript
/**
* Storage factory
* Creates appropriate StorageProvider based on environment
*/
import { LocalStorageProvider } from "../storage/LocalStorageProvider";
import { ExternalStorageProvider } from "../storage/ExternalStorageProvider";
import { detectEnvironment } from "./environmentDetector";
/**
* Create default StorageProvider based on environment
*
* @param externalAdapter - Optional adapter for external storage (e.g., file system)
*/
export function createDefaultStorageProvider(externalAdapter) {
const environment = detectEnvironment();
switch (environment) {
case "browser":
return new LocalStorageProvider({
enableCompression: false,
enableEncryption: false,
maxStorageSize: 5 * 1024 * 1024, // 5MB
});
case "node":
if (externalAdapter) {
return new ExternalStorageProvider(externalAdapter, {
dataDir: "./data",
prettyJson: true,
autoCreateDir: true,
});
}
// Fallback to LocalStorageProvider if no adapter provided
return new LocalStorageProvider({
enableCompression: false,
enableEncryption: false,
maxStorageSize: 5 * 1024 * 1024,
});
default:
// Default to LocalStorageProvider for unknown environments
return new LocalStorageProvider({
enableCompression: false,
enableEncryption: false,
maxStorageSize: 5 * 1024 * 1024,
});
}
}
/**
* Create StorageProvider with options
*
* @param options - Configuration options for storage providers
* @param externalAdapter - Optional adapter for external storage (e.g., file system)
*/
export function createStorageProvider(options, externalAdapter) {
// Set default options if not provided
const config = options || {};
const environment = detectEnvironment();
switch (environment) {
case "browser":
return new LocalStorageProvider({
enableCompression: false,
enableEncryption: false,
maxStorageSize: 5 * 1024 * 1024,
...config.browser,
});
case "node":
if (externalAdapter) {
return new ExternalStorageProvider(externalAdapter, {
dataDir: "./data",
prettyJson: true,
autoCreateDir: true,
encoding: "utf8",
...config.external,
});
}
// Fallback to LocalStorageProvider if no adapter provided
return new LocalStorageProvider({
enableCompression: false,
enableEncryption: false,
maxStorageSize: 5 * 1024 * 1024,
...config.browser,
});
default:
// Default to LocalStorageProvider for unknown environments
return new LocalStorageProvider({
enableCompression: false,
enableEncryption: false,
maxStorageSize: 5 * 1024 * 1024,
...config.browser,
});
}
}
//# sourceMappingURL=storageFactory.js.map