All files / services/printer index.js

61.29% Statements 19/31
36.36% Branches 8/22
66.66% Functions 6/9
63.33% Lines 19/30

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76          61x   61x           2x 2x 2x 2x   2x                                       4x 4x 1x   1x                       3x     3x 1x   3x 3x 2x 1x   1x                    
import path from 'path';
import { PATH_TEMP } from '../../../root';
import WinstonLogger from '../../../config/winston';
import Agents from '../../web_socket/agents/agents';
 
const { Worker } = require('worker_threads');
 
const workerMessage = (
  name = 'Print Worker',
  workerMessageData = null,
  resolve = () => false,
  reject = () => false
) => {
  try {
    Eif (typeof workerMessageData === 'object') {
      Eif (workerMessageData.success) {
        resolve(true);
 
        return;
      }
 
      if (!workerMessageData.success && workerMessageData.message) {
        WinstonLogger.error(`${name}: ${workerMessageData.message}`);
      }
 
      reject();
 
      return;
    }
 
    if (workerMessageData === 'done') resolve(true);
    else WinstonLogger.error(`${name}: ${JSON.stringify(workerMessageData)}`);
  } catch (e) {
    /* empty */
  }
};
 
async function printZPL(printer, label, type = 'ean', agentSocket = null) {
  return new Promise((resolve, reject) => {
    if (agentSocket) {
      Agents.sendPrinterEvent(agentSocket, { printer, label, type })
        .then((message) => {
          workerMessage('printZPLAgent', message, resolve, reject);
        })
        .catch((err) => {
          if (err) {
            reject(
              new Error(`Worker stopped with exit code ${JSON.stringify(err)}`)
            );
          } else {
            resolve(true);
          }
        });
    } else {
      const worker = new Worker(path.resolve(__dirname, 'printZPLWorker.js'), {
        workerData: { printer, label, type, PATH_TEMP },
      });
      worker.on('message', (message) =>
        workerMessage('printZPLWorker', message, resolve)
      );
      worker.on('error', reject);
      worker.on('exit', (code) => {
        if (code !== 0) {
          reject(new Error(`Worker stopped with exit code ${code}`));
        } else {
          resolve(true);
        }
      });
    }
  });
}
 
export default {
  printZPL,
};