This commit is contained in:
2025-10-16 19:49:50 +00:00
parent ba6b4fef4f
commit c4097bc737
119 changed files with 3765 additions and 14390 deletions
@@ -0,0 +1,22 @@
// DeviceFactory.mjs
import { DriverRegistry } from './DriverRegistry.mjs';
export class DeviceFactory {
static register(key, ctor, manifest) {
DriverRegistry.register(key, ctor, manifest);
}
/**
* @param {string} key "vendor:model"
* @param {object} opts opciones para el constructor del driver
*/
static create(key, opts = {}) {
const reg = DriverRegistry.get(key);
if (!reg) throw new Error(`DeviceFactory: driver no registrado: ${key}`);
return new reg.ctor(opts);
}
static listSupported() {
return DriverRegistry.list();
}
}
@@ -0,0 +1,20 @@
// DriverRegistry.mjs
const _registry = new Map();
/**
* Clave: "vendor:model" en minúsculas
* Valor: { ctor: DriverClass, manifest?: object }
*/
export const DriverRegistry = {
register(key, ctor, manifest = null) {
const k = String(key || '').trim().toLowerCase();
if (!k) throw new Error('DriverRegistry.register: key vacío');
if (typeof ctor !== 'function') throw new Error('DriverRegistry.register: ctor inválido');
_registry.set(k, { ctor, manifest: manifest || {} });
},
get(key) {
return _registry.get(String(key || '').trim().toLowerCase()) || null;
},
list() {
return [..._registry.entries()].map(([k, v]) => ({ key: k, manifest: v.manifest || {} }));
}
};