node-hp-scan-to 1.4.0 → 1.4.1

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.
Files changed (69) hide show
  1. package/dist/ScanCaps.d.ts +8 -8
  2. package/dist/ScanCaps.js +18 -10
  3. package/dist/ScanCaps.js.map +1 -1
  4. package/dist/readDeviceCapabilities.js +4 -4
  5. package/dist/readDeviceCapabilities.js.map +1 -1
  6. package/dist/scanProcessing.d.ts +3 -2
  7. package/dist/scanProcessing.js +4 -4
  8. package/dist/scanProcessing.js.map +1 -1
  9. package/dist/test/DiscoveryTree.test.d.ts +1 -0
  10. package/dist/test/DiscoveryTree.test.js +68 -0
  11. package/dist/test/DiscoveryTree.test.js.map +1 -0
  12. package/dist/test/EtagEventTable.test.d.ts +1 -0
  13. package/dist/test/EtagEventTable.test.js +93 -0
  14. package/dist/test/EtagEventTable.test.js.map +1 -0
  15. package/dist/test/Job.test.d.ts +1 -0
  16. package/dist/test/Job.test.js +104 -0
  17. package/dist/test/Job.test.js.map +1 -0
  18. package/dist/test/JpegUtil.test.d.ts +1 -0
  19. package/dist/test/JpegUtil.test.js +53 -0
  20. package/dist/test/JpegUtil.test.js.map +1 -0
  21. package/dist/test/PathHelper.test.d.ts +1 -0
  22. package/dist/test/PathHelper.test.js +98 -0
  23. package/dist/test/PathHelper.test.js.map +1 -0
  24. package/dist/test/ScanCaps.test.d.ts +1 -0
  25. package/dist/test/ScanCaps.test.js +76 -0
  26. package/dist/test/ScanCaps.test.js.map +1 -0
  27. package/dist/test/ScanJobManifest.test.d.ts +1 -0
  28. package/dist/test/ScanJobManifest.test.js +56 -0
  29. package/dist/test/ScanJobManifest.test.js.map +1 -0
  30. package/dist/test/ScanJobSettings.test.d.ts +1 -0
  31. package/dist/test/ScanJobSettings.test.js +59 -0
  32. package/dist/test/ScanJobSettings.test.js.map +1 -0
  33. package/dist/test/ScanStatus.test.d.ts +1 -0
  34. package/dist/test/ScanStatus.test.js +75 -0
  35. package/dist/test/ScanStatus.test.js.map +1 -0
  36. package/dist/test/WalkupScanDestination.test.d.ts +1 -0
  37. package/dist/test/WalkupScanDestination.test.js +80 -0
  38. package/dist/test/WalkupScanDestination.test.js.map +1 -0
  39. package/dist/test/WalkupScanDestinations.test.d.ts +1 -0
  40. package/dist/test/WalkupScanDestinations.test.js +68 -0
  41. package/dist/test/WalkupScanDestinations.test.js.map +1 -0
  42. package/dist/test/WalkupScanManifest.test.d.ts +1 -0
  43. package/dist/test/WalkupScanManifest.test.js +46 -0
  44. package/dist/test/WalkupScanManifest.test.js.map +1 -0
  45. package/dist/test/WalkupScanToCompCaps.test.d.ts +1 -0
  46. package/dist/test/WalkupScanToCompCaps.test.js +56 -0
  47. package/dist/test/WalkupScanToCompCaps.test.js.map +1 -0
  48. package/dist/test/WalkupScanToCompDestination.test.d.ts +1 -0
  49. package/dist/test/WalkupScanToCompDestination.test.js +58 -0
  50. package/dist/test/WalkupScanToCompDestination.test.js.map +1 -0
  51. package/dist/test/WalkupScanToCompDestinations.test.d.ts +1 -0
  52. package/dist/test/WalkupScanToCompDestinations.test.js +58 -0
  53. package/dist/test/WalkupScanToCompDestinations.test.js.map +1 -0
  54. package/dist/test/WalkupScanToCompEvent.test.d.ts +1 -0
  55. package/dist/test/WalkupScanToCompEvent.test.js +46 -0
  56. package/dist/test/WalkupScanToCompEvent.test.js.map +1 -0
  57. package/dist/test/WalkupScanToCompManifest.test.d.ts +1 -0
  58. package/dist/test/WalkupScanToCompManifest.test.js +46 -0
  59. package/dist/test/WalkupScanToCompManifest.test.js.map +1 -0
  60. package/dist/test/clean.d.ts +1 -0
  61. package/dist/test/clean.js +21 -0
  62. package/dist/test/clean.js.map +1 -0
  63. package/dist/test/scanProcessing.test.d.ts +1 -0
  64. package/dist/test/scanProcessing.test.js +103 -0
  65. package/dist/test/scanProcessing.test.js.map +1 -0
  66. package/package.json +1 -1
  67. package/src/ScanCaps.ts +30 -20
  68. package/src/readDeviceCapabilities.ts +4 -4
  69. package/src/scanProcessing.ts +6 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanProcessing.test.js","sourceRoot":"","sources":["../../test/scanProcessing.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe } from \"mocha\";\nimport { expect } from \"chai\";\nimport {\n getScanWidth,\n getScanHeight,\n ScanConfig,\n} from \"../src/scanProcessing\";\nimport { DeviceCapabilities } from \"../src/DeviceCapabilities\";\nimport { InputSource } from \"../src/InputSource\";\n\ndescribe(\"scanProcessing\", () => {\n let scanConfig: ScanConfig;\n let deviceCapabilities: DeviceCapabilities;\n\n beforeEach(async () => {\n scanConfig = {\n resolution: 200,\n width: null,\n height: null,\n directoryConfig: {\n directory: undefined,\n tempDirectory: undefined,\n filePattern: undefined,\n },\n };\n deviceCapabilities = {\n supportsMultiItemScanFromPlaten: false,\n useWalkupScanToComp: false,\n platenMaxWidth: null,\n platenMaxHeight: null,\n adfMaxWidth: null,\n adfMaxHeight: null,\n };\n });\n\n describe(\"getScanWidth\", async () => {\n const inputSource = InputSource.Adf;\n describe(\"Adf\", async () => {\n it(\"Does not define a value if nothing provided\", async () => {\n const width = getScanWidth(scanConfig, inputSource, deviceCapabilities);\n expect(width).to.be.eq(null);\n });\n it(\"Does not define a value if negative provided\", async () => {\n scanConfig.width = -1;\n const width = getScanWidth(scanConfig, inputSource, deviceCapabilities);\n expect(width).to.be.eq(null);\n });\n it(\"Define the value if no max available from device\", async () => {\n scanConfig.width = 2583;\n const width = getScanWidth(scanConfig, inputSource, deviceCapabilities);\n expect(width).to.be.eq(2583);\n });\n });\n describe(\"Platen\", async () => {\n const inputSource = InputSource.Platen;\n it(\"Does not define a value if nothing provided\", async () => {\n const width = getScanWidth(scanConfig, inputSource, deviceCapabilities);\n expect(width).to.be.eq(null);\n });\n it(\"Does not define a value if negative provided\", async () => {\n scanConfig.width = -1;\n const width = getScanWidth(scanConfig, inputSource, deviceCapabilities);\n expect(width).to.be.eq(null);\n });\n it(\"Define the value if no max available from device\", async () => {\n scanConfig.width = 2583;\n const width = getScanWidth(scanConfig, inputSource, deviceCapabilities);\n expect(width).to.be.eq(2583);\n });\n });\n });\n\n describe(\"getScanHeight\", async () => {\n const inputSource = InputSource.Adf;\n describe(\"Adf\", async () => {\n it(\"Does not define a value if nothing provided\", async () => {\n const height = getScanHeight(scanConfig, inputSource, deviceCapabilities);\n expect(height).to.be.eq(null);\n });\n it(\"Does not define a value if negative provided\", async () => {\n scanConfig.height = -1;\n const height = getScanHeight(scanConfig, inputSource, deviceCapabilities);\n expect(height).to.be.eq(null);\n });\n it(\"Define the value if no max available from device\", async () => {\n scanConfig.height = 1269;\n const width = getScanHeight(scanConfig, inputSource, deviceCapabilities);\n expect(width).to.be.eq(1269);\n });\n });\n describe(\"Platen\", async () => {\n const inputSource = InputSource.Platen;\n it(\"Does not define a value if nothing provided\", async () => {\n const height = getScanHeight(scanConfig, inputSource, deviceCapabilities);\n expect(height).to.be.eq(null);\n });\n it(\"Does not define a value if negative provided\", async () => {\n scanConfig.height = -1;\n const height = getScanHeight(scanConfig, inputSource, deviceCapabilities);\n expect(height).to.be.eq(null);\n });\n it(\"Define the value if no max available from device\", async () => {\n scanConfig.height = 1269;\n const height = getScanHeight(scanConfig, inputSource, deviceCapabilities);\n expect(height).to.be.eq(1269);\n });\n });\n });\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-hp-scan-to",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Scan document to Computer for HP All-in-One Printers",
5
5
  "keywords": [
6
6
  "Officejet",
package/src/ScanCaps.ts CHANGED
@@ -8,14 +8,14 @@ export interface ScanCapsData {
8
8
  ScanCaps: {
9
9
  Platen: {
10
10
  InputSourceCaps: {
11
- MaxWidth: number;
12
- MaxHeight: number;
11
+ MaxWidth: string[];
12
+ MaxHeight: string[];
13
13
  }[];
14
14
  }[];
15
15
  Adf: {
16
16
  InputSourceCaps: {
17
- MaxWidth: number;
18
- MaxHeight: number;
17
+ MaxWidth: string[];
18
+ MaxHeight: string[];
19
19
  }[];
20
20
  }[];
21
21
  };
@@ -33,29 +33,39 @@ export default class ScanCaps {
33
33
  return new ScanCaps(parsed);
34
34
  }
35
35
 
36
- get PlatenMaxWidth(): number | null {
37
- return (
38
- this.data["ScanCaps"]["Platen"][0]["InputSourceCaps"][0]["MaxWidth"] ||
39
- null
36
+ get platenMaxWidth(): number | null {
37
+ return Number.parseInt(
38
+ this.data["ScanCaps"]["Platen"][0]["InputSourceCaps"][0]["MaxWidth"][0],
39
+ 10,
40
40
  );
41
41
  }
42
42
 
43
- get PlatenMaxHeight(): number | null {
44
- return (
45
- this.data["ScanCaps"]["Platen"][0]["InputSourceCaps"][0]["MaxHeight"] ||
46
- null
43
+ get platenMaxHeight(): number | null {
44
+ return Number.parseInt(
45
+ this.data["ScanCaps"]["Platen"][0]["InputSourceCaps"][0]["MaxHeight"][0],
46
+ 10,
47
47
  );
48
48
  }
49
49
 
50
- get AdfMaxWidth(): number | null {
51
- return (
52
- this.data["ScanCaps"]["Adf"][0]["InputSourceCaps"][0]["MaxWidth"] || null
53
- );
50
+ get adfMaxWidth(): number | null {
51
+ if (Object.prototype.hasOwnProperty.call(this.data["ScanCaps"], "Adf")) {
52
+ return Number.parseInt(
53
+ this.data["ScanCaps"]["Adf"][0]["InputSourceCaps"][0]["MaxWidth"][0],
54
+ 10,
55
+ );
56
+ } else {
57
+ return null;
58
+ }
54
59
  }
55
60
 
56
- get AdfMaxHeight(): number | null {
57
- return (
58
- this.data["ScanCaps"]["Adf"][0]["InputSourceCaps"][0]["MaxHeight"] || null
59
- );
61
+ get adfMaxHeight(): number | null {
62
+ if (Object.prototype.hasOwnProperty.call(this.data["ScanCaps"], "Adf")) {
63
+ return Number.parseInt(
64
+ this.data["ScanCaps"]["Adf"][0]["InputSourceCaps"][0]["MaxHeight"][0],
65
+ 10,
66
+ );
67
+ } else {
68
+ return null;
69
+ }
60
70
  }
61
71
  }
@@ -44,9 +44,9 @@ export async function readDeviceCapabilities(): Promise<DeviceCapabilities> {
44
44
  return {
45
45
  supportsMultiItemScanFromPlaten,
46
46
  useWalkupScanToComp: walkupScanToCompCaps != null,
47
- platenMaxWidth: scanCaps?.PlatenMaxWidth || null,
48
- platenMaxHeight: scanCaps?.PlatenMaxHeight || null,
49
- adfMaxWidth: scanCaps?.AdfMaxWidth || null,
50
- adfMaxHeight: scanCaps?.AdfMaxHeight || null,
47
+ platenMaxWidth: scanCaps?.platenMaxWidth || null,
48
+ platenMaxHeight: scanCaps?.platenMaxHeight || null,
49
+ adfMaxWidth: scanCaps?.adfMaxWidth || null,
50
+ adfMaxHeight: scanCaps?.adfMaxHeight || null,
51
51
  };
52
52
  }
@@ -362,12 +362,12 @@ function isPdf(
362
362
 
363
363
  export function getScanWidth(
364
364
  scanConfig: ScanConfig,
365
- inputSource: "Adf" | "Platen",
365
+ inputSource: InputSource,
366
366
  deviceCapabilities: DeviceCapabilities,
367
367
  ) {
368
368
  if (scanConfig.width && scanConfig.width > 0) {
369
369
  const maxWidth =
370
- inputSource === "Adf"
370
+ inputSource === InputSource.Adf
371
371
  ? deviceCapabilities.adfMaxWidth
372
372
  : deviceCapabilities.platenMaxWidth;
373
373
 
@@ -383,12 +383,12 @@ export function getScanWidth(
383
383
 
384
384
  export function getScanHeight(
385
385
  scanConfig: ScanConfig,
386
- inputSource: "Adf" | "Platen",
386
+ inputSource: InputSource,
387
387
  deviceCapabilities: DeviceCapabilities,
388
388
  ) {
389
389
  if (scanConfig.height && scanConfig.height > 0) {
390
390
  const maxHeight =
391
- inputSource === "Adf"
391
+ inputSource === InputSource.Adf
392
392
  ? deviceCapabilities.adfMaxHeight
393
393
  : deviceCapabilities.platenMaxHeight;
394
394
 
@@ -533,10 +533,10 @@ export async function scanFromAdf(
533
533
  destinationFolder = folder;
534
534
  }
535
535
 
536
- const scanWidth = getScanWidth(adfAutoScanConfig, "Adf", deviceCapabilities);
536
+ const scanWidth = getScanWidth(adfAutoScanConfig, InputSource.Adf, deviceCapabilities);
537
537
  const scanHeight = getScanHeight(
538
538
  adfAutoScanConfig,
539
- "Adf",
539
+ InputSource.Adf,
540
540
  deviceCapabilities,
541
541
  );
542
542