react-native-earl-thermal-printer 1.0.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.
Files changed (140) hide show
  1. package/README.md +441 -0
  2. package/android/build/.transforms/9bdecbc31aaf57a08a337d36d73153ec/results.bin +1 -0
  3. package/android/build/.transforms/9bdecbc31aaf57a08a337d36d73153ec/transformed/classes/classes_dex/classes.dex +0 -0
  4. package/android/build/.transforms/bc167481fd58833142c92ba32b0fc3e3/results.bin +1 -0
  5. package/android/build/.transforms/bc167481fd58833142c92ba32b0fc3e3/transformed/classes/classes_dex/classes.dex +0 -0
  6. package/android/build/generated/source/buildConfig/debug/com/pinmi/react/printer/BuildConfig.java +10 -0
  7. package/android/build/generated/source/codegen/java/com/pinmi/react/printer/NativeBLEPrinterSpec.java +70 -0
  8. package/android/build/generated/source/codegen/java/com/pinmi/react/printer/NativeNetPrinterSpec.java +70 -0
  9. package/android/build/generated/source/codegen/java/com/pinmi/react/printer/NativeUSBPrinterSpec.java +62 -0
  10. package/android/build/generated/source/codegen/jni/CMakeLists.txt +46 -0
  11. package/android/build/generated/source/codegen/jni/RNThermalReceiptPrinterSpec-generated.cpp +190 -0
  12. package/android/build/generated/source/codegen/jni/RNThermalReceiptPrinterSpec.h +49 -0
  13. package/android/build/generated/source/codegen/jni/react/renderer/components/RNThermalReceiptPrinterSpec/ComponentDescriptors.h +22 -0
  14. package/android/build/generated/source/codegen/jni/react/renderer/components/RNThermalReceiptPrinterSpec/EventEmitters.cpp +18 -0
  15. package/android/build/generated/source/codegen/jni/react/renderer/components/RNThermalReceiptPrinterSpec/EventEmitters.h +19 -0
  16. package/android/build/generated/source/codegen/jni/react/renderer/components/RNThermalReceiptPrinterSpec/Props.cpp +21 -0
  17. package/android/build/generated/source/codegen/jni/react/renderer/components/RNThermalReceiptPrinterSpec/Props.h +20 -0
  18. package/android/build/generated/source/codegen/jni/react/renderer/components/RNThermalReceiptPrinterSpec/RNThermalReceiptPrinterSpecJSI-generated.cpp +205 -0
  19. package/android/build/generated/source/codegen/jni/react/renderer/components/RNThermalReceiptPrinterSpec/RNThermalReceiptPrinterSpecJSI.h +355 -0
  20. package/android/build/generated/source/codegen/jni/react/renderer/components/RNThermalReceiptPrinterSpec/ShadowNodes.cpp +19 -0
  21. package/android/build/generated/source/codegen/jni/react/renderer/components/RNThermalReceiptPrinterSpec/ShadowNodes.h +25 -0
  22. package/android/build/generated/source/codegen/jni/react/renderer/components/RNThermalReceiptPrinterSpec/States.cpp +18 -0
  23. package/android/build/generated/source/codegen/jni/react/renderer/components/RNThermalReceiptPrinterSpec/States.h +23 -0
  24. package/android/build/generated/source/codegen/schema.json +514 -0
  25. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +13 -0
  26. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +18 -0
  27. package/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +5 -0
  28. package/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json +1 -0
  29. package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
  30. package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
  31. package/android/build/intermediates/compile_symbol_list/debug/R.txt +1 -0
  32. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -0
  33. package/android/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values/values.xml +4 -0
  34. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +2 -0
  35. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +2 -0
  36. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +2 -0
  37. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +2 -0
  38. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/BuildConfig.class +0 -0
  39. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/NativeBLEPrinterSpec.class +0 -0
  40. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/NativeNetPrinterSpec.class +0 -0
  41. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/NativeUSBPrinterSpec.class +0 -0
  42. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/RNBLEPrinterModule.class +0 -0
  43. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/RNNetPrinterModule.class +0 -0
  44. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/RNPrinterModule.class +0 -0
  45. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/RNPrinterPackage.class +0 -0
  46. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/RNUSBPrinterModule.class +0 -0
  47. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/BLEPrinterAdapter$1.class +0 -0
  48. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/BLEPrinterAdapter.class +0 -0
  49. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/BLEPrinterDevice.class +0 -0
  50. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/BLEPrinterDeviceId.class +0 -0
  51. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/NetPrinterAdapter$1.class +0 -0
  52. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/NetPrinterAdapter$2.class +0 -0
  53. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/NetPrinterAdapter.class +0 -0
  54. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/NetPrinterDevice.class +0 -0
  55. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/NetPrinterDeviceId.class +0 -0
  56. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/PrinterAdapter.class +0 -0
  57. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/PrinterDevice.class +0 -0
  58. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/PrinterDeviceId.class +0 -0
  59. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/USBPrinterAdapter$1.class +0 -0
  60. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/USBPrinterAdapter$2.class +0 -0
  61. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/USBPrinterAdapter.class +0 -0
  62. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/USBPrinterDevice.class +0 -0
  63. package/android/build/intermediates/javac/debug/classes/com/pinmi/react/printer/adapter/USBPrinterDeviceId.class +0 -0
  64. package/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +3 -0
  65. package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +23 -0
  66. package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +13 -0
  67. package/android/build/intermediates/navigation_json/debug/navigation.json +1 -0
  68. package/android/build/intermediates/packaged_res/debug/values/values.xml +4 -0
  69. package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
  70. package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +2 -0
  71. package/android/build/outputs/logs/manifest-merger-debug-report.txt +37 -0
  72. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  73. package/android/build.gradle +30 -0
  74. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  75. package/android/gradle/wrapper/gradle-wrapper.properties +6 -0
  76. package/android/gradlew +160 -0
  77. package/android/gradlew.bat +90 -0
  78. package/android/src/androidTest/java/com/pinmi/react/printer/ExampleInstrumentedTest.java +26 -0
  79. package/android/src/main/AndroidManifest.xml +10 -0
  80. package/android/src/main/java/com/pinmi/react/printer/RNBLEPrinterModule.java +91 -0
  81. package/android/src/main/java/com/pinmi/react/printer/RNNetPrinterModule.java +95 -0
  82. package/android/src/main/java/com/pinmi/react/printer/RNPrinterModule.java +24 -0
  83. package/android/src/main/java/com/pinmi/react/printer/RNPrinterPackage.java +57 -0
  84. package/android/src/main/java/com/pinmi/react/printer/RNUSBPrinterModule.java +79 -0
  85. package/android/src/main/java/com/pinmi/react/printer/adapter/BLEPrinterAdapter.java +391 -0
  86. package/android/src/main/java/com/pinmi/react/printer/adapter/BLEPrinterDevice.java +33 -0
  87. package/android/src/main/java/com/pinmi/react/printer/adapter/BLEPrinterDeviceId.java +38 -0
  88. package/android/src/main/java/com/pinmi/react/printer/adapter/NetPrinterAdapter.java +433 -0
  89. package/android/src/main/java/com/pinmi/react/printer/adapter/NetPrinterDevice.java +30 -0
  90. package/android/src/main/java/com/pinmi/react/printer/adapter/NetPrinterDeviceId.java +48 -0
  91. package/android/src/main/java/com/pinmi/react/printer/adapter/PrinterAdapter.java +29 -0
  92. package/android/src/main/java/com/pinmi/react/printer/adapter/PrinterDevice.java +17 -0
  93. package/android/src/main/java/com/pinmi/react/printer/adapter/PrinterDeviceId.java +8 -0
  94. package/android/src/main/java/com/pinmi/react/printer/adapter/USBPrinterAdapter.java +468 -0
  95. package/android/src/main/java/com/pinmi/react/printer/adapter/USBPrinterDevice.java +41 -0
  96. package/android/src/main/java/com/pinmi/react/printer/adapter/USBPrinterDeviceId.java +49 -0
  97. package/android/src/main/res/values/strings.xml +3 -0
  98. package/android/src/test/java/com/pinmi/react/printer/ExampleUnitTest.java +17 -0
  99. package/dist/NativeBLEPrinter.d.ts +15 -0
  100. package/dist/NativeBLEPrinter.d.ts.map +1 -0
  101. package/dist/NativeBLEPrinter.js +3 -0
  102. package/dist/NativeBLEPrinter.js.map +1 -0
  103. package/dist/NativeNetPrinter.d.ts +15 -0
  104. package/dist/NativeNetPrinter.d.ts.map +1 -0
  105. package/dist/NativeNetPrinter.js +3 -0
  106. package/dist/NativeNetPrinter.js.map +1 -0
  107. package/dist/NativeUSBPrinter.d.ts +13 -0
  108. package/dist/NativeUSBPrinter.d.ts.map +1 -0
  109. package/dist/NativeUSBPrinter.js +3 -0
  110. package/dist/NativeUSBPrinter.js.map +1 -0
  111. package/dist/index.d.ts +59 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +58 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/utils/EPToolkit.d.ts +9 -0
  116. package/dist/utils/EPToolkit.d.ts.map +1 -0
  117. package/dist/utils/EPToolkit.js +161 -0
  118. package/dist/utils/EPToolkit.js.map +1 -0
  119. package/dist/utils/buffer-helper.d.ts +12 -0
  120. package/dist/utils/buffer-helper.d.ts.map +1 -0
  121. package/dist/utils/buffer-helper.js +32 -0
  122. package/dist/utils/buffer-helper.js.map +1 -0
  123. package/ios/PrinterSDK/PrinterSDK.h +74 -0
  124. package/ios/PrinterSDK/libPrinterSDK.a +0 -0
  125. package/ios/RNBLEPrinter.h +24 -0
  126. package/ios/RNBLEPrinter.mm +251 -0
  127. package/ios/RNNetPrinter.h +25 -0
  128. package/ios/RNNetPrinter.mm +306 -0
  129. package/ios/RNThermalReceiptPrinter.xcodeproj/project.pbxproj +294 -0
  130. package/ios/RNThermalReceiptPrinter.xcworkspace/contents.xcworkspacedata +9 -0
  131. package/ios/RNUSBPrinter.h +19 -0
  132. package/ios/RNUSBPrinter.mm +80 -0
  133. package/package.json +70 -0
  134. package/react-native-earl-thermal-printer.podspec +22 -0
  135. package/src/NativeBLEPrinter.ts +16 -0
  136. package/src/NativeNetPrinter.ts +16 -0
  137. package/src/NativeUSBPrinter.ts +14 -0
  138. package/src/index.ts +160 -0
  139. package/src/utils/EPToolkit.ts +193 -0
  140. package/src/utils/buffer-helper.ts +42 -0
package/src/index.ts ADDED
@@ -0,0 +1,160 @@
1
+ import { NativeEventEmitter } from "react-native";
2
+
3
+ import NativeUSBPrinterModule from "./NativeUSBPrinter";
4
+ import NativeBLEPrinterModule from "./NativeBLEPrinter";
5
+ import NativeNetPrinterModule from "./NativeNetPrinter";
6
+ import * as EPToolkit from "./utils/EPToolkit";
7
+
8
+ // ── Types ───────────────────────────────────────────────────────────────────
9
+
10
+ export interface PrinterOptions {
11
+ beep?: boolean;
12
+ cut?: boolean;
13
+ tailingLine?: boolean;
14
+ encoding?: string;
15
+ }
16
+
17
+ export interface IUSBPrinter {
18
+ device_name: string;
19
+ device_id: number;
20
+ vendor_id: number;
21
+ product_id: number;
22
+ }
23
+
24
+ export interface IBLEPrinter {
25
+ device_name: string;
26
+ inner_mac_address: string;
27
+ }
28
+
29
+ export interface INetPrinter {
30
+ device_name: string;
31
+ host: string;
32
+ port: number;
33
+ }
34
+
35
+ // ── Helpers ─────────────────────────────────────────────────────────────────
36
+
37
+ const textTo64Buffer = (text: string, opts: PrinterOptions): string => {
38
+ const options = {
39
+ beep: false,
40
+ cut: false,
41
+ tailingLine: false,
42
+ encoding: "UTF8",
43
+ ...opts,
44
+ };
45
+ const buffer = EPToolkit.exchange_text(text, options);
46
+ return buffer.toString("base64");
47
+ };
48
+
49
+ const billTo64Buffer = (text: string, opts: PrinterOptions): string => {
50
+ const options = {
51
+ beep: true,
52
+ cut: true,
53
+ tailingLine: true,
54
+ encoding: "UTF8",
55
+ ...opts,
56
+ };
57
+ const buffer = EPToolkit.exchange_text(text, options);
58
+ return buffer.toString("base64");
59
+ };
60
+
61
+ // ── USB Printer ─────────────────────────────────────────────────────────────
62
+
63
+ export const USBPrinter = {
64
+ init: (): Promise<string> => NativeUSBPrinterModule.init(),
65
+
66
+ getDeviceList: (): Promise<IUSBPrinter[]> =>
67
+ NativeUSBPrinterModule.getDeviceList() as Promise<IUSBPrinter[]>,
68
+
69
+ connectPrinter: (
70
+ vendorId: number,
71
+ productId: number,
72
+ ): Promise<IUSBPrinter> =>
73
+ NativeUSBPrinterModule.connectPrinter(
74
+ vendorId,
75
+ productId,
76
+ ) as Promise<IUSBPrinter>,
77
+
78
+ closeConn: (): void => NativeUSBPrinterModule.closeConn(),
79
+
80
+ printText: (text: string, opts: PrinterOptions = {}): Promise<void> =>
81
+ NativeUSBPrinterModule.printRawData(textTo64Buffer(text, opts)),
82
+
83
+ printBill: (text: string, opts: PrinterOptions = {}): Promise<void> =>
84
+ NativeUSBPrinterModule.printRawData(billTo64Buffer(text, opts)),
85
+
86
+ printImage: (imageUrl: string): Promise<void> =>
87
+ NativeUSBPrinterModule.printImageData(imageUrl),
88
+
89
+ printQrCode: (qrCode: string): Promise<void> =>
90
+ NativeUSBPrinterModule.printQrCode(qrCode),
91
+ };
92
+
93
+ // ── BLE Printer ─────────────────────────────────────────────────────────────
94
+
95
+ export const BLEPrinter = {
96
+ init: (): Promise<string> => NativeBLEPrinterModule.init(),
97
+
98
+ getDeviceList: (): Promise<IBLEPrinter[]> =>
99
+ NativeBLEPrinterModule.getDeviceList() as Promise<IBLEPrinter[]>,
100
+
101
+ connectPrinter: (innerMacAddress: string): Promise<IBLEPrinter> =>
102
+ NativeBLEPrinterModule.connectPrinter(
103
+ innerMacAddress,
104
+ ) as Promise<IBLEPrinter>,
105
+
106
+ closeConn: (): void => NativeBLEPrinterModule.closeConn(),
107
+
108
+ printText: (text: string, opts: PrinterOptions = {}): Promise<void> =>
109
+ NativeBLEPrinterModule.printRawData(textTo64Buffer(text, opts)),
110
+
111
+ printBill: (text: string, opts: PrinterOptions = {}): Promise<void> =>
112
+ NativeBLEPrinterModule.printRawData(billTo64Buffer(text, opts)),
113
+
114
+ printImage: (imageUrl: string): Promise<void> =>
115
+ NativeBLEPrinterModule.printImageData(imageUrl),
116
+
117
+ printQrCode: (qrCode: string): Promise<void> =>
118
+ NativeBLEPrinterModule.printQrCode(qrCode),
119
+ };
120
+
121
+ // ── Net Printer ─────────────────────────────────────────────────────────────
122
+
123
+ export const NetPrinter = {
124
+ init: (): Promise<string> => NativeNetPrinterModule.init(),
125
+
126
+ getDeviceList: (): Promise<INetPrinter[]> =>
127
+ NativeNetPrinterModule.getDeviceList() as Promise<INetPrinter[]>,
128
+
129
+ connectPrinter: (host: string, port: number): Promise<INetPrinter> =>
130
+ NativeNetPrinterModule.connectPrinter(
131
+ host,
132
+ port,
133
+ ) as Promise<INetPrinter>,
134
+
135
+ closeConn: (): void => NativeNetPrinterModule.closeConn(),
136
+
137
+ printText: (text: string, opts: PrinterOptions = {}): Promise<void> =>
138
+ NativeNetPrinterModule.printRawData(textTo64Buffer(text, opts)),
139
+
140
+ printBill: (text: string, opts: PrinterOptions = {}): Promise<void> =>
141
+ NativeNetPrinterModule.printRawData(billTo64Buffer(text, opts)),
142
+
143
+ printImage: (imageUrl: string): Promise<void> =>
144
+ NativeNetPrinterModule.printImageData(imageUrl),
145
+
146
+ printQrCode: (qrCode: string): Promise<void> =>
147
+ NativeNetPrinterModule.printQrCode(qrCode),
148
+ };
149
+
150
+ // ── Events ──────────────────────────────────────────────────────────────────
151
+
152
+ export const NetPrinterEventEmitter = new NativeEventEmitter(
153
+ NativeNetPrinterModule,
154
+ );
155
+
156
+ export enum RN_THERMAL_RECEIPT_PRINTER_EVENTS {
157
+ EVENT_NET_PRINTER_SCANNED_SUCCESS = "scannerResolved",
158
+ EVENT_NET_PRINTER_SCANNING = "scannerRunning",
159
+ EVENT_NET_PRINTER_SCANNED_ERROR = "registerError",
160
+ }
@@ -0,0 +1,193 @@
1
+ import { Buffer } from "buffer";
2
+ import * as iconv from "iconv-lite";
3
+ // import * as Jimp from "jimp";
4
+
5
+ import BufferHelper from "./buffer-helper";
6
+
7
+ const init_printer_bytes = Buffer.from([27, 64]);
8
+ const l_start_bytes = Buffer.from([27, 97, 0]);
9
+ const l_end_bytes = Buffer.from([]);
10
+ const c_start_bytes = Buffer.from([27, 97, 1]);
11
+ const c_end_bytes = Buffer.from([]); // [ 27, 97, 0 ];
12
+ const r_start_bytes = Buffer.from([27, 97, 2]);
13
+ const r_end_bytes = Buffer.from([]);
14
+
15
+ const default_space_bytes = Buffer.from([27, 50]);
16
+
17
+ const reset_bytes = Buffer.from([27, 97, 0, 29, 33, 0, 27, 50]);
18
+ const m_start_bytes = Buffer.from([27, 33, 16, 28, 33, 8]);
19
+ const m_end_bytes = Buffer.from([27, 33, 0, 28, 33, 0]);
20
+ const b_start_bytes = Buffer.from([27, 33, 48, 28, 33, 12]);
21
+ const b_end_bytes = Buffer.from([27, 33, 0, 28, 33, 0]);
22
+ const cm_start_bytes = Buffer.from([27, 97, 1, 27, 33, 16, 28, 33, 8]);
23
+ const cm_end_bytes = Buffer.from([27, 33, 0, 28, 33, 0]);
24
+ const cb_start_bytes = Buffer.from([27, 97, 1, 27, 33, 48, 28, 33, 12]);
25
+ const cb_end_bytes = Buffer.from([27, 33, 0, 28, 33, 0]);
26
+ const cd_start_bytes = Buffer.from([27, 97, 1, 27, 33, 32, 28, 33, 4]);
27
+ const cd_end_bytes = Buffer.from([27, 33, 0, 28, 33, 0]);
28
+ const d_start_bytes = Buffer.from([27, 33, 32, 28, 33, 4]);
29
+ const d_end_bytes = Buffer.from([27, 33, 0, 28, 33, 0]);
30
+
31
+ const cut_bytes = Buffer.from([27, 105]);
32
+ const beep_bytes = Buffer.from([27, 66, 3, 2]);
33
+ const line_bytes = Buffer.from([10, 10, 10, 10, 10]);
34
+
35
+ const encoding_mappings_bytes: { [key: string]: Buffer } = {
36
+ // single byte encodings
37
+ CP437: Buffer.from([27, 116, 0]),
38
+ // multiple bit encodings
39
+ GB18030: Buffer.from([28, 38, 28, 67, 0]),
40
+ BIG5: Buffer.from([28, 38, 28, 67, 1]),
41
+ UTF8: Buffer.from([28, 38, 28, 67, 255]),
42
+ };
43
+
44
+ const options_controller = {
45
+ cut: cut_bytes,
46
+ beep: beep_bytes,
47
+ tailingLine: line_bytes,
48
+ encoding: encoding_mappings_bytes,
49
+ };
50
+
51
+ const controller: { [key: string]: Buffer } = {
52
+ "<M>": m_start_bytes,
53
+ "</M>": m_end_bytes,
54
+ "<B>": b_start_bytes,
55
+ "</B>": b_end_bytes,
56
+ "<D>": d_start_bytes,
57
+ "</D>": d_end_bytes,
58
+ "<C>": c_start_bytes,
59
+ "</C>": c_end_bytes,
60
+ "<CM>": cm_start_bytes,
61
+ "</CM>": cm_end_bytes,
62
+ "<CD>": cd_start_bytes,
63
+ "</CD>": cd_end_bytes,
64
+ "<CB>": cb_start_bytes,
65
+ "</CB>": cb_end_bytes,
66
+ "<L>": l_start_bytes,
67
+ "</L>": l_end_bytes,
68
+ "<R>": r_start_bytes,
69
+ "</R>": r_end_bytes,
70
+ };
71
+
72
+ type IOptions = {
73
+ beep: boolean;
74
+ cut: boolean;
75
+ tailingLine: boolean;
76
+ encoding: string;
77
+ };
78
+
79
+ const default_options: IOptions = {
80
+ beep: false,
81
+ cut: true,
82
+ tailingLine: true,
83
+ encoding: "UTF8",
84
+ };
85
+
86
+ export function exchange_text(text: string, options: IOptions): Buffer {
87
+ const m_options = options || default_options;
88
+
89
+ let bytes = new BufferHelper();
90
+ bytes.concat(init_printer_bytes);
91
+
92
+ // set encoding
93
+ if (
94
+ m_options["encoding"] &&
95
+ options_controller["encoding"][m_options["encoding"]]
96
+ ) {
97
+ bytes.concat(options_controller["encoding"][m_options["encoding"]]);
98
+ }
99
+
100
+ bytes.concat(default_space_bytes);
101
+
102
+ let temp = "";
103
+ for (let i = 0; i < text.length; i++) {
104
+ let ch = text[i];
105
+ switch (ch) {
106
+ case "<":
107
+ bytes.concat(iconv.encode(temp, m_options.encoding));
108
+ temp = "";
109
+ // add bytes for changing font and justifying text
110
+ for (const tag in controller) {
111
+ if (text.substring(i, i + tag.length) === tag) {
112
+ bytes.concat(controller[tag]);
113
+ i += tag.length - 1;
114
+ }
115
+ }
116
+ break;
117
+ case "\n":
118
+ temp = `${temp}${ch}`;
119
+ bytes.concat(iconv.encode(temp, m_options.encoding));
120
+ bytes.concat(reset_bytes);
121
+ temp = "";
122
+ break;
123
+ default:
124
+ temp = `${temp}${ch}`;
125
+ break;
126
+ }
127
+ }
128
+ temp.length && bytes.concat(iconv.encode(temp, m_options.encoding));
129
+
130
+ // check for "tailingLine" flag
131
+ if (
132
+ typeof m_options["tailingLine"] === "boolean" &&
133
+ options_controller["tailingLine"]
134
+ ) {
135
+ bytes.concat(options_controller["tailingLine"]);
136
+ }
137
+
138
+ // check for "cut" flag
139
+ if (typeof m_options["cut"] === "boolean" && options_controller["cut"]) {
140
+ bytes.concat(options_controller["cut"]);
141
+ }
142
+
143
+ // check for "beep" flag
144
+ if (typeof m_options["beep"] === "boolean" && options_controller["beep"]) {
145
+ bytes.concat(options_controller["beep"]);
146
+ }
147
+
148
+ return bytes.toBuffer();
149
+ }
150
+
151
+ // export async function exchange_image(
152
+ // imagePath: string,
153
+ // threshold: number
154
+ // ): Promise<Buffer> {
155
+ // let bytes = new BufferHelper();
156
+
157
+ // try {
158
+ // // need to find other solution cause jimp is not working in RN
159
+ // const raw_image = await Jimp.read(imagePath);
160
+ // const img = raw_image.resize(250, 250).quality(60).greyscale();
161
+
162
+ // let hex;
163
+ // const nl = img.bitmap.width % 256;
164
+ // const nh = Math.round(img.bitmap.width / 256);
165
+
166
+ // // data
167
+ // const data = Buffer.from([0, 0, 0]);
168
+ // const line = Buffer.from([10]);
169
+ // for (let i = 0; i < Math.round(img.bitmap.height / 24) + 1; i++) {
170
+ // // ESC * m nL nH bitmap
171
+ // let header = Buffer.from([27, 42, 33, nl, nh]);
172
+ // bytes.concat(header);
173
+ // for (let j = 0; j < img.bitmap.width; j++) {
174
+ // data[0] = data[1] = data[2] = 0; // Clear to Zero.
175
+ // for (let k = 0; k < 24; k++) {
176
+ // if (i * 24 + k < img.bitmap.height) {
177
+ // // if within the BMP size
178
+ // hex = img.getPixelColor(j, i * 24 + k);
179
+ // if (Jimp.intToRGBA(hex).r <= threshold) {
180
+ // data[Math.round(k / 8)] += 128 >> k % 8;
181
+ // }
182
+ // }
183
+ // }
184
+ // const dit = Buffer.from([data[0], data[1], data[2]]);
185
+ // bytes.concat(dit);
186
+ // }
187
+ // bytes.concat(line);
188
+ // } // data
189
+ // } catch (error) {
190
+ // console.log(error);
191
+ // }
192
+ // return bytes.toBuffer();
193
+ // }
@@ -0,0 +1,42 @@
1
+ import { Buffer } from "buffer";
2
+
3
+ export default class BufferHelper {
4
+ buffers: Buffer[];
5
+ size: number;
6
+
7
+ constructor() {
8
+ this.buffers = [];
9
+ this.size = 0;
10
+ }
11
+
12
+ get length() {
13
+ return this.size;
14
+ }
15
+
16
+ concat = (buffer: Buffer): BufferHelper => {
17
+ this.buffers.push(buffer);
18
+ this.size += buffer.length;
19
+ return this;
20
+ };
21
+
22
+ empty = (): BufferHelper => {
23
+ this.buffers = [];
24
+ this.size = 0;
25
+ return this;
26
+ };
27
+
28
+ toBuffer = (): Buffer => Buffer.concat(this.buffers, this.size);
29
+
30
+ toString = (encoding: BufferEncoding): string =>
31
+ this.toBuffer().toString(encoding);
32
+
33
+ load = (stream: any, callback: any) => {
34
+ stream.on("data", (trunk: Buffer) => {
35
+ this.concat(trunk);
36
+ });
37
+ stream.on("end", () => {
38
+ callback(null, this.toBuffer());
39
+ });
40
+ stream.once("error", callback);
41
+ };
42
+ }