From 1cb27fb25f4ad40d0d8d688e0a00a708717a9c7e Mon Sep 17 00:00:00 2001 From: KernelDeimos <7225168+KernelDeimos@users.noreply.github.com> Date: Mon, 17 Nov 2025 15:58:23 -0500 Subject: [PATCH] dev: make puterfs storage controller configurable --- extensions/puterfs/main.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/extensions/puterfs/main.js b/extensions/puterfs/main.js index 600f9b738..45e114266 100644 --- a/extensions/puterfs/main.js +++ b/extensions/puterfs/main.js @@ -22,6 +22,8 @@ import PuterFSProvider from './PuterFSProvider.js'; import LocalDiskStorageController from './storage/LocalDiskStorageController.js'; import ProxyStorageController from './storage/ProxyStorageController.js'; +const svc_event = extension.import('service:event'); + const fsEntryController = new FSEntryController(); const storageController = new ProxyStorageController(); @@ -29,6 +31,7 @@ extension.on('init', async () => { fsEntryController.init(); // Keep track of possible storage strategies for puterfs here + let defaultStorage = 'flat-files'; const storageStrategies = { 'flat-files': new LocalDiskStorageController(), }; @@ -37,13 +40,22 @@ extension.on('init', async () => { const event = { createStorageStrategy (name, implementation) { storageStrategies[name] = implementation; + if ( implementation === undefined ) { + throw new Error('createStorageStrategy was called wrong'); + } + if ( implementation.forceDefault ) { + defaultStorage = name; + } }, }; // Awaiting the event ensures all the storage strategies are registered - await extension.emit('puterfs.storage.create', event); + await svc_event.emit('puterfs.storage.create', event); + + let configuredStorage = defaultStorage; + if ( config.storage ) configuredStorage = config.storage; // Not we can select the configured strategy - const storageToUse = storageStrategies['flat-files']; + const storageToUse = storageStrategies[configuredStorage]; storageController.setDelegate(storageToUse); // The StorageController may need to await some asynchronous operations