xinvoice/ts/formats/factories/encoder.factory.ts
2025-04-03 15:53:08 +00:00

49 lines
1.6 KiB
TypeScript

import { BaseEncoder } from '../base/base.encoder.js';
import { InvoiceFormat } from '../../interfaces/common.js';
import type { ExportFormat } from '../../interfaces/common.js';
// Import specific encoders
// import { XRechnungEncoder } from '../ubl/xrechnung/xrechnung.encoder.js';
import { FacturXEncoder } from '../cii/facturx/facturx.encoder.js';
// import { ZUGFeRDEncoder } from '../cii/zugferd/zugferd.encoder.js';
/**
* Factory to create the appropriate encoder based on the target format
*/
export class EncoderFactory {
/**
* Creates an encoder for the specified format
* @param format Target format for encoding
* @returns Appropriate encoder instance
*/
public static createEncoder(format: ExportFormat | InvoiceFormat): BaseEncoder {
switch (format.toLowerCase()) {
case InvoiceFormat.UBL:
case 'ubl':
// return new UBLEncoder();
throw new Error('UBL encoder not yet implemented');
case InvoiceFormat.XRECHNUNG:
case 'xrechnung':
// return new XRechnungEncoder();
throw new Error('XRechnung encoder not yet implemented');
case InvoiceFormat.CII:
// For now, use Factur-X encoder for generic CII
return new FacturXEncoder();
case InvoiceFormat.ZUGFERD:
case 'zugferd':
// For now, use Factur-X encoder for ZUGFeRD
return new FacturXEncoder();
case InvoiceFormat.FACTURX:
case 'facturx':
return new FacturXEncoder();
default:
throw new Error(`Unsupported invoice format for encoding: ${format}`);
}
}
}