unix-print
Version:
Utility for Unix-like operating systems to print PDF files from Node.js and Electron
213 lines (204 loc) • 6.54 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
var __require = typeof require !== "undefined" ? require : (x) => {
throw new Error('Dynamic require of "' + x + '" is not supported');
};
var __export = (target, all) => {
__markAsModule(target);
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __reExport = (target, module2, desc) => {
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
for (let key of __getOwnPropNames(module2))
if (!__hasOwnProp.call(target, key) && key !== "default")
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
}
return target;
};
var __toModule = (module2) => {
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
};
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
// src/index.ts
__export(exports, {
getDefaultPrinter: () => getDefaultPrinter,
getPrinters: () => getPrinters,
isPrintComplete: () => parse_response_default,
print: () => print
});
// src/print/print.ts
var import_fs = __toModule(require("fs"));
// src/utils/exec-async.ts
var import_child_process = __toModule(require("child_process"));
;
function execAsync(cmd) {
return new Promise((resolve, reject) => {
(0, import_child_process.exec)(cmd, {
env: {
SOFTWARE: "",
LANG: "C"
}
}, (err, stdout, stderr) => {
if (err) {
reject(err);
} else {
resolve({ stdout, stderr });
}
});
});
}
// src/print/print.ts
function print(file, printer, options) {
return __async(this, null, function* () {
if (!file)
throw "No file specified";
if (!import_fs.default.existsSync(file))
throw "No such file";
const args = [`'${file}'`];
if (printer) {
args.push("-d", printer);
}
if (options) {
if (!Array.isArray(options))
throw "options should be an array";
options.forEach((arg) => args.push(arg));
}
return execAsync(`lp ${args.join(" ")}`);
});
}
// src/utils/parse-printer-attribute.ts
function parsePrinterAttribute(stdout, attribute) {
const attributeLine = stdout.split("\n").slice(1).find((line) => line.indexOf(attribute) !== -1);
return attributeLine ? attributeLine.split(":")[1].trim() : "";
}
// src/get-default-printer/get-default-printer.ts
function getDefaultPrinter() {
return __async(this, null, function* () {
try {
const { stdout } = yield execAsync("lpstat -d");
const printer = getPrinterName(stdout);
if (!printer)
return null;
return yield getPrinterData(printer);
} catch (error) {
throw error;
}
});
}
function getPrinterName(output) {
const startIndex = output.indexOf(":");
return startIndex === -1 ? "" : output.substr(startIndex + 1).trim();
}
function getPrinterData(printer) {
return __async(this, null, function* () {
const { stdout } = yield execAsync(`lpstat -lp ${printer}`);
return {
printer,
status: stdout.split(/.*is\s(\w+)\..*/gm)[1],
description: parsePrinterAttribute(stdout, "Description"),
alerts: parsePrinterAttribute(stdout, "Alerts"),
connection: parsePrinterAttribute(stdout, "Connection")
};
});
}
// src/get-printers/get-printers.ts
function getPrinters() {
return __async(this, null, function* () {
try {
const { stdout } = yield execAsync("lpstat -lp");
const isThereAnyPrinter = stdout.match("printer");
if (!isThereAnyPrinter)
return [];
return stdout.split(/^printer(.)/gm).filter((line) => line.trim().length).map((line) => ({
printer: line.substr(0, line.indexOf(" ")),
status: line.split(/.*is\s(\w+)\..*/gm)[1],
description: parsePrinterAttribute(line, "Description"),
alerts: parsePrinterAttribute(line, "Alerts"),
connection: parsePrinterAttribute(line, "Connection")
}));
} catch (error) {
throw error;
}
});
}
// src/utils/parse-response.ts
function isPrintComplete(printResponse) {
return __async(this, null, function* () {
const requestId = getRequestId(printResponse);
if (!requestId) {
return false;
}
const args = new Array();
const { printer } = splitRequestId(requestId);
if (printer) {
args.push("-o", printer);
}
const { stdout } = yield execAsync(`lpstat ${args.join(" ")}`);
if (!stdout) {
return true;
}
try {
const lines = stdout.split("\n");
for (let i = 0; i < lines.length; i++) {
if (lines[i].includes(requestId)) {
return false;
}
}
return true;
} catch (err) {
return true;
}
});
}
function getRequestId(printResponse) {
const res = printResponse.stdout;
if (res) {
try {
const requestId = res.split(" ")[3];
return printerNameRegex.test(requestId) ? requestId : null;
} catch (err) {
return null;
}
}
return null;
}
function splitRequestId(requestId) {
const splitByHyphen = requestId.split("-");
const jobId = splitByHyphen[splitByHyphen.length - 1];
const printer = requestId.slice(0, requestId.length - (jobId.length + 1));
return { jobId, printer };
}
var printerNameRegex = /^[\w\.\/_@.\/@#$&+-]+-[0-9]+$/;
var parse_response_default = isPrintComplete;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
getDefaultPrinter,
getPrinters,
isPrintComplete,
print
});