.
This commit is contained in:
@@ -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 || {} }));
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user