node-hp-scan-to 1.4.3 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +74 -27
- package/dist/Destination.js +2 -2
- package/dist/Destination.js.map +1 -1
- package/dist/DiscoveryTree.js.map +1 -1
- package/dist/Event.js.map +1 -1
- package/dist/EventTable.js +1 -1
- package/dist/EventTable.js.map +1 -1
- package/dist/HPApi.js +4 -4
- package/dist/HPApi.js.map +1 -1
- package/dist/InputSource.js +1 -1
- package/dist/InputSource.js.map +1 -1
- package/dist/Job.js +2 -2
- package/dist/Job.js.map +1 -1
- package/dist/JpegUtil.d.ts +1 -0
- package/dist/JpegUtil.js.map +1 -1
- package/dist/PaperlessCOnfig.d.ts +7 -0
- package/dist/PaperlessCOnfig.js +3 -0
- package/dist/PaperlessCOnfig.js.map +1 -0
- package/dist/PaperlessConfig.d.ts +7 -0
- package/dist/PaperlessConfig.js +3 -0
- package/dist/PaperlessConfig.js.map +1 -0
- package/dist/PathHelper.js.map +1 -1
- package/dist/ScanCaps.js +12 -2
- package/dist/ScanCaps.js.map +1 -1
- package/dist/ScanContent.d.ts +0 -1
- package/dist/ScanContent.js +0 -24
- package/dist/ScanContent.js.map +1 -1
- package/dist/ScanJobManifest.js.map +1 -1
- package/dist/ScanJobSettings.js +2 -2
- package/dist/ScanJobSettings.js.map +1 -1
- package/dist/ScanStatus.js.map +1 -1
- package/dist/WalkupScanDestination.js.map +1 -1
- package/dist/WalkupScanDestinations.js +1 -1
- package/dist/WalkupScanDestinations.js.map +1 -1
- package/dist/WalkupScanManifest.js.map +1 -1
- package/dist/WalkupScanToCompDestination.js.map +1 -1
- package/dist/WalkupScanToCompDestinations.js +1 -1
- package/dist/WalkupScanToCompDestinations.js.map +1 -1
- package/dist/WalkupScanToCompManifest.js.map +1 -1
- package/dist/commitInfo.json +3 -0
- package/dist/healthcheck.d.ts +1 -0
- package/dist/healthcheck.js +24 -0
- package/dist/healthcheck.js.map +1 -0
- package/dist/index.js +105 -18
- package/dist/index.js.map +1 -1
- package/dist/listening.js +2 -2
- package/dist/listening.js.map +1 -1
- package/dist/paperless/PaperlessConfig.d.ts +7 -0
- package/dist/paperless/PaperlessConfig.js +3 -0
- package/dist/paperless/PaperlessConfig.js.map +1 -0
- package/dist/paperless/paperless.d.ts +7 -0
- package/dist/paperless/paperless.js +83 -0
- package/dist/paperless/paperless.js.map +1 -0
- package/dist/paperless.d.ts +7 -0
- package/dist/paperless.js +83 -0
- package/dist/paperless.js.map +1 -0
- package/dist/pdfProcessing.d.ts +4 -0
- package/dist/pdfProcessing.js +52 -0
- package/dist/pdfProcessing.js.map +1 -0
- package/dist/postProcessing.d.ts +3 -0
- package/dist/postProcessing.js +44 -0
- package/dist/postProcessing.js.map +1 -0
- package/dist/readDeviceCapabilities.js.map +1 -1
- package/dist/scanProcessing.d.ts +7 -1
- package/dist/scanProcessing.js +20 -49
- package/dist/scanProcessing.js.map +1 -1
- package/dist/test/PathHelper.test.js +2 -2
- package/dist/test/PathHelper.test.js.map +1 -1
- package/dist/test/ScanCaps.test.js +20 -0
- package/dist/test/ScanCaps.test.js.map +1 -1
- package/dist/test/clean.js.map +1 -1
- package/dist/test/scanProcessing.test.js +1 -0
- package/dist/test/scanProcessing.test.js.map +1 -1
- package/dist/test-bonjour.d.ts +1 -0
- package/dist/test-bonjour.js +20 -0
- package/dist/test-bonjour.js.map +1 -0
- package/package.json +12 -9
- package/src/Destination.ts +2 -2
- package/src/EventTable.ts +1 -1
- package/src/HPApi.ts +4 -4
- package/src/Job.ts +2 -2
- package/src/ScanCaps.ts +18 -8
- package/src/ScanContent.ts +0 -22
- package/src/ScanJobSettings.ts +2 -2
- package/src/WalkupScanDestinations.ts +1 -1
- package/src/WalkupScanToCompDestinations.ts +1 -1
- package/src/commitInfo.json +3 -0
- package/src/healthcheck.ts +17 -0
- package/src/index.ts +131 -23
- package/src/listening.ts +2 -2
- package/src/paperless/PaperlessConfig.ts +7 -0
- package/src/paperless/paperless.ts +122 -0
- package/src/pdfProcessing.ts +67 -0
- package/src/postProcessing.ts +91 -0
- package/src/scanProcessing.ts +46 -93
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paperless.js","sourceRoot":"","sources":["../src/paperless.ts"],"names":[],"mappings":"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","sourcesContent":["import fsSync from \"fs\";\nimport FormData from \"form-data\";\nimport axios from \"axios\";\nimport { ScanConfig } from \"./scanProcessing\";\nimport { ScanContent } from \"./ScanContent\";\nimport fs from \"fs/promises\";\nimport { convertToPdf, mergeToPdf } from \"./pdfProcessing\";\nimport { PaperlessConfig } from \"./PaperlessConfig\";\n\nexport async function uploadImagesAsSeparateDocumentsToPaperless(scanJobContent: ScanContent, paperlessConfig: PaperlessConfig) {\n for (let i = 0; i < scanJobContent.elements.length; ++i) {\n const filePath = scanJobContent.elements[i].path;\n await uploadToPaperless(filePath, paperlessConfig);\n if (!paperlessConfig.keepFiles) {\n await fs.unlink(filePath);\n console.log(\n `Image document ${filePath} has been removed from the filesystem`\n );\n }\n }\n}\n\nexport async function convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless(scanJobContent: ScanContent, paperlessConfig: PaperlessConfig) {\n for (let i = 0; i < scanJobContent.elements.length; ++i) {\n const pdfFilePath = await convertToPdf(\n scanJobContent.elements[i],\n !paperlessConfig.keepFiles\n );\n if (pdfFilePath) {\n await uploadToPaperless(pdfFilePath, paperlessConfig);\n await fs.unlink(pdfFilePath);\n } else {\n console.log(\n \"Pdf generation has failed, nothing is going to be uploaded to paperless for: \" +\n scanJobContent.elements[i].path\n );\n }\n }\n}\n\nexport async function mergeToPdfAndUploadAsSingleDocumentToPaperless(folder: string, scanCount: number, scanJobContent: ScanContent, scanConfig: ScanConfig, scanDate: Date, paperlessConfig: PaperlessConfig) {\n const pdfFilePath = await mergeToPdf(\n folder,\n scanCount,\n scanJobContent,\n scanConfig.directoryConfig.filePattern,\n scanDate,\n !paperlessConfig.keepFiles\n );\n if (pdfFilePath) {\n await uploadToPaperless(pdfFilePath, paperlessConfig);\n await fs.unlink(pdfFilePath);\n console.log(\n `Pdf document ${pdfFilePath} has been removed from the filesystem`\n );\n } else {\n console.log(\n \"Pdf generation has failed, nothing is going to be uploaded to paperless\"\n );\n }\n}\n\nexport async function uploadPdfToPaperless(pdfFilePath: string | null, paperlessConfig: PaperlessConfig) {\n if (pdfFilePath) {\n await uploadToPaperless(pdfFilePath, paperlessConfig);\n if (!paperlessConfig.keepFiles) {\n await fs.unlink(pdfFilePath);\n console.log(\n `Pdf document ${pdfFilePath} has been removed from the filesystem`\n );\n }\n } else {\n console.log(\n \"Pdf generation has failed, nothing is going to be uploaded to paperless\",\n );\n }\n}\n\nasync function uploadToPaperless(\n filePath: string,\n paperlessConfig: PaperlessConfig,\n): Promise<void> {\n const url = paperlessConfig.postDocumentUrl;\n\n const authToken = paperlessConfig.authToken;\n\n const fileStream = fsSync.createReadStream(filePath);\n\n const form = new FormData();\n form.append(\"document\", fileStream);\n\n console.log(`Start uploading to paperless: ${filePath}`);\n try {\n const response = await axios.post(url, form, {\n headers: {\n ...form.getHeaders(),\n Authorization: `Token ${authToken}`,\n },\n });\n\n console.log(\"Document successfully uploaded to paperless:\", response.data);\n } catch (error) {\n console.error(\"Fail to upload document:\", error);\n }\n fileStream.close();\n}"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ScanContent, ScanPage } from "./ScanContent";
|
|
2
|
+
export declare function mergeToPdf(folder: string, scanCount: number, scanJobContent: ScanContent, filePattern: string | undefined, date: Date, deleteFiles: boolean): Promise<string | null>;
|
|
3
|
+
export declare function convertToPdf(scanPage: ScanPage, deleteFile: boolean): Promise<string | null>;
|
|
4
|
+
export declare function createPdfFrom(scanContent: ScanContent, destination: string): Promise<void>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createPdfFrom = exports.convertToPdf = exports.mergeToPdf = void 0;
|
|
7
|
+
const PathHelper_1 = __importDefault(require("./PathHelper"));
|
|
8
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const jspdf_1 = require("jspdf");
|
|
11
|
+
async function mergeToPdf(folder, scanCount, scanJobContent, filePattern, date, deleteFiles) {
|
|
12
|
+
if (scanJobContent.elements.length > 0) {
|
|
13
|
+
const pdfFilePath = PathHelper_1.default.getFileForScan(folder, scanCount, filePattern, "pdf", date);
|
|
14
|
+
await createPdfFrom(scanJobContent, pdfFilePath);
|
|
15
|
+
if (deleteFiles) {
|
|
16
|
+
await Promise.all(scanJobContent.elements.map((e) => promises_1.default.unlink(e.path)));
|
|
17
|
+
}
|
|
18
|
+
return pdfFilePath;
|
|
19
|
+
}
|
|
20
|
+
console.log(`No page available to build a pdf file`);
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
exports.mergeToPdf = mergeToPdf;
|
|
24
|
+
async function convertToPdf(scanPage, deleteFile) {
|
|
25
|
+
const fileName = path_1.default.basename(scanPage.path, path_1.default.extname(scanPage.path));
|
|
26
|
+
const pdfFilePath = path_1.default.join(path_1.default.dirname(scanPage.path), `${fileName}.pdf`);
|
|
27
|
+
await createPdfFrom({ elements: [scanPage] }, pdfFilePath);
|
|
28
|
+
if (deleteFile) {
|
|
29
|
+
await promises_1.default.unlink(scanPage.path);
|
|
30
|
+
}
|
|
31
|
+
return pdfFilePath;
|
|
32
|
+
}
|
|
33
|
+
exports.convertToPdf = convertToPdf;
|
|
34
|
+
async function createPdfFrom(scanContent, destination) {
|
|
35
|
+
let doc = null;
|
|
36
|
+
for (const element of scanContent.elements) {
|
|
37
|
+
const widthInInches = element.width / element.xResolution;
|
|
38
|
+
const heightInInches = element.height / element.yResolution;
|
|
39
|
+
const format = [widthInInches, heightInInches];
|
|
40
|
+
if (doc == null) {
|
|
41
|
+
doc = new jspdf_1.jsPDF({ unit: "in", floatPrecision: 3, format });
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
doc.addPage(format);
|
|
45
|
+
}
|
|
46
|
+
const imageByteBuffer = await promises_1.default.readFile(element.path);
|
|
47
|
+
doc.addImage(imageByteBuffer, "JPEG", 0, 0, widthInInches, heightInInches);
|
|
48
|
+
}
|
|
49
|
+
doc === null || doc === void 0 ? void 0 : doc.save(destination);
|
|
50
|
+
}
|
|
51
|
+
exports.createPdfFrom = createPdfFrom;
|
|
52
|
+
//# sourceMappingURL=pdfProcessing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdfProcessing.js","sourceRoot":"","sources":["../src/pdfProcessing.ts"],"names":[],"mappings":";;;;;;AACA,8DAAsC;AACtC,2DAA6B;AAC7B,gDAAwB;AACxB,iCAA8B;AAEvB,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,SAAiB,EACjB,cAA2B,EAC3B,WAA+B,EAC/B,IAAU,EACV,WAAoB;IAEpB,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACtC,MAAM,WAAW,GAAW,oBAAU,CAAC,cAAc,CACnD,MAAM,EACN,SAAS,EACT,WAAW,EACX,KAAK,EACL,IAAI,CACL,CAAC;QACF,MAAM,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACjD,IAAI,WAAW,EAAE;YACf,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC1E;QACD,OAAO,WAAW,CAAC;KACpB;IACD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAxBD,gCAwBC;AAEM,KAAK,UAAU,YAAY,CAChC,QAAkB,EAClB,UAAmB;IAEnB,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;IAE9E,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC3D,IAAI,UAAU,EAAE;QACd,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAChC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAZD,oCAYC;AAEM,KAAK,UAAU,aAAa,CACjC,WAAwB,EACxB,WAAmB;IAEnB,IAAI,GAAG,GAAiB,IAAI,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE;QAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;QAC1D,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAC5D,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAE/C,IAAI,GAAG,IAAI,IAAI,EAAE;YACf,GAAG,GAAG,IAAI,aAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;SAC5D;aAAM;YACL,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SACrB;QAED,MAAM,eAAe,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;KAC5E;IACD,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACzB,CAAC;AApBD,sCAoBC","sourcesContent":["import { ScanContent, ScanPage } from \"./ScanContent\";\nimport PathHelper from \"./PathHelper\";\nimport fs from \"fs/promises\";\nimport path from \"path\";\nimport { jsPDF } from \"jspdf\";\n\nexport async function mergeToPdf(\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n filePattern: string | undefined,\n date: Date,\n deleteFiles: boolean,\n): Promise<string | null> {\n if (scanJobContent.elements.length > 0) {\n const pdfFilePath: string = PathHelper.getFileForScan(\n folder,\n scanCount,\n filePattern,\n \"pdf\",\n date,\n );\n await createPdfFrom(scanJobContent, pdfFilePath);\n if (deleteFiles) {\n await Promise.all(scanJobContent.elements.map((e) => fs.unlink(e.path)));\n }\n return pdfFilePath;\n }\n console.log(`No page available to build a pdf file`);\n return null;\n}\n\nexport async function convertToPdf(\n scanPage: ScanPage,\n deleteFile: boolean,\n): Promise<string | null> {\n const fileName = path.basename(scanPage.path, path.extname(scanPage.path));\n const pdfFilePath = path.join(path.dirname(scanPage.path), `${fileName}.pdf`);\n\n await createPdfFrom({ elements: [scanPage] }, pdfFilePath);\n if (deleteFile) {\n await fs.unlink(scanPage.path);\n }\n return pdfFilePath;\n}\n\nexport async function createPdfFrom(\n scanContent: ScanContent,\n destination: string,\n) {\n let doc: jsPDF | null = null;\n for (const element of scanContent.elements) {\n const widthInInches = element.width / element.xResolution;\n const heightInInches = element.height / element.yResolution;\n const format = [widthInInches, heightInInches];\n\n if (doc == null) {\n doc = new jsPDF({ unit: \"in\", floatPrecision: 3, format });\n } else {\n doc.addPage(format);\n }\n\n const imageByteBuffer = await fs.readFile(element.path);\n doc.addImage(imageByteBuffer, \"JPEG\", 0, 0, widthInInches, heightInInches);\n }\n doc?.save(destination);\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ScanContent } from "./ScanContent";
|
|
2
|
+
import { ScanConfig } from "./scanProcessing";
|
|
3
|
+
export declare function postProcessing(scanConfig: ScanConfig, folder: string, tempFolder: string, scanCount: number, scanJobContent: ScanContent, scanDate: Date, toPdf: boolean): Promise<void>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.postProcessing = void 0;
|
|
4
|
+
const pdfProcessing_1 = require("./pdfProcessing");
|
|
5
|
+
const paperless_1 = require("./paperless/paperless");
|
|
6
|
+
async function postProcessing(scanConfig, folder, tempFolder, scanCount, scanJobContent, scanDate, toPdf) {
|
|
7
|
+
const paperlessConfig = scanConfig.paperlessConfig;
|
|
8
|
+
if (toPdf) {
|
|
9
|
+
const pdfFilePath = await (0, pdfProcessing_1.mergeToPdf)(paperlessConfig ? tempFolder : folder, scanCount, scanJobContent, scanConfig.directoryConfig.filePattern, scanDate, true);
|
|
10
|
+
displayPdfScan(pdfFilePath, scanJobContent);
|
|
11
|
+
if (paperlessConfig) {
|
|
12
|
+
await (0, paperless_1.uploadPdfToPaperless)(pdfFilePath, paperlessConfig);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
displayJpegScan(scanJobContent);
|
|
17
|
+
if (paperlessConfig) {
|
|
18
|
+
if (paperlessConfig.groupMultiPageScanIntoAPdf) {
|
|
19
|
+
await (0, paperless_1.mergeToPdfAndUploadAsSingleDocumentToPaperless)(folder, scanCount, scanJobContent, scanConfig, scanDate, paperlessConfig);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
if (paperlessConfig.alwaysSendAsPdfFile) {
|
|
23
|
+
await (0, paperless_1.convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless)(scanJobContent, paperlessConfig);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
await (0, paperless_1.uploadImagesAsSeparateDocumentsToPaperless)(scanJobContent, paperlessConfig);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.postProcessing = postProcessing;
|
|
33
|
+
function displayPdfScan(pdfFilePath, scanJobContent) {
|
|
34
|
+
if (pdfFilePath === null) {
|
|
35
|
+
console.log(`Pdf generated has not been generated`);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
console.log(`The following page(s) have been rendered inside '${pdfFilePath}': `);
|
|
39
|
+
scanJobContent.elements.forEach((e) => console.log(`\t- page ${e.pageNumber.toString().padStart(3, " ")} - ${e.width}x${e.height}`));
|
|
40
|
+
}
|
|
41
|
+
function displayJpegScan(scanJobContent) {
|
|
42
|
+
scanJobContent.elements.forEach((e) => console.log(`\t- page ${e.pageNumber.toString().padStart(3, " ")} - ${e.width}x${e.height} - ${e.path}`));
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=postProcessing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postProcessing.js","sourceRoot":"","sources":["../src/postProcessing.ts"],"names":[],"mappings":";;;AACA,mDAA6C;AAC7C,qDAK+B;AAGxB,KAAK,UAAU,cAAc,CAClC,UAAsB,EACtB,MAAc,EACd,UAAkB,EAClB,SAAiB,EACjB,cAA2B,EAC3B,QAAc,EACd,KAAc;IAEd,MAAM,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC;IACnD,IAAI,KAAK,EAAE;QACT,MAAM,WAAW,GAAG,MAAM,IAAA,0BAAU,EAClC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EACrC,SAAS,EACT,cAAc,EACd,UAAU,CAAC,eAAe,CAAC,WAAW,EACtC,QAAQ,EACR,IAAI,CACL,CAAC;QACF,cAAc,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC5C,IAAI,eAAe,EAAE;YACnB,MAAM,IAAA,gCAAoB,EAAC,WAAW,EAAE,eAAe,CAAC,CAAC;SAC1D;KACF;SAAM;QACL,eAAe,CAAC,cAAc,CAAC,CAAC;QAChC,IAAI,eAAe,EAAE;YACnB,IAAI,eAAe,CAAC,0BAA0B,EAAE;gBAC9C,MAAM,IAAA,0DAA8C,EAClD,MAAM,EACN,SAAS,EACT,cAAc,EACd,UAAU,EACV,QAAQ,EACR,eAAe,CAChB,CAAC;aACH;iBAAM;gBACL,IAAI,eAAe,CAAC,mBAAmB,EAAE;oBACvC,MAAM,IAAA,qEAAyD,EAC7D,cAAc,EACd,eAAe,CAChB,CAAC;iBACH;qBAAM;oBACL,MAAM,IAAA,sDAA0C,EAC9C,cAAc,EACd,eAAe,CAChB,CAAC;iBACH;aACF;SACF;KACF;AACH,CAAC;AAlDD,wCAkDC;AAED,SAAS,cAAc,CACrB,WAA0B,EAC1B,cAA2B;IAE3B,IAAI,WAAW,KAAK,IAAI,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO;KACR;IACD,OAAO,CAAC,GAAG,CACT,oDAAoD,WAAW,KAAK,CACrE,CAAC;IACF,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACpC,OAAO,CAAC,GAAG,CACT,YAAY,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,IAC/D,CAAC,CAAC,MACJ,EAAE,CACH,CACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,cAA2B;IAClD,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACpC,OAAO,CAAC,GAAG,CACT,YAAY,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,IAC/D,CAAC,CAAC,MACJ,MAAM,CAAC,CAAC,IAAI,EAAE,CACf,CACF,CAAC;AACJ,CAAC","sourcesContent":["import { ScanContent } from \"./ScanContent\";\nimport { mergeToPdf } from \"./pdfProcessing\";\nimport {\n convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless,\n mergeToPdfAndUploadAsSingleDocumentToPaperless,\n uploadImagesAsSeparateDocumentsToPaperless,\n uploadPdfToPaperless,\n} from \"./paperless/paperless\";\nimport { ScanConfig } from \"./scanProcessing\";\n\nexport async function postProcessing(\n scanConfig: ScanConfig,\n folder: string,\n tempFolder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n scanDate: Date,\n toPdf: boolean,\n) {\n const paperlessConfig = scanConfig.paperlessConfig;\n if (toPdf) {\n const pdfFilePath = await mergeToPdf(\n paperlessConfig ? tempFolder : folder,\n scanCount,\n scanJobContent,\n scanConfig.directoryConfig.filePattern,\n scanDate,\n true,\n );\n displayPdfScan(pdfFilePath, scanJobContent);\n if (paperlessConfig) {\n await uploadPdfToPaperless(pdfFilePath, paperlessConfig);\n }\n } else {\n displayJpegScan(scanJobContent);\n if (paperlessConfig) {\n if (paperlessConfig.groupMultiPageScanIntoAPdf) {\n await mergeToPdfAndUploadAsSingleDocumentToPaperless(\n folder,\n scanCount,\n scanJobContent,\n scanConfig,\n scanDate,\n paperlessConfig,\n );\n } else {\n if (paperlessConfig.alwaysSendAsPdfFile) {\n await convertImagesToPdfAndUploadAsSeparateDocumentsToPaperless(\n scanJobContent,\n paperlessConfig,\n );\n } else {\n await uploadImagesAsSeparateDocumentsToPaperless(\n scanJobContent,\n paperlessConfig,\n );\n }\n }\n }\n }\n}\n\nfunction displayPdfScan(\n pdfFilePath: string | null,\n scanJobContent: ScanContent,\n) {\n if (pdfFilePath === null) {\n console.log(`Pdf generated has not been generated`);\n return;\n }\n console.log(\n `The following page(s) have been rendered inside '${pdfFilePath}': `,\n );\n scanJobContent.elements.forEach((e) =>\n console.log(\n `\\t- page ${e.pageNumber.toString().padStart(3, \" \")} - ${e.width}x${\n e.height\n }`,\n ),\n );\n}\n\nfunction displayJpegScan(scanJobContent: ScanContent) {\n scanJobContent.elements.forEach((e) =>\n console.log(\n `\\t- page ${e.pageNumber.toString().padStart(3, \" \")} - ${e.width}x${\n e.height\n } - ${e.path}`,\n ),\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readDeviceCapabilities.js","sourceRoot":"","sources":["../src/readDeviceCapabilities.ts"],"names":[],"mappings":";;;;;;AACA,oDAA4B;AAIrB,KAAK,UAAU,sBAAsB;IAC1C,IAAI,+BAA+B,GAAG,IAAI,CAAC;IAC3C,MAAM,aAAa,GAAG,MAAM,eAAK,CAAC,gBAAgB,EAAE,CAAC;IACrD,IAAI,oBAAoB,GAAgC,IAAI,CAAC;IAC7D,IAAI,aAAa,CAAC,2BAA2B,IAAI,IAAI,EAAE
|
|
1
|
+
{"version":3,"file":"readDeviceCapabilities.js","sourceRoot":"","sources":["../src/readDeviceCapabilities.ts"],"names":[],"mappings":";;;;;;AACA,oDAA4B;AAIrB,KAAK,UAAU,sBAAsB;IAC1C,IAAI,+BAA+B,GAAG,IAAI,CAAC;IAC3C,MAAM,aAAa,GAAG,MAAM,eAAK,CAAC,gBAAgB,EAAE,CAAC;IACrD,IAAI,oBAAoB,GAAgC,IAAI,CAAC;IAC7D,IAAI,aAAa,CAAC,2BAA2B,IAAI,IAAI,EAAE;QACrD,MAAM,wBAAwB,GAAG,MAAM,eAAK,CAAC,2BAA2B,CACtE,aAAa,CAAC,2BAA2B,CAC1C,CAAC;QACF,IAAI,wBAAwB,CAAC,uBAAuB,IAAI,IAAI,EAAE;YAC5D,oBAAoB,GAAG,MAAM,eAAK,CAAC,uBAAuB,CACxD,wBAAwB,CAAC,uBAAuB,CACjD,CAAC;YACF,+BAA+B;gBAC7B,oBAAoB,CAAC,+BAA+B,CAAC;SACxD;KACF;SAAM,IAAI,aAAa,CAAC,qBAAqB,IAAI,IAAI,EAAE;QACtD,MAAM,kBAAkB,GAAG,MAAM,eAAK,CAAC,qBAAqB,CAC1D,aAAa,CAAC,qBAAqB,CACpC,CAAC;QACF,IAAI,kBAAkB,CAAC,yBAAyB,IAAI,IAAI,EAAE;YACxD,MAAM,eAAK,CAAC,yBAAyB,CACnC,kBAAkB,CAAC,yBAAyB,CAC7C,CAAC;SACH;KACF;SAAM;QACL,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;KAChC;IAED,IAAI,QAAQ,GAAoB,IAAI,CAAC;IACrC,IAAI,aAAa,CAAC,kBAAkB,IAAI,IAAI,EAAE;QAC5C,MAAM,eAAe,GAAG,MAAM,eAAK,CAAC,kBAAkB,CACpD,aAAa,CAAC,kBAAkB,CACjC,CAAC;QACF,IAAI,eAAe,CAAC,WAAW,IAAI,IAAI,EAAE;YACvC,QAAQ,GAAG,MAAM,eAAK,CAAC,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;SACjE;KACF;IAED,OAAO;QACL,+BAA+B;QAC/B,mBAAmB,EAAE,oBAAoB,IAAI,IAAI;QACjD,cAAc,EAAE,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,cAAc,KAAI,IAAI;QAChD,eAAe,EAAE,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,KAAI,IAAI;QAClD,WAAW,EAAE,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,WAAW,KAAI,IAAI;QAC1C,YAAY,EAAE,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,KAAI,IAAI;KAC7C,CAAC;AACJ,CAAC;AA9CD,wDA8CC","sourcesContent":["import { DeviceCapabilities } from \"./DeviceCapabilities\";\nimport HPApi from \"./HPApi\";\nimport WalkupScanToCompCaps from \"./WalkupScanToCompCaps\";\nimport ScanCaps from \"./ScanCaps\";\n\nexport async function readDeviceCapabilities(): Promise<DeviceCapabilities> {\n let supportsMultiItemScanFromPlaten = true;\n const discoveryTree = await HPApi.getDiscoveryTree();\n let walkupScanToCompCaps: WalkupScanToCompCaps | null = null;\n if (discoveryTree.WalkupScanToCompManifestURI != null) {\n const walkupScanToCompManifest = await HPApi.getWalkupScanToCompManifest(\n discoveryTree.WalkupScanToCompManifestURI,\n );\n if (walkupScanToCompManifest.WalkupScanToCompCapsURI != null) {\n walkupScanToCompCaps = await HPApi.getWalkupScanToCompCaps(\n walkupScanToCompManifest.WalkupScanToCompCapsURI,\n );\n supportsMultiItemScanFromPlaten =\n walkupScanToCompCaps.supportsMultiItemScanFromPlaten;\n }\n } else if (discoveryTree.WalkupScanManifestURI != null) {\n const walkupScanManifest = await HPApi.getWalkupScanManifest(\n discoveryTree.WalkupScanManifestURI,\n );\n if (walkupScanManifest.walkupScanDestinationsURI != null) {\n await HPApi.getWalkupScanDestinations(\n walkupScanManifest.walkupScanDestinationsURI,\n );\n }\n } else {\n console.log(\"Unknown device!\");\n }\n\n let scanCaps: ScanCaps | null = null;\n if (discoveryTree.ScanJobManifestURI != null) {\n const scanJobManifest = await HPApi.getScanJobManifest(\n discoveryTree.ScanJobManifestURI,\n );\n if (scanJobManifest.ScanCapsURI != null) {\n scanCaps = await HPApi.getScanCaps(scanJobManifest.ScanCapsURI);\n }\n }\n\n return {\n supportsMultiItemScanFromPlaten,\n useWalkupScanToComp: walkupScanToCompCaps != null,\n platenMaxWidth: scanCaps?.platenMaxWidth || null,\n platenMaxHeight: scanCaps?.platenMaxHeight || null,\n adfMaxWidth: scanCaps?.adfMaxWidth || null,\n adfMaxHeight: scanCaps?.adfMaxHeight || null,\n };\n}\n"]}
|
package/dist/scanProcessing.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import Event from "./Event";
|
|
2
2
|
import { DeviceCapabilities } from "./DeviceCapabilities";
|
|
3
3
|
import { InputSource } from "./InputSource";
|
|
4
|
+
import { PaperlessConfig } from "./paperless/PaperlessConfig";
|
|
4
5
|
export declare function getScanWidth(scanConfig: ScanConfig, inputSource: InputSource, deviceCapabilities: DeviceCapabilities): number | null;
|
|
5
6
|
export declare function getScanHeight(scanConfig: ScanConfig, inputSource: InputSource, deviceCapabilities: DeviceCapabilities): number | null;
|
|
6
|
-
export declare function
|
|
7
|
+
export declare function saveScanFromEvent(event: Event, folder: string, tempFolder: string, scanCount: number, deviceCapabilities: DeviceCapabilities, scanConfig: ScanConfig): Promise<void>;
|
|
7
8
|
export type DirectoryConfig = {
|
|
8
9
|
directory: string | undefined;
|
|
9
10
|
tempDirectory: string | undefined;
|
|
@@ -14,6 +15,7 @@ export type ScanConfig = {
|
|
|
14
15
|
width: number | null;
|
|
15
16
|
height: number | null;
|
|
16
17
|
directoryConfig: DirectoryConfig;
|
|
18
|
+
paperlessConfig: PaperlessConfig | undefined;
|
|
17
19
|
};
|
|
18
20
|
export type AdfAutoScanConfig = ScanConfig & {
|
|
19
21
|
isDuplex: boolean;
|
|
@@ -21,5 +23,9 @@ export type AdfAutoScanConfig = ScanConfig & {
|
|
|
21
23
|
pollingInterval: number;
|
|
22
24
|
startScanDelay: number;
|
|
23
25
|
};
|
|
26
|
+
export type SingleScanConfig = ScanConfig & {
|
|
27
|
+
isDuplex: boolean;
|
|
28
|
+
generatePdf: boolean;
|
|
29
|
+
};
|
|
24
30
|
export declare function scanFromAdf(scanCount: number, folder: string, tempFolder: string, adfAutoScanConfig: AdfAutoScanConfig, deviceCapabilities: DeviceCapabilities, date: Date): Promise<void>;
|
|
25
31
|
export declare function waitAdfLoaded(pollingInterval: number, startScanDelay: number): Promise<void>;
|
package/dist/scanProcessing.js
CHANGED
|
@@ -3,16 +3,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.waitAdfLoaded = exports.scanFromAdf = exports.
|
|
6
|
+
exports.waitAdfLoaded = exports.scanFromAdf = exports.saveScanFromEvent = exports.getScanHeight = exports.getScanWidth = void 0;
|
|
7
7
|
const HPApi_1 = __importDefault(require("./HPApi"));
|
|
8
8
|
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
9
|
const JpegUtil_1 = __importDefault(require("./JpegUtil"));
|
|
10
10
|
const listening_1 = require("./listening");
|
|
11
11
|
const ScanJobSettings_1 = __importDefault(require("./ScanJobSettings"));
|
|
12
|
-
const ScanContent_1 = require("./ScanContent");
|
|
13
12
|
const delay_1 = require("./delay");
|
|
14
13
|
const PathHelper_1 = __importDefault(require("./PathHelper"));
|
|
15
14
|
const InputSource_1 = require("./InputSource");
|
|
15
|
+
const postProcessing_1 = require("./postProcessing");
|
|
16
16
|
async function waitDeviceUntilItIsReadyToUploadOrCompleted(jobUrl) {
|
|
17
17
|
let job = null;
|
|
18
18
|
let isReadyToUpload = false;
|
|
@@ -35,7 +35,7 @@ async function waitDeviceUntilItIsReadyToUploadOrCompleted(jobUrl) {
|
|
|
35
35
|
} while (!isReadyToUpload);
|
|
36
36
|
return job;
|
|
37
37
|
}
|
|
38
|
-
async function
|
|
38
|
+
async function tryGetDestination(event) {
|
|
39
39
|
//this code can in some cases be executed before the user actually chooses between Document or Photo
|
|
40
40
|
//so lets fetch the contentType (Document or Photo) until we get a value
|
|
41
41
|
let destination = null;
|
|
@@ -60,7 +60,7 @@ async function TryGetDestination(event) {
|
|
|
60
60
|
}
|
|
61
61
|
async function scanProcessing(filePath) {
|
|
62
62
|
const buffer = await promises_1.default.readFile(filePath);
|
|
63
|
-
|
|
63
|
+
const height = JpegUtil_1.default.fixSizeWithDNL(buffer);
|
|
64
64
|
if (height != null) {
|
|
65
65
|
// rewrite the fixed file
|
|
66
66
|
await promises_1.default.writeFile(filePath, buffer);
|
|
@@ -70,7 +70,7 @@ async function scanProcessing(filePath) {
|
|
|
70
70
|
}
|
|
71
71
|
function createScanPage(job, currentPageNumber, filePath, sizeFixed) {
|
|
72
72
|
var _a, _b, _c;
|
|
73
|
-
|
|
73
|
+
const height = sizeFixed !== null && sizeFixed !== void 0 ? sizeFixed : job.imageHeight;
|
|
74
74
|
return {
|
|
75
75
|
path: filePath,
|
|
76
76
|
pageNumber: currentPageNumber,
|
|
@@ -80,7 +80,7 @@ function createScanPage(job, currentPageNumber, filePath, sizeFixed) {
|
|
|
80
80
|
yResolution: (_c = job.yResolution) !== null && _c !== void 0 ? _c : 200,
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
|
-
async function
|
|
83
|
+
async function handleScanProcessingState(job, inputSource, folder, scanCount, currentPageNumber, filePattern, date) {
|
|
84
84
|
if (job.pageState == "ReadyToUpload" &&
|
|
85
85
|
job.binaryURL != null &&
|
|
86
86
|
job.currentPageNumber != null) {
|
|
@@ -113,7 +113,7 @@ async function executeScanJob(scanJobSettings, inputSource, folder, scanCount, s
|
|
|
113
113
|
continue;
|
|
114
114
|
}
|
|
115
115
|
if (job.jobState === "Processing") {
|
|
116
|
-
const page = await
|
|
116
|
+
const page = await handleScanProcessingState(job, inputSource, folder, scanCount, scanJobContent.elements.length + 1, filePattern, new Date());
|
|
117
117
|
job = await HPApi_1.default.getJob(jobUrl);
|
|
118
118
|
if (page != null && job.jobState != "Canceled") {
|
|
119
119
|
scanJobContent.elements.push(page);
|
|
@@ -136,8 +136,8 @@ async function waitScanNewPageRequest(compEventURI) {
|
|
|
136
136
|
let wait = true;
|
|
137
137
|
while (wait) {
|
|
138
138
|
await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
const walkupScanToCompEvent = await HPApi_1.default.getWalkupScanToCompEvent(compEventURI);
|
|
140
|
+
const message = walkupScanToCompEvent.eventType;
|
|
141
141
|
if (message === "ScanNewPageRequested") {
|
|
142
142
|
startNewScanJob = true;
|
|
143
143
|
wait = false;
|
|
@@ -184,27 +184,6 @@ async function executeScanJobs(scanJobSettings, inputSource, folder, scanCount,
|
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
|
-
async function mergeToPdf(folder, scanCount, scanJobContent, filePattern, date) {
|
|
188
|
-
if (scanJobContent.elements.length > 0) {
|
|
189
|
-
const pdfFilePath = PathHelper_1.default.getFileForScan(folder, scanCount, filePattern, "pdf", date);
|
|
190
|
-
await (0, ScanContent_1.createPdfFrom)(scanJobContent, pdfFilePath);
|
|
191
|
-
scanJobContent.elements.forEach((e) => promises_1.default.unlink(e.path));
|
|
192
|
-
return pdfFilePath;
|
|
193
|
-
}
|
|
194
|
-
console.log(`No page available to build a pdf file`);
|
|
195
|
-
return null;
|
|
196
|
-
}
|
|
197
|
-
function displayPdfScan(pdfFilePath, scanJobContent) {
|
|
198
|
-
if (pdfFilePath === null) {
|
|
199
|
-
console.log(`Pdf generated has not been generated`);
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
console.log(`The following page(s) have been rendered inside '${pdfFilePath}': `);
|
|
203
|
-
scanJobContent.elements.forEach((e) => console.log(`\t- page ${e.pageNumber.toString().padStart(3, " ")} - ${e.width}x${e.height}`));
|
|
204
|
-
}
|
|
205
|
-
function displayJpegScan(scanJobContent) {
|
|
206
|
-
scanJobContent.elements.forEach((e) => console.log(`\t- page ${e.pageNumber.toString().padStart(3, " ")} - ${e.width}x${e.height} - ${e.path}`));
|
|
207
|
-
}
|
|
208
187
|
function isPdf(destination) {
|
|
209
188
|
if (destination.shortcut === "SavePDF" ||
|
|
210
189
|
destination.shortcut === "EmailPDF" ||
|
|
@@ -233,7 +212,9 @@ function getScanWidth(scanConfig, inputSource, deviceCapabilities) {
|
|
|
233
212
|
}
|
|
234
213
|
}
|
|
235
214
|
else {
|
|
236
|
-
return
|
|
215
|
+
return inputSource === InputSource_1.InputSource.Adf
|
|
216
|
+
? deviceCapabilities.adfMaxWidth
|
|
217
|
+
: deviceCapabilities.platenMaxWidth;
|
|
237
218
|
}
|
|
238
219
|
}
|
|
239
220
|
exports.getScanWidth = getScanWidth;
|
|
@@ -250,18 +231,20 @@ function getScanHeight(scanConfig, inputSource, deviceCapabilities) {
|
|
|
250
231
|
}
|
|
251
232
|
}
|
|
252
233
|
else {
|
|
253
|
-
return
|
|
234
|
+
return inputSource === InputSource_1.InputSource.Adf
|
|
235
|
+
? deviceCapabilities.adfMaxHeight
|
|
236
|
+
: deviceCapabilities.platenMaxHeight;
|
|
254
237
|
}
|
|
255
238
|
}
|
|
256
239
|
exports.getScanHeight = getScanHeight;
|
|
257
|
-
async function
|
|
240
|
+
async function saveScanFromEvent(event, folder, tempFolder, scanCount, deviceCapabilities, scanConfig) {
|
|
258
241
|
if (event.compEventURI) {
|
|
259
242
|
const proceedToScan = await (0, listening_1.waitScanRequest)(event.compEventURI);
|
|
260
243
|
if (!proceedToScan) {
|
|
261
244
|
return;
|
|
262
245
|
}
|
|
263
246
|
}
|
|
264
|
-
const destination = await
|
|
247
|
+
const destination = await tryGetDestination(event);
|
|
265
248
|
if (!destination) {
|
|
266
249
|
console.log("No shortcut selected!");
|
|
267
250
|
return;
|
|
@@ -296,15 +279,9 @@ async function saveScan(event, folder, tempFolder, scanCount, deviceCapabilities
|
|
|
296
279
|
const scanDate = new Date();
|
|
297
280
|
await executeScanJobs(scanJobSettings, inputSource, destinationFolder, scanCount, scanJobContent, event, deviceCapabilities, scanConfig.directoryConfig.filePattern);
|
|
298
281
|
console.log(`Scan of page(s) completed totalPages: ${scanJobContent.elements.length}:`);
|
|
299
|
-
|
|
300
|
-
const pdfFilePath = await mergeToPdf(folder, scanCount, scanJobContent, scanConfig.directoryConfig.filePattern, scanDate);
|
|
301
|
-
displayPdfScan(pdfFilePath, scanJobContent);
|
|
302
|
-
}
|
|
303
|
-
else {
|
|
304
|
-
displayJpegScan(scanJobContent);
|
|
305
|
-
}
|
|
282
|
+
await (0, postProcessing_1.postProcessing)(scanConfig, folder, tempFolder, scanCount, scanJobContent, scanDate, toPdf);
|
|
306
283
|
}
|
|
307
|
-
exports.
|
|
284
|
+
exports.saveScanFromEvent = saveScanFromEvent;
|
|
308
285
|
async function scanFromAdf(scanCount, folder, tempFolder, adfAutoScanConfig, deviceCapabilities, date) {
|
|
309
286
|
let destinationFolder;
|
|
310
287
|
let contentType;
|
|
@@ -323,13 +300,7 @@ async function scanFromAdf(scanCount, folder, tempFolder, adfAutoScanConfig, dev
|
|
|
323
300
|
const scanJobContent = { elements: [] };
|
|
324
301
|
await executeScanJob(scanJobSettings, InputSource_1.InputSource.Adf, destinationFolder, scanCount, scanJobContent, adfAutoScanConfig.directoryConfig.filePattern);
|
|
325
302
|
console.log(`Scan of page(s) completed, total pages: ${scanJobContent.elements.length}:`);
|
|
326
|
-
|
|
327
|
-
const pdfFilePath = await mergeToPdf(folder, scanCount, scanJobContent, adfAutoScanConfig.directoryConfig.filePattern, date);
|
|
328
|
-
displayPdfScan(pdfFilePath, scanJobContent);
|
|
329
|
-
}
|
|
330
|
-
else {
|
|
331
|
-
displayJpegScan(scanJobContent);
|
|
332
|
-
}
|
|
303
|
+
await (0, postProcessing_1.postProcessing)(adfAutoScanConfig, folder, tempFolder, scanCount, scanJobContent, date, adfAutoScanConfig.generatePdf);
|
|
333
304
|
}
|
|
334
305
|
exports.scanFromAdf = scanFromAdf;
|
|
335
306
|
async function waitAdfLoaded(pollingInterval, startScanDelay) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanProcessing.js","sourceRoot":"","sources":["../src/scanProcessing.ts"],"names":[],"mappings":"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","sourcesContent":["import Event from \"./Event\";\nimport WalkupScanDestination from \"./WalkupScanDestination\";\nimport WalkupScanToCompDestination from \"./WalkupScanToCompDestination\";\nimport HPApi from \"./HPApi\";\nimport fs from \"fs/promises\";\nimport JpegUtil from \"./JpegUtil\";\nimport { DeviceCapabilities } from \"./DeviceCapabilities\";\nimport { waitForScanEvent, waitScanRequest } from \"./listening\";\nimport ScanJobSettings from \"./ScanJobSettings\";\nimport { createPdfFrom, ScanContent, ScanPage } from \"./ScanContent\";\nimport Job from \"./Job\";\nimport { delay } from \"./delay\";\nimport PathHelper from \"./PathHelper\";\nimport ScanStatus from \"./ScanStatus\";\nimport { InputSource } from \"./InputSource\";\n\nasync function waitDeviceUntilItIsReadyToUploadOrCompleted(\n jobUrl: string,\n): Promise<Job> {\n let job = null;\n let isReadyToUpload = false;\n do {\n job = await HPApi.getJob(jobUrl);\n if (job.jobState === \"Canceled\") {\n return job;\n } else if (\n job.pageState === \"ReadyToUpload\" ||\n job.jobState === \"Completed\"\n ) {\n isReadyToUpload = true;\n } else if (job.jobState == \"Processing\") {\n isReadyToUpload = false;\n } else {\n console.log(`Unknown jobState: ${job.jobState}`);\n }\n await delay(300);\n } while (!isReadyToUpload);\n return job;\n}\n\nasync function TryGetDestination(\n event: Event,\n): Promise<WalkupScanDestination | WalkupScanToCompDestination | null> {\n //this code can in some cases be executed before the user actually chooses between Document or Photo\n //so lets fetch the contentType (Document or Photo) until we get a value\n let destination: WalkupScanDestination | WalkupScanToCompDestination | null =\n null;\n\n for (let i = 0; i < 20; i++) {\n const destinationURI = event.destinationURI;\n if (destinationURI) {\n destination = await HPApi.getDestination(destinationURI);\n\n const shortcut = destination.shortcut;\n if (shortcut != null) {\n return destination;\n }\n } else {\n console.log(`No destination URI found`);\n }\n\n console.log(`No shortcut yet available, attempt: ${i + 1}/20`);\n await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s\n }\n\n console.log(\"Failing to detect destination shortcut\");\n console.log(JSON.stringify(destination));\n return null;\n}\n\nasync function scanProcessing(filePath: string): Promise<number | null> {\n const buffer: Buffer = await fs.readFile(filePath);\n\n let height = JpegUtil.fixSizeWithDNL(buffer);\n if (height != null) {\n // rewrite the fixed file\n await fs.writeFile(filePath, buffer);\n return height;\n }\n return null;\n}\n\nfunction createScanPage(\n job: Job,\n currentPageNumber: number,\n filePath: string,\n sizeFixed: number | null,\n): ScanPage {\n let height = sizeFixed ?? job.imageHeight;\n return {\n path: filePath,\n pageNumber: currentPageNumber,\n width: job.imageWidth ?? 0,\n height: height ?? 0,\n xResolution: job.xResolution ?? 200,\n yResolution: job.yResolution ?? 200,\n };\n}\n\nasync function handleProcessingState(\n job: Job,\n inputSource: InputSource,\n folder: string,\n scanCount: number,\n currentPageNumber: number,\n filePattern: string | undefined,\n date: Date,\n): Promise<ScanPage | null> {\n if (\n job.pageState == \"ReadyToUpload\" &&\n job.binaryURL != null &&\n job.currentPageNumber != null\n ) {\n console.log(\n `Ready to download page job page ${job.currentPageNumber} at:`,\n job.binaryURL,\n );\n\n const destinationFilePath = PathHelper.getFileForPage(\n folder,\n scanCount,\n currentPageNumber,\n filePattern,\n \"jpg\",\n date,\n );\n const filePath = await HPApi.downloadPage(\n job.binaryURL,\n destinationFilePath,\n );\n console.log(\"Page downloaded to:\", filePath);\n\n let sizeFixed: null | number = null;\n if (inputSource == InputSource.Adf) {\n sizeFixed = await scanProcessing(filePath);\n if (sizeFixed == null) {\n console.log(\n `File size has not been fixed, DNF may not have been found and approximate height is: ${job.imageHeight}`,\n );\n }\n }\n return createScanPage(job, currentPageNumber, filePath, sizeFixed);\n } else {\n console.log(`Unknown pageState: ${job.pageState}`);\n await delay(200);\n return null;\n }\n}\n\nasync function executeScanJob(\n scanJobSettings: ScanJobSettings,\n inputSource: InputSource,\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n filePattern: string | undefined,\n): Promise<\"Completed\" | \"Canceled\"> {\n const jobUrl = await HPApi.postJob(scanJobSettings);\n\n console.log(\"New job created:\", jobUrl);\n\n let job = await HPApi.getJob(jobUrl);\n while (job.jobState !== \"Completed\") {\n job = await waitDeviceUntilItIsReadyToUploadOrCompleted(jobUrl);\n\n if (job.jobState == \"Completed\") {\n continue;\n }\n\n if (job.jobState === \"Processing\") {\n const page = await handleProcessingState(\n job,\n inputSource,\n folder,\n scanCount,\n scanJobContent.elements.length + 1,\n filePattern,\n new Date(),\n );\n job = await HPApi.getJob(jobUrl);\n if (page != null && job.jobState != \"Canceled\") {\n scanJobContent.elements.push(page);\n }\n } else if (job.jobState === \"Canceled\") {\n console.log(\"Job cancelled by device\");\n break;\n } else {\n console.log(`Unhandled jobState: ${job.jobState}`);\n await delay(200);\n }\n }\n console.log(\n `Job state: ${job.jobState}, totalPages: ${scanJobContent.elements.length}:`,\n );\n return job.jobState;\n}\n\nasync function waitScanNewPageRequest(compEventURI: string): Promise<boolean> {\n let startNewScanJob = false;\n let wait = true;\n while (wait) {\n await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s\n\n let walkupScanToCompEvent =\n await HPApi.getWalkupScanToCompEvent(compEventURI);\n let message = walkupScanToCompEvent.eventType;\n\n if (message === \"ScanNewPageRequested\") {\n startNewScanJob = true;\n wait = false;\n } else if (message === \"ScanPagesComplete\") {\n wait = false;\n } else if (message === \"ScanRequested\") {\n // continue waiting\n } else {\n wait = false;\n console.log(`Unknown eventType: ${message}`);\n }\n }\n return startNewScanJob;\n}\n\nasync function executeScanJobs(\n scanJobSettings: ScanJobSettings,\n inputSource: InputSource,\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n firstEvent: Event,\n deviceCapabilities: DeviceCapabilities,\n filePattern: string | undefined,\n) {\n let jobState = await executeScanJob(\n scanJobSettings,\n inputSource,\n folder,\n scanCount,\n scanJobContent,\n filePattern,\n );\n let lastEvent = firstEvent;\n if (\n jobState === \"Completed\" &&\n lastEvent.compEventURI &&\n inputSource !== InputSource.Adf &&\n lastEvent.destinationURI &&\n deviceCapabilities.supportsMultiItemScanFromPlaten\n ) {\n lastEvent = await waitForScanEvent(\n lastEvent.destinationURI,\n lastEvent.agingStamp,\n );\n if (!lastEvent.compEventURI) {\n return;\n }\n let startNewScanJob = await waitScanNewPageRequest(lastEvent.compEventURI);\n while (startNewScanJob) {\n jobState = await executeScanJob(\n scanJobSettings,\n inputSource,\n folder,\n scanCount,\n scanJobContent,\n filePattern,\n );\n if (jobState !== \"Completed\") {\n return;\n }\n if (!lastEvent.destinationURI) {\n break;\n }\n lastEvent = await waitForScanEvent(\n lastEvent.destinationURI,\n lastEvent.agingStamp,\n );\n if (!lastEvent.compEventURI) {\n return;\n }\n startNewScanJob = await waitScanNewPageRequest(lastEvent.compEventURI);\n }\n }\n}\n\nasync function mergeToPdf(\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n filePattern: string | undefined,\n date: Date,\n): Promise<string | null> {\n if (scanJobContent.elements.length > 0) {\n const pdfFilePath: string = PathHelper.getFileForScan(\n folder,\n scanCount,\n filePattern,\n \"pdf\",\n date,\n );\n await createPdfFrom(scanJobContent, pdfFilePath);\n scanJobContent.elements.forEach((e) => fs.unlink(e.path));\n return pdfFilePath;\n }\n console.log(`No page available to build a pdf file`);\n return null;\n}\n\nfunction displayPdfScan(\n pdfFilePath: string | null,\n scanJobContent: ScanContent,\n) {\n if (pdfFilePath === null) {\n console.log(`Pdf generated has not been generated`);\n return;\n }\n console.log(\n `The following page(s) have been rendered inside '${pdfFilePath}': `,\n );\n scanJobContent.elements.forEach((e) =>\n console.log(\n `\\t- page ${e.pageNumber.toString().padStart(3, \" \")} - ${e.width}x${\n e.height\n }`,\n ),\n );\n}\n\nfunction displayJpegScan(scanJobContent: ScanContent) {\n scanJobContent.elements.forEach((e) =>\n console.log(\n `\\t- page ${e.pageNumber.toString().padStart(3, \" \")} - ${e.width}x${\n e.height\n } - ${e.path}`,\n ),\n );\n}\n\nfunction isPdf(\n destination: WalkupScanDestination | WalkupScanToCompDestination,\n) {\n if (\n destination.shortcut === \"SavePDF\" ||\n destination.shortcut === \"EmailPDF\" ||\n destination.shortcut == \"SaveDocument1\"\n ) {\n return true;\n } else if (\n destination.shortcut === \"SaveJPEG\" ||\n destination.shortcut === \"SavePhoto1\"\n ) {\n return false;\n } else {\n console.log(\n `Unexpected shortcut received: ${destination.shortcut}, considering it as non pdf target!`,\n );\n return false;\n }\n}\n\nexport function getScanWidth(\n scanConfig: ScanConfig,\n inputSource: InputSource,\n deviceCapabilities: DeviceCapabilities,\n) {\n if (scanConfig.width && scanConfig.width > 0) {\n const maxWidth =\n inputSource === InputSource.Adf\n ? deviceCapabilities.adfMaxWidth\n : deviceCapabilities.platenMaxWidth;\n\n if (maxWidth && scanConfig.width > maxWidth) {\n return maxWidth;\n } else {\n return scanConfig.width;\n }\n } else {\n return null;\n }\n}\n\nexport function getScanHeight(\n scanConfig: ScanConfig,\n inputSource: InputSource,\n deviceCapabilities: DeviceCapabilities,\n) {\n if (scanConfig.height && scanConfig.height > 0) {\n const maxHeight =\n inputSource === InputSource.Adf\n ? deviceCapabilities.adfMaxHeight\n : deviceCapabilities.platenMaxHeight;\n\n if (maxHeight && scanConfig.height > maxHeight) {\n return maxHeight;\n } else {\n return scanConfig.height;\n }\n } else {\n return null;\n }\n}\n\nexport async function saveScan(\n event: Event,\n folder: string,\n tempFolder: string,\n scanCount: number,\n deviceCapabilities: DeviceCapabilities,\n scanConfig: ScanConfig,\n): Promise<void> {\n if (event.compEventURI) {\n const proceedToScan = await waitScanRequest(event.compEventURI);\n if (!proceedToScan) {\n return;\n }\n }\n\n const destination = await TryGetDestination(event);\n if (!destination) {\n console.log(\"No shortcut selected!\");\n return;\n }\n console.log(\"Selected shortcut: \" + destination.shortcut);\n\n let toPdf: boolean;\n let destinationFolder: string;\n let contentType: \"Document\" | \"Photo\";\n if (isPdf(destination)) {\n toPdf = true;\n contentType = \"Document\";\n destinationFolder = tempFolder;\n console.log(\n `Scan will be converted to pdf, using ${destinationFolder} as temp scan output directory for individual pages`,\n );\n } else {\n toPdf = false;\n contentType = \"Photo\";\n destinationFolder = folder;\n }\n\n const isDuplex =\n destination.scanPlexMode != null && destination.scanPlexMode != \"Simplex\";\n console.log(\"ScanPlexMode is : \" + destination.scanPlexMode);\n\n const scanStatus = await HPApi.getScanStatus();\n\n if (scanStatus.scannerState !== \"Idle\") {\n console.log(\"Scanner state is not Idle, aborting scan attempt...!\")\n }\n\n console.log(\"Afd is : \" + scanStatus.adfState);\n\n const inputSource = scanStatus.getInputSource();\n const scanWidth = getScanWidth(scanConfig, inputSource, deviceCapabilities);\n const scanHeight = getScanHeight(scanConfig, inputSource, deviceCapabilities);\n\n const scanJobSettings = new ScanJobSettings(\n inputSource,\n contentType,\n scanConfig.resolution,\n scanWidth,\n scanHeight,\n isDuplex,\n );\n\n const scanJobContent: ScanContent = { elements: [] };\n\n const scanDate = new Date();\n\n await executeScanJobs(\n scanJobSettings,\n inputSource,\n destinationFolder,\n scanCount,\n scanJobContent,\n event,\n deviceCapabilities,\n scanConfig.directoryConfig.filePattern,\n );\n\n console.log(\n `Scan of page(s) completed totalPages: ${scanJobContent.elements.length}:`,\n );\n\n if (toPdf) {\n const pdfFilePath = await mergeToPdf(\n folder,\n scanCount,\n scanJobContent,\n scanConfig.directoryConfig.filePattern,\n scanDate,\n );\n displayPdfScan(pdfFilePath, scanJobContent);\n } else {\n displayJpegScan(scanJobContent);\n }\n}\n\nexport type DirectoryConfig = {\n directory: string | undefined;\n tempDirectory: string | undefined;\n filePattern: string | undefined;\n};\nexport type ScanConfig = {\n resolution: number;\n width: number | null;\n height: number | null;\n directoryConfig: DirectoryConfig;\n};\nexport type AdfAutoScanConfig = ScanConfig & {\n isDuplex: boolean;\n generatePdf: boolean;\n pollingInterval: number;\n startScanDelay: number;\n};\n\nexport async function scanFromAdf(\n scanCount: number,\n folder: string,\n tempFolder: string,\n adfAutoScanConfig: AdfAutoScanConfig,\n deviceCapabilities: DeviceCapabilities,\n date: Date,\n) {\n let destinationFolder: string;\n let contentType: \"Document\" | \"Photo\";\n if (adfAutoScanConfig.generatePdf) {\n contentType = \"Document\";\n destinationFolder = tempFolder;\n console.log(\n `Scan will be converted to pdf, using ${destinationFolder} as temp scan output directory for individual pages`,\n );\n } else {\n contentType = \"Photo\";\n destinationFolder = folder;\n }\n\n const scanWidth = getScanWidth(\n adfAutoScanConfig,\n InputSource.Adf,\n deviceCapabilities,\n );\n const scanHeight = getScanHeight(\n adfAutoScanConfig,\n InputSource.Adf,\n deviceCapabilities,\n );\n\n const scanJobSettings = new ScanJobSettings(\n InputSource.Adf,\n contentType,\n adfAutoScanConfig.resolution,\n scanWidth,\n scanHeight,\n adfAutoScanConfig.isDuplex,\n );\n\n const scanJobContent: ScanContent = { elements: [] };\n\n await executeScanJob(\n scanJobSettings,\n InputSource.Adf,\n destinationFolder,\n scanCount,\n scanJobContent,\n adfAutoScanConfig.directoryConfig.filePattern,\n );\n\n console.log(\n `Scan of page(s) completed, total pages: ${scanJobContent.elements.length}:`,\n );\n\n if (adfAutoScanConfig.generatePdf) {\n const pdfFilePath = await mergeToPdf(\n folder,\n scanCount,\n scanJobContent,\n adfAutoScanConfig.directoryConfig.filePattern,\n date,\n );\n displayPdfScan(pdfFilePath, scanJobContent);\n } else {\n displayJpegScan(scanJobContent);\n }\n}\n\nexport async function waitAdfLoaded(\n pollingInterval: number,\n startScanDelay: number,\n) {\n let ready = false;\n while (!ready) {\n let scanStatus: ScanStatus = await HPApi.getScanStatus();\n while (!scanStatus.isLoaded()) {\n await delay(pollingInterval);\n scanStatus = await HPApi.getScanStatus();\n }\n console.log(`ADF load detected`);\n\n let loaded = true;\n let counter = 0;\n const shortPollingInterval = 500;\n while (loaded && counter < startScanDelay) {\n await delay(shortPollingInterval);\n scanStatus = await HPApi.getScanStatus();\n loaded = scanStatus.isLoaded();\n counter += shortPollingInterval;\n }\n\n if (loaded && counter >= startScanDelay) {\n ready = true;\n console.log(`ADF still loaded, proceeding`);\n } else {\n console.log(`ADF not loaded anymore, waiting...`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"scanProcessing.js","sourceRoot":"","sources":["../src/scanProcessing.ts"],"names":[],"mappings":"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","sourcesContent":["import Event from \"./Event\";\nimport WalkupScanDestination from \"./WalkupScanDestination\";\nimport WalkupScanToCompDestination from \"./WalkupScanToCompDestination\";\nimport HPApi from \"./HPApi\";\nimport fs from \"fs/promises\";\nimport JpegUtil from \"./JpegUtil\";\nimport { DeviceCapabilities } from \"./DeviceCapabilities\";\nimport { waitForScanEvent, waitScanRequest } from \"./listening\";\nimport ScanJobSettings from \"./ScanJobSettings\";\nimport { ScanContent, ScanPage } from \"./ScanContent\";\nimport Job from \"./Job\";\nimport { delay } from \"./delay\";\nimport PathHelper from \"./PathHelper\";\nimport ScanStatus from \"./ScanStatus\";\nimport { InputSource } from \"./InputSource\";\nimport { PaperlessConfig } from \"./paperless/PaperlessConfig\";\nimport { postProcessing } from \"./postProcessing\";\n\nasync function waitDeviceUntilItIsReadyToUploadOrCompleted(\n jobUrl: string,\n): Promise<Job> {\n let job = null;\n let isReadyToUpload = false;\n do {\n job = await HPApi.getJob(jobUrl);\n if (job.jobState === \"Canceled\") {\n return job;\n } else if (\n job.pageState === \"ReadyToUpload\" ||\n job.jobState === \"Completed\"\n ) {\n isReadyToUpload = true;\n } else if (job.jobState == \"Processing\") {\n isReadyToUpload = false;\n } else {\n console.log(`Unknown jobState: ${job.jobState}`);\n }\n await delay(300);\n } while (!isReadyToUpload);\n return job;\n}\n\nasync function tryGetDestination(\n event: Event,\n): Promise<WalkupScanDestination | WalkupScanToCompDestination | null> {\n //this code can in some cases be executed before the user actually chooses between Document or Photo\n //so lets fetch the contentType (Document or Photo) until we get a value\n let destination: WalkupScanDestination | WalkupScanToCompDestination | null =\n null;\n\n for (let i = 0; i < 20; i++) {\n const destinationURI = event.destinationURI;\n if (destinationURI) {\n destination = await HPApi.getDestination(destinationURI);\n\n const shortcut = destination.shortcut;\n if (shortcut != null) {\n return destination;\n }\n } else {\n console.log(`No destination URI found`);\n }\n\n console.log(`No shortcut yet available, attempt: ${i + 1}/20`);\n await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s\n }\n\n console.log(\"Failing to detect destination shortcut\");\n console.log(JSON.stringify(destination));\n return null;\n}\n\nasync function scanProcessing(filePath: string): Promise<number | null> {\n const buffer: Buffer = await fs.readFile(filePath);\n\n const height = JpegUtil.fixSizeWithDNL(buffer);\n if (height != null) {\n // rewrite the fixed file\n await fs.writeFile(filePath, buffer);\n return height;\n }\n return null;\n}\n\nfunction createScanPage(\n job: Job,\n currentPageNumber: number,\n filePath: string,\n sizeFixed: number | null,\n): ScanPage {\n const height = sizeFixed ?? job.imageHeight;\n return {\n path: filePath,\n pageNumber: currentPageNumber,\n width: job.imageWidth ?? 0,\n height: height ?? 0,\n xResolution: job.xResolution ?? 200,\n yResolution: job.yResolution ?? 200,\n };\n}\n\nasync function handleScanProcessingState(\n job: Job,\n inputSource: InputSource,\n folder: string,\n scanCount: number,\n currentPageNumber: number,\n filePattern: string | undefined,\n date: Date,\n): Promise<ScanPage | null> {\n if (\n job.pageState == \"ReadyToUpload\" &&\n job.binaryURL != null &&\n job.currentPageNumber != null\n ) {\n console.log(\n `Ready to download page job page ${job.currentPageNumber} at:`,\n job.binaryURL,\n );\n\n const destinationFilePath = PathHelper.getFileForPage(\n folder,\n scanCount,\n currentPageNumber,\n filePattern,\n \"jpg\",\n date,\n );\n const filePath = await HPApi.downloadPage(\n job.binaryURL,\n destinationFilePath,\n );\n console.log(\"Page downloaded to:\", filePath);\n\n let sizeFixed: null | number = null;\n if (inputSource == InputSource.Adf) {\n sizeFixed = await scanProcessing(filePath);\n if (sizeFixed == null) {\n console.log(\n `File size has not been fixed, DNF may not have been found and approximate height is: ${job.imageHeight}`,\n );\n }\n }\n return createScanPage(job, currentPageNumber, filePath, sizeFixed);\n } else {\n console.log(`Unknown pageState: ${job.pageState}`);\n await delay(200);\n return null;\n }\n}\n\nasync function executeScanJob(\n scanJobSettings: ScanJobSettings,\n inputSource: InputSource,\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n filePattern: string | undefined,\n): Promise<\"Completed\" | \"Canceled\"> {\n const jobUrl = await HPApi.postJob(scanJobSettings);\n\n console.log(\"New job created:\", jobUrl);\n\n let job = await HPApi.getJob(jobUrl);\n while (job.jobState !== \"Completed\") {\n job = await waitDeviceUntilItIsReadyToUploadOrCompleted(jobUrl);\n\n if (job.jobState == \"Completed\") {\n continue;\n }\n\n if (job.jobState === \"Processing\") {\n const page = await handleScanProcessingState(\n job,\n inputSource,\n folder,\n scanCount,\n scanJobContent.elements.length + 1,\n filePattern,\n new Date(),\n );\n job = await HPApi.getJob(jobUrl);\n if (page != null && job.jobState != \"Canceled\") {\n scanJobContent.elements.push(page);\n }\n } else if (job.jobState === \"Canceled\") {\n console.log(\"Job cancelled by device\");\n break;\n } else {\n console.log(`Unhandled jobState: ${job.jobState}`);\n await delay(200);\n }\n }\n console.log(\n `Job state: ${job.jobState}, totalPages: ${scanJobContent.elements.length}:`,\n );\n return job.jobState;\n}\n\nasync function waitScanNewPageRequest(compEventURI: string): Promise<boolean> {\n let startNewScanJob = false;\n let wait = true;\n while (wait) {\n await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s\n\n const walkupScanToCompEvent =\n await HPApi.getWalkupScanToCompEvent(compEventURI);\n const message = walkupScanToCompEvent.eventType;\n\n if (message === \"ScanNewPageRequested\") {\n startNewScanJob = true;\n wait = false;\n } else if (message === \"ScanPagesComplete\") {\n wait = false;\n } else if (message === \"ScanRequested\") {\n // continue waiting\n } else {\n wait = false;\n console.log(`Unknown eventType: ${message}`);\n }\n }\n return startNewScanJob;\n}\n\nasync function executeScanJobs(\n scanJobSettings: ScanJobSettings,\n inputSource: InputSource,\n folder: string,\n scanCount: number,\n scanJobContent: ScanContent,\n firstEvent: Event,\n deviceCapabilities: DeviceCapabilities,\n filePattern: string | undefined,\n) {\n let jobState = await executeScanJob(\n scanJobSettings,\n inputSource,\n folder,\n scanCount,\n scanJobContent,\n filePattern,\n );\n let lastEvent = firstEvent;\n if (\n jobState === \"Completed\" &&\n lastEvent.compEventURI &&\n inputSource !== InputSource.Adf &&\n lastEvent.destinationURI &&\n deviceCapabilities.supportsMultiItemScanFromPlaten\n ) {\n lastEvent = await waitForScanEvent(\n lastEvent.destinationURI,\n lastEvent.agingStamp,\n );\n if (!lastEvent.compEventURI) {\n return;\n }\n let startNewScanJob = await waitScanNewPageRequest(lastEvent.compEventURI);\n while (startNewScanJob) {\n jobState = await executeScanJob(\n scanJobSettings,\n inputSource,\n folder,\n scanCount,\n scanJobContent,\n filePattern,\n );\n if (jobState !== \"Completed\") {\n return;\n }\n if (!lastEvent.destinationURI) {\n break;\n }\n lastEvent = await waitForScanEvent(\n lastEvent.destinationURI,\n lastEvent.agingStamp,\n );\n if (!lastEvent.compEventURI) {\n return;\n }\n startNewScanJob = await waitScanNewPageRequest(lastEvent.compEventURI);\n }\n }\n}\n\nfunction isPdf(\n destination: WalkupScanDestination | WalkupScanToCompDestination,\n) {\n if (\n destination.shortcut === \"SavePDF\" ||\n destination.shortcut === \"EmailPDF\" ||\n destination.shortcut == \"SaveDocument1\"\n ) {\n return true;\n } else if (\n destination.shortcut === \"SaveJPEG\" ||\n destination.shortcut === \"SavePhoto1\"\n ) {\n return false;\n } else {\n console.log(\n `Unexpected shortcut received: ${destination.shortcut}, considering it as non pdf target!`,\n );\n return false;\n }\n}\n\nexport function getScanWidth(\n scanConfig: ScanConfig,\n inputSource: InputSource,\n deviceCapabilities: DeviceCapabilities,\n): number | null {\n if (scanConfig.width && scanConfig.width > 0) {\n const maxWidth =\n inputSource === InputSource.Adf\n ? deviceCapabilities.adfMaxWidth\n : deviceCapabilities.platenMaxWidth;\n\n if (maxWidth && scanConfig.width > maxWidth) {\n return maxWidth;\n } else {\n return scanConfig.width;\n }\n } else {\n return inputSource === InputSource.Adf\n ? deviceCapabilities.adfMaxWidth\n : deviceCapabilities.platenMaxWidth;\n }\n}\n\nexport function getScanHeight(\n scanConfig: ScanConfig,\n inputSource: InputSource,\n deviceCapabilities: DeviceCapabilities,\n): number | null {\n if (scanConfig.height && scanConfig.height > 0) {\n const maxHeight =\n inputSource === InputSource.Adf\n ? deviceCapabilities.adfMaxHeight\n : deviceCapabilities.platenMaxHeight;\n\n if (maxHeight && scanConfig.height > maxHeight) {\n return maxHeight;\n } else {\n return scanConfig.height;\n }\n } else {\n return inputSource === InputSource.Adf\n ? deviceCapabilities.adfMaxHeight\n : deviceCapabilities.platenMaxHeight;\n }\n}\n\nexport async function saveScanFromEvent(\n event: Event,\n folder: string,\n tempFolder: string,\n scanCount: number,\n deviceCapabilities: DeviceCapabilities,\n scanConfig: ScanConfig,\n): Promise<void> {\n if (event.compEventURI) {\n const proceedToScan = await waitScanRequest(event.compEventURI);\n if (!proceedToScan) {\n return;\n }\n }\n\n const destination = await tryGetDestination(event);\n if (!destination) {\n console.log(\"No shortcut selected!\");\n return;\n }\n console.log(\"Selected shortcut: \" + destination.shortcut);\n\n let toPdf: boolean;\n let destinationFolder: string;\n let contentType: \"Document\" | \"Photo\";\n if (isPdf(destination)) {\n toPdf = true;\n contentType = \"Document\";\n destinationFolder = tempFolder;\n console.log(\n `Scan will be converted to pdf, using ${destinationFolder} as temp scan output directory for individual pages`,\n );\n } else {\n toPdf = false;\n contentType = \"Photo\";\n destinationFolder = folder;\n }\n\n const isDuplex =\n destination.scanPlexMode != null && destination.scanPlexMode != \"Simplex\";\n console.log(\"ScanPlexMode is : \" + destination.scanPlexMode);\n\n const scanStatus = await HPApi.getScanStatus();\n\n if (scanStatus.scannerState !== \"Idle\") {\n console.log(\"Scanner state is not Idle, aborting scan attempt...!\");\n }\n\n console.log(\"Afd is : \" + scanStatus.adfState);\n\n const inputSource = scanStatus.getInputSource();\n const scanWidth = getScanWidth(scanConfig, inputSource, deviceCapabilities);\n const scanHeight = getScanHeight(scanConfig, inputSource, deviceCapabilities);\n\n const scanJobSettings = new ScanJobSettings(\n inputSource,\n contentType,\n scanConfig.resolution,\n scanWidth,\n scanHeight,\n isDuplex,\n );\n\n const scanJobContent: ScanContent = { elements: [] };\n\n const scanDate = new Date();\n\n await executeScanJobs(\n scanJobSettings,\n inputSource,\n destinationFolder,\n scanCount,\n scanJobContent,\n event,\n deviceCapabilities,\n scanConfig.directoryConfig.filePattern,\n );\n\n console.log(\n `Scan of page(s) completed totalPages: ${scanJobContent.elements.length}:`,\n );\n await postProcessing(\n scanConfig,\n folder,\n tempFolder,\n scanCount,\n scanJobContent,\n scanDate,\n toPdf,\n );\n}\n\nexport type DirectoryConfig = {\n directory: string | undefined;\n tempDirectory: string | undefined;\n filePattern: string | undefined;\n};\n\nexport type ScanConfig = {\n resolution: number;\n width: number | null;\n height: number | null;\n directoryConfig: DirectoryConfig;\n paperlessConfig: PaperlessConfig | undefined;\n};\nexport type AdfAutoScanConfig = ScanConfig & {\n isDuplex: boolean;\n generatePdf: boolean;\n pollingInterval: number;\n startScanDelay: number;\n};\n\nexport type SingleScanConfig = ScanConfig & {\n isDuplex: boolean;\n generatePdf: boolean;\n};\n\nexport async function scanFromAdf(\n scanCount: number,\n folder: string,\n tempFolder: string,\n adfAutoScanConfig: AdfAutoScanConfig,\n deviceCapabilities: DeviceCapabilities,\n date: Date,\n) {\n let destinationFolder: string;\n let contentType: \"Document\" | \"Photo\";\n if (adfAutoScanConfig.generatePdf) {\n contentType = \"Document\";\n destinationFolder = tempFolder;\n console.log(\n `Scan will be converted to pdf, using ${destinationFolder} as temp scan output directory for individual pages`,\n );\n } else {\n contentType = \"Photo\";\n destinationFolder = folder;\n }\n\n const scanWidth = getScanWidth(\n adfAutoScanConfig,\n InputSource.Adf,\n deviceCapabilities,\n );\n const scanHeight = getScanHeight(\n adfAutoScanConfig,\n InputSource.Adf,\n deviceCapabilities,\n );\n\n const scanJobSettings = new ScanJobSettings(\n InputSource.Adf,\n contentType,\n adfAutoScanConfig.resolution,\n scanWidth,\n scanHeight,\n adfAutoScanConfig.isDuplex,\n );\n\n const scanJobContent: ScanContent = { elements: [] };\n\n await executeScanJob(\n scanJobSettings,\n InputSource.Adf,\n destinationFolder,\n scanCount,\n scanJobContent,\n adfAutoScanConfig.directoryConfig.filePattern,\n );\n\n console.log(\n `Scan of page(s) completed, total pages: ${scanJobContent.elements.length}:`,\n );\n\n await postProcessing(\n adfAutoScanConfig,\n folder,\n tempFolder,\n scanCount,\n scanJobContent,\n date,\n adfAutoScanConfig.generatePdf,\n );\n}\n\nexport async function waitAdfLoaded(\n pollingInterval: number,\n startScanDelay: number,\n) {\n let ready = false;\n while (!ready) {\n let scanStatus: ScanStatus = await HPApi.getScanStatus();\n while (!scanStatus.isLoaded()) {\n await delay(pollingInterval);\n scanStatus = await HPApi.getScanStatus();\n }\n console.log(`ADF load detected`);\n\n let loaded = true;\n let counter = 0;\n const shortPollingInterval = 500;\n while (loaded && counter < startScanDelay) {\n await delay(shortPollingInterval);\n scanStatus = await HPApi.getScanStatus();\n loaded = scanStatus.isLoaded();\n counter += shortPollingInterval;\n }\n\n if (loaded && counter >= startScanDelay) {\n ready = true;\n console.log(`ADF still loaded, proceeding`);\n } else {\n console.log(`ADF not loaded anymore, waiting...`);\n }\n }\n}\n"]}
|
|
@@ -74,7 +74,7 @@ const now = new Date();
|
|
|
74
74
|
});
|
|
75
75
|
it("return another two conflict", async () => {
|
|
76
76
|
const folder = await PathHelper_1.default.getOutputFolder();
|
|
77
|
-
|
|
77
|
+
const filePath = path_1.default.join(folder, "someFolder.pdf");
|
|
78
78
|
fs_1.default.openSync(filePath, "w");
|
|
79
79
|
const another = PathHelper_1.default.makeUnique(filePath, now);
|
|
80
80
|
fs_1.default.openSync(another, "w");
|
|
@@ -84,7 +84,7 @@ const now = new Date();
|
|
|
84
84
|
});
|
|
85
85
|
it("conflict resolution terminate with error", async () => {
|
|
86
86
|
const folder = await PathHelper_1.default.getOutputFolder();
|
|
87
|
-
|
|
87
|
+
const filePath = path_1.default.join(folder, "someFolder.pdf");
|
|
88
88
|
fs_1.default.openSync(filePath, "w");
|
|
89
89
|
(0, chai_1.expect)(() => {
|
|
90
90
|
for (let i = 0; i < 50; ++i) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PathHelper.test.js","sourceRoot":"","sources":["../../test/PathHelper.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe } from \"mocha\";\nimport { expect } from \"chai\";\nimport chai from \"chai\";\nimport chaiString from \"chai-string\";\nimport PathHelper from \"../src/PathHelper\";\nimport fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\nchai.use(chaiString);\n\nconst now: Date = new Date();\n\ndescribe(\"PathHelper\", () => {\n describe(\"getFileForPage\", () => {\n it(\"Can format a file with formatted timestamp\", async () => {\n const nextFileName = PathHelper.getFileForPage(\n \"someFolder\",\n 2,\n 1,\n '\"scan\"_dd.mm.yyyy_HH:MM:ss',\n \"jpg\",\n now,\n );\n expect(nextFileName).to.be.eq(\n `someFolder${path.sep}scan_${(\"\" + now.getDate()).padStart(2, \"0\")}.${(\n \"\" +\n (now.getMonth() + 1)\n ).padStart(2, \"0\")}.${(\"\" + now.getFullYear()).padStart(4, \"0\")}_${(\n \"\" + now.getHours()\n ).padStart(2, \"0\")}:${(\"\" + now.getMinutes()).padStart(2, \"0\")}:${(\n \"\" + now.getSeconds()\n ).padStart(2, \"0\")}.jpg`,\n );\n });\n it(\"Can format a file based on scan count and page number\", async () => {\n const nextFileName = PathHelper.getFileForPage(\n \"someFolder\",\n 2,\n 1,\n undefined,\n \"jpg\",\n now,\n );\n expect(nextFileName).to.be.eq(`someFolder${path.sep}scan2_page1.jpg`);\n });\n });\n describe(\"getFileForScan\", () => {\n it(\"Can format a file with formatted timestamp\", async () => {\n const nextFileName = PathHelper.getFileForScan(\n \"someFolder\",\n 2,\n '\"scan\"_dd.mm.yyyy_HH:MM:ss',\n \"pdf\",\n now,\n );\n expect(nextFileName).to.be.eq(\n `someFolder${path.sep}scan_${(\"\" + now.getDate()).padStart(2, \"0\")}.${(\n \"\" +\n (now.getMonth() + 1)\n ).padStart(2, \"0\")}.${(\"\" + now.getFullYear()).padStart(4, \"0\")}_${(\n \"\" + now.getHours()\n ).padStart(2, \"0\")}:${(\"\" + now.getMinutes()).padStart(2, \"0\")}:${(\n \"\" + now.getSeconds()\n ).padStart(2, \"0\")}.pdf`,\n );\n });\n it(\"Can format a file based on scan count and page number\", async () => {\n const nextFileName = PathHelper.getFileForScan(\n \"someFolder\",\n 2,\n undefined,\n \"pdf\",\n now,\n );\n expect(nextFileName).to.be.eq(`someFolder${path.sep}scan2.pdf`);\n });\n });\n describe(\"getOutputFolder\", () => {\n describe(\"A folder given\", () => {\n it(\"it is returned\", async () => {\n const folder = await PathHelper.getOutputFolder(\"someFolder\");\n expect(folder).to.be.eq(\"someFolder\");\n });\n });\n describe(\"No folder given\", () => {\n it(\"it return a temp folder\", async () => {\n const folder = await PathHelper.getOutputFolder();\n expect(folder).to.startWith(os.tmpdir());\n });\n it(\"it return a folder that exist\", async () => {\n const folder = await PathHelper.getOutputFolder();\n expect(fs.existsSync(folder)).to.be.true;\n });\n it(\"it return a different folder for every call\", async () => {\n const folder = await PathHelper.getOutputFolder();\n expect(folder).to.be.not.eq(await PathHelper.getOutputFolder());\n });\n });\n });\n describe(\"makeUnique\", () => {\n it(\"return the file if it does not exist first\", async () => {\n const folder = await PathHelper.getOutputFolder();\n const filePath = path.join(folder, \"someFolder.pdf\");\n\n const uniqueFile = PathHelper.makeUnique(filePath, now);\n\n expect(filePath).to.be.eq(uniqueFile);\n });\n\n it(\"return another file in case of conflict\", async () => {\n const folder = await PathHelper.getOutputFolder();\n const filePath = path.join(folder, \"someFolder.pdf\");\n fs.openSync(filePath, \"w\");\n\n const uniqueFile = PathHelper.makeUnique(filePath, now);\n\n expect(filePath).to.be.not.eq(uniqueFile);\n });\n\n it(\"return another two conflict\", async () => {\n const folder = await PathHelper.getOutputFolder();\n let filePath = path.join(folder, \"someFolder.pdf\");\n fs.openSync(filePath, \"w\");\n const another = PathHelper.makeUnique(filePath, now);\n fs.openSync(another, \"w\");\n\n const uniqueFile = PathHelper.makeUnique(filePath, now);\n\n expect(filePath).to.be.not.eq(uniqueFile);\n expect(another).to.be.not.eq(uniqueFile);\n });\n\n it(\"conflict resolution terminate with error\", async () => {\n const folder = await PathHelper.getOutputFolder();\n let filePath = path.join(folder, \"someFolder.pdf\");\n fs.openSync(filePath, \"w\");\n\n expect(() => {\n for (let i = 0; i < 50; ++i) {\n const another = PathHelper.makeUnique(filePath, now);\n fs.openSync(another, \"w\");\n }\n }).to.throw(/Can not create unique file:/);\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"PathHelper.test.js","sourceRoot":"","sources":["../../test/PathHelper.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe } from \"mocha\";\nimport { expect } from \"chai\";\nimport chai from \"chai\";\nimport chaiString from \"chai-string\";\nimport PathHelper from \"../src/PathHelper\";\nimport fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\nchai.use(chaiString);\n\nconst now: Date = new Date();\n\ndescribe(\"PathHelper\", () => {\n describe(\"getFileForPage\", () => {\n it(\"Can format a file with formatted timestamp\", async () => {\n const nextFileName = PathHelper.getFileForPage(\n \"someFolder\",\n 2,\n 1,\n '\"scan\"_dd.mm.yyyy_HH:MM:ss',\n \"jpg\",\n now,\n );\n expect(nextFileName).to.be.eq(\n `someFolder${path.sep}scan_${(\"\" + now.getDate()).padStart(2, \"0\")}.${(\n \"\" +\n (now.getMonth() + 1)\n ).padStart(2, \"0\")}.${(\"\" + now.getFullYear()).padStart(4, \"0\")}_${(\n \"\" + now.getHours()\n ).padStart(2, \"0\")}:${(\"\" + now.getMinutes()).padStart(2, \"0\")}:${(\n \"\" + now.getSeconds()\n ).padStart(2, \"0\")}.jpg`,\n );\n });\n it(\"Can format a file based on scan count and page number\", async () => {\n const nextFileName = PathHelper.getFileForPage(\n \"someFolder\",\n 2,\n 1,\n undefined,\n \"jpg\",\n now,\n );\n expect(nextFileName).to.be.eq(`someFolder${path.sep}scan2_page1.jpg`);\n });\n });\n describe(\"getFileForScan\", () => {\n it(\"Can format a file with formatted timestamp\", async () => {\n const nextFileName = PathHelper.getFileForScan(\n \"someFolder\",\n 2,\n '\"scan\"_dd.mm.yyyy_HH:MM:ss',\n \"pdf\",\n now,\n );\n expect(nextFileName).to.be.eq(\n `someFolder${path.sep}scan_${(\"\" + now.getDate()).padStart(2, \"0\")}.${(\n \"\" +\n (now.getMonth() + 1)\n ).padStart(2, \"0\")}.${(\"\" + now.getFullYear()).padStart(4, \"0\")}_${(\n \"\" + now.getHours()\n ).padStart(2, \"0\")}:${(\"\" + now.getMinutes()).padStart(2, \"0\")}:${(\n \"\" + now.getSeconds()\n ).padStart(2, \"0\")}.pdf`,\n );\n });\n it(\"Can format a file based on scan count and page number\", async () => {\n const nextFileName = PathHelper.getFileForScan(\n \"someFolder\",\n 2,\n undefined,\n \"pdf\",\n now,\n );\n expect(nextFileName).to.be.eq(`someFolder${path.sep}scan2.pdf`);\n });\n });\n describe(\"getOutputFolder\", () => {\n describe(\"A folder given\", () => {\n it(\"it is returned\", async () => {\n const folder = await PathHelper.getOutputFolder(\"someFolder\");\n expect(folder).to.be.eq(\"someFolder\");\n });\n });\n describe(\"No folder given\", () => {\n it(\"it return a temp folder\", async () => {\n const folder = await PathHelper.getOutputFolder();\n expect(folder).to.startWith(os.tmpdir());\n });\n it(\"it return a folder that exist\", async () => {\n const folder = await PathHelper.getOutputFolder();\n expect(fs.existsSync(folder)).to.be.true;\n });\n it(\"it return a different folder for every call\", async () => {\n const folder = await PathHelper.getOutputFolder();\n expect(folder).to.be.not.eq(await PathHelper.getOutputFolder());\n });\n });\n });\n describe(\"makeUnique\", () => {\n it(\"return the file if it does not exist first\", async () => {\n const folder = await PathHelper.getOutputFolder();\n const filePath = path.join(folder, \"someFolder.pdf\");\n\n const uniqueFile = PathHelper.makeUnique(filePath, now);\n\n expect(filePath).to.be.eq(uniqueFile);\n });\n\n it(\"return another file in case of conflict\", async () => {\n const folder = await PathHelper.getOutputFolder();\n const filePath = path.join(folder, \"someFolder.pdf\");\n fs.openSync(filePath, \"w\");\n\n const uniqueFile = PathHelper.makeUnique(filePath, now);\n\n expect(filePath).to.be.not.eq(uniqueFile);\n });\n\n it(\"return another two conflict\", async () => {\n const folder = await PathHelper.getOutputFolder();\n const filePath = path.join(folder, \"someFolder.pdf\");\n fs.openSync(filePath, \"w\");\n const another = PathHelper.makeUnique(filePath, now);\n fs.openSync(another, \"w\");\n\n const uniqueFile = PathHelper.makeUnique(filePath, now);\n\n expect(filePath).to.be.not.eq(uniqueFile);\n expect(another).to.be.not.eq(uniqueFile);\n });\n\n it(\"conflict resolution terminate with error\", async () => {\n const folder = await PathHelper.getOutputFolder();\n const filePath = path.join(folder, \"someFolder.pdf\");\n fs.openSync(filePath, \"w\");\n\n expect(() => {\n for (let i = 0; i < 50; ++i) {\n const another = PathHelper.makeUnique(filePath, now);\n fs.openSync(another, \"w\");\n }\n }).to.throw(/Can not create unique file:/);\n });\n });\n});\n"]}
|
|
@@ -72,5 +72,25 @@ const ScanCaps_1 = __importDefault(require("../src/ScanCaps"));
|
|
|
72
72
|
(0, chai_1.expect)(scanCaps.platenMaxHeight).to.be.eq(3508);
|
|
73
73
|
});
|
|
74
74
|
});
|
|
75
|
+
(0, mocha_1.describe)("Parsing ScanCaps_only_adf.xml", async () => {
|
|
76
|
+
let scanCaps;
|
|
77
|
+
before(async () => {
|
|
78
|
+
const content = await fs.readFile(path_1.default.resolve(__dirname, "./asset/ScanCaps_only_adf.xml"), { encoding: "utf8" } //
|
|
79
|
+
);
|
|
80
|
+
scanCaps = await ScanCaps_1.default.createScanCaps(content);
|
|
81
|
+
});
|
|
82
|
+
it("AdfMaxWidth", async () => {
|
|
83
|
+
(0, chai_1.expect)(scanCaps.adfMaxWidth).to.be.eq(2550);
|
|
84
|
+
});
|
|
85
|
+
it("AdfMaxHeight", async () => {
|
|
86
|
+
(0, chai_1.expect)(scanCaps.adfMaxHeight).to.be.eq(5100);
|
|
87
|
+
});
|
|
88
|
+
it("PlatenMaxWidth", async () => {
|
|
89
|
+
(0, chai_1.expect)(scanCaps.platenMaxWidth).to.be.eq(null);
|
|
90
|
+
});
|
|
91
|
+
it("PlatenMaxHeight", async () => {
|
|
92
|
+
(0, chai_1.expect)(scanCaps.platenMaxHeight).to.be.eq(null);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
75
95
|
});
|
|
76
96
|
//# sourceMappingURL=ScanCaps.test.js.map
|