ms-vite-plugin 1.5.12 → 1.5.13

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 (59) hide show
  1. package/dist/build/luaBundle.js +2 -2
  2. package/dist/build/scriptProtect.js +2 -2
  3. package/docs/api/ai.md +16 -16
  4. package/docs/api/config.md +3 -3
  5. package/docs/api/dotocr.md +2 -2
  6. package/docs/api/file.md +18 -18
  7. package/docs/api/hid.md +2 -2
  8. package/docs/api/hotUpdate.md +2 -2
  9. package/docs/api/http.md +4 -4
  10. package/docs/api/image.md +15 -15
  11. package/docs/api/jbclear.md +12 -12
  12. package/docs/api/jbdevice.md +25 -25
  13. package/docs/api/jbdraw.md +139 -0
  14. package/docs/api/jbdylib.md +6 -6
  15. package/docs/api/jbpower.md +85 -0
  16. package/docs/api/jbshell.md +2 -2
  17. package/docs/api/jbsystem.md +6 -6
  18. package/docs/api/jbvpn.md +7 -7
  19. package/docs/api/mysql.md +4 -4
  20. package/docs/api/netCard.md +4 -73
  21. package/docs/api/node.md +2 -2
  22. package/docs/api/opencv.md +116 -116
  23. package/docs/api/plist.md +2 -2
  24. package/docs/api/sqlite.md +231 -0
  25. package/docs/api/system.md +1 -1
  26. package/docs/api/thread.md +2 -2
  27. package/docs/api/tomatoocr.md +2 -2
  28. package/docs/api/yolo.md +2 -2
  29. package/docs/api/yolocls.md +6 -6
  30. package/docs/api/zipFile.md +113 -0
  31. package/docs/apicn/ai.md +16 -16
  32. package/docs/apicn/config.md +2 -2
  33. package/docs/apicn/dotocr.md +2 -2
  34. package/docs/apicn/file.md +16 -16
  35. package/docs/apicn/hid.md +4 -4
  36. package/docs/apicn/hotUpdate.md +2 -2
  37. package/docs/apicn/http.md +4 -4
  38. package/docs/apicn/image.md +13 -13
  39. package/docs/apicn/mysql.md +4 -4
  40. package/docs/apicn/netCard.md +4 -73
  41. package/docs/apicn/node.md +2 -2
  42. package/docs/apicn/sqlite.md +197 -0
  43. package/docs/apicn/system.md +3 -3
  44. package/docs/apicn/thread.md +2 -2
  45. package/docs/apicn/yolo.md +2 -2
  46. package/docs/apicn/yolocls.md +6 -6
  47. package/docs/apicn/zipFile.md +113 -0
  48. package/docs/apilua/jbdraw.md +141 -0
  49. package/docs/apilua/jbpower.md +87 -0
  50. package/docs/apilua/netCard.md +3 -77
  51. package/docs/apilua/sqlite.md +204 -0
  52. package/docs/apilua/zipFile.md +123 -0
  53. package/docs/apipython/jbdraw.md +147 -0
  54. package/docs/apipython/jbpower.md +84 -0
  55. package/docs/apipython/netCard.md +3 -74
  56. package/docs/apipython/overview.md +1 -1
  57. package/docs/apipython/sqlite.md +181 -0
  58. package/docs/apipython/zipFile.md +117 -0
  59. package/package.json +1 -1
@@ -225,7 +225,7 @@ if (是否删除成功) {
225
225
  #### 读取文件 - 读取整个文件内容。
226
226
 
227
227
  ```typescript
228
- function 读取文件(文件路径: 字符串): 字符串 | null;
228
+ function 读取文件(文件路径: 字符串): 字符串 | undefined;
229
229
  ```
230
230
 
231
231
  **参数:**
@@ -238,13 +238,13 @@ function 读取文件(文件路径: 字符串): 字符串 | null;
238
238
 
239
239
  | 类型 | 描述 |
240
240
  | ---------------- | ------------------------------- |
241
- | `字符串 \| null` | 文件内容;失败或不存在返回 null |
241
+ | `字符串 \| undefined` | 文件内容;失败或不存在返回 undefined |
242
242
 
243
243
  **示例:**
244
244
 
245
245
  ```javascript
246
246
  const 文件内容 = $文件.读取文件("/path/to/file.txt");
247
- if (文件内容 !== null) {
247
+ if (文件内容 !== undefined) {
248
248
  $打印信息日志(`文件内容: ${文件内容}`);
249
249
  } else {
250
250
  $打印警告日志("文件不存在或读取失败");
@@ -259,7 +259,7 @@ if (文件内容 !== null) {
259
259
  - res 目录文件只读,不能修改。
260
260
 
261
261
  ```typescript
262
- function 读取资源文件(文件名: 字符串): 字符串 | null;
262
+ function 读取资源文件(文件名: 字符串): 字符串 | undefined;
263
263
  ```
264
264
 
265
265
  **参数:**
@@ -272,7 +272,7 @@ function 读取资源文件(文件名: 字符串): 字符串 | null;
272
272
 
273
273
  | 类型 | 描述 |
274
274
  | -------------- | --------------------------------------- |
275
- | `字符串\|null` | 文件内容 文件不存在或读取失败 返回 null |
275
+ | `字符串 \| undefined` | 文件内容 文件不存在或读取失败 返回 undefined |
276
276
 
277
277
  **示例:**
278
278
 
@@ -292,7 +292,7 @@ if (配置文件内容) {
292
292
  适用于需要真实文件路径的场景(如模型文件、音视频)。用完后应调用 `清理资源文件`。
293
293
 
294
294
  ```typescript
295
- function 获取资源文件(文件名: 字符串): 字符串 | null;
295
+ function 获取资源文件(文件名: 字符串): 字符串 | undefined;
296
296
  ```
297
297
 
298
298
  **参数:**
@@ -305,7 +305,7 @@ function 获取资源文件(文件名: 字符串): 字符串 | null;
305
305
 
306
306
  | 类型 | 描述 |
307
307
  | -------------- | ------------------------------------------ |
308
- | `字符串\|null` | 本地文件绝对路径;失败或不存在时返回 null |
308
+ | `字符串 \| undefined` | 本地文件绝对路径;失败或不存在时返回 undefined |
309
309
 
310
310
  **示例:**
311
311
 
@@ -396,7 +396,7 @@ if (是否追加成功) {
396
396
  #### 读取指定行 - 读取文件指定行的内容。
397
397
 
398
398
  ```typescript
399
- function 读取指定行(文件路径: 字符串, 行号: 数字): 字符串 | null;
399
+ function 读取指定行(文件路径: 字符串, 行号: 数字): 字符串 | undefined;
400
400
  ```
401
401
 
402
402
  **参数:**
@@ -410,7 +410,7 @@ function 读取指定行(文件路径: 字符串, 行号: 数字): 字符串 | n
410
410
 
411
411
  | 类型 | 描述 |
412
412
  | ---------------- | ----------------------------- |
413
- | `字符串 \| null` | 行内容;失败或不存在返回 null |
413
+ | `字符串 \| undefined` | 行内容;失败或不存在返回 undefined |
414
414
 
415
415
  **示例:**
416
416
 
@@ -422,7 +422,7 @@ $打印信息日志(`第一行内容: ${第一行内容}`);
422
422
  #### 读取所有行 - 读取文件所有行内容。
423
423
 
424
424
  ```typescript
425
- function 读取所有行(文件路径: 字符串): 数组<字符串> | null;
425
+ function 读取所有行(文件路径: 字符串): 数组<字符串> | undefined;
426
426
  ```
427
427
 
428
428
  **参数:**
@@ -435,13 +435,13 @@ function 读取所有行(文件路径: 字符串): 数组<字符串> | null;
435
435
 
436
436
  | 类型 | 描述 |
437
437
  | ---------------------- | ----------------------------- |
438
- | `数组<字符串> \| null` | 所有行内容数组;失败返回 null |
438
+ | `数组<字符串> \| undefined` | 所有行内容数组;失败返回 undefined |
439
439
 
440
440
  **示例:**
441
441
 
442
442
  ```javascript
443
443
  const 所有行内容 = $文件.读取所有行("/path/to/file.txt");
444
- if (所有行内容 !== null) {
444
+ if (所有行内容 !== undefined) {
445
445
  所有行内容.forEach((line, index) => {
446
446
  $打印信息日志(`第${index + 1}行: ${line}`);
447
447
  });
@@ -462,7 +462,7 @@ function 删除指定行(文件路径: 字符串, 行号: 数字, 包含内容?:
462
462
  | ---------- | ------ | -------- | ------ | ----------------------------------- |
463
463
  | `文件路径` | 字符串 | 是 | - | 文件路径 |
464
464
  | `行号` | 数字 | 是 | - | 行号(-1 表示不按行号删除) |
465
- | `包含内容` | 字符串 | 否 | null | 包含的内容(null 表示不按内容删除) |
465
+ | `包含内容` | 字符串 | 否 | | 包含的内容;省略则不按内容删除 |
466
466
 
467
467
  **返回值:**
468
468
 
@@ -474,7 +474,7 @@ function 删除指定行(文件路径: 字符串, 行号: 数字, 包含内容?:
474
474
 
475
475
  ```javascript
476
476
  // 删除第3行
477
- $文件.删除指定行("/path/to/file.txt", 3, null);
477
+ $文件.删除指定行("/path/to/file.txt", 3);
478
478
 
479
479
  // 删除包含"error"的行
480
480
  $文件.删除指定行("/path/to/file.txt", -1, "error");
@@ -488,7 +488,7 @@ $文件.删除指定行("/path/to/file.txt", 5, "debug");
488
488
  #### 计算文件 MD5。
489
489
 
490
490
  ```typescript
491
- function 计算文件MD5(文件路径: 字符串): 字符串 | null;
491
+ function 计算文件MD5(文件路径: 字符串): 字符串 | undefined;
492
492
  ```
493
493
 
494
494
  **参数:**
@@ -501,7 +501,7 @@ function 计算文件MD5(文件路径: 字符串): 字符串 | null;
501
501
 
502
502
  | 类型 | 描述 |
503
503
  | ---------------- | ------------------------- |
504
- | `字符串 \| null` | 文件 MD5 值 失败返回 null |
504
+ | `字符串 \| undefined` | 文件 MD5 值 失败返回 undefined |
505
505
 
506
506
  **示例:**
507
507
 
package/docs/apicn/hid.md CHANGED
@@ -1125,13 +1125,13 @@ $HID.APP切入前台();
1125
1125
  function 当前打开应用信息(): {
1126
1126
  name: 字符串;
1127
1127
  bundleId: 字符串;
1128
- } | null;
1128
+ } | undefined;
1129
1129
  ```
1130
1130
 
1131
1131
  **返回值:**
1132
1132
  | 类型 | 描述 |
1133
1133
  | ---- | ---- |
1134
- | 对象 \| null | 当前打开应用信息或 null(如果不可用) |
1134
+ | 对象 \| undefined | 当前打开应用信息或 undefined(如果不可用) |
1135
1135
 
1136
1136
  **返回对象属性:**
1137
1137
  | 属性 | 类型 | 描述 |
@@ -1179,13 +1179,13 @@ $HID.设置剪切板内容("你好,世界!");
1179
1179
  获取当前剪切板内容。
1180
1180
 
1181
1181
  ```typescript
1182
- function 获取剪切板内容(): 字符串 | null;
1182
+ function 获取剪切板内容(): 字符串;
1183
1183
  ```
1184
1184
 
1185
1185
  **返回值:**
1186
1186
  | 类型 | 描述 |
1187
1187
  | ---- | ---- |
1188
- | 字符串 \| null | 剪切板内容 |
1188
+ | 字符串 | 剪切板内容,空则为 `""` |
1189
1189
 
1190
1190
  **示例:**
1191
1191
 
@@ -42,7 +42,7 @@ interface 热更新服务器响应数据结构 {
42
42
  dialog: 布尔值; // 是否用对话框展示
43
43
  msg: 字符串; // 对话框消息
44
44
  force: 布尔值; // 是否强制更新
45
- md5?: 字符串; // 更新包MD5值(可选)
45
+ md5: 字符串 | null; // 更新包 MD5;没有时为 null
46
46
  }
47
47
  ```
48
48
 
@@ -56,7 +56,7 @@ interface 热更新服务器响应数据结构 {
56
56
  | `dialog` | 布尔值 | 是 | - | 是否用对话框展示 |
57
57
  | `msg` | 字符串 | 是 | - | 对话框消息 |
58
58
  | `force` | 布尔值 | 是 | - | 是否强制更新 |
59
- | `md5` | 字符串 | 否 | - | 更新包 MD5 值(可选) |
59
+ | `md5` | 字符串 \| null | 否 | - | 更新包 MD5;没有时为 `null` |
60
60
 
61
61
  ## API 参考
62
62
 
@@ -110,7 +110,7 @@ function 发送请求(params: {
110
110
  * 响应体
111
111
  */
112
112
  body: 字符串;
113
- };
113
+ } | undefined;
114
114
  ```
115
115
 
116
116
  **参数:**
@@ -204,7 +204,7 @@ function 发送GET请求(
204
204
  请求参数?: 字典<字符串>,
205
205
  超时时间?: 数字,
206
206
  请求头?: 字典<字符串>,
207
- ): 字符串 | null;
207
+ ): 字符串 | undefined;
208
208
  ```
209
209
 
210
210
  **参数:**
@@ -255,7 +255,7 @@ function 发送POST请求(
255
255
  请求文件?: 字典<字符串>,
256
256
  超时时间?: 数字,
257
257
  请求头?: 字典<字符串>,
258
- ): 字符串 | null;
258
+ ): 字符串 | undefined;
259
259
  ```
260
260
 
261
261
  **参数:**
@@ -303,7 +303,7 @@ function 发送JSON请求(
303
303
  请求JSON数据?: 字典<任意类型>,
304
304
  超时时间?: 数字,
305
305
  请求头?: 字典<字符串>,
306
- ): 字符串 | null;
306
+ ): 字符串 | undefined;
307
307
  ```
308
308
 
309
309
  **参数:**
@@ -24,7 +24,7 @@ function 截取屏幕(
24
24
  区域左上角Y坐标?: 数字,
25
25
  区域右下角X坐标?: 数字,
26
26
  区域右下角Y坐标?: 数字,
27
- ): 字符串 | null;
27
+ ): 字符串 | undefined;
28
28
  ```
29
29
 
30
30
  **参数:**
@@ -40,7 +40,7 @@ function 截取屏幕(
40
40
 
41
41
  | 类型 | 描述 |
42
42
  | -------- | -------------------------------- |
43
- | `字符串` | 截图的图片 ID,失败时返回 `null` |
43
+ | `字符串` | 截图的图片 ID,失败时返回 `undefined` |
44
44
 
45
45
  **示例:**
46
46
 
@@ -73,7 +73,7 @@ if (图片ID) {
73
73
  ### 读取图片 - 从文件路径或图片ID读取图片。
74
74
 
75
75
  ```typescript
76
- function 读取图片(图片路径: 字符串): 字符串 | null;
76
+ function 读取图片(图片路径: 字符串): 字符串 | undefined;
77
77
  ```
78
78
 
79
79
  **参数:**
@@ -86,7 +86,7 @@ function 读取图片(图片路径: 字符串): 字符串 | null;
86
86
 
87
87
  | 类型 | 描述 |
88
88
  | -------- | -------------------------- |
89
- | `字符串` | 图片 ID,失败时返回 `null` |
89
+ | `字符串` | 图片 ID,失败时返回 `undefined` |
90
90
 
91
91
  **示例:**
92
92
 
@@ -186,7 +186,7 @@ if (图片ID) {
186
186
  ### 获取图片大小 - 获取图片尺寸。
187
187
 
188
188
  ```typescript
189
- function 获取图片大小(图片ID: 字符串): { width: 数字; height: 数字 } | null;
189
+ function 获取图片大小(图片ID: 字符串): { width: 数字; height: 数字 } | undefined;
190
190
  ```
191
191
 
192
192
  **参数:**
@@ -199,7 +199,7 @@ function 获取图片大小(图片ID: 字符串): { width: 数字; height: 数
199
199
 
200
200
  | 类型 | 描述 |
201
201
  | --------------------------------------- | -------------------------------------------------------------- |
202
- | `{ width: 数字; height: 数字 } \| null` | 图片尺寸对象,包含 `width` 和 `height` 属性,失败时返回 `null` |
202
+ | `{ width: 数字; height: 数字 } \| undefined` | 图片尺寸对象,包含 `width` 和 `height` 属性,失败时返回 `undefined` |
203
203
 
204
204
  **示例:**
205
205
 
@@ -938,7 +938,7 @@ if (图片ID) {
938
938
  ### 旋转图片
939
939
 
940
940
  ```typescript
941
- function 旋转图片(图片ID: 字符串, 角度: 数字): 字符串 | null;
941
+ function 旋转图片(图片ID: 字符串, 角度: 数字): 字符串 | undefined;
942
942
  ```
943
943
 
944
944
  **参数:**
@@ -952,7 +952,7 @@ function 旋转图片(图片ID: 字符串, 角度: 数字): 字符串 | null;
952
952
 
953
953
  | 类型 | 描述 |
954
954
  | ---------------- | ----------------------------------- |
955
- | `字符串 \| null` | 旋转后的新图片 ID 失败时返回 `null` |
955
+ | `字符串 \| undefined` | 旋转后的新图片 ID 失败时返回 `undefined` |
956
956
 
957
957
  **示例:**
958
958
 
@@ -973,7 +973,7 @@ if (图片ID) {
973
973
  ### 灰度化图片
974
974
 
975
975
  ```typescript
976
- function 灰度化图片(图片ID: 字符串): 字符串;
976
+ function 灰度化图片(图片ID: 字符串): 字符串 | undefined;
977
977
  ```
978
978
 
979
979
  **参数:**
@@ -1007,7 +1007,7 @@ if (图片ID) {
1007
1007
  ### 二值化图片
1008
1008
 
1009
1009
  ```typescript
1010
- function 二值化图片(图片ID: 字符串, 阈值: 数字): 字符串;
1010
+ function 二值化图片(图片ID: 字符串, 阈值: 数字): 字符串 | undefined;
1011
1011
  ```
1012
1012
 
1013
1013
  **参数:**
@@ -1080,7 +1080,7 @@ if (图片ID) {
1080
1080
  ### 扫码条码(支持一维码和二维码)
1081
1081
 
1082
1082
  ```typescript
1083
- function 扫描条码(图片ID: 字符串): 字符串 | null;
1083
+ function 扫描条码(图片ID: 字符串): 字符串 | undefined;
1084
1084
  ```
1085
1085
 
1086
1086
  **参数:**
@@ -1093,7 +1093,7 @@ function 扫描条码(图片ID: 字符串): 字符串 | null;
1093
1093
 
1094
1094
  | 类型 | 描述 |
1095
1095
  | ---------------- | --------------------------- |
1096
- | `字符串 \| null` | 扫码结果,失败时返回 `null` |
1096
+ | `字符串 \| undefined` | 扫码结果,失败时返回 `undefined` |
1097
1097
 
1098
1098
  **示例:**
1099
1099
 
@@ -1115,7 +1115,7 @@ if (图片ID) {
1115
1115
  ### base64 转图片
1116
1116
 
1117
1117
  ```typescript
1118
- function base64转图片(base64: 字符串): 字符串;
1118
+ function base64转图片(base64: 字符串): 字符串 | undefined;
1119
1119
  ```
1120
1120
 
1121
1121
  **参数:**
@@ -50,9 +50,9 @@ interface MySQL连接配置 {
50
50
  interface MySQL查询结果 {
51
51
  rows: 数组<字典<任意类型>>; // 查询结果数据行
52
52
  affectedRows: 数字; // 受影响的行数
53
- insertId?: 数字; // 插入ID(仅适用于INSERT操作)
53
+ insertId: 数字 | null; // 插入ID(仅适用于INSERT操作);没有插入时为 null
54
54
  success: 布尔值; // 查询是否成功
55
- error?: 字符串; // 错误信息
55
+ error: 字符串 | null; // 错误信息;成功时为 null
56
56
  }
57
57
  ```
58
58
 
@@ -62,9 +62,9 @@ interface MySQL查询结果 {
62
62
  | -------------- | -------------------- | -------- | ------ | ------------------------------- |
63
63
  | `rows` | 数组<字典<任意类型>> | 否 | | 查询结果数据行 |
64
64
  | `affectedRows` | 数字 | 否 | | 受影响的行数 |
65
- | `insertId` | 数字 | 否 | | 插入 ID(仅适用于 INSERT 操作) |
65
+ | `insertId` | 数字 \| null | 否 | | 插入 ID;没有插入时为 `null` |
66
66
  | `success` | 布尔值 | 否 | | 查询是否成功 |
67
- | `error` | 字符串 | 否 | | 错误信息 |
67
+ | `error` | 字符串 \| null | 否 | | 错误信息;成功时为 `null` |
68
68
 
69
69
  ## API 参考
70
70
 
@@ -1,17 +1,16 @@
1
1
  # 卡密模块 ($卡密)
2
2
 
3
- 卡密模块提供了卡密验证、备注设置以及键值对存储功能,用于管理网络卡密相关的操作。
3
+ 卡密模块提供了卡密验证和备注设置功能,用于管理网络卡密相关的操作。
4
4
 
5
5
  ## 功能概览
6
6
 
7
7
  - **卡密验证**: 验证卡密的有效性
8
8
  - **备注管理**: 设置和管理卡密备注信息
9
- - **云变量存储**: 提供键值对形式的数据存储和读取功能
10
9
 
11
10
  ## 注意事项
12
11
 
13
12
  1. **卡密安全**: 卡密信息应当妥善保管,避免在日志中明文输出
14
- 2. **普通卡密模式**: 需要先调用 `$卡密.验证(卡密)` 验证卡密,验证通过后才能调用获取卡密信息、备注和云变量等接口
13
+ 2. **普通卡密模式**: 需要先调用 `$卡密.验证(卡密)` 验证卡密,验证通过后才能调用获取卡密信息和备注等接口
15
14
  3. **授权卡密模式**: App 打开加密 UI 或运行脚本前会完成授权和卡密验证,脚本中不需要重复让用户输入卡密,也不需要重复调用 `$卡密.验证`
16
15
  4. **兼容旧脚本**: 授权卡密模式下调用 `$卡密.验证` 会直接返回 `true`,用于兼容原来已经写了验证逻辑的脚本
17
16
 
@@ -73,7 +72,7 @@ function 验证(卡密: 字符串): 布尔值;
73
72
 
74
73
  **说明:**
75
74
 
76
- 普通卡密模式下,该方法会请求普通卡密验证接口,验证成功后才能继续使用卡密信息、备注和云变量相关能力。
75
+ 普通卡密模式下,该方法会请求普通卡密验证接口,验证成功后才能继续使用卡密信息和备注相关能力。
77
76
 
78
77
  授权卡密模式下,App 层已经完成授权和卡密验证,脚本侧不需要重复调用该方法;如果旧脚本仍然调用,方法会直接返回 `true`。
79
78
 
@@ -110,7 +109,7 @@ if (!$卡密.是否授权卡密模式()) {
110
109
  #### 获取卡密信息
111
110
 
112
111
  ```typescript
113
- function 获取卡密信息(): 卡密信息 | null;
112
+ function 获取卡密信息(): 卡密信息 | undefined;
114
113
  ```
115
114
 
116
115
  **返回值:**
@@ -168,71 +167,3 @@ if (success) {
168
167
  $打印错误日志("备注设置失败");
169
168
  }
170
169
  ```
171
-
172
- ### 云变量
173
-
174
- #### 设置值 - 设置键值对
175
-
176
- ```typescript
177
- function 设置值(键: 字符串, 值: 字符串): 字符串;
178
- ```
179
-
180
- **参数说明:**
181
-
182
- | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
183
- | ------ | ------ | -------- | ------ | ---------- |
184
- | `键` | 字符串 | 是 | | 存储的键名 |
185
- | `值` | 字符串 | 是 | | 存储的值 |
186
-
187
- **返回值:**
188
-
189
- | 类型 | 描述 |
190
- | -------- | --------------------------------------------- |
191
- | `字符串` | 成功时返回设置的 value 值,失败时返回空字符串 |
192
-
193
- **示例:**
194
-
195
- ```typescript
196
- // 设置键值对
197
- const key = "userConfig";
198
- const value = "enableNotification";
199
- const result = $卡密.设置值(key, value);
200
-
201
- if (result === value) {
202
- $打印信息日志(`成功设置 ${key}: ${value}`);
203
- } else {
204
- $打印错误日志("设置失败");
205
- }
206
- ```
207
-
208
- #### 获取值 - 获取键值对
209
-
210
- ```typescript
211
- function 获取值(键: 字符串): 字符串;
212
- ```
213
-
214
- **参数说明:**
215
-
216
- | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
217
- | ------ | ------ | -------- | ------ | ------------ |
218
- | `键` | 字符串 | 是 | | 要获取的键名 |
219
-
220
- **返回值:**
221
-
222
- | 类型 | 描述 |
223
- | -------- | ------------------------------------------------ |
224
- | `字符串` | 成功时返回对应的值,失败或键不存在时返回空字符串 |
225
-
226
- **示例:**
227
-
228
- ```typescript
229
- // 获取键值对
230
- const key = "userConfig";
231
- const value = $卡密.获取值(key);
232
-
233
- if (value) {
234
- $打印信息日志(`获取到配置: ${key} = ${value}`);
235
- } else {
236
- $打印警告日志(`配置 ${key} 不存在或获取失败"`);
237
- }
238
- ```
@@ -100,9 +100,9 @@ const listPage = $创建节点选择器({ mode: 2 });
100
100
  | `释放内存()` | 释放内存 |
101
101
  | `加载节点数据(timeout?)` | 重新加载界面节点,默认超时 5000ms |
102
102
  | `清除选择器()` | 清除已设置的筛选条件 |
103
- | `xml(timeout?)` | 获取界面 XML,失败返回 `null` |
103
+ | `xml(timeout?)` | 获取界面 XML,失败返回 `undefined` |
104
104
  | `获取节点信息(timeout?)` | 获取所有匹配节点 |
105
- | `获取一个节点信息(timeout?)` | 获取第一个匹配节点,没有则 `null` |
105
+ | `获取一个节点信息(timeout?)` | 获取第一个匹配节点,没有则 `undefined` |
106
106
 
107
107
  超时单位均为毫秒,默认 `5000`。
108
108
 
@@ -0,0 +1,197 @@
1
+ # SQLite 数据库模块 ($SQLite数据库)
2
+
3
+ SQLite 模块提供本地数据库文件的打开、查询、执行和事务。可以同时打开多个库,每个库用 `打开` 返回的句柄操作。
4
+
5
+ ## 功能概览
6
+
7
+ - **多库句柄**: `打开` 返回句柄,后续方法把句柄作为第一个参数
8
+ - **数据查询**: 执行 SELECT 查询
9
+ - **数据更新**: 执行 CREATE、INSERT、UPDATE、DELETE
10
+ - **事务支持**: `开始事务` / `提交事务` / `回滚事务`
11
+ - **参数绑定**: 使用 `?` 占位,防止 SQL 注入
12
+
13
+ ## 注意事项
14
+
15
+ 1. **文件路径**: 路径必须是绝对路径,与 `$文件` 模块相同。相对路径会打开失败。
16
+ 2. **内存库**: 路径传 `":memory:"` 打开内存数据库。
17
+ 3. **句柄**: 先 `打开` 再查询;脚本结束会关闭本次运行打开的全部句柄,仍建议用完 `关闭`。
18
+ 4. **BLOB**: 第一版不把 BLOB 转成字符串,读到的该格为 `null`。
19
+ 5. **锁定等待**: 数据库被占用时最多等待 5 秒。
20
+
21
+ ## 类型定义
22
+
23
+ ### SQLite查询结果
24
+
25
+ 查询 / 执行结果。
26
+
27
+ ```typescript
28
+ interface SQLite查询结果 {
29
+ rows: 数组<字典<任意类型>>;
30
+ affectedRows: 数字;
31
+ insertId: 数字 | null;
32
+ success: 布尔值;
33
+ error: 字符串 | null;
34
+ }
35
+ ```
36
+
37
+ **数据类型说明:**
38
+
39
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
40
+ | -------------- | -------------------- | -------- | ------ | ---------------------------- |
41
+ | `rows` | 数组<字典<任意类型>> | 否 | | 查询结果数据行 |
42
+ | `affectedRows` | 数字 | 否 | | 受影响的行数 |
43
+ | `insertId` | 数字 \| null | 否 | | 本次连接最近一次插入的 rowid;没有插入时为 `null` |
44
+ | `success` | 布尔值 | 否 | | 是否成功 |
45
+ | `error` | 字符串 \| null | 否 | | 错误信息;成功时为 `null` |
46
+
47
+ ## API 参考
48
+
49
+ ### 连接管理
50
+
51
+ #### 打开 - 打开数据库
52
+
53
+ ```typescript
54
+ function 打开(路径: 字符串): 字符串 | undefined;
55
+ ```
56
+
57
+ **参数:**
58
+
59
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
60
+ | ------ | ------ | -------- | ------ | ------------------------- |
61
+ | `路径` | 字符串 | 是 | | 绝对路径,或 `":memory:"` |
62
+
63
+ **返回值:**
64
+
65
+ | 类型 | 描述 |
66
+ | ---------------- | ---------------------------- |
67
+ | `字符串 \| undefined` | 成功返回句柄,失败返回 `undefined` |
68
+
69
+ **示例:**
70
+
71
+ ```javascript
72
+ const 路径 = $文件.获取内部目录("documents") + "/app.db";
73
+ const 库 = $SQLite数据库.打开(路径);
74
+ if (!库) {
75
+ $打印错误日志("打开失败");
76
+ }
77
+ ```
78
+
79
+ #### 关闭 - 关闭数据库
80
+
81
+ ```typescript
82
+ function 关闭(句柄: 字符串): 无返回值;
83
+ ```
84
+
85
+ **参数:**
86
+
87
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
88
+ | ------ | ------ | -------- | ------ | ----------------- |
89
+ | `句柄` | 字符串 | 是 | | `打开` 返回的句柄 |
90
+
91
+ **示例:**
92
+
93
+ ```javascript
94
+ $SQLite数据库.关闭(库);
95
+ ```
96
+
97
+ #### 是否已打开 - 检查句柄是否仍打开
98
+
99
+ ```typescript
100
+ function 是否已打开(句柄: 字符串): 布尔值;
101
+ ```
102
+
103
+ **返回值:**
104
+
105
+ | 类型 | 描述 |
106
+ | ------ | ----------------- |
107
+ | `布尔值` | 仍打开返回 `true` |
108
+
109
+ **示例:**
110
+
111
+ ```javascript
112
+ if ($SQLite数据库.是否已打开(库)) {
113
+ $打印信息日志("数据库已打开");
114
+ }
115
+ ```
116
+
117
+ ### 数据操作
118
+
119
+ #### 查询 - 执行查询
120
+
121
+ ```typescript
122
+ function 查询(句柄: 字符串, sql语句: 字符串, 参数?: 数组<任意类型>): SQLite查询结果;
123
+ ```
124
+
125
+ **示例:**
126
+
127
+ ```javascript
128
+ const 查询结果 = $SQLite数据库.查询(库, "SELECT * FROM t WHERE id = ?", [1]);
129
+ if (查询结果.success) {
130
+ $打印信息日志(`查询到 ${查询结果.rows.length} 条记录`);
131
+ } else {
132
+ $打印错误日志(`查询失败: ${查询结果.error}`);
133
+ }
134
+ ```
135
+
136
+ #### 执行 - 执行更新
137
+
138
+ ```typescript
139
+ function 执行(句柄: 字符串, sql语句: 字符串, 参数?: 数组<任意类型>): SQLite查询结果;
140
+ ```
141
+
142
+ **示例:**
143
+
144
+ ```javascript
145
+ $SQLite数据库.执行(
146
+ 库,
147
+ "CREATE TABLE IF NOT EXISTS t (id INTEGER PRIMARY KEY, name TEXT)",
148
+ );
149
+ const 插入结果 = $SQLite数据库.执行(库, "INSERT INTO t(name) VALUES (?)", [
150
+ "a",
151
+ ]);
152
+ if (插入结果.success) {
153
+ $打印信息日志(`插入 ID: ${插入结果.insertId}`);
154
+ }
155
+ ```
156
+
157
+ ### 事务管理
158
+
159
+ #### 开始事务 / 提交事务 / 回滚事务
160
+
161
+ ```typescript
162
+ function 开始事务(句柄: 字符串): 布尔值;
163
+ function 提交事务(句柄: 字符串): 布尔值;
164
+ function 回滚事务(句柄: 字符串): 布尔值;
165
+ ```
166
+
167
+ **示例:**
168
+
169
+ ```javascript
170
+ if ($SQLite数据库.开始事务(库)) {
171
+ $SQLite数据库.执行(库, "INSERT INTO t(name) VALUES (?)", ["a"]);
172
+ $SQLite数据库.执行(库, "INSERT INTO t(name) VALUES (?)", ["b"]);
173
+ if (!$SQLite数据库.提交事务(库)) {
174
+ $SQLite数据库.回滚事务(库);
175
+ }
176
+ }
177
+ ```
178
+
179
+ ## 完整使用示例
180
+
181
+ ```javascript
182
+ const 库 = $SQLite数据库.打开($文件.获取内部目录("documents") + "/app.db");
183
+ if (!库) {
184
+ $打印错误日志("打开失败");
185
+ } else {
186
+ $SQLite数据库.执行(
187
+ 库,
188
+ "CREATE TABLE IF NOT EXISTS t (id INTEGER PRIMARY KEY, name TEXT)",
189
+ );
190
+ $SQLite数据库.执行(库, "INSERT INTO t(name) VALUES (?)", ["a"]);
191
+ const 结果 = $SQLite数据库.查询(库, "SELECT * FROM t WHERE id = ?", [1]);
192
+ if (结果.success) {
193
+ $打印信息日志(JSON.stringify(结果.rows));
194
+ }
195
+ $SQLite数据库.关闭(库);
196
+ }
197
+ ```