47 lines
1.6 KiB
JavaScript
47 lines
1.6 KiB
JavaScript
// DeviceInterface.mjs
|
|
import { EventEmitter } from 'node:events';
|
|
|
|
/**
|
|
* Contrato común que todos los drivers deben implementar.
|
|
* Drivers de archivo (.txt) pueden dejar connect/fetchLogs/parseLogData como no-op.
|
|
*/
|
|
export class DeviceInterface extends EventEmitter {
|
|
/**
|
|
* @param {object} [opts]
|
|
* @param {(docs:string[])=>Promise<Record<string,{nombre?:string,apellido?:string,found?:boolean}>>} [opts.namesResolver]
|
|
* @param {'crossDay'|'sameDay'} [opts.intervalBuilder]
|
|
* @param {{ parseLine:(line:string)=>object|null }} [opts.parserStrategy]
|
|
*/
|
|
constructor(opts = {}) {
|
|
super();
|
|
this.namesResolver = typeof opts.namesResolver === 'function' ? opts.namesResolver : async () => ({});
|
|
this.intervalBuilder = opts.intervalBuilder || 'crossDay';
|
|
this.parserStrategy = opts.parserStrategy || null;
|
|
}
|
|
|
|
// ------- API esperada (drivers file) -------
|
|
/**
|
|
* Procesa el contenido completo de un .txt y devuelve:
|
|
* { parsedRows, pairs, payloadDB, missing_docs, error? }
|
|
*/
|
|
async processFile(/* text:string */) {
|
|
throw new Error('processFile not implemented');
|
|
}
|
|
|
|
/**
|
|
* Retorna CSV como string (no descarga).
|
|
*/
|
|
exportCSV(/* pairs?:object[] */) {
|
|
throw new Error('exportCSV not implemented');
|
|
}
|
|
|
|
// ------- API opcional (drivers TCP/IP) ----
|
|
async connect() { /* no-op */ }
|
|
async disconnect() { /* no-op */ }
|
|
async fetchLogs() { throw new Error('fetchLogs not implemented'); }
|
|
async parseLogData(/* raw */) { throw new Error('parseLogData not implemented'); }
|
|
|
|
// ------- Utilidad: emitir estado -------
|
|
setStatus(text) { this.emit('status', text || ''); }
|
|
}
|