node-hp-scan-to 1.3.0 → 1.4.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 +76 -15
- package/dist/Destination.js.map +1 -1
- package/dist/DeviceCapabilities.d.ts +4 -0
- package/dist/DeviceCapabilities.js.map +1 -1
- package/dist/DiscoveryTree.js.map +1 -1
- package/dist/Event.js +2 -2
- package/dist/Event.js.map +1 -1
- package/dist/EventTable.js.map +1 -1
- package/dist/HPApi.js.map +1 -1
- package/dist/InputSource.d.ts +4 -0
- package/dist/InputSource.js +9 -0
- package/dist/InputSource.js.map +1 -0
- package/dist/Job.d.ts +2 -0
- package/dist/Job.js +2 -2
- package/dist/Job.js.map +1 -1
- package/dist/JpegUtil.js +1 -1
- package/dist/JpegUtil.js.map +1 -1
- package/dist/PathHelper.d.ts +4 -3
- package/dist/PathHelper.js +28 -13
- package/dist/PathHelper.js.map +1 -1
- package/dist/ScanCaps.d.ts +18 -0
- package/dist/ScanCaps.js +14 -0
- package/dist/ScanCaps.js.map +1 -1
- package/dist/ScanContent.js.map +1 -1
- package/dist/ScanJobManifest.js.map +1 -1
- package/dist/ScanJobSettings.d.ts +4 -1
- package/dist/ScanJobSettings.js +19 -8
- package/dist/ScanJobSettings.js.map +1 -1
- package/dist/ScanStatus.d.ts +2 -1
- package/dist/ScanStatus.js +3 -2
- package/dist/ScanStatus.js.map +1 -1
- package/dist/WalkupScanDestination.js +2 -2
- 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/WalkupScanToCompCaps.js.map +1 -1
- package/dist/WalkupScanToCompDestination.js +2 -2
- package/dist/WalkupScanToCompDestination.js.map +1 -1
- package/dist/WalkupScanToCompDestinations.js +1 -1
- package/dist/WalkupScanToCompDestinations.js.map +1 -1
- package/dist/WalkupScanToCompEvent.js.map +1 -1
- package/dist/WalkupScanToCompManifest.js.map +1 -1
- package/dist/index.js +28 -7
- package/dist/index.js.map +1 -1
- package/dist/listening.js.map +1 -1
- package/dist/readDeviceCapabilities.js +6 -1
- package/dist/readDeviceCapabilities.js.map +1 -1
- package/dist/scanProcessing.d.ts +5 -1
- package/dist/scanProcessing.js +61 -21
- package/dist/scanProcessing.js.map +1 -1
- package/package.json +7 -7
- package/src/Destination.ts +1 -1
- package/src/DeviceCapabilities.ts +4 -0
- package/src/DiscoveryTree.ts +1 -1
- package/src/Event.ts +4 -4
- package/src/EventTable.ts +1 -1
- package/src/HPApi.ts +19 -19
- package/src/InputSource.ts +4 -0
- package/src/Job.ts +19 -7
- package/src/JpegUtil.ts +18 -14
- package/src/PathHelper.ts +48 -20
- package/src/ScanCaps.ts +43 -1
- package/src/ScanContent.ts +1 -1
- package/src/ScanJobManifest.ts +3 -2
- package/src/ScanJobSettings.ts +23 -9
- package/src/ScanStatus.ts +6 -3
- package/src/WalkupScanDestination.ts +9 -5
- package/src/WalkupScanDestinations.ts +9 -4
- package/src/WalkupScanManifest.ts +3 -3
- package/src/WalkupScanToCompCaps.ts +2 -2
- package/src/WalkupScanToCompDestination.ts +15 -5
- package/src/WalkupScanToCompDestinations.ts +5 -4
- package/src/WalkupScanToCompEvent.ts +1 -1
- package/src/WalkupScanToCompManifest.ts +3 -3
- package/src/index.ts +92 -35
- package/src/listening.ts +14 -15
- package/src/readDeviceCapabilities.ts +12 -6
- package/src/scanProcessing.ts +129 -52
- package/dist/fixJpegSize.d.ts +0 -19
- package/dist/fixJpegSize.js +0 -292
- package/dist/fixJpegSize.js.map +0 -1
- package/dist/scanProcess.d.ts +0 -19
- package/dist/scanProcess.js +0 -292
- package/dist/scanProcess.js.map +0 -1
- package/dist/src/Destination.d.ts +0 -8
- package/dist/src/Destination.js +0 -68
- package/dist/src/Destination.js.map +0 -1
- package/dist/src/DiscoveryTree.d.ts +0 -16
- package/dist/src/DiscoveryTree.js +0 -38
- package/dist/src/DiscoveryTree.js.map +0 -1
- package/dist/src/Event.d.ts +0 -21
- package/dist/src/Event.js +0 -32
- package/dist/src/Event.js.map +0 -1
- package/dist/src/EventTable.d.ts +0 -16
- package/dist/src/EventTable.js +0 -33
- package/dist/src/EventTable.js.map +0 -1
- package/dist/src/HPApi.d.ts +0 -50
- package/dist/src/HPApi.js +0 -454
- package/dist/src/HPApi.js.map +0 -1
- package/dist/src/Job.d.ts +0 -37
- package/dist/src/Job.js +0 -78
- package/dist/src/Job.js.map +0 -1
- package/dist/src/JpegUtil.d.ts +0 -26
- package/dist/src/JpegUtil.js +0 -229
- package/dist/src/JpegUtil.js.map +0 -1
- package/dist/src/KnownShortcut.d.ts +0 -1
- package/dist/src/KnownShortcut.js +0 -3
- package/dist/src/KnownShortcut.js.map +0 -1
- package/dist/src/PathHelper.d.ts +0 -6
- package/dist/src/PathHelper.js +0 -52
- package/dist/src/PathHelper.js.map +0 -1
- package/dist/src/ScanCaps.d.ts +0 -7
- package/dist/src/ScanCaps.js +0 -17
- package/dist/src/ScanCaps.js.map +0 -1
- package/dist/src/ScanJobManifest.d.ts +0 -23
- package/dist/src/ScanJobManifest.js +0 -24
- package/dist/src/ScanJobManifest.js.map +0 -1
- package/dist/src/ScanJobSettings.d.ts +0 -8
- package/dist/src/ScanJobSettings.js +0 -56
- package/dist/src/ScanJobSettings.js.map +0 -1
- package/dist/src/ScanStatus.d.ts +0 -19
- package/dist/src/ScanStatus.js +0 -35
- package/dist/src/ScanStatus.js.map +0 -1
- package/dist/src/WalkupScanDestination.d.ts +0 -22
- package/dist/src/WalkupScanDestination.js +0 -38
- package/dist/src/WalkupScanDestination.js.map +0 -1
- package/dist/src/WalkupScanDestinations.d.ts +0 -12
- package/dist/src/WalkupScanDestinations.js +0 -30
- package/dist/src/WalkupScanDestinations.js.map +0 -1
- package/dist/src/WalkupScanManifest.d.ts +0 -23
- package/dist/src/WalkupScanManifest.js +0 -25
- package/dist/src/WalkupScanManifest.js.map +0 -1
- package/dist/src/WalkupScanToCompCaps.d.ts +0 -12
- package/dist/src/WalkupScanToCompCaps.js +0 -20
- package/dist/src/WalkupScanToCompCaps.js.map +0 -1
- package/dist/src/WalkupScanToCompDestination.d.ts +0 -22
- package/dist/src/WalkupScanToCompDestination.js +0 -38
- package/dist/src/WalkupScanToCompDestination.js.map +0 -1
- package/dist/src/WalkupScanToCompDestinations.d.ts +0 -12
- package/dist/src/WalkupScanToCompDestinations.js +0 -30
- package/dist/src/WalkupScanToCompDestinations.js.map +0 -1
- package/dist/src/WalkupScanToCompEvent.d.ts +0 -11
- package/dist/src/WalkupScanToCompEvent.js +0 -20
- package/dist/src/WalkupScanToCompEvent.js.map +0 -1
- package/dist/src/WalkupScanToCompManifest.d.ts +0 -23
- package/dist/src/WalkupScanToCompManifest.js +0 -25
- package/dist/src/WalkupScanToCompManifest.js.map +0 -1
- package/dist/src/delay.d.ts +0 -1
- package/dist/src/delay.js +0 -10
- package/dist/src/delay.js.map +0 -1
- package/dist/test/DiscoveryTree.test.d.ts +0 -1
- package/dist/test/DiscoveryTree.test.js +0 -68
- package/dist/test/DiscoveryTree.test.js.map +0 -1
- package/dist/test/EtagEventTable.test.d.ts +0 -1
- package/dist/test/EtagEventTable.test.js +0 -93
- package/dist/test/EtagEventTable.test.js.map +0 -1
- package/dist/test/Job.test.d.ts +0 -1
- package/dist/test/Job.test.js +0 -104
- package/dist/test/Job.test.js.map +0 -1
- package/dist/test/JpegUtil.test.d.ts +0 -1
- package/dist/test/JpegUtil.test.js +0 -51
- package/dist/test/JpegUtil.test.js.map +0 -1
- package/dist/test/PathHelper.test.d.ts +0 -1
- package/dist/test/PathHelper.test.js +0 -99
- package/dist/test/PathHelper.test.js.map +0 -1
- package/dist/test/ScanJobManifest.test.d.ts +0 -1
- package/dist/test/ScanJobManifest.test.js +0 -56
- package/dist/test/ScanJobManifest.test.js.map +0 -1
- package/dist/test/ScanJobSettings.test.d.ts +0 -1
- package/dist/test/ScanJobSettings.test.js +0 -53
- package/dist/test/ScanJobSettings.test.js.map +0 -1
- package/dist/test/ScanStatus.test.d.ts +0 -1
- package/dist/test/ScanStatus.test.js +0 -75
- package/dist/test/ScanStatus.test.js.map +0 -1
- package/dist/test/WalkupScanDestination.test.d.ts +0 -1
- package/dist/test/WalkupScanDestination.test.js +0 -80
- package/dist/test/WalkupScanDestination.test.js.map +0 -1
- package/dist/test/WalkupScanDestinations.test.d.ts +0 -1
- package/dist/test/WalkupScanDestinations.test.js +0 -68
- package/dist/test/WalkupScanDestinations.test.js.map +0 -1
- package/dist/test/WalkupScanManifest.test.d.ts +0 -1
- package/dist/test/WalkupScanManifest.test.js +0 -46
- package/dist/test/WalkupScanManifest.test.js.map +0 -1
- package/dist/test/WalkupScanToCompCaps.test.d.ts +0 -1
- package/dist/test/WalkupScanToCompCaps.test.js +0 -56
- package/dist/test/WalkupScanToCompCaps.test.js.map +0 -1
- package/dist/test/WalkupScanToCompDestination.test.d.ts +0 -1
- package/dist/test/WalkupScanToCompDestination.test.js +0 -58
- package/dist/test/WalkupScanToCompDestination.test.js.map +0 -1
- package/dist/test/WalkupScanToCompDestinations.test.d.ts +0 -1
- package/dist/test/WalkupScanToCompDestinations.test.js +0 -58
- package/dist/test/WalkupScanToCompDestinations.test.js.map +0 -1
- package/dist/test/WalkupScanToCompEvent.test.d.ts +0 -1
- package/dist/test/WalkupScanToCompEvent.test.js +0 -46
- package/dist/test/WalkupScanToCompEvent.test.js.map +0 -1
- package/dist/test/WalkupScanToCompManifest.test.d.ts +0 -1
- package/dist/test/WalkupScanToCompManifest.test.js +0 -46
- package/dist/test/WalkupScanToCompManifest.test.js.map +0 -1
- package/dist/test/clean.d.ts +0 -1
- package/dist/test/clean.js +0 -21
- package/dist/test/clean.js.map +0 -1
package/dist/src/JpegUtil.js
DELETED
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
let debug = false;
|
|
4
|
-
const start_of_Frame_0 = "FFC0";
|
|
5
|
-
const define_number_of_lines = "FFDC";
|
|
6
|
-
class JpegUtil {
|
|
7
|
-
static setDebug(dbg) {
|
|
8
|
-
debug = dbg;
|
|
9
|
-
}
|
|
10
|
-
static logDebug(msg) {
|
|
11
|
-
if (debug) {
|
|
12
|
-
console.log(msg);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
static numToHex(s) {
|
|
16
|
-
return s.toString(16).padStart(2, "0").toUpperCase();
|
|
17
|
-
}
|
|
18
|
-
static GetJpgSize(buffer) {
|
|
19
|
-
let size = null;
|
|
20
|
-
this.parse(buffer, {
|
|
21
|
-
[start_of_Frame_0]: (start, length) => {
|
|
22
|
-
// read the the "Start of frame" marker which contains the file size
|
|
23
|
-
if (6 < length) {
|
|
24
|
-
const pHeight = buffer[start + 3] * 256 + buffer[start + 4];
|
|
25
|
-
const pWidth = buffer[start + 5] * 256 + buffer[start + 6];
|
|
26
|
-
size = { height: pHeight, width: pWidth };
|
|
27
|
-
}
|
|
28
|
-
// stop processing
|
|
29
|
-
return true;
|
|
30
|
-
},
|
|
31
|
-
});
|
|
32
|
-
return size;
|
|
33
|
-
}
|
|
34
|
-
static setJpgSize(buffer, size) {
|
|
35
|
-
let sizeWritten = false;
|
|
36
|
-
const parsingSucceed = this.parse(buffer, {
|
|
37
|
-
[start_of_Frame_0]: (start, length) => {
|
|
38
|
-
// read the the "Start of frame" marker which contains the file size
|
|
39
|
-
// write the picture size
|
|
40
|
-
if (6 < length) {
|
|
41
|
-
const height = Buffer.from([0x00, 0x00]);
|
|
42
|
-
height.writeInt16BE(size.height);
|
|
43
|
-
buffer[start + 3] = height[0];
|
|
44
|
-
buffer[start + 4] = height[1];
|
|
45
|
-
const width = Buffer.from([0x00, 0x00]);
|
|
46
|
-
width.writeInt16BE(size.width);
|
|
47
|
-
buffer[start + 5] = width[0];
|
|
48
|
-
buffer[start + 6] = width[1];
|
|
49
|
-
sizeWritten = true;
|
|
50
|
-
}
|
|
51
|
-
// stop processing
|
|
52
|
-
return true;
|
|
53
|
-
},
|
|
54
|
-
});
|
|
55
|
-
if (!parsingSucceed) {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
return sizeWritten;
|
|
59
|
-
}
|
|
60
|
-
static setJpgHeight(buffer, height) {
|
|
61
|
-
let heightWritten = false;
|
|
62
|
-
const parsingSucceed = this.parse(buffer, {
|
|
63
|
-
[start_of_Frame_0]: (start, length) => {
|
|
64
|
-
// read the the "Start of frame" marker which contains the file size
|
|
65
|
-
// write the picture size
|
|
66
|
-
heightWritten = this.writeHeightInStartOfFrame(buffer, start, length, height);
|
|
67
|
-
// stop processing
|
|
68
|
-
return true;
|
|
69
|
-
},
|
|
70
|
-
});
|
|
71
|
-
if (!parsingSucceed) {
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
return heightWritten;
|
|
75
|
-
}
|
|
76
|
-
static fixSizeWithDNL(buffer) {
|
|
77
|
-
let numberOfLine = null;
|
|
78
|
-
let startOfStartOfFrame = null;
|
|
79
|
-
let lengthOfStartOfFrame = null;
|
|
80
|
-
this.parse(buffer, {
|
|
81
|
-
[define_number_of_lines]: (start, length) => {
|
|
82
|
-
numberOfLine = this.readNumberOfLineFromDNL(buffer, start, length);
|
|
83
|
-
return false; // don't stop
|
|
84
|
-
},
|
|
85
|
-
[start_of_Frame_0]: (start, length) => {
|
|
86
|
-
startOfStartOfFrame = start;
|
|
87
|
-
lengthOfStartOfFrame = length;
|
|
88
|
-
return false; // don't stop
|
|
89
|
-
},
|
|
90
|
-
});
|
|
91
|
-
if (numberOfLine == null) {
|
|
92
|
-
this.logDebug("DNL marker not found impossible to fix height");
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
if (startOfStartOfFrame == null || lengthOfStartOfFrame == null) {
|
|
96
|
-
this.logDebug("Start of frame 0 not found, either jpeg parsing is broken either the stream is corrupted");
|
|
97
|
-
return null;
|
|
98
|
-
}
|
|
99
|
-
if (this.writeHeightInStartOfFrame(buffer, startOfStartOfFrame, lengthOfStartOfFrame, numberOfLine)) {
|
|
100
|
-
return numberOfLine;
|
|
101
|
-
}
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
static writeHeightInStartOfFrame(buffer, startOfStartOfFrame, lengthOfStartOfFrame, numberOfLine) {
|
|
105
|
-
// write the picture height
|
|
106
|
-
if (6 < lengthOfStartOfFrame) {
|
|
107
|
-
const heightBuffer = Buffer.from([0x00, 0x00]);
|
|
108
|
-
heightBuffer.writeInt16BE(numberOfLine);
|
|
109
|
-
buffer[startOfStartOfFrame + 3] = heightBuffer[0];
|
|
110
|
-
buffer[startOfStartOfFrame + 4] = heightBuffer[1];
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
115
|
-
static readNumberOfLineFromDNL(buffer, start, length) {
|
|
116
|
-
let numberOfLine = null;
|
|
117
|
-
// read the number of line
|
|
118
|
-
if (3 < length) {
|
|
119
|
-
numberOfLine = buffer[start + 2] * 256 + buffer[start + 3];
|
|
120
|
-
}
|
|
121
|
-
return numberOfLine;
|
|
122
|
-
}
|
|
123
|
-
static parse(buffer, markerHandler) {
|
|
124
|
-
let i = 0;
|
|
125
|
-
if (!this.isSOIHeader(i, buffer)) {
|
|
126
|
-
this.logDebug("Not a valid SOI header");
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
i += 4;
|
|
130
|
-
// Check for valid JPEG header (null terminated JFIF)
|
|
131
|
-
if (!this.isValidJpegHeader(i, buffer)) {
|
|
132
|
-
this.logDebug("Not a valid JFIF string");
|
|
133
|
-
return false;
|
|
134
|
-
}
|
|
135
|
-
return this.parseMarker(buffer, i, markerHandler);
|
|
136
|
-
}
|
|
137
|
-
static isValidJpegHeader(i, buffer) {
|
|
138
|
-
return (i + 6 < buffer.length &&
|
|
139
|
-
buffer[i + 2] == "J".charCodeAt(0) &&
|
|
140
|
-
buffer[i + 3] == "F".charCodeAt(0) &&
|
|
141
|
-
buffer[i + 4] == "I".charCodeAt(0) &&
|
|
142
|
-
buffer[i + 5] == "F".charCodeAt(0) &&
|
|
143
|
-
buffer[i + 6] == 0x00);
|
|
144
|
-
}
|
|
145
|
-
static isSOIHeader(i, buffer) {
|
|
146
|
-
return (i + 3 < buffer.length &&
|
|
147
|
-
buffer[i] == 0xff &&
|
|
148
|
-
buffer[i + 1] == 0xd8 &&
|
|
149
|
-
buffer[i + 2] == 0xff &&
|
|
150
|
-
buffer[i + 3] == 0xe0);
|
|
151
|
-
}
|
|
152
|
-
static getBlockLength(buffer, i, marker) {
|
|
153
|
-
if (marker === "FFDA" ||
|
|
154
|
-
marker === "FFD0" ||
|
|
155
|
-
marker === "FFD1" ||
|
|
156
|
-
marker === "FFD2" ||
|
|
157
|
-
marker === "FFD3" ||
|
|
158
|
-
marker === "FFD4" ||
|
|
159
|
-
marker === "FFD5" ||
|
|
160
|
-
marker === "FFD6" ||
|
|
161
|
-
marker === "FFD7") {
|
|
162
|
-
return JpegUtil.findCurrentBlockSize(buffer, i + 2, marker);
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
// read the new block length
|
|
166
|
-
const blockLength = buffer[i + 2] * 256 + buffer[i + 3];
|
|
167
|
-
this.logDebug(`block size for ${marker} is ${blockLength}`);
|
|
168
|
-
return blockLength;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
static findCurrentBlockSize(buffer, i, current_marker) {
|
|
172
|
-
for (let j = 0; i + j < buffer.length; j++) {
|
|
173
|
-
if (buffer[i + j] === 0xff) {
|
|
174
|
-
if (i + j + 1 < buffer.length) {
|
|
175
|
-
if (buffer[i + j + 1] == 0x00) {
|
|
176
|
-
// it's ok just continue
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
// we've just found the end of the Start of Scan
|
|
180
|
-
return j;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
this.logDebug(`Premature end of stream reach while searching for the block size inside marker ${current_marker}`);
|
|
185
|
-
return null;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
return null;
|
|
190
|
-
}
|
|
191
|
-
static parseMarker(buffer, i, markerHandler) {
|
|
192
|
-
let marker = "";
|
|
193
|
-
//Retrieve the block length of the first block since the first block will not contain the size of file
|
|
194
|
-
let blockLength = buffer[i] * 256 + buffer[i + 1];
|
|
195
|
-
//Increase the file index to get to the next block
|
|
196
|
-
i += blockLength;
|
|
197
|
-
while (i < buffer.length) {
|
|
198
|
-
if (buffer[i] != 0xff) {
|
|
199
|
-
this.logDebug("We should be at the begining of the next block, but got: " +
|
|
200
|
-
buffer[i]);
|
|
201
|
-
return false;
|
|
202
|
-
}
|
|
203
|
-
if (i + 1 >= buffer.length) {
|
|
204
|
-
this.logDebug("End of stream prematurely found in marker: " + marker);
|
|
205
|
-
return false;
|
|
206
|
-
}
|
|
207
|
-
if (buffer[i + 1] == 0x00) {
|
|
208
|
-
this.logDebug(`Bad marker at ${i} 0x00 just after marker ${marker}`);
|
|
209
|
-
return false;
|
|
210
|
-
}
|
|
211
|
-
marker = this.numToHex(buffer[i]) + this.numToHex(buffer[i + 1]);
|
|
212
|
-
const foundBlockLength = this.getBlockLength(buffer, i, marker);
|
|
213
|
-
if (foundBlockLength == null) {
|
|
214
|
-
this.logDebug(`Was not able to determine block size for marker ${marker}`);
|
|
215
|
-
return false;
|
|
216
|
-
}
|
|
217
|
-
blockLength = foundBlockLength;
|
|
218
|
-
const handler = markerHandler[marker];
|
|
219
|
-
if (handler != null && handler(i + 2, blockLength)) {
|
|
220
|
-
return true;
|
|
221
|
-
}
|
|
222
|
-
i = i + 2 + blockLength;
|
|
223
|
-
}
|
|
224
|
-
this.logDebug("End of payload reached");
|
|
225
|
-
return true;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
exports.default = JpegUtil;
|
|
229
|
-
//# sourceMappingURL=JpegUtil.js.map
|
package/dist/src/JpegUtil.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"JpegUtil.js","sourceRoot":"","sources":["../../src/JpegUtil.ts"],"names":[],"mappings":"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","sourcesContent":["let debug = false;\n\nconst start_of_Frame_0 = \"FFC0\";\nconst define_number_of_lines = \"FFDC\";\n\nexport default class JpegUtil {\n static setDebug(dbg: boolean) {\n debug = dbg;\n }\n\n private static logDebug(msg: string | object) {\n if (debug) {\n console.log(msg);\n }\n }\n\n private static numToHex(s: number) {\n return s.toString(16).padStart(2, \"0\").toUpperCase();\n }\n\n static GetJpgSize(buffer: Buffer): { height: number; width: number } | null {\n let size: { height: number; width: number } | null = null;\n this.parse(buffer, {\n [start_of_Frame_0]: (start: number, length: number) => {\n // read the the \"Start of frame\" marker which contains the file size\n if (6 < length) {\n const pHeight = buffer[start + 3] * 256 + buffer[start + 4];\n const pWidth = buffer[start + 5] * 256 + buffer[start + 6];\n\n size = { height: pHeight, width: pWidth };\n }\n\n // stop processing\n return true;\n },\n });\n return size;\n }\n\n static setJpgSize(\n buffer: Buffer,\n size: { height: number; width: number }\n ): boolean {\n let sizeWritten = false;\n const parsingSucceed = this.parse(buffer, {\n [start_of_Frame_0]: (start: number, length: number) => {\n // read the the \"Start of frame\" marker which contains the file size\n\n // write the picture size\n if (6 < length) {\n const height = Buffer.from([0x00, 0x00]);\n height.writeInt16BE(size.height);\n buffer[start + 3] = height[0];\n buffer[start + 4] = height[1];\n\n const width = Buffer.from([0x00, 0x00]);\n width.writeInt16BE(size.width);\n buffer[start + 5] = width[0];\n buffer[start + 6] = width[1];\n\n sizeWritten = true;\n }\n\n // stop processing\n return true;\n },\n });\n\n if (!parsingSucceed) {\n return false;\n }\n\n return sizeWritten;\n }\n\n static setJpgHeight(buffer: Buffer, height: number): boolean {\n let heightWritten = false;\n const parsingSucceed = this.parse(buffer, {\n [start_of_Frame_0]: (start: number, length: number) => {\n // read the the \"Start of frame\" marker which contains the file size\n\n // write the picture size\n heightWritten = this.writeHeightInStartOfFrame(\n buffer,\n start,\n length,\n height\n );\n\n // stop processing\n return true;\n },\n });\n\n if (!parsingSucceed) {\n return false;\n }\n\n return heightWritten;\n }\n\n static fixSizeWithDNL(buffer: Buffer): number | null {\n let numberOfLine: number | null = null;\n let startOfStartOfFrame: number | null = null;\n let lengthOfStartOfFrame: number | null = null;\n this.parse(buffer, {\n [define_number_of_lines]: (start: number, length: number) => {\n numberOfLine = this.readNumberOfLineFromDNL(buffer, start, length);\n return false; // don't stop\n },\n [start_of_Frame_0]: (start: number, length: number) => {\n startOfStartOfFrame = start;\n lengthOfStartOfFrame = length;\n return false; // don't stop\n },\n });\n\n if (numberOfLine == null) {\n this.logDebug(\"DNL marker not found impossible to fix height\");\n return null;\n }\n\n if (startOfStartOfFrame == null || lengthOfStartOfFrame == null) {\n this.logDebug(\n \"Start of frame 0 not found, either jpeg parsing is broken either the stream is corrupted\"\n );\n return null;\n }\n\n if (\n this.writeHeightInStartOfFrame(\n buffer,\n startOfStartOfFrame,\n lengthOfStartOfFrame,\n numberOfLine\n )\n ) {\n return numberOfLine;\n }\n return null;\n }\n\n private static writeHeightInStartOfFrame(\n buffer: Buffer,\n startOfStartOfFrame: number,\n lengthOfStartOfFrame: number,\n numberOfLine: number\n ): boolean {\n // write the picture height\n if (6 < lengthOfStartOfFrame) {\n const heightBuffer = Buffer.from([0x00, 0x00]);\n heightBuffer.writeInt16BE(numberOfLine);\n buffer[startOfStartOfFrame + 3] = heightBuffer[0];\n buffer[startOfStartOfFrame + 4] = heightBuffer[1];\n\n return true;\n }\n\n return false;\n }\n\n static readNumberOfLineFromDNL(\n buffer: Buffer,\n start: number,\n length: number\n ): number | null {\n let numberOfLine: number | null = null;\n\n // read the number of line\n if (3 < length) {\n numberOfLine = buffer[start + 2] * 256 + buffer[start + 3];\n }\n\n return numberOfLine;\n }\n static parse(\n buffer: Buffer,\n markerHandler: { [key: string]: (start: number, length: number) => boolean }\n ): boolean {\n let i: number = 0;\n\n if (!this.isSOIHeader(i, buffer)) {\n this.logDebug(\"Not a valid SOI header\");\n return false;\n }\n\n i += 4;\n\n // Check for valid JPEG header (null terminated JFIF)\n if (!this.isValidJpegHeader(i, buffer)) {\n this.logDebug(\"Not a valid JFIF string\");\n return false;\n }\n\n return this.parseMarker(buffer, i, markerHandler);\n }\n\n private static isValidJpegHeader(i: number, buffer: Buffer) {\n return (\n i + 6 < buffer.length &&\n buffer[i + 2] == \"J\".charCodeAt(0) &&\n buffer[i + 3] == \"F\".charCodeAt(0) &&\n buffer[i + 4] == \"I\".charCodeAt(0) &&\n buffer[i + 5] == \"F\".charCodeAt(0) &&\n buffer[i + 6] == 0x00\n );\n }\n\n private static isSOIHeader(i: number, buffer: Buffer) {\n return (\n i + 3 < buffer.length &&\n buffer[i] == 0xff &&\n buffer[i + 1] == 0xd8 &&\n buffer[i + 2] == 0xff &&\n buffer[i + 3] == 0xe0\n );\n }\n\n private static getBlockLength(\n buffer: Buffer,\n i: number,\n marker: string\n ): number | null {\n if (\n marker === \"FFDA\" ||\n marker === \"FFD0\" ||\n marker === \"FFD1\" ||\n marker === \"FFD2\" ||\n marker === \"FFD3\" ||\n marker === \"FFD4\" ||\n marker === \"FFD5\" ||\n marker === \"FFD6\" ||\n marker === \"FFD7\"\n ) {\n return JpegUtil.findCurrentBlockSize(buffer, i + 2, marker);\n } else {\n // read the new block length\n const blockLength = buffer[i + 2] * 256 + buffer[i + 3];\n\n this.logDebug(`block size for ${marker} is ${blockLength}`);\n return blockLength;\n }\n }\n\n private static findCurrentBlockSize(\n buffer: Buffer,\n i: number,\n current_marker: string\n ): number | null {\n for (let j = 0; i + j < buffer.length; j++) {\n if (buffer[i + j] === 0xff) {\n if (i + j + 1 < buffer.length) {\n if (buffer[i + j + 1] == 0x00) {\n // it's ok just continue\n } else {\n // we've just found the end of the Start of Scan\n return j;\n }\n } else {\n this.logDebug(\n `Premature end of stream reach while searching for the block size inside marker ${current_marker}`\n );\n return null;\n }\n }\n }\n return null;\n }\n\n private static parseMarker(\n buffer: Buffer,\n i: number,\n markerHandler: { [key: string]: (start: number, length: number) => boolean }\n ): boolean {\n let marker = \"\";\n\n //Retrieve the block length of the first block since the first block will not contain the size of file\n let blockLength = buffer[i] * 256 + buffer[i + 1];\n\n //Increase the file index to get to the next block\n i += blockLength;\n while (i < buffer.length) {\n if (buffer[i] != 0xff) {\n this.logDebug(\n \"We should be at the begining of the next block, but got: \" +\n buffer[i]\n );\n return false;\n }\n\n if (i + 1 >= buffer.length) {\n this.logDebug(\"End of stream prematurely found in marker: \" + marker);\n return false;\n }\n\n if (buffer[i + 1] == 0x00) {\n this.logDebug(`Bad marker at ${i} 0x00 just after marker ${marker}`);\n return false;\n }\n\n marker = this.numToHex(buffer[i]) + this.numToHex(buffer[i + 1]);\n\n const foundBlockLength = this.getBlockLength(buffer, i, marker);\n if (foundBlockLength == null) {\n this.logDebug(\n `Was not able to determine block size for marker ${marker}`\n );\n return false;\n }\n blockLength = foundBlockLength;\n\n const handler = markerHandler[marker];\n if (handler != null && handler(i + 2, blockLength)) {\n return true;\n }\n\n i = i + 2 + blockLength;\n }\n\n this.logDebug(\"End of payload reached\");\n return true;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export type KnownShortcut = "SaveDocument1" | "SavePDF" | "EmailPDF" | "SavePhoto1" | "SaveJPEG";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"KnownShortcut.js","sourceRoot":"","sources":["../../src/KnownShortcut.ts"],"names":[],"mappings":"","sourcesContent":["export type KnownShortcut =\n | \"SaveDocument1\"\n | \"SavePDF\"\n | \"EmailPDF\"\n | \"SavePhoto1\"\n | \"SaveJPEG\";\n"]}
|
package/dist/src/PathHelper.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export default class PathHelper {
|
|
2
|
-
static getFileForPage(folder: string, scanCount: number, currentPageNumber: number, filePattern: string | undefined, extension: string): string;
|
|
3
|
-
static makeUnique(filePath: string): string;
|
|
4
|
-
static getFileForScan(folder: string, scanCount: number, filePattern: string | undefined, extension: string): string;
|
|
5
|
-
static getOutputFolder(folder?: string | undefined): Promise<string>;
|
|
6
|
-
}
|
package/dist/src/PathHelper.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
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
|
-
const path_1 = __importDefault(require("path"));
|
|
7
|
-
const dateformat_1 = __importDefault(require("dateformat"));
|
|
8
|
-
const { promises: Fs } = require("fs");
|
|
9
|
-
const fs = require("fs");
|
|
10
|
-
const os_1 = __importDefault(require("os"));
|
|
11
|
-
class PathHelper {
|
|
12
|
-
static getFileForPage(folder, scanCount, currentPageNumber, filePattern, extension) {
|
|
13
|
-
if (filePattern) {
|
|
14
|
-
return path_1.default.join(folder, `${(0, dateformat_1.default)(new Date(), filePattern)}.${extension}`);
|
|
15
|
-
}
|
|
16
|
-
return path_1.default.join(folder, `scan${scanCount}_page${currentPageNumber}.${extension}`);
|
|
17
|
-
}
|
|
18
|
-
static makeUnique(filePath) {
|
|
19
|
-
if (!fs.existsSync(filePath)) {
|
|
20
|
-
return filePath;
|
|
21
|
-
}
|
|
22
|
-
let parsed = path_1.default.parse(filePath);
|
|
23
|
-
let tryName = `${parsed.dir}${path_1.default.sep}${parsed.name}${(0, dateformat_1.default)(new Date(), "yyyymmdd")}${parsed.ext}`;
|
|
24
|
-
if (!fs.existsSync(tryName)) {
|
|
25
|
-
return tryName;
|
|
26
|
-
}
|
|
27
|
-
parsed = path_1.default.parse(tryName);
|
|
28
|
-
let i = "a";
|
|
29
|
-
while (i <= "z") {
|
|
30
|
-
tryName = `${parsed.dir}${path_1.default.sep}${parsed.name}_${i}${parsed.ext}`;
|
|
31
|
-
if (!fs.existsSync(tryName)) {
|
|
32
|
-
return tryName;
|
|
33
|
-
}
|
|
34
|
-
i = String.fromCharCode(i.charCodeAt(0) + 1);
|
|
35
|
-
}
|
|
36
|
-
throw new Error(`Can not create unique file: ${filePath} iterated until: ${tryName}`);
|
|
37
|
-
}
|
|
38
|
-
static getFileForScan(folder, scanCount, filePattern, extension) {
|
|
39
|
-
if (filePattern) {
|
|
40
|
-
return path_1.default.join(folder, `${(0, dateformat_1.default)(new Date(), filePattern)}.${extension}`);
|
|
41
|
-
}
|
|
42
|
-
return path_1.default.join(folder, `scan${scanCount}.${extension}`);
|
|
43
|
-
}
|
|
44
|
-
static async getOutputFolder(folder) {
|
|
45
|
-
if (typeof folder !== "string") {
|
|
46
|
-
return Fs.mkdtemp(path_1.default.join(os_1.default.tmpdir(), "scan-to-pc"));
|
|
47
|
-
}
|
|
48
|
-
return folder;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
exports.default = PathHelper;
|
|
52
|
-
//# sourceMappingURL=PathHelper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PathHelper.js","sourceRoot":"","sources":["../../src/PathHelper.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,4DAAoC;AACpC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACvC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,4CAAoB;AAEpB,MAAqB,UAAU;IAC7B,MAAM,CAAC,cAAc,CACnB,MAAc,EACd,SAAiB,EACjB,iBAAyB,EACzB,WAA+B,EAC/B,SAAiB;QAEjB,IAAI,WAAW,EAAE;YACf,OAAO,cAAI,CAAC,IAAI,CACd,MAAM,EACN,GAAG,IAAA,oBAAU,EAAC,IAAI,IAAI,EAAE,EAAE,WAAW,CAAC,IAAI,SAAS,EAAE,CACtD,CAAC;SACH;QAED,OAAO,cAAI,CAAC,IAAI,CACd,MAAM,EACN,OAAO,SAAS,QAAQ,iBAAiB,IAAI,SAAS,EAAE,CACzD,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,QAAgB;QAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC5B,OAAO,QAAQ,CAAC;SACjB;QAED,IAAI,MAAM,GAAG,cAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,cAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,IAAA,oBAAU,EAC/D,IAAI,IAAI,EAAE,EACV,UAAU,CACX,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC3B,OAAO,OAAO,CAAC;SAChB;QAED,MAAM,GAAG,cAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,OAAO,CAAC,IAAI,GAAG,EAAE;YACf,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,cAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;YACrE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;gBAC3B,OAAO,OAAO,CAAC;aAChB;YACD,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SAC9C;QACD,MAAM,IAAI,KAAK,CACb,+BAA+B,QAAQ,oBAAoB,OAAO,EAAE,CACrE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,cAAc,CACnB,MAAc,EACd,SAAiB,EACjB,WAA+B,EAC/B,SAAiB;QAEjB,IAAI,WAAW,EAAE;YACf,OAAO,cAAI,CAAC,IAAI,CACd,MAAM,EACN,GAAG,IAAA,oBAAU,EAAC,IAAI,IAAI,EAAE,EAAE,WAAW,CAAC,IAAI,SAAS,EAAE,CACtD,CAAC;SACH;QAED,OAAO,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,SAAS,IAAI,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,MAA2B;QACtD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YAC9B,OAAO,EAAE,CAAC,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;SACzD;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAvED,6BAuEC","sourcesContent":["import path from \"path\";\nimport dateformat from \"dateformat\";\nconst { promises: Fs } = require(\"fs\");\nconst fs = require(\"fs\");\nimport os from \"os\";\n\nexport default class PathHelper {\n static getFileForPage(\n folder: string,\n scanCount: number,\n currentPageNumber: number,\n filePattern: string | undefined,\n extension: string\n ): string {\n if (filePattern) {\n return path.join(\n folder,\n `${dateformat(new Date(), filePattern)}.${extension}`\n );\n }\n\n return path.join(\n folder,\n `scan${scanCount}_page${currentPageNumber}.${extension}`\n );\n }\n\n static makeUnique(filePath: string): string {\n if (!fs.existsSync(filePath)) {\n return filePath;\n }\n\n let parsed = path.parse(filePath);\n let tryName = `${parsed.dir}${path.sep}${parsed.name}${dateformat(\n new Date(),\n \"yyyymmdd\"\n )}${parsed.ext}`;\n if (!fs.existsSync(tryName)) {\n return tryName;\n }\n\n parsed = path.parse(tryName);\n let i = \"a\";\n while (i <= \"z\") {\n tryName = `${parsed.dir}${path.sep}${parsed.name}_${i}${parsed.ext}`;\n if (!fs.existsSync(tryName)) {\n return tryName;\n }\n i = String.fromCharCode(i.charCodeAt(0) + 1);\n }\n throw new Error(\n `Can not create unique file: ${filePath} iterated until: ${tryName}`\n );\n }\n\n static getFileForScan(\n folder: string,\n scanCount: number,\n filePattern: string | undefined,\n extension: string\n ): string {\n if (filePattern) {\n return path.join(\n folder,\n `${dateformat(new Date(), filePattern)}.${extension}`\n );\n }\n\n return path.join(folder, `scan${scanCount}.${extension}`);\n }\n\n static async getOutputFolder(folder?: string | undefined): Promise<string> {\n if (typeof folder !== \"string\") {\n return Fs.mkdtemp(path.join(os.tmpdir(), \"scan-to-pc\"));\n }\n return folder;\n }\n}\n"]}
|
package/dist/src/ScanCaps.d.ts
DELETED
package/dist/src/ScanCaps.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const xml2js_1 = require("xml2js");
|
|
4
|
-
const parser = new xml2js_1.Parser();
|
|
5
|
-
const util_1 = require("util");
|
|
6
|
-
const parseString = (0, util_1.promisify)(parser.parseString);
|
|
7
|
-
class ScanCaps {
|
|
8
|
-
constructor(data) {
|
|
9
|
-
this.data = data;
|
|
10
|
-
}
|
|
11
|
-
static async createScanCaps(content) {
|
|
12
|
-
const parsed = await parseString(content);
|
|
13
|
-
return new ScanCaps(parsed);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
exports.default = ScanCaps;
|
|
17
|
-
//# sourceMappingURL=ScanCaps.js.map
|
package/dist/src/ScanCaps.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScanCaps.js","sourceRoot":"","sources":["../../src/ScanCaps.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,mCAAgC;AAChC,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;AAC5B,+BAAiC;AACjC,MAAM,WAAW,GAAG,IAAA,gBAAS,EAAuB,MAAM,CAAC,WAAW,CAAC,CAAC;AAGxE,MAAqB,QAAQ;IAG3B,YAAY,IAAkB;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,OAAe;QACzC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;CACF;AAXD,2BAWC","sourcesContent":["\"use strict\";\nimport { Parser } from \"xml2js\";\nconst parser = new Parser();\nimport { promisify } from \"util\";\nconst parseString = promisify<string, ScanCapsData>(parser.parseString);\nexport interface ScanCapsData {}\n\nexport default class ScanCaps {\n private readonly data: ScanCapsData;\n\n constructor(data: ScanCapsData) {\n this.data = data;\n }\n\n static async createScanCaps(content: string): Promise<ScanCaps> {\n const parsed = await parseString(content);\n return new ScanCaps(parsed);\n }\n}\n"]}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export interface ScanJobManifestData {
|
|
2
|
-
"man:Manifest": {
|
|
3
|
-
"map:ResourceMap": {
|
|
4
|
-
"map:ResourceLink": {
|
|
5
|
-
"dd:ResourceURI": string[];
|
|
6
|
-
}[];
|
|
7
|
-
"map:ResourceNode": {
|
|
8
|
-
"map:ResourceLink": {
|
|
9
|
-
"dd:ResourceURI": string[];
|
|
10
|
-
}[];
|
|
11
|
-
"map:ResourceType": {
|
|
12
|
-
"scan:ScanResourceType": string[];
|
|
13
|
-
}[];
|
|
14
|
-
}[];
|
|
15
|
-
}[];
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
export default class ScanJobManifest {
|
|
19
|
-
private readonly data;
|
|
20
|
-
constructor(data: ScanJobManifestData);
|
|
21
|
-
static createScanJobManifest(content: string): Promise<ScanJobManifest>;
|
|
22
|
-
get ScanCapsURI(): string | null;
|
|
23
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const xml2js_1 = require("xml2js");
|
|
4
|
-
const parser = new xml2js_1.Parser();
|
|
5
|
-
const util_1 = require("util");
|
|
6
|
-
const parseString = (0, util_1.promisify)(parser.parseString);
|
|
7
|
-
class ScanJobManifest {
|
|
8
|
-
constructor(data) {
|
|
9
|
-
this.data = data;
|
|
10
|
-
}
|
|
11
|
-
static async createScanJobManifest(content) {
|
|
12
|
-
const parsed = await parseString(content);
|
|
13
|
-
return new ScanJobManifest(parsed);
|
|
14
|
-
}
|
|
15
|
-
get ScanCapsURI() {
|
|
16
|
-
const scanCaps = this.data["man:Manifest"]["map:ResourceMap"]["0"]["map:ResourceNode"].find((x) => x["map:ResourceType"][0]["scan:ScanResourceType"][0] === "ScanCaps");
|
|
17
|
-
if (scanCaps === undefined) {
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
return (this.data["man:Manifest"]["map:ResourceMap"]["0"]["map:ResourceLink"][0]["dd:ResourceURI"][0] + scanCaps["map:ResourceLink"][0]["dd:ResourceURI"][0]);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
exports.default = ScanJobManifest;
|
|
24
|
-
//# sourceMappingURL=ScanJobManifest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScanJobManifest.js","sourceRoot":"","sources":["../../src/ScanJobManifest.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,mCAAgC;AAChC,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;AAC5B,+BAAiC;AACjC,MAAM,WAAW,GAAG,IAAA,gBAAS,EAA8B,MAAM,CAAC,WAAW,CAAC,CAAC;AAoB/E,MAAqB,eAAe;IAGlC,YAAY,IAAyB;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAChC,OAAe;QAEf,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,WAAW;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAChE,kBAAkB,CACnB,CAAC,IAAI,CACJ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAC3E,CAAC;QAEF,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO,IAAI,CAAC;SACb;QAED,OAAO,CACL,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CACtE,gBAAgB,CACjB,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAC5D,CAAC;IACJ,CAAC;CACF;AA9BD,kCA8BC","sourcesContent":["\"use strict\";\nimport { Parser } from \"xml2js\";\nconst parser = new Parser();\nimport { promisify } from \"util\";\nconst parseString = promisify<string, ScanJobManifestData>(parser.parseString);\n\nexport interface ScanJobManifestData {\n \"man:Manifest\": {\n \"map:ResourceMap\": {\n \"map:ResourceLink\": {\n \"dd:ResourceURI\": string[];\n }[];\n \"map:ResourceNode\": {\n \"map:ResourceLink\": {\n \"dd:ResourceURI\": string[];\n }[];\n \"map:ResourceType\": {\n \"scan:ScanResourceType\": string[];\n }[];\n }[];\n }[];\n };\n}\n\nexport default class ScanJobManifest {\n private readonly data: ScanJobManifestData;\n\n constructor(data: ScanJobManifestData) {\n this.data = data;\n }\n static async createScanJobManifest(\n content: string\n ): Promise<ScanJobManifest> {\n const parsed = await parseString(content);\n return new ScanJobManifest(parsed);\n }\n\n get ScanCapsURI(): string | null {\n const scanCaps = this.data[\"man:Manifest\"][\"map:ResourceMap\"][\"0\"][\n \"map:ResourceNode\"\n ].find(\n (x) => x[\"map:ResourceType\"][0][\"scan:ScanResourceType\"][0] === \"ScanCaps\"\n );\n\n if (scanCaps === undefined) {\n return null;\n }\n\n return (\n this.data[\"man:Manifest\"][\"map:ResourceMap\"][\"0\"][\"map:ResourceLink\"][0][\n \"dd:ResourceURI\"\n ][0] + scanCaps[\"map:ResourceLink\"][0][\"dd:ResourceURI\"][0]\n );\n }\n}\n"]}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export default class ScanJobSettings {
|
|
2
|
-
private readonly inputSource;
|
|
3
|
-
private readonly contentType;
|
|
4
|
-
private readonly resolution;
|
|
5
|
-
private readonly isDuplex;
|
|
6
|
-
constructor(inputSource: "Adf" | "Platen", contentType: "Document" | "Photo", resolution: number, isDuplex: boolean);
|
|
7
|
-
toXML(): Promise<string>;
|
|
8
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const xml2js = require("xml2js");
|
|
4
|
-
const parser = new xml2js.Parser();
|
|
5
|
-
const util = require("util");
|
|
6
|
-
class ScanJobSettings {
|
|
7
|
-
constructor(inputSource, contentType, resolution, isDuplex) {
|
|
8
|
-
this.inputSource = inputSource;
|
|
9
|
-
this.contentType = contentType;
|
|
10
|
-
this.resolution = resolution;
|
|
11
|
-
this.isDuplex = isDuplex;
|
|
12
|
-
}
|
|
13
|
-
async toXML() {
|
|
14
|
-
let rawJob = '<?xml version="1.0" encoding="UTF-8"?>\n' +
|
|
15
|
-
'<ScanSettings xmlns="http://www.hp.com/schemas/imaging/con/cnx/scan/2008/08/19" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hp.com/schemas/imaging/con/cnx/scan/2008/08/19 Scan Schema - 0.26.xsd">\n' +
|
|
16
|
-
"\t<XResolution>200</XResolution>\n" +
|
|
17
|
-
"\t<YResolution>200</YResolution>\n" +
|
|
18
|
-
"\t<XStart>33</XStart>\n" +
|
|
19
|
-
"\t<YStart>0</YStart>\n" +
|
|
20
|
-
"\t<Width>2481</Width>\n" +
|
|
21
|
-
"\t<Height>3507</Height>\n" +
|
|
22
|
-
"\t<Format>Jpeg</Format>\n" +
|
|
23
|
-
"\t<CompressionQFactor>0</CompressionQFactor>\n" +
|
|
24
|
-
"\t<ColorSpace>Color</ColorSpace>\n" +
|
|
25
|
-
"\t<BitDepth>8</BitDepth>\n" +
|
|
26
|
-
"\t<InputSource>Adf</InputSource>\n" +
|
|
27
|
-
"\t<GrayRendering>NTSC</GrayRendering>\n" +
|
|
28
|
-
"\t<ToneMap>\n" +
|
|
29
|
-
"\t\t<Gamma>1000</Gamma>\n" +
|
|
30
|
-
"\t\t<Brightness>1000</Brightness>\n" +
|
|
31
|
-
"\t\t<Contrast>1000</Contrast>\n" +
|
|
32
|
-
"\t\t<Highlite>179</Highlite>\n" +
|
|
33
|
-
"\t\t<Shadow>25</Shadow>\n" +
|
|
34
|
-
"\t\t<Threshold>0</Threshold>\n" +
|
|
35
|
-
"\t</ToneMap>\n" +
|
|
36
|
-
"\t<SharpeningLevel>128</SharpeningLevel>\n" +
|
|
37
|
-
"\t<NoiseRemoval>0</NoiseRemoval>\n" +
|
|
38
|
-
"\t<ContentType>Document</ContentType>\n" +
|
|
39
|
-
"</ScanSettings>";
|
|
40
|
-
const parsed = await util.promisify(parser.parseString)(rawJob);
|
|
41
|
-
parsed.ScanSettings.XResolution[0] = this.resolution;
|
|
42
|
-
parsed.ScanSettings.YResolution[0] = this.resolution;
|
|
43
|
-
parsed.ScanSettings.InputSource[0] = this.inputSource;
|
|
44
|
-
if (this.inputSource === "Adf" && this.isDuplex) {
|
|
45
|
-
parsed.ScanSettings["AdfOptions"] = [{ AdfOption: ["Duplex"] }];
|
|
46
|
-
}
|
|
47
|
-
parsed.ScanSettings.ContentType[0] = this.contentType;
|
|
48
|
-
let builder = new xml2js.Builder({
|
|
49
|
-
xmldec: { version: "1.0", encoding: "UTF-8", standalone: false },
|
|
50
|
-
renderOpts: { pretty: true, indent: "\t", newline: "\n" },
|
|
51
|
-
});
|
|
52
|
-
return builder.buildObject(parsed);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
exports.default = ScanJobSettings;
|
|
56
|
-
//# sourceMappingURL=ScanJobSettings.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScanJobSettings.js","sourceRoot":"","sources":["../../src/ScanJobSettings.ts"],"names":[],"mappings":";;AAAA,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;AACnC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAE7B,MAAqB,eAAe;IAMlC,YACE,WAA6B,EAC7B,WAAiC,EACjC,UAAkB,EAClB,QAAiB;QAEjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,MAAM,GACR,0CAA0C;YAC1C,gPAAgP;YAChP,oCAAoC;YACpC,oCAAoC;YACpC,yBAAyB;YACzB,wBAAwB;YACxB,yBAAyB;YACzB,2BAA2B;YAC3B,2BAA2B;YAC3B,gDAAgD;YAChD,oCAAoC;YACpC,4BAA4B;YAC5B,oCAAoC;YACpC,yCAAyC;YACzC,eAAe;YACf,2BAA2B;YAC3B,qCAAqC;YACrC,iCAAiC;YACjC,gCAAgC;YAChC,2BAA2B;YAC3B,gCAAgC;YAChC,gBAAgB;YAChB,4CAA4C;YAC5C,oCAAoC;YACpC,yCAAyC;YACzC,iBAAiB,CAAC;QAEpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;QAEhE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QACrD,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAErD,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACtD,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/C,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SACjE;QACD,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QAEtD,IAAI,OAAO,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE;YAChE,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;SAC1D,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;CACF;AAjED,kCAiEC","sourcesContent":["const xml2js = require(\"xml2js\");\nconst parser = new xml2js.Parser();\nconst util = require(\"util\");\n\nexport default class ScanJobSettings {\n private readonly inputSource: \"Adf\" | \"Platen\";\n private readonly contentType: \"Document\" | \"Photo\";\n private readonly resolution: number;\n private readonly isDuplex: boolean;\n\n constructor(\n inputSource: \"Adf\" | \"Platen\",\n contentType: \"Document\" | \"Photo\",\n resolution: number,\n isDuplex: boolean\n ) {\n this.inputSource = inputSource;\n this.contentType = contentType;\n this.resolution = resolution;\n this.isDuplex = isDuplex;\n }\n\n async toXML(): Promise<string> {\n let rawJob =\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n' +\n '<ScanSettings xmlns=\"http://www.hp.com/schemas/imaging/con/cnx/scan/2008/08/19\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.hp.com/schemas/imaging/con/cnx/scan/2008/08/19 Scan Schema - 0.26.xsd\">\\n' +\n \"\\t<XResolution>200</XResolution>\\n\" +\n \"\\t<YResolution>200</YResolution>\\n\" +\n \"\\t<XStart>33</XStart>\\n\" +\n \"\\t<YStart>0</YStart>\\n\" +\n \"\\t<Width>2481</Width>\\n\" +\n \"\\t<Height>3507</Height>\\n\" +\n \"\\t<Format>Jpeg</Format>\\n\" +\n \"\\t<CompressionQFactor>0</CompressionQFactor>\\n\" +\n \"\\t<ColorSpace>Color</ColorSpace>\\n\" +\n \"\\t<BitDepth>8</BitDepth>\\n\" +\n \"\\t<InputSource>Adf</InputSource>\\n\" +\n \"\\t<GrayRendering>NTSC</GrayRendering>\\n\" +\n \"\\t<ToneMap>\\n\" +\n \"\\t\\t<Gamma>1000</Gamma>\\n\" +\n \"\\t\\t<Brightness>1000</Brightness>\\n\" +\n \"\\t\\t<Contrast>1000</Contrast>\\n\" +\n \"\\t\\t<Highlite>179</Highlite>\\n\" +\n \"\\t\\t<Shadow>25</Shadow>\\n\" +\n \"\\t\\t<Threshold>0</Threshold>\\n\" +\n \"\\t</ToneMap>\\n\" +\n \"\\t<SharpeningLevel>128</SharpeningLevel>\\n\" +\n \"\\t<NoiseRemoval>0</NoiseRemoval>\\n\" +\n \"\\t<ContentType>Document</ContentType>\\n\" +\n \"</ScanSettings>\";\n\n const parsed = await util.promisify(parser.parseString)(rawJob);\n\n parsed.ScanSettings.XResolution[0] = this.resolution;\n parsed.ScanSettings.YResolution[0] = this.resolution;\n\n parsed.ScanSettings.InputSource[0] = this.inputSource;\n if (this.inputSource === \"Adf\" && this.isDuplex) {\n parsed.ScanSettings[\"AdfOptions\"] = [{ AdfOption: [\"Duplex\"] }];\n }\n parsed.ScanSettings.ContentType[0] = this.contentType;\n\n let builder = new xml2js.Builder({\n xmldec: { version: \"1.0\", encoding: \"UTF-8\", standalone: false },\n renderOpts: { pretty: true, indent: \"\\t\", newline: \"\\n\" },\n });\n\n return builder.buildObject(parsed);\n }\n}\n"]}
|
package/dist/src/ScanStatus.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export interface ScanStatusData {
|
|
2
|
-
ScanStatus: {
|
|
3
|
-
ScannerState: {
|
|
4
|
-
"0": string;
|
|
5
|
-
};
|
|
6
|
-
AdfState: {
|
|
7
|
-
"0": string;
|
|
8
|
-
};
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
export default class ScanStatus {
|
|
12
|
-
private readonly data;
|
|
13
|
-
constructor(data: ScanStatusData);
|
|
14
|
-
static createScanStatus(content: string): Promise<ScanStatus>;
|
|
15
|
-
get scannerState(): string;
|
|
16
|
-
get adfState(): string;
|
|
17
|
-
isLoaded(): boolean;
|
|
18
|
-
getInputSource(): "Adf" | "Platen";
|
|
19
|
-
}
|
package/dist/src/ScanStatus.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const xml2js_1 = require("xml2js");
|
|
4
|
-
const parser = new xml2js_1.Parser();
|
|
5
|
-
const util_1 = require("util");
|
|
6
|
-
const parseString = (0, util_1.promisify)(parser.parseString);
|
|
7
|
-
class ScanStatus {
|
|
8
|
-
constructor(data) {
|
|
9
|
-
this.data = data;
|
|
10
|
-
}
|
|
11
|
-
static async createScanStatus(content) {
|
|
12
|
-
const parsed = await parseString(content);
|
|
13
|
-
return new ScanStatus(parsed);
|
|
14
|
-
}
|
|
15
|
-
get scannerState() {
|
|
16
|
-
return this.data["ScanStatus"].ScannerState["0"];
|
|
17
|
-
}
|
|
18
|
-
get adfState() {
|
|
19
|
-
if (this.data["ScanStatus"].hasOwnProperty("AdfState")) {
|
|
20
|
-
//not all printers have an automatic document feeder
|
|
21
|
-
return this.data["ScanStatus"].AdfState["0"];
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
return "";
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
isLoaded() {
|
|
28
|
-
return this.adfState === "Loaded";
|
|
29
|
-
}
|
|
30
|
-
getInputSource() {
|
|
31
|
-
return this.isLoaded() ? "Adf" : "Platen";
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
exports.default = ScanStatus;
|
|
35
|
-
//# sourceMappingURL=ScanStatus.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScanStatus.js","sourceRoot":"","sources":["../../src/ScanStatus.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,mCAAgC;AAChC,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;AAC5B,+BAAiC;AACjC,MAAM,WAAW,GAAG,IAAA,gBAAS,EAAyB,MAAM,CAAC,WAAW,CAAC,CAAC;AAS1E,MAAqB,UAAU;IAE7B,YAAY,IAAoB;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAe;QAC3C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YACtD,oDAAoD;YACpD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAC9C;aAAM;YACL,OAAO,EAAE,CAAC;SACX;IACH,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;IACpC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5C,CAAC;CACF;AA/BD,6BA+BC","sourcesContent":["\"use strict\";\nimport { Parser } from \"xml2js\";\nconst parser = new Parser();\nimport { promisify } from \"util\";\nconst parseString = promisify<string, ScanStatusData>(parser.parseString);\n\nexport interface ScanStatusData {\n ScanStatus: {\n ScannerState: { \"0\": string };\n AdfState: { \"0\": string };\n };\n}\n\nexport default class ScanStatus {\n private readonly data: ScanStatusData;\n constructor(data: ScanStatusData) {\n this.data = data;\n }\n\n static async createScanStatus(content: string): Promise<ScanStatus> {\n const parsed = await parseString(content);\n return new ScanStatus(parsed);\n }\n\n get scannerState(): string {\n return this.data[\"ScanStatus\"].ScannerState[\"0\"];\n }\n\n get adfState(): string {\n if (this.data[\"ScanStatus\"].hasOwnProperty(\"AdfState\")) {\n //not all printers have an automatic document feeder\n return this.data[\"ScanStatus\"].AdfState[\"0\"];\n } else {\n return \"\";\n }\n }\n\n isLoaded(): boolean {\n return this.adfState === \"Loaded\";\n }\n\n getInputSource(): \"Adf\" | \"Platen\" {\n return this.isLoaded() ? \"Adf\" : \"Platen\";\n }\n}\n"]}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { KnownShortcut } from "./KnownShortcut";
|
|
2
|
-
export interface WalkupScanDestinationData {
|
|
3
|
-
"dd:Name": string[];
|
|
4
|
-
"dd3:Hostname": string[];
|
|
5
|
-
"dd:ResourceURI": string[];
|
|
6
|
-
"wus:WalkupScanSettings": {
|
|
7
|
-
"scantype:ScanSettings": {
|
|
8
|
-
"dd:ScanPlexMode": string[];
|
|
9
|
-
}[];
|
|
10
|
-
"wus:Shortcut": KnownShortcut[];
|
|
11
|
-
}[];
|
|
12
|
-
}
|
|
13
|
-
export default class WalkupScanDestination {
|
|
14
|
-
private readonly data;
|
|
15
|
-
constructor(data: WalkupScanDestinationData);
|
|
16
|
-
static createWalkupScanDestination(content: string): Promise<WalkupScanDestination>;
|
|
17
|
-
get name(): string;
|
|
18
|
-
get hostname(): string;
|
|
19
|
-
get resourceURI(): string;
|
|
20
|
-
get shortcut(): null | KnownShortcut;
|
|
21
|
-
get scanPlexMode(): string | null;
|
|
22
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const xml2js_1 = require("xml2js");
|
|
4
|
-
const util_1 = require("util");
|
|
5
|
-
const parser = new xml2js_1.Parser();
|
|
6
|
-
const parseString = (0, util_1.promisify)(parser.parseString);
|
|
7
|
-
class WalkupScanDestination {
|
|
8
|
-
constructor(data) {
|
|
9
|
-
this.data = data;
|
|
10
|
-
}
|
|
11
|
-
static async createWalkupScanDestination(content) {
|
|
12
|
-
const parsed = await parseString(content);
|
|
13
|
-
return new WalkupScanDestination(parsed["wus:WalkupScanDestinations"]["wus:WalkupScanDestination"][0]);
|
|
14
|
-
}
|
|
15
|
-
get name() {
|
|
16
|
-
return this.data["dd:Name"][0];
|
|
17
|
-
}
|
|
18
|
-
get hostname() {
|
|
19
|
-
return this.data["dd3:Hostname"][0];
|
|
20
|
-
}
|
|
21
|
-
get resourceURI() {
|
|
22
|
-
return this.data["dd:ResourceURI"][0];
|
|
23
|
-
}
|
|
24
|
-
get shortcut() {
|
|
25
|
-
if (this.data.hasOwnProperty("wus:WalkupScanSettings")) {
|
|
26
|
-
return this.data["wus:WalkupScanSettings"]["0"]["wus:Shortcut"][0];
|
|
27
|
-
}
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
get scanPlexMode() {
|
|
31
|
-
if (this.data.hasOwnProperty("wus:WalkupScanSettings")) {
|
|
32
|
-
return this.data["wus:WalkupScanSettings"]["0"]["scantype:ScanSettings"][0]["dd:ScanPlexMode"][0];
|
|
33
|
-
}
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
exports.default = WalkupScanDestination;
|
|
38
|
-
//# sourceMappingURL=WalkupScanDestination.js.map
|