taro-bluetooth-print 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.
- package/LICENSE +21 -0
- package/README.md +201 -0
- package/dist/bluetooth/adapter.d.ts +31 -0
- package/dist/bluetooth/adapter.js +47 -0
- package/dist/bluetooth/adapter.js.map +1 -0
- package/dist/bluetooth/h5.d.ts +66 -0
- package/dist/bluetooth/h5.js +302 -0
- package/dist/bluetooth/h5.js.map +1 -0
- package/dist/bluetooth/harmony.d.ts +82 -0
- package/dist/bluetooth/harmony.js +342 -0
- package/dist/bluetooth/harmony.js.map +1 -0
- package/dist/bluetooth/index.d.ts +45 -0
- package/dist/bluetooth/index.js +175 -0
- package/dist/bluetooth/index.js.map +1 -0
- package/dist/bluetooth/rn.d.ts +35 -0
- package/dist/bluetooth/rn.js +368 -0
- package/dist/bluetooth/rn.js.map +1 -0
- package/dist/bluetooth/weapp.d.ts +16 -0
- package/dist/bluetooth/weapp.js +177 -0
- package/dist/bluetooth/weapp.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/printer/commands.d.ts +28 -0
- package/dist/printer/commands.js +90 -0
- package/dist/printer/commands.js.map +1 -0
- package/dist/printer/image.d.ts +59 -0
- package/dist/printer/image.js +258 -0
- package/dist/printer/image.js.map +1 -0
- package/dist/printer/index.d.ts +87 -0
- package/dist/printer/index.js +362 -0
- package/dist/printer/index.js.map +1 -0
- package/dist/printer/template.d.ts +95 -0
- package/dist/printer/template.js +262 -0
- package/dist/printer/template.js.map +1 -0
- package/dist/utils/buffer.d.ts +35 -0
- package/dist/utils/buffer.js +96 -0
- package/dist/utils/buffer.js.map +1 -0
- package/dist/utils/encoding.d.ts +26 -0
- package/dist/utils/encoding.js +149 -0
- package/dist/utils/encoding.js.map +1 -0
- package/dist/utils/logger.d.ts +18 -0
- package/dist/utils/logger.js +91 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TestPageTemplate = exports.ReceiptTemplate = exports.PrintTemplate = void 0;
|
|
4
|
+
const commands_1 = require("./commands");
|
|
5
|
+
const encoding_1 = require("../utils/encoding");
|
|
6
|
+
const image_1 = require("./image");
|
|
7
|
+
const logger_1 = require("../utils/logger");
|
|
8
|
+
/**
|
|
9
|
+
* 打印模板基类
|
|
10
|
+
*/
|
|
11
|
+
class PrintTemplate {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.commands = [];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 重置模板
|
|
17
|
+
*/
|
|
18
|
+
reset() {
|
|
19
|
+
this.commands = [];
|
|
20
|
+
this.commands.push(commands_1.Commands.INIT);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 添加文本
|
|
24
|
+
*/
|
|
25
|
+
addText(text, options) {
|
|
26
|
+
// 对齐方式
|
|
27
|
+
if ((options === null || options === void 0 ? void 0 : options.align) === 'center') {
|
|
28
|
+
this.commands.push(commands_1.Commands.ALIGN_CENTER);
|
|
29
|
+
}
|
|
30
|
+
else if ((options === null || options === void 0 ? void 0 : options.align) === 'right') {
|
|
31
|
+
this.commands.push(commands_1.Commands.ALIGN_RIGHT);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
this.commands.push(commands_1.Commands.ALIGN_LEFT);
|
|
35
|
+
}
|
|
36
|
+
// 字体样式
|
|
37
|
+
if (options === null || options === void 0 ? void 0 : options.bold) {
|
|
38
|
+
this.commands.push(commands_1.Commands.BOLD_ON);
|
|
39
|
+
}
|
|
40
|
+
if (options === null || options === void 0 ? void 0 : options.underline) {
|
|
41
|
+
this.commands.push(commands_1.Commands.UNDERLINE_ON);
|
|
42
|
+
}
|
|
43
|
+
// 字体大小
|
|
44
|
+
if ((options === null || options === void 0 ? void 0 : options.doubleHeight) && (options === null || options === void 0 ? void 0 : options.doubleWidth)) {
|
|
45
|
+
this.commands.push(commands_1.Commands.TEXT_LARGE);
|
|
46
|
+
}
|
|
47
|
+
else if (options === null || options === void 0 ? void 0 : options.doubleHeight) {
|
|
48
|
+
this.commands.push(commands_1.Commands.TEXT_MEDIUM);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.commands.push(commands_1.Commands.TEXT_NORMAL);
|
|
52
|
+
}
|
|
53
|
+
// 添加文本
|
|
54
|
+
this.commands.push((0, encoding_1.textToBuffer)(text));
|
|
55
|
+
this.commands.push(commands_1.Commands.LF);
|
|
56
|
+
// 重置样式
|
|
57
|
+
if (options === null || options === void 0 ? void 0 : options.bold) {
|
|
58
|
+
this.commands.push(commands_1.Commands.BOLD_OFF);
|
|
59
|
+
}
|
|
60
|
+
if (options === null || options === void 0 ? void 0 : options.underline) {
|
|
61
|
+
this.commands.push(commands_1.Commands.UNDERLINE_OFF);
|
|
62
|
+
}
|
|
63
|
+
if ((options === null || options === void 0 ? void 0 : options.doubleHeight) || (options === null || options === void 0 ? void 0 : options.doubleWidth)) {
|
|
64
|
+
this.commands.push(commands_1.Commands.TEXT_NORMAL);
|
|
65
|
+
}
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 添加换行
|
|
70
|
+
*/
|
|
71
|
+
addNewLine(count = 1) {
|
|
72
|
+
for (let i = 0; i < count; i++) {
|
|
73
|
+
this.commands.push(commands_1.Commands.LF);
|
|
74
|
+
}
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 添加分隔线
|
|
79
|
+
*/
|
|
80
|
+
addDivider(char = '-', count = 32) {
|
|
81
|
+
const line = char.repeat(count);
|
|
82
|
+
this.commands.push((0, encoding_1.textToBuffer)(line));
|
|
83
|
+
this.commands.push(commands_1.Commands.LF);
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 添加条形码
|
|
88
|
+
*/
|
|
89
|
+
addBarcode(content, options) {
|
|
90
|
+
const type = (options === null || options === void 0 ? void 0 : options.type) || 73; // 默认CODE128
|
|
91
|
+
const height = (options === null || options === void 0 ? void 0 : options.height) || 80;
|
|
92
|
+
// 对齐方式
|
|
93
|
+
if ((options === null || options === void 0 ? void 0 : options.align) === 'center') {
|
|
94
|
+
this.commands.push(commands_1.Commands.ALIGN_CENTER);
|
|
95
|
+
}
|
|
96
|
+
else if ((options === null || options === void 0 ? void 0 : options.align) === 'right') {
|
|
97
|
+
this.commands.push(commands_1.Commands.ALIGN_RIGHT);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
this.commands.push(commands_1.Commands.ALIGN_LEFT);
|
|
101
|
+
}
|
|
102
|
+
// 设置条码高度
|
|
103
|
+
this.commands.push(commands_1.Commands.setBarcodeHeight(height));
|
|
104
|
+
// 打印条码
|
|
105
|
+
this.commands.push(commands_1.Commands.printBarcode(content, type));
|
|
106
|
+
this.commands.push(commands_1.Commands.LF);
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 添加二维码
|
|
111
|
+
*/
|
|
112
|
+
addQRCode(content, options) {
|
|
113
|
+
const size = (options === null || options === void 0 ? void 0 : options.size) || 6;
|
|
114
|
+
// 对齐方式
|
|
115
|
+
if ((options === null || options === void 0 ? void 0 : options.align) === 'center') {
|
|
116
|
+
this.commands.push(commands_1.Commands.ALIGN_CENTER);
|
|
117
|
+
}
|
|
118
|
+
else if ((options === null || options === void 0 ? void 0 : options.align) === 'right') {
|
|
119
|
+
this.commands.push(commands_1.Commands.ALIGN_RIGHT);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
this.commands.push(commands_1.Commands.ALIGN_LEFT);
|
|
123
|
+
}
|
|
124
|
+
// 添加二维码命令
|
|
125
|
+
this.commands.push(...commands_1.Commands.printQRCode(content, size));
|
|
126
|
+
this.commands.push(commands_1.Commands.LF);
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* 添加切纸命令
|
|
131
|
+
*/
|
|
132
|
+
addCut() {
|
|
133
|
+
this.commands.push(commands_1.Commands.CUT);
|
|
134
|
+
return this;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.PrintTemplate = PrintTemplate;
|
|
138
|
+
/**
|
|
139
|
+
* 收据模板
|
|
140
|
+
*/
|
|
141
|
+
class ReceiptTemplate extends PrintTemplate {
|
|
142
|
+
constructor(data) {
|
|
143
|
+
super();
|
|
144
|
+
this.items = [];
|
|
145
|
+
this.total = 0;
|
|
146
|
+
this.title = data.title;
|
|
147
|
+
this.merchant = data.merchant;
|
|
148
|
+
this.items = data.items;
|
|
149
|
+
this.total = data.total || this.calculateTotal();
|
|
150
|
+
this.date = data.date || new Date().toLocaleString();
|
|
151
|
+
this.footer = data.footer;
|
|
152
|
+
this.logo = data.logo;
|
|
153
|
+
this.reset();
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* 计算总金额
|
|
157
|
+
*/
|
|
158
|
+
calculateTotal() {
|
|
159
|
+
return this.items.reduce((sum, item) => sum + (item.price * item.quantity), 0);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* 生成打印命令
|
|
163
|
+
*/
|
|
164
|
+
async build() {
|
|
165
|
+
this.reset();
|
|
166
|
+
try {
|
|
167
|
+
// 打印徽标(如果有)
|
|
168
|
+
if (this.logo) {
|
|
169
|
+
try {
|
|
170
|
+
const logoImage = await image_1.PrinterImage.processImage(this.logo, {
|
|
171
|
+
maxWidth: 300,
|
|
172
|
+
dithering: true
|
|
173
|
+
});
|
|
174
|
+
this.commands.push(commands_1.Commands.ALIGN_CENTER);
|
|
175
|
+
this.commands.push(logoImage);
|
|
176
|
+
this.commands.push(commands_1.Commands.LF);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
logger_1.logger.warn('徽标处理失败', error);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// 标题和商户信息
|
|
183
|
+
this.addText(this.title, { align: 'center', doubleHeight: true, doubleWidth: true });
|
|
184
|
+
this.addText(this.merchant, { align: 'center' });
|
|
185
|
+
this.addDivider();
|
|
186
|
+
// 商品明细表头
|
|
187
|
+
this.addText("商品名称 数量 单价 金额", { align: 'left' });
|
|
188
|
+
// 商品明细
|
|
189
|
+
for (const item of this.items) {
|
|
190
|
+
const price = item.price.toFixed(2);
|
|
191
|
+
const amount = (item.price * item.quantity).toFixed(2);
|
|
192
|
+
let line = item.name.padEnd(20, ' ');
|
|
193
|
+
line += String(item.quantity).padStart(5, ' ');
|
|
194
|
+
line += price.padStart(7, ' ');
|
|
195
|
+
line += amount.padStart(8, ' ');
|
|
196
|
+
this.addText(line, { align: 'left' });
|
|
197
|
+
}
|
|
198
|
+
// 分隔线和总计
|
|
199
|
+
this.addDivider();
|
|
200
|
+
this.addText(`总计: ${this.total.toFixed(2)}元`, { align: 'right', bold: true });
|
|
201
|
+
// 日期和页脚
|
|
202
|
+
this.addText(this.date, { align: 'center' });
|
|
203
|
+
if (this.footer) {
|
|
204
|
+
this.addNewLine();
|
|
205
|
+
this.addText(this.footer, { align: 'center' });
|
|
206
|
+
}
|
|
207
|
+
this.addNewLine();
|
|
208
|
+
this.addCut();
|
|
209
|
+
return this.commands;
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
logger_1.logger.error('生成收据模板失败', error);
|
|
213
|
+
return [commands_1.Commands.INIT, commands_1.Commands.CUT];
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
exports.ReceiptTemplate = ReceiptTemplate;
|
|
218
|
+
/**
|
|
219
|
+
* 测试页模板
|
|
220
|
+
*/
|
|
221
|
+
class TestPageTemplate extends PrintTemplate {
|
|
222
|
+
constructor(packageInfo = 'Taro蓝牙打印库 v1.0.0') {
|
|
223
|
+
super();
|
|
224
|
+
this.packageInfo = packageInfo;
|
|
225
|
+
this.reset();
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* 生成打印命令
|
|
229
|
+
*/
|
|
230
|
+
async build() {
|
|
231
|
+
this.reset();
|
|
232
|
+
// 标题
|
|
233
|
+
this.addText('打印测试页', { align: 'center', doubleHeight: true, doubleWidth: true });
|
|
234
|
+
this.addText(this.packageInfo, { align: 'center' });
|
|
235
|
+
this.addDivider();
|
|
236
|
+
// 文本样式测试
|
|
237
|
+
this.addText('【文本样式测试】', { align: 'left' });
|
|
238
|
+
this.addText('标准文本', { align: 'left' });
|
|
239
|
+
this.addText('粗体文本', { align: 'left', bold: true });
|
|
240
|
+
this.addText('下划线文本', { align: 'left', underline: true });
|
|
241
|
+
this.addText('大号文本', { align: 'left', doubleHeight: true, doubleWidth: true });
|
|
242
|
+
// 对齐方式测试
|
|
243
|
+
this.addText('【对齐方式测试】', { align: 'left' });
|
|
244
|
+
this.addText('左对齐文本', { align: 'left' });
|
|
245
|
+
this.addText('居中对齐文本', { align: 'center' });
|
|
246
|
+
this.addText('右对齐文本', { align: 'right' });
|
|
247
|
+
// 条码测试
|
|
248
|
+
this.addText('【条码测试】', { align: 'center' });
|
|
249
|
+
this.addBarcode('12345678', { align: 'center', height: 60 });
|
|
250
|
+
// 二维码测试
|
|
251
|
+
this.addText('【二维码测试】', { align: 'center' });
|
|
252
|
+
this.addQRCode('https://github.com/yourusername/taro-bluetooth-print', { align: 'center', size: 6 });
|
|
253
|
+
// 结束
|
|
254
|
+
this.addDivider();
|
|
255
|
+
this.addText('测试完成', { align: 'center' });
|
|
256
|
+
this.addNewLine(2);
|
|
257
|
+
this.addCut();
|
|
258
|
+
return this.commands;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
exports.TestPageTemplate = TestPageTemplate;
|
|
262
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/printer/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 二进制数据处理工具
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 合并多个ArrayBuffer
|
|
6
|
+
* @param buffers 要合并的ArrayBuffer数组
|
|
7
|
+
*/
|
|
8
|
+
export declare function concatArrayBuffers(buffers: ArrayBuffer[]): ArrayBuffer;
|
|
9
|
+
/**
|
|
10
|
+
* 合并多个Uint8Array
|
|
11
|
+
* @param arrays 要合并的Uint8Array数组
|
|
12
|
+
*/
|
|
13
|
+
export declare function concatUint8Arrays(arrays: Uint8Array[]): Uint8Array;
|
|
14
|
+
/**
|
|
15
|
+
* 将数字转换为低字节在前的Uint8Array(小端序)
|
|
16
|
+
* @param value 要转换的数字
|
|
17
|
+
* @param byteLength 字节长度
|
|
18
|
+
*/
|
|
19
|
+
export declare function numberToLEBytes(value: number, byteLength?: number): Uint8Array;
|
|
20
|
+
/**
|
|
21
|
+
* 将数字转换为高字节在前的Uint8Array(大端序)
|
|
22
|
+
* @param value 要转换的数字
|
|
23
|
+
* @param byteLength 字节长度
|
|
24
|
+
*/
|
|
25
|
+
export declare function numberToBEBytes(value: number, byteLength?: number): Uint8Array;
|
|
26
|
+
/**
|
|
27
|
+
* 将Uint8Array转换为十六进制字符串
|
|
28
|
+
* @param array Uint8Array数据
|
|
29
|
+
*/
|
|
30
|
+
export declare function uint8ArrayToHex(array: Uint8Array): string;
|
|
31
|
+
/**
|
|
32
|
+
* 将十六进制字符串转换为Uint8Array
|
|
33
|
+
* @param hex 十六进制字符串
|
|
34
|
+
*/
|
|
35
|
+
export declare function hexToUint8Array(hex: string): Uint8Array;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 二进制数据处理工具
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.hexToUint8Array = exports.uint8ArrayToHex = exports.numberToBEBytes = exports.numberToLEBytes = exports.concatUint8Arrays = exports.concatArrayBuffers = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* 合并多个ArrayBuffer
|
|
9
|
+
* @param buffers 要合并的ArrayBuffer数组
|
|
10
|
+
*/
|
|
11
|
+
function concatArrayBuffers(buffers) {
|
|
12
|
+
// 计算总长度
|
|
13
|
+
const totalLength = buffers.reduce((len, buffer) => len + buffer.byteLength, 0);
|
|
14
|
+
// 创建新的ArrayBuffer
|
|
15
|
+
const result = new Uint8Array(totalLength);
|
|
16
|
+
// 复制数据
|
|
17
|
+
let offset = 0;
|
|
18
|
+
for (const buffer of buffers) {
|
|
19
|
+
const view = new Uint8Array(buffer);
|
|
20
|
+
result.set(view, offset);
|
|
21
|
+
offset += buffer.byteLength;
|
|
22
|
+
}
|
|
23
|
+
return result.buffer;
|
|
24
|
+
}
|
|
25
|
+
exports.concatArrayBuffers = concatArrayBuffers;
|
|
26
|
+
/**
|
|
27
|
+
* 合并多个Uint8Array
|
|
28
|
+
* @param arrays 要合并的Uint8Array数组
|
|
29
|
+
*/
|
|
30
|
+
function concatUint8Arrays(arrays) {
|
|
31
|
+
// 计算总长度
|
|
32
|
+
const totalLength = arrays.reduce((len, array) => len + array.length, 0);
|
|
33
|
+
// 创建新的Uint8Array
|
|
34
|
+
const result = new Uint8Array(totalLength);
|
|
35
|
+
// 复制数据
|
|
36
|
+
let offset = 0;
|
|
37
|
+
for (const array of arrays) {
|
|
38
|
+
result.set(array, offset);
|
|
39
|
+
offset += array.length;
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
exports.concatUint8Arrays = concatUint8Arrays;
|
|
44
|
+
/**
|
|
45
|
+
* 将数字转换为低字节在前的Uint8Array(小端序)
|
|
46
|
+
* @param value 要转换的数字
|
|
47
|
+
* @param byteLength 字节长度
|
|
48
|
+
*/
|
|
49
|
+
function numberToLEBytes(value, byteLength = 2) {
|
|
50
|
+
const result = new Uint8Array(byteLength);
|
|
51
|
+
for (let i = 0; i < byteLength; i++) {
|
|
52
|
+
result[i] = (value >> (i * 8)) & 0xFF;
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
exports.numberToLEBytes = numberToLEBytes;
|
|
57
|
+
/**
|
|
58
|
+
* 将数字转换为高字节在前的Uint8Array(大端序)
|
|
59
|
+
* @param value 要转换的数字
|
|
60
|
+
* @param byteLength 字节长度
|
|
61
|
+
*/
|
|
62
|
+
function numberToBEBytes(value, byteLength = 2) {
|
|
63
|
+
const result = new Uint8Array(byteLength);
|
|
64
|
+
for (let i = 0; i < byteLength; i++) {
|
|
65
|
+
result[byteLength - 1 - i] = (value >> (i * 8)) & 0xFF;
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
exports.numberToBEBytes = numberToBEBytes;
|
|
70
|
+
/**
|
|
71
|
+
* 将Uint8Array转换为十六进制字符串
|
|
72
|
+
* @param array Uint8Array数据
|
|
73
|
+
*/
|
|
74
|
+
function uint8ArrayToHex(array) {
|
|
75
|
+
return Array.from(array)
|
|
76
|
+
.map(byte => byte.toString(16).padStart(2, '0'))
|
|
77
|
+
.join('');
|
|
78
|
+
}
|
|
79
|
+
exports.uint8ArrayToHex = uint8ArrayToHex;
|
|
80
|
+
/**
|
|
81
|
+
* 将十六进制字符串转换为Uint8Array
|
|
82
|
+
* @param hex 十六进制字符串
|
|
83
|
+
*/
|
|
84
|
+
function hexToUint8Array(hex) {
|
|
85
|
+
// 确保字符串长度为偶数
|
|
86
|
+
if (hex.length % 2 !== 0) {
|
|
87
|
+
hex = '0' + hex;
|
|
88
|
+
}
|
|
89
|
+
const result = new Uint8Array(hex.length / 2);
|
|
90
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
91
|
+
result[i / 2] = parseInt(hex.substring(i, i + 2), 16);
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
exports.hexToUint8Array = hexToUint8Array;
|
|
96
|
+
//# sourceMappingURL=buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../src/utils/buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 字符编码转换工具
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 将文本转换为Uint8Array
|
|
6
|
+
* @param text 文本内容
|
|
7
|
+
* @param encoding 编码方式
|
|
8
|
+
*/
|
|
9
|
+
export declare function textToBuffer(text: string, encoding?: 'utf-8' | 'gbk'): Uint8Array;
|
|
10
|
+
/**
|
|
11
|
+
* 将Uint8Array转换为文本
|
|
12
|
+
* @param buffer 二进制数据
|
|
13
|
+
* @param encoding 编码方式
|
|
14
|
+
*/
|
|
15
|
+
export declare function bufferToText(buffer: Uint8Array, encoding?: 'utf-8' | 'gbk'): string;
|
|
16
|
+
/**
|
|
17
|
+
* 检测文本是否包含中文字符
|
|
18
|
+
* @param text 要检测的文本
|
|
19
|
+
*/
|
|
20
|
+
export declare function containsChinese(text: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* 检测文本所需的编码
|
|
23
|
+
* 如果包含中文字符,返回'gbk',否则返回'utf-8'
|
|
24
|
+
* @param text 要检测的文本
|
|
25
|
+
*/
|
|
26
|
+
export declare function detectEncoding(text: string): 'utf-8' | 'gbk';
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 字符编码转换工具
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.detectEncoding = exports.containsChinese = exports.bufferToText = exports.textToBuffer = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* 将文本转换为Uint8Array
|
|
9
|
+
* @param text 文本内容
|
|
10
|
+
* @param encoding 编码方式
|
|
11
|
+
*/
|
|
12
|
+
function textToBuffer(text, encoding = 'utf-8') {
|
|
13
|
+
if (encoding === 'utf-8') {
|
|
14
|
+
return new TextEncoder().encode(text);
|
|
15
|
+
}
|
|
16
|
+
else if (encoding === 'gbk') {
|
|
17
|
+
return gbkEncode(text);
|
|
18
|
+
}
|
|
19
|
+
return new TextEncoder().encode(text);
|
|
20
|
+
}
|
|
21
|
+
exports.textToBuffer = textToBuffer;
|
|
22
|
+
/**
|
|
23
|
+
* 将Uint8Array转换为文本
|
|
24
|
+
* @param buffer 二进制数据
|
|
25
|
+
* @param encoding 编码方式
|
|
26
|
+
*/
|
|
27
|
+
function bufferToText(buffer, encoding = 'utf-8') {
|
|
28
|
+
if (encoding === 'utf-8') {
|
|
29
|
+
return new TextDecoder('utf-8').decode(buffer);
|
|
30
|
+
}
|
|
31
|
+
else if (encoding === 'gbk') {
|
|
32
|
+
return gbkDecode(buffer);
|
|
33
|
+
}
|
|
34
|
+
return new TextDecoder('utf-8').decode(buffer);
|
|
35
|
+
}
|
|
36
|
+
exports.bufferToText = bufferToText;
|
|
37
|
+
/**
|
|
38
|
+
* GBK编码表 (简化版本,仅包含常用字符)
|
|
39
|
+
* 实际应用中应该使用完整的GBK编码表或使用第三方库
|
|
40
|
+
*/
|
|
41
|
+
const GBK_MAP = {
|
|
42
|
+
// 基本ASCII字符 (0x00-0x7F)
|
|
43
|
+
// 中文字符映射 (简化示例)
|
|
44
|
+
'中': [0xD6, 0xD0],
|
|
45
|
+
'文': [0xCE, 0xC4],
|
|
46
|
+
'打': [0xB4, 0xF2],
|
|
47
|
+
'印': [0xD3, 0xA1],
|
|
48
|
+
'机': [0xBB, 0xFA],
|
|
49
|
+
// ... 更多字符
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* GBK编码 (简化实现)
|
|
53
|
+
* 在实际应用中,应该使用更完整的GBK编码库
|
|
54
|
+
* @param text 要编码的文本
|
|
55
|
+
*/
|
|
56
|
+
function gbkEncode(text) {
|
|
57
|
+
// 计算需要的字节数
|
|
58
|
+
let byteLength = 0;
|
|
59
|
+
for (const char of text) {
|
|
60
|
+
if (char.charCodeAt(0) <= 0x7F) {
|
|
61
|
+
byteLength += 1; // ASCII字符占1字节
|
|
62
|
+
}
|
|
63
|
+
else if (GBK_MAP[char]) {
|
|
64
|
+
byteLength += 2; // 中文字符占2字节
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
byteLength += 2; // 未知字符,假设占2字节
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const result = new Uint8Array(byteLength);
|
|
71
|
+
let offset = 0;
|
|
72
|
+
for (const char of text) {
|
|
73
|
+
if (char.charCodeAt(0) <= 0x7F) {
|
|
74
|
+
// ASCII字符
|
|
75
|
+
result[offset++] = char.charCodeAt(0);
|
|
76
|
+
}
|
|
77
|
+
else if (GBK_MAP[char]) {
|
|
78
|
+
// 中文字符
|
|
79
|
+
const bytes = GBK_MAP[char];
|
|
80
|
+
result[offset++] = bytes[0];
|
|
81
|
+
result[offset++] = bytes[1];
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// 未知字符,使用问号替代
|
|
85
|
+
result[offset++] = 0x3F; // ?
|
|
86
|
+
result[offset++] = 0x3F; // ?
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* GBK解码 (简化实现)
|
|
93
|
+
* 在实际应用中,应该使用更完整的GBK解码库
|
|
94
|
+
* @param buffer 要解码的数据
|
|
95
|
+
*/
|
|
96
|
+
function gbkDecode(buffer) {
|
|
97
|
+
let result = '';
|
|
98
|
+
// 反向映射表
|
|
99
|
+
const reverseMap = {};
|
|
100
|
+
for (const [char, bytes] of Object.entries(GBK_MAP)) {
|
|
101
|
+
const key = `${bytes[0]},${bytes[1]}`;
|
|
102
|
+
reverseMap[key] = char;
|
|
103
|
+
}
|
|
104
|
+
let i = 0;
|
|
105
|
+
while (i < buffer.length) {
|
|
106
|
+
if (buffer[i] <= 0x7F) {
|
|
107
|
+
// ASCII字符
|
|
108
|
+
result += String.fromCharCode(buffer[i]);
|
|
109
|
+
i += 1;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// 中文字符
|
|
113
|
+
if (i + 1 < buffer.length) {
|
|
114
|
+
const key = `${buffer[i]},${buffer[i + 1]}`;
|
|
115
|
+
if (reverseMap[key]) {
|
|
116
|
+
result += reverseMap[key];
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
result += '?';
|
|
120
|
+
}
|
|
121
|
+
i += 2;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// 数据不完整
|
|
125
|
+
result += '?';
|
|
126
|
+
i += 1;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* 检测文本是否包含中文字符
|
|
134
|
+
* @param text 要检测的文本
|
|
135
|
+
*/
|
|
136
|
+
function containsChinese(text) {
|
|
137
|
+
return /[\u4E00-\u9FFF]/.test(text);
|
|
138
|
+
}
|
|
139
|
+
exports.containsChinese = containsChinese;
|
|
140
|
+
/**
|
|
141
|
+
* 检测文本所需的编码
|
|
142
|
+
* 如果包含中文字符,返回'gbk',否则返回'utf-8'
|
|
143
|
+
* @param text 要检测的文本
|
|
144
|
+
*/
|
|
145
|
+
function detectEncoding(text) {
|
|
146
|
+
return containsChinese(text) ? 'gbk' : 'utf-8';
|
|
147
|
+
}
|
|
148
|
+
exports.detectEncoding = detectEncoding;
|
|
149
|
+
//# sourceMappingURL=encoding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 日志工具
|
|
3
|
+
*/
|
|
4
|
+
export declare enum LogLevel {
|
|
5
|
+
DEBUG = 0,
|
|
6
|
+
INFO = 1,
|
|
7
|
+
WARN = 2,
|
|
8
|
+
ERROR = 3,
|
|
9
|
+
NONE = 4
|
|
10
|
+
}
|
|
11
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
12
|
+
export declare function getLogLevel(): LogLevel;
|
|
13
|
+
export declare const logger: {
|
|
14
|
+
debug: (message: string, ...args: any[]) => void;
|
|
15
|
+
info: (message: string, ...args: any[]) => void;
|
|
16
|
+
warn: (message: string, ...args: any[]) => void;
|
|
17
|
+
error: (message: string, ...args: any[]) => void;
|
|
18
|
+
};
|