node-karin 1.7.2 → 1.7.3
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/CHANGELOG.md +7 -0
- package/dist/index.d.ts +71 -32
- package/dist/index.js +1263 -355
- package/dist/module/{level.cjs → sqlite3.cjs} +5 -5
- package/dist/module/sqlite3.d.ts +2 -0
- package/dist/module/sqlite3.js +2 -0
- package/dist/root.d.ts +5 -10
- package/dist/root.js +3 -7
- package/dist/web/assets/{404-5FyWJLGO.js → 404-BGNalIPW.js} +1 -1
- package/dist/web/assets/Item-B-dEuLxZ.js.br +0 -0
- package/dist/web/assets/SelectionManager-CywU5Wrm.js.br +0 -0
- package/dist/web/assets/about-GQ9tHaM7.js.br +0 -0
- package/dist/web/assets/accordion-DAXXYLpf.js.br +0 -0
- package/dist/web/assets/adapter-CIssfL4b.js.br +0 -0
- package/dist/web/assets/{bot-BYPMreIT.js → bot-DflEwYPZ.js} +1 -1
- package/dist/web/assets/chunk-2C6KNKEU-BJgS2cEf.js.br +0 -0
- package/dist/web/assets/chunk-2QAN2V2R-BmZUVR8P.js.br +0 -0
- package/dist/web/assets/chunk-3TCFMHK3-DpYLtuVX.js.br +0 -0
- package/dist/web/assets/chunk-4EXC76WE-CXW1Jtw-.js.br +0 -0
- package/dist/web/assets/chunk-6JWJ7CFW-D9EYAKxL.js.br +0 -0
- package/dist/web/assets/chunk-6NGXL2PC-4gjiOmRm.js.br +0 -0
- package/dist/web/assets/chunk-6VC6TS2O-DCM8VZ97.js.br +0 -0
- package/dist/web/assets/chunk-736YWA4T-kU-TBajU.js.br +0 -0
- package/dist/web/assets/chunk-A6PX3NG3-DExdGYb1.js.br +0 -0
- package/dist/web/assets/{chunk-B75B6XQK-CF3MerdJ.js → chunk-B75B6XQK-BOezgllm.js} +1 -1
- package/dist/web/assets/chunk-BWXGEJBS-BSzOMuJO.js.br +0 -0
- package/dist/web/assets/{chunk-D5XJWRAV-BgEm3wWf.js → chunk-D5XJWRAV-B-7H4tO7.js} +1 -1
- package/dist/web/assets/chunk-HAJUSXOG-CEhikJ4Z.js.br +0 -0
- package/dist/web/assets/chunk-IHO36JMK-Bb2DXZke.js.br +0 -0
- package/dist/web/assets/chunk-J6JGI6RM-BJJnQ2n_.js.br +0 -0
- package/dist/web/assets/chunk-J7I6W5JF-CKgNcOtD.js.br +0 -0
- package/dist/web/assets/chunk-KCYYJJH4-DZW64oTg.js.br +0 -0
- package/dist/web/assets/chunk-KHLLQ6W4-CJ8nwwyI.js.br +0 -0
- package/dist/web/assets/chunk-KQ5CH2X7-Dduboyvk.js.br +0 -0
- package/dist/web/assets/chunk-LAX3QLKM-D1eLFhLc.js +1 -0
- package/dist/web/assets/{chunk-LGSBTEIA-C5hhLgnp.js → chunk-LGSBTEIA-CI2Fg92R.js} +1 -1
- package/dist/web/assets/{chunk-M3MASYO7-DnaMhPkj.js → chunk-M3MASYO7-IfOp0Esm.js} +1 -1
- package/dist/web/assets/chunk-ML27DD5T-E0fMnpI-.js.br +0 -0
- package/dist/web/assets/chunk-MSDKUXDP-B7NDJtyM.js.br +0 -0
- package/dist/web/assets/chunk-MW56SEHC-B0FE1e0O.js.br +0 -0
- package/dist/web/assets/chunk-MZRCPRP2-lPufOk-B.js.br +0 -0
- package/dist/web/assets/{chunk-OH2E76JR-CUy3P8hS.js → chunk-OH2E76JR-FASNecWQ.js} +1 -1
- package/dist/web/assets/{chunk-OTWYT2HS-xvgNy4Qw.js → chunk-OTWYT2HS-GWMgIgx_.js} +1 -1
- package/dist/web/assets/chunk-RRTOIK23-Apf7Lc8C.js.br +0 -0
- package/dist/web/assets/chunk-SLABUSGS-C6gfCFYR.js.br +0 -0
- package/dist/web/assets/{chunk-TE6SZS6W-a4ApYAbL.js → chunk-TE6SZS6W-B9-jjBF9.js} +1 -1
- package/dist/web/assets/{chunk-UX7UMZL5-D2XO33dM.js → chunk-UX7UMZL5-zrFcyrRl.js} +1 -1
- package/dist/web/assets/chunk-WQVQ7P2I-BtCVE7JW.js.br +0 -0
- package/dist/web/assets/config-B0vW3JMd.js.br +0 -0
- package/dist/web/assets/config-BvQJZVf6.js.br +0 -0
- package/dist/web/assets/cssMode-CUC_Oizy.js.br +0 -0
- package/dist/web/assets/{default_page-CXE8UF2B.js → default_page-BzloCVij.js} +1 -1
- package/dist/web/assets/detail-9_WINLqA.js.br +0 -0
- package/dist/web/assets/detail-CYNlm1PP.js.br +0 -0
- package/dist/web/assets/env-CVbRpx3L.js.br +0 -0
- package/dist/web/assets/features-animation-qFWXVIR3.js +1 -0
- package/dist/web/assets/focusSafely-ck6hvdr9.js.br +0 -0
- package/dist/web/assets/freemarker2-BDglgVuw.js.br +0 -0
- package/dist/web/assets/friend_request-DFd2rnPi.js.br +0 -0
- package/dist/web/assets/group-CqTuuvQd.js.br +0 -0
- package/dist/web/assets/{group_notice-BKrzoxq_.js → group_notice-Cn68ilv4.js} +1 -1
- package/dist/web/assets/handlebars-M6oGOANs.js.br +0 -0
- package/dist/web/assets/html-BKtVtyyh.js.br +0 -0
- package/dist/web/assets/htmlMode-DFbSJJb8.js.br +0 -0
- package/dist/web/assets/iconBase-CRKnMttQ.js.br +0 -0
- package/dist/web/assets/index-B3SZ68V8.js.br +0 -0
- package/dist/web/assets/{index-BKXXnUWB.js → index-B73QUFbG.js} +1 -1
- package/dist/web/assets/{index-D0zOAMDW.js → index-BDNtTmeB.js} +1 -1
- package/dist/web/assets/index-BU1-wMCo.css.br +0 -0
- package/dist/web/assets/index-Bivh577A.js.br +0 -0
- package/dist/web/assets/index-C1IgpAR4.js.br +0 -0
- package/dist/web/assets/index-C4cx_V_m.js +1 -0
- package/dist/web/assets/index-C4nC1bC_.js.br +0 -0
- package/dist/web/assets/index-C6vHA_tL.js.br +0 -0
- package/dist/web/assets/{index-CAVmqG_P.js → index-CBZ3z3KY.js} +1 -1
- package/dist/web/assets/index-CCqLWDvc.js.br +0 -0
- package/dist/web/assets/index-CLeAVD3i.js.br +0 -0
- package/dist/web/assets/index-CRZlbNQs.js.br +0 -0
- package/dist/web/assets/index-CvpieN8U.js.br +0 -0
- package/dist/web/assets/index-D-mVxg-5.js.br +0 -0
- package/dist/web/assets/index-DC-LdqBv.js +1 -0
- package/dist/web/assets/index-DQDw6zoi.js.br +0 -0
- package/dist/web/assets/index-DSc19ZZu.js.br +0 -0
- package/dist/web/assets/index-DUPYwT0K.js.br +0 -0
- package/dist/web/assets/index-DUrPmv3a.js.br +0 -0
- package/dist/web/assets/index-MSCOU2AM.js.br +0 -0
- package/dist/web/assets/index-Pvtaej5A.js.br +0 -0
- package/dist/web/assets/index-VzisSY3n.js.br +0 -0
- package/dist/web/assets/index.esm-B3ucDkGc.js.br +0 -0
- package/dist/web/assets/inputGroup-xEWG6jwv.js.br +0 -0
- package/dist/web/assets/isSymbol-CvOVdVQx.js.br +0 -0
- package/dist/web/assets/javascript-B2_AGf4k.js.br +0 -0
- package/dist/web/assets/jsonMode-BRQbBIho.js.br +0 -0
- package/dist/web/assets/layout-B3NKV2cV.js.br +0 -0
- package/dist/web/assets/liquid-B8W7gEQr.js.br +0 -0
- package/dist/web/assets/loading-gvhDuhMG.js.br +0 -0
- package/dist/web/assets/login-6Oz9PVgB.js.br +0 -0
- package/dist/web/assets/mdx-DuvVFr0Q.js.br +0 -0
- package/dist/web/assets/{message-B63rQ4K_.js → message-DdE_-qob.js} +1 -1
- package/dist/web/assets/message.model-3-ndIJIS.js.br +0 -0
- package/dist/web/assets/number-DgOBlHj3.js.br +0 -0
- package/dist/web/assets/pm2-BxmxKcnF.js.br +0 -0
- package/dist/web/assets/private-B9j6YXlF.js.br +0 -0
- package/dist/web/assets/python-CDatuSpn.js.br +0 -0
- package/dist/web/assets/razor-IYDFkdYY.js.br +0 -0
- package/dist/web/assets/react-resizable-panels.browser.esm-CR6KXK03.js.br +0 -0
- package/dist/web/assets/redis-Wjth9hZ7.js.br +0 -0
- package/dist/web/assets/render-BELpS5Vm.js.br +0 -0
- package/dist/web/assets/{save-DvxnYoMa.js → save-kW0LPLgI.js} +1 -1
- package/dist/web/assets/server-BY83fH_8.js.br +0 -0
- package/dist/web/assets/terminal-84CqTmF0.js.br +0 -0
- package/dist/web/assets/{terminal-BfqwNmpG.js → terminal-D9s0hA2O.js} +1 -1
- package/dist/web/assets/test-url-CBw_bW1Y.js.br +0 -0
- package/dist/web/assets/theme-switch-YJ6Xi4WR.js.br +0 -0
- package/dist/web/assets/ts.worker-Bd4z-OY3.js.br +0 -0
- package/dist/web/assets/tsMode-Lo3jNpEk.js.br +0 -0
- package/dist/web/assets/typescript-hc0za2PJ.js.br +0 -0
- package/dist/web/assets/use-dialog-Ck4bgoLD.js +1 -0
- package/dist/web/assets/useEvent-Bzdm5zJN.js +1 -0
- package/dist/web/assets/useFocusable-q9BaOpeN.js.br +0 -0
- package/dist/web/assets/useFormReset-DIbg4jwU.js +1 -0
- package/dist/web/assets/useHover-6WJTiZPs.js.br +0 -0
- package/dist/web/assets/useKeyboard-62LDVS9_.js +1 -0
- package/dist/web/assets/useLabel-ykjcFuLs.js +1 -0
- package/dist/web/assets/useNumberFormatter-CYxtA2pD.js.br +0 -0
- package/dist/web/assets/useRequest-DiP1jctg.js.br +0 -0
- package/dist/web/assets/useToggle-B6a3i3SQ.js.br +0 -0
- package/dist/web/assets/users-D6g8CNNV.js.br +0 -0
- package/dist/web/assets/video_insert-CRMpv5K7.js.br +0 -0
- package/dist/web/assets/webui-h667A4Ua.js.br +0 -0
- package/dist/web/assets/xml-DaP_yC6H.js.br +0 -0
- package/dist/web/assets/yaml-DKk0p-LD.js.br +0 -0
- package/dist/web/index.html +2 -2
- package/package.json +7 -7
- package/README.md +0 -32
- package/dist/module/level.d.ts +0 -2
- package/dist/module/level.js +0 -2
- package/dist/web/assets/Item-CTA2y1Ux.js.br +0 -0
- package/dist/web/assets/SelectionManager-CkTh2ik1.js.br +0 -0
- package/dist/web/assets/about-BiO2BRT5.js.br +0 -0
- package/dist/web/assets/accordion-BiUJ48Bc.js.br +0 -0
- package/dist/web/assets/adapter-BQfJUD8F.js.br +0 -0
- package/dist/web/assets/chunk-2QAN2V2R-BvZRh67R.js.br +0 -0
- package/dist/web/assets/chunk-2TLCDWYU-Bgld13o8.js.br +0 -0
- package/dist/web/assets/chunk-3TCFMHK3-Ci3gAvH0.js.br +0 -0
- package/dist/web/assets/chunk-4EXC76WE-BpVWAXO_.js.br +0 -0
- package/dist/web/assets/chunk-6NGXL2PC-D43M3fjg.js.br +0 -0
- package/dist/web/assets/chunk-6VC6TS2O-pJkpUjqi.js.br +0 -0
- package/dist/web/assets/chunk-736YWA4T-gQXkH0Bw.js.br +0 -0
- package/dist/web/assets/chunk-A6PX3NG3-DFxACrvs.js.br +0 -0
- package/dist/web/assets/chunk-BWXGEJBS-B6MoGKtz.js.br +0 -0
- package/dist/web/assets/chunk-DYRPAKRC-B2LQ25wU.js.br +0 -0
- package/dist/web/assets/chunk-HAJUSXOG-Cq-wnTl3.js.br +0 -0
- package/dist/web/assets/chunk-IGTUIHQL-d-bs_-aJ.js.br +0 -0
- package/dist/web/assets/chunk-IHO36JMK-Lxve_AMD.js +0 -1
- package/dist/web/assets/chunk-J6JGI6RM-B3sUrFix.js.br +0 -0
- package/dist/web/assets/chunk-J7I6W5JF-C9LdiSr5.js.br +0 -0
- package/dist/web/assets/chunk-KCYYJJH4-B23fyHLb.js.br +0 -0
- package/dist/web/assets/chunk-KQ5CH2X7-B_lRvmPA.js.br +0 -0
- package/dist/web/assets/chunk-LAX3QLKM-D9XzIwPV.js +0 -1
- package/dist/web/assets/chunk-LWGPUDJ5-RQeXR2Zh.js.br +0 -0
- package/dist/web/assets/chunk-ML27DD5T-Drb4u1EJ.js.br +0 -0
- package/dist/web/assets/chunk-MW56SEHC-CaCfOvSm.js.br +0 -0
- package/dist/web/assets/chunk-MZRCPRP2-BSjG0AEb.js.br +0 -0
- package/dist/web/assets/chunk-PNCCMQP3-BA1tVKYL.js.br +0 -0
- package/dist/web/assets/chunk-SLABUSGS-BsuK0S03.js.br +0 -0
- package/dist/web/assets/chunk-WQVQ7P2I-C1d6s2ca.js.br +0 -0
- package/dist/web/assets/config-UJUDfZSU.js.br +0 -0
- package/dist/web/assets/config-sb0Fmstl.js.br +0 -0
- package/dist/web/assets/cssMode-6E_wne2v.js.br +0 -0
- package/dist/web/assets/detail-DWhzNDXB.js.br +0 -0
- package/dist/web/assets/detail-qU02CBqm.js.br +0 -0
- package/dist/web/assets/env-DbwhE2kO.js.br +0 -0
- package/dist/web/assets/features-animation-BuPi-7D9.js +0 -1
- package/dist/web/assets/focusSafely-s1-omcvB.js.br +0 -0
- package/dist/web/assets/freemarker2-C_3vLtu9.js.br +0 -0
- package/dist/web/assets/friend_request-BhCdtnn4.js.br +0 -0
- package/dist/web/assets/group-C87-ENNC.js.br +0 -0
- package/dist/web/assets/handlebars-pwpOCuD5.js.br +0 -0
- package/dist/web/assets/html-qzmD309L.js.br +0 -0
- package/dist/web/assets/htmlMode-DRMWAd1H.js.br +0 -0
- package/dist/web/assets/iconBase-Gsj9ubV0.js.br +0 -0
- package/dist/web/assets/index-7o6iaQSm.js.br +0 -0
- package/dist/web/assets/index-BF8RlPN2.js.br +0 -0
- package/dist/web/assets/index-BQ0APTjg.js.br +0 -0
- package/dist/web/assets/index-BdZughnh.js.br +0 -0
- package/dist/web/assets/index-Bfv5ghX0.js +0 -1
- package/dist/web/assets/index-BrMA34T_.js.br +0 -0
- package/dist/web/assets/index-ByNGQeIh.js +0 -1
- package/dist/web/assets/index-C3gTQC_a.js.br +0 -0
- package/dist/web/assets/index-C65Z7YJE.js.br +0 -0
- package/dist/web/assets/index-C9YdKKuZ.js.br +0 -0
- package/dist/web/assets/index-CGpqO8gW.js.br +0 -0
- package/dist/web/assets/index-C_rvITPu.js.br +0 -0
- package/dist/web/assets/index-DNO4WGOR.js.br +0 -0
- package/dist/web/assets/index-DYqjICmu.js.br +0 -0
- package/dist/web/assets/index-Da1UDnUH.js.br +0 -0
- package/dist/web/assets/index-DhCNW2Pu.js.br +0 -0
- package/dist/web/assets/index-DnNTYN-U.js.br +0 -0
- package/dist/web/assets/index-Dz1d_1vi.js.br +0 -0
- package/dist/web/assets/index-VZv3MNe0.css.br +0 -0
- package/dist/web/assets/index-bYTyyF5P.js +0 -1
- package/dist/web/assets/index-fQeODVzr.js.br +0 -0
- package/dist/web/assets/index.esm-BYwCenjs.js.br +0 -0
- package/dist/web/assets/inputGroup-CeySugOG.js.br +0 -0
- package/dist/web/assets/isSymbol-DcclOhkS.js.br +0 -0
- package/dist/web/assets/javascript-BS1HMT5J.js.br +0 -0
- package/dist/web/assets/jsonMode-B2ijaAsu.js.br +0 -0
- package/dist/web/assets/layout-CFpZc9RQ.js.br +0 -0
- package/dist/web/assets/liquid-BgK73Ng8.js.br +0 -0
- package/dist/web/assets/loading-DshuFFMq.js.br +0 -0
- package/dist/web/assets/login-Cql8Ntk_.js.br +0 -0
- package/dist/web/assets/mdx-CCS8eSRk.js.br +0 -0
- package/dist/web/assets/mergeProps-Cfh5ZV_M.js +0 -1
- package/dist/web/assets/message.model-C453ke-f.js.br +0 -0
- package/dist/web/assets/pm2-C5Sy02Ji.js.br +0 -0
- package/dist/web/assets/private-DVAz7f-6.js.br +0 -0
- package/dist/web/assets/python-ikXof33R.js.br +0 -0
- package/dist/web/assets/razor-C5F8n6Sw.js.br +0 -0
- package/dist/web/assets/react-resizable-panels.browser.esm-BFxVIQsN.js.br +0 -0
- package/dist/web/assets/redis-D5kr-zRx.js.br +0 -0
- package/dist/web/assets/render-DPSaW4gh.js.br +0 -0
- package/dist/web/assets/server-HpD5Xyoy.js.br +0 -0
- package/dist/web/assets/terminal-BzdEk3Ng.js.br +0 -0
- package/dist/web/assets/test-url-DOV4X8SQ.js.br +0 -0
- package/dist/web/assets/theme-switch-f4geFrw1.js.br +0 -0
- package/dist/web/assets/ts.worker-B_RpyLgm.js.br +0 -0
- package/dist/web/assets/tsMode-BDT2V166.js.br +0 -0
- package/dist/web/assets/typescript-BfSKvxXC.js.br +0 -0
- package/dist/web/assets/use-dialog-CCZhn6t0.js +0 -1
- package/dist/web/assets/useCloseOnScroll-U4K9v5wg.js.br +0 -0
- package/dist/web/assets/useFocusable-DFZFw-mK.js.br +0 -0
- package/dist/web/assets/useFormReset-CWuAD__f.js +0 -1
- package/dist/web/assets/useHover-CFWHHJuf.js.br +0 -0
- package/dist/web/assets/useId-Bbn1WLmv.js.br +0 -0
- package/dist/web/assets/useLabel-C232LBzi.js +0 -1
- package/dist/web/assets/useLocalizedStringFormatter-D8EAhnRs.js.br +0 -0
- package/dist/web/assets/useNumberFormatter-DW9T1dUM.js.br +0 -0
- package/dist/web/assets/usePress-DS9LLYmP.js.br +0 -0
- package/dist/web/assets/useRequest-BiEzsYxU.js.br +0 -0
- package/dist/web/assets/useToggle-Ctteg_kF.js.br +0 -0
- package/dist/web/assets/users-DJ_1askY.js.br +0 -0
- package/dist/web/assets/video_insert-JhW9xRlW.js.br +0 -0
- package/dist/web/assets/webui-DgivJcU-.js.br +0 -0
- package/dist/web/assets/xml-BgeptCwK.js.br +0 -0
- package/dist/web/assets/yaml-YqWbZJqo.js.br +0 -0
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import path5 from 'node:path';
|
|
|
9
9
|
import chokidar from 'chokidar';
|
|
10
10
|
import { pipeline, Readable } from 'node:stream';
|
|
11
11
|
import axios8, { AxiosError } from 'axios';
|
|
12
|
-
import
|
|
12
|
+
import lodash3 from 'lodash';
|
|
13
13
|
import { URL as URL$1, fileURLToPath as fileURLToPath$1, pathToFileURL } from 'node:url';
|
|
14
14
|
import { createRequire } from 'module';
|
|
15
15
|
import crypto, { createHmac, randomUUID } from 'node:crypto';
|
|
@@ -18,6 +18,7 @@ import { isPromise } from 'util/types';
|
|
|
18
18
|
import { exec as exec$1, spawn } from 'child_process';
|
|
19
19
|
import os from 'node:os';
|
|
20
20
|
import { lookup } from 'dns/promises';
|
|
21
|
+
import sqlite3 from 'sqlite3';
|
|
21
22
|
import WebSocket, { WebSocketServer, WebSocket as WebSocket$1 } from 'ws';
|
|
22
23
|
import jwt from 'jsonwebtoken';
|
|
23
24
|
import dotenv from 'dotenv';
|
|
@@ -26,8 +27,6 @@ import express2, { Router } from 'express';
|
|
|
26
27
|
import { createServer } from 'node:http';
|
|
27
28
|
import { createBrotliDecompress } from 'node:zlib';
|
|
28
29
|
import schedule from 'node-schedule';
|
|
29
|
-
import { Level } from 'level';
|
|
30
|
-
import os4 from 'os';
|
|
31
30
|
import { createClient } from 'redis';
|
|
32
31
|
import template from 'art-template';
|
|
33
32
|
|
|
@@ -87,7 +86,7 @@ var init_debug2 = __esm({
|
|
|
87
86
|
global.debug = debug2;
|
|
88
87
|
}
|
|
89
88
|
});
|
|
90
|
-
var filename, karinDir, karinMain, pluginDir, isPkg, defaultConfigPath, defaultViewPath, commentPath, basePath, configPath, dataPath, tempPath, resourcePath, dbPath,
|
|
89
|
+
var filename, karinDir, karinMain, pluginDir, isPkg, defaultConfigPath, defaultViewPath, commentPath, basePath, configPath, dataPath, tempPath, resourcePath, dbPath, redisSqlite3Path, kvPath, logsPath, htmlPath, pm2Path, consolePath, sandboxDataPath, sandboxTempPath, root_default;
|
|
91
90
|
var init_root = __esm({
|
|
92
91
|
"src/root.ts"() {
|
|
93
92
|
filename = fileURLToPath(import.meta.url);
|
|
@@ -104,9 +103,8 @@ var init_root = __esm({
|
|
|
104
103
|
tempPath = Object.freeze(path.join(basePath, "temp"));
|
|
105
104
|
resourcePath = Object.freeze(path.join(basePath, "resource"));
|
|
106
105
|
dbPath = Object.freeze(path.join(dataPath, "db"));
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
sandboxLevelPath = Object.freeze(path.join(dbPath, "sandbox"));
|
|
106
|
+
redisSqlite3Path = Object.freeze(path.join(dbPath, "redis-sqlite3"));
|
|
107
|
+
kvPath = Object.freeze(path.join(dbPath, "kv"));
|
|
110
108
|
logsPath = Object.freeze(path.join(basePath, "logs"));
|
|
111
109
|
htmlPath = Object.freeze(path.join(tempPath, "html"));
|
|
112
110
|
pm2Path = Object.freeze(path.join(configPath, "pm2.yaml"));
|
|
@@ -127,9 +125,6 @@ var init_root = __esm({
|
|
|
127
125
|
tempPath,
|
|
128
126
|
resourcePath,
|
|
129
127
|
dbPath,
|
|
130
|
-
levelPath,
|
|
131
|
-
redisLevelPath,
|
|
132
|
-
sandboxLevelPath,
|
|
133
128
|
logsPath,
|
|
134
129
|
htmlPath,
|
|
135
130
|
pm2Path,
|
|
@@ -144,7 +139,7 @@ var init_logger = __esm({
|
|
|
144
139
|
"src/utils/logger/logger.ts"() {
|
|
145
140
|
initLogger = (options = {}) => {
|
|
146
141
|
if (options.config) return log4js.configure(options.config);
|
|
147
|
-
const { level
|
|
142
|
+
const { level = "info", daysToKeep = 14, maxLogSize = 0 } = options.log4jsCfg || {};
|
|
148
143
|
const config2 = {
|
|
149
144
|
appenders: {
|
|
150
145
|
console: {
|
|
@@ -177,7 +172,7 @@ var init_logger = __esm({
|
|
|
177
172
|
categories: {
|
|
178
173
|
default: {
|
|
179
174
|
appenders: ["overall", "console"],
|
|
180
|
-
level
|
|
175
|
+
level,
|
|
181
176
|
enableCallStack: process.env.RUNTIME === "tsx"
|
|
182
177
|
}
|
|
183
178
|
},
|
|
@@ -219,8 +214,8 @@ var init_logger = __esm({
|
|
|
219
214
|
logger3.gray = chalk2.gray;
|
|
220
215
|
logger3.violet = chalk2.hex("#868ECC");
|
|
221
216
|
logger3.fnc = chalk2.hex(color || "#FFFF00");
|
|
222
|
-
logger3.bot = (
|
|
223
|
-
switch (
|
|
217
|
+
logger3.bot = (level, id, ...args) => {
|
|
218
|
+
switch (level) {
|
|
224
219
|
case "trace":
|
|
225
220
|
return logger3.trace(logger3.violet(`[Bot:${id}]`), ...args);
|
|
226
221
|
case "debug":
|
|
@@ -906,9 +901,9 @@ var init_data = __esm({
|
|
|
906
901
|
stream3.on("end", () => resolve(Buffer.concat(chunks)));
|
|
907
902
|
stream3.on("error", (error) => reject(error));
|
|
908
903
|
});
|
|
909
|
-
readFile = async (
|
|
904
|
+
readFile = async (path30) => {
|
|
910
905
|
try {
|
|
911
|
-
const data = await fs5.promises.readFile(
|
|
906
|
+
const data = await fs5.promises.readFile(path30);
|
|
912
907
|
return data;
|
|
913
908
|
} catch (error) {
|
|
914
909
|
logger.error(error);
|
|
@@ -924,36 +919,36 @@ var init_data = __esm({
|
|
|
924
919
|
var readJsonSync, writeJsonSync, readJson, writeJson, json;
|
|
925
920
|
var init_json = __esm({
|
|
926
921
|
"src/utils/fs/json.ts"() {
|
|
927
|
-
readJsonSync = (
|
|
922
|
+
readJsonSync = (path30, isThrow = false) => {
|
|
928
923
|
try {
|
|
929
|
-
const data = fs5.readFileSync(
|
|
924
|
+
const data = fs5.readFileSync(path30, "utf8");
|
|
930
925
|
return JSON.parse(data);
|
|
931
926
|
} catch (error) {
|
|
932
927
|
if (isThrow) throw error;
|
|
933
928
|
return null;
|
|
934
929
|
}
|
|
935
930
|
};
|
|
936
|
-
writeJsonSync = (
|
|
931
|
+
writeJsonSync = (path30, data, isThrow = false) => {
|
|
937
932
|
try {
|
|
938
|
-
fs5.writeFileSync(
|
|
933
|
+
fs5.writeFileSync(path30, JSON.stringify(data, null, 2));
|
|
939
934
|
return true;
|
|
940
935
|
} catch (error) {
|
|
941
936
|
if (isThrow) throw error;
|
|
942
937
|
return false;
|
|
943
938
|
}
|
|
944
939
|
};
|
|
945
|
-
readJson = async (
|
|
940
|
+
readJson = async (path30, isThrow = false) => {
|
|
946
941
|
try {
|
|
947
|
-
const data = await fs5.promises.readFile(
|
|
942
|
+
const data = await fs5.promises.readFile(path30, "utf8");
|
|
948
943
|
return JSON.parse(data);
|
|
949
944
|
} catch (error) {
|
|
950
945
|
if (isThrow) throw error;
|
|
951
946
|
return null;
|
|
952
947
|
}
|
|
953
948
|
};
|
|
954
|
-
writeJson = async (
|
|
949
|
+
writeJson = async (path30, data, isThrow = false) => {
|
|
955
950
|
try {
|
|
956
|
-
await fs5.promises.writeFile(
|
|
951
|
+
await fs5.promises.writeFile(path30, JSON.stringify(data, null, 2));
|
|
957
952
|
return true;
|
|
958
953
|
} catch (error) {
|
|
959
954
|
if (isThrow) throw error;
|
|
@@ -1006,7 +1001,7 @@ var init_path = __esm({
|
|
|
1006
1001
|
const filePath = fileURLToPath$1(url);
|
|
1007
1002
|
const rel = path5.relative(path5.dirname(filePath), process.cwd());
|
|
1008
1003
|
const upLevelsCount = rel.split(path5.sep).length;
|
|
1009
|
-
return
|
|
1004
|
+
return lodash3.repeat("../", upLevelsCount);
|
|
1010
1005
|
};
|
|
1011
1006
|
isSubPath = (root2, target, isAbs = true) => {
|
|
1012
1007
|
if (isAbs) {
|
|
@@ -1133,10 +1128,10 @@ var init_yaml = __esm({
|
|
|
1133
1128
|
* 获取指定路径的值
|
|
1134
1129
|
* @param path - 路径,多个路径使用`.`连接,例如:`a.b.c`
|
|
1135
1130
|
*/
|
|
1136
|
-
get(
|
|
1131
|
+
get(path30) {
|
|
1137
1132
|
try {
|
|
1138
|
-
if (!
|
|
1139
|
-
return
|
|
1133
|
+
if (!path30) return this.document.toJSON();
|
|
1134
|
+
return lodash3.get(this.document.toJSON(), path30);
|
|
1140
1135
|
} catch (error) {
|
|
1141
1136
|
logger.error(`[YamlEditor] \u83B7\u53D6\u6570\u636E\u65F6\u51FA\u9519\uFF1A${error}`);
|
|
1142
1137
|
return null;
|
|
@@ -1148,9 +1143,9 @@ var init_yaml = __esm({
|
|
|
1148
1143
|
* @param value - 要设置的值 允许的类型:`string`, `boolean`, `number`, `object`, `array`
|
|
1149
1144
|
* @param isSplit - 是否使用分割路径路径,默认为 `true`
|
|
1150
1145
|
*/
|
|
1151
|
-
set(
|
|
1146
|
+
set(path30, value, isSplit = true) {
|
|
1152
1147
|
try {
|
|
1153
|
-
const _path = typeof
|
|
1148
|
+
const _path = typeof path30 === "string" ? isSplit ? path30.split(".") : [path30] : path30;
|
|
1154
1149
|
this.document.setIn(_path, value);
|
|
1155
1150
|
return true;
|
|
1156
1151
|
} catch (error) {
|
|
@@ -1164,11 +1159,11 @@ var init_yaml = __esm({
|
|
|
1164
1159
|
* @param value - 要添加的值
|
|
1165
1160
|
* @param isSplit - 是否使用分割路径路径,默认为 `true`
|
|
1166
1161
|
*/
|
|
1167
|
-
add(
|
|
1162
|
+
add(path30, value, isSplit = true) {
|
|
1168
1163
|
try {
|
|
1169
|
-
const _path = typeof
|
|
1164
|
+
const _path = typeof path30 === "string" ? isSplit ? path30.split(".") : [path30] : path30;
|
|
1170
1165
|
this.document.addIn(_path, value);
|
|
1171
|
-
logger.debug(`[YamlEditor] \u5DF2\u5728 ${
|
|
1166
|
+
logger.debug(`[YamlEditor] \u5DF2\u5728 ${path30} \u6DFB\u52A0\u65B0\u7684\u503C`);
|
|
1172
1167
|
return true;
|
|
1173
1168
|
} catch (error) {
|
|
1174
1169
|
logger.error(`[YamlEditor] \u6DFB\u52A0\u6570\u636E\u65F6\u51FA\u9519\uFF1A${error}`);
|
|
@@ -1181,9 +1176,9 @@ var init_yaml = __esm({
|
|
|
1181
1176
|
* @param isSplit - 是否使用分割路径路径,默认为 `true`
|
|
1182
1177
|
* @returns 是否删除成功
|
|
1183
1178
|
*/
|
|
1184
|
-
del(
|
|
1179
|
+
del(path30, isSplit = true) {
|
|
1185
1180
|
try {
|
|
1186
|
-
const _path = typeof
|
|
1181
|
+
const _path = typeof path30 === "string" ? isSplit ? path30.split(".") : [path30] : path30;
|
|
1187
1182
|
this.document.deleteIn(_path);
|
|
1188
1183
|
return true;
|
|
1189
1184
|
} catch (error) {
|
|
@@ -1198,9 +1193,9 @@ var init_yaml = __esm({
|
|
|
1198
1193
|
* @param prepend - 如果为 true,则添加到数组的开头,否则添加到末尾
|
|
1199
1194
|
* @param isSplit - 是否使用分割路径路径,默认为 `true`
|
|
1200
1195
|
*/
|
|
1201
|
-
append(
|
|
1196
|
+
append(path30, value, prepend = false, isSplit = true) {
|
|
1202
1197
|
try {
|
|
1203
|
-
const _path = typeof
|
|
1198
|
+
const _path = typeof path30 === "string" ? isSplit ? path30.split(".") : [path30] : path30;
|
|
1204
1199
|
let current = this.document.getIn(_path);
|
|
1205
1200
|
if (!current) {
|
|
1206
1201
|
current = new YAML.YAMLSeq();
|
|
@@ -1211,7 +1206,7 @@ var init_yaml = __esm({
|
|
|
1211
1206
|
} else {
|
|
1212
1207
|
prepend ? current.items.unshift(value) : current.add(value);
|
|
1213
1208
|
}
|
|
1214
|
-
logger.debug(`[YamlEditor] \u5DF2\u5411 ${
|
|
1209
|
+
logger.debug(`[YamlEditor] \u5DF2\u5411 ${path30} \u6570\u7EC4${prepend ? "\u5F00\u5934" : "\u672B\u5C3E"}\u6DFB\u52A0\u65B0\u5143\u7D20\uFF1A${value}`);
|
|
1215
1210
|
return true;
|
|
1216
1211
|
} catch (error) {
|
|
1217
1212
|
logger.error(`[YamlEditor] \u5411\u6570\u7EC4\u6DFB\u52A0\u5143\u7D20\u65F6\u51FA\u9519\uFF1A${error}`);
|
|
@@ -1224,9 +1219,9 @@ var init_yaml = __esm({
|
|
|
1224
1219
|
* @param value - 要删除的值
|
|
1225
1220
|
* @param isSplit - 是否使用分割路径路径,默认为 `true`
|
|
1226
1221
|
*/
|
|
1227
|
-
remove(
|
|
1222
|
+
remove(path30, value, isSplit = true) {
|
|
1228
1223
|
try {
|
|
1229
|
-
const _path = typeof
|
|
1224
|
+
const _path = typeof path30 === "string" ? isSplit ? path30.split(".") : [path30] : path30;
|
|
1230
1225
|
const current = this.document.getIn(_path);
|
|
1231
1226
|
if (!current) {
|
|
1232
1227
|
logger.error("[YamlEditor] \u6307\u5B9A\u7684\u8DEF\u5F84\u4E0D\u5B58\u5728");
|
|
@@ -1236,13 +1231,13 @@ var init_yaml = __esm({
|
|
|
1236
1231
|
logger.error("[YamlEditor] \u6307\u5B9A\u7684\u8DEF\u5F84\u4E0D\u662F\u6570\u7EC4");
|
|
1237
1232
|
return false;
|
|
1238
1233
|
}
|
|
1239
|
-
const index4 = current.items.findIndex((item) =>
|
|
1234
|
+
const index4 = current.items.findIndex((item) => lodash3.isEqual(item.toJSON(), value));
|
|
1240
1235
|
if (index4 < 0) {
|
|
1241
1236
|
logger.error("[YamlEditor] \u672A\u627E\u5230\u8981\u5220\u9664\u7684\u503C");
|
|
1242
1237
|
return false;
|
|
1243
1238
|
}
|
|
1244
1239
|
current.items.splice(index4, 1);
|
|
1245
|
-
logger.debug(`[YamlEditor] \u5DF2\u4ECE ${
|
|
1240
|
+
logger.debug(`[YamlEditor] \u5DF2\u4ECE ${path30} \u6570\u7EC4\u5220\u9664\u5143\u7D20\uFF1A${value}`);
|
|
1246
1241
|
return true;
|
|
1247
1242
|
} catch (error) {
|
|
1248
1243
|
logger.error(`[YamlEditor] \u4ECE\u6570\u7EC4\u5220\u9664\u5143\u7D20\u65F6\u51FA\u9519\uFF1A${error}`);
|
|
@@ -1254,9 +1249,9 @@ var init_yaml = __esm({
|
|
|
1254
1249
|
* @param path - 路径,用点号分隔
|
|
1255
1250
|
* @param isSplit - 是否使用分割路径路径,默认为 `true`
|
|
1256
1251
|
*/
|
|
1257
|
-
has(
|
|
1252
|
+
has(path30, isSplit = true) {
|
|
1258
1253
|
try {
|
|
1259
|
-
const _path = typeof
|
|
1254
|
+
const _path = typeof path30 === "string" ? isSplit ? path30.split(".") : [path30] : path30;
|
|
1260
1255
|
return this.document.hasIn(_path);
|
|
1261
1256
|
} catch (error) {
|
|
1262
1257
|
logger.error(`[YamlEditor] \u68C0\u67E5\u8DEF\u5F84\u662F\u5426\u5B58\u5728\u65F6\u51FA\u9519\uFF1A${error}`);
|
|
@@ -1269,20 +1264,20 @@ var init_yaml = __esm({
|
|
|
1269
1264
|
* @param value - 要查询的值
|
|
1270
1265
|
* @param isSplit - 是否使用分割路径路径,默认为 `true`
|
|
1271
1266
|
*/
|
|
1272
|
-
hasval(
|
|
1267
|
+
hasval(path30, value, isSplit = true) {
|
|
1273
1268
|
try {
|
|
1274
|
-
const _path = typeof
|
|
1269
|
+
const _path = typeof path30 === "string" ? isSplit ? path30.split(".") : [path30] : path30;
|
|
1275
1270
|
const current = this.document.getIn(_path);
|
|
1276
1271
|
if (!current) return false;
|
|
1277
1272
|
if (current instanceof YAML.YAMLSeq) {
|
|
1278
|
-
return current.items.some((item) =>
|
|
1273
|
+
return current.items.some((item) => lodash3.isEqual(item.toJSON(), value));
|
|
1279
1274
|
} else if (current instanceof YAML.YAMLMap) {
|
|
1280
|
-
return Array.from(current.values()).some((v) =>
|
|
1275
|
+
return Array.from(current.values()).some((v) => lodash3.isEqual(v.toJSON(), value));
|
|
1281
1276
|
} else {
|
|
1282
|
-
return
|
|
1277
|
+
return lodash3.isEqual(current, value);
|
|
1283
1278
|
}
|
|
1284
1279
|
} catch (error) {
|
|
1285
|
-
logger.error(`[YamlEditor] \u68C0\u67E5\u8DEF\u5F84 ${
|
|
1280
|
+
logger.error(`[YamlEditor] \u68C0\u67E5\u8DEF\u5F84 ${path30} \u662F\u5426\u5305\u542B\u503C\u65F6\u51FA\u9519\uFF1A${error}`);
|
|
1286
1281
|
return false;
|
|
1287
1282
|
}
|
|
1288
1283
|
}
|
|
@@ -1292,8 +1287,8 @@ var init_yaml = __esm({
|
|
|
1292
1287
|
* @param value - 要查询的值
|
|
1293
1288
|
* @deprecated 请使用 `hasval` 代替
|
|
1294
1289
|
*/
|
|
1295
|
-
hasVal(
|
|
1296
|
-
return this.hasval(
|
|
1290
|
+
hasVal(path30, value) {
|
|
1291
|
+
return this.hasval(path30, value);
|
|
1297
1292
|
}
|
|
1298
1293
|
/**
|
|
1299
1294
|
* 向根节点新增元素,如果根节点不是数组,则将其转换为数组再新增元素
|
|
@@ -1338,9 +1333,9 @@ var init_yaml = __esm({
|
|
|
1338
1333
|
* @param path - 路径,多个路径使用`.`连接,例如:`a.b.c`
|
|
1339
1334
|
* @param isSplit - 是否使用分割路径路径,默认为 `true`
|
|
1340
1335
|
*/
|
|
1341
|
-
getpair(
|
|
1342
|
-
if (!
|
|
1343
|
-
const keys = typeof
|
|
1336
|
+
getpair(path30, isSplit = true) {
|
|
1337
|
+
if (!path30) throw new Error("path is required");
|
|
1338
|
+
const keys = typeof path30 === "string" ? isSplit ? path30.split(".") : [path30] : path30;
|
|
1344
1339
|
let pair = this.document.contents;
|
|
1345
1340
|
keys.forEach((key) => {
|
|
1346
1341
|
if (isMap(pair)) {
|
|
@@ -1360,10 +1355,10 @@ var init_yaml = __esm({
|
|
|
1360
1355
|
* @param prepend - 如果为 true,则添加注释到开头,否则添加到同一行的末尾
|
|
1361
1356
|
* @param isSplit - 是否使用分割路径路径,默认为 `true`
|
|
1362
1357
|
*/
|
|
1363
|
-
comment(
|
|
1364
|
-
if (!
|
|
1365
|
-
const pair = this.getpair(
|
|
1366
|
-
if (!pair) throw new Error(`[YamlEditor] \u672A\u627E\u5230\u8282\u70B9 ${
|
|
1358
|
+
comment(path30, comment2, prepend = true, isSplit = true) {
|
|
1359
|
+
if (!path30) throw new Error("[YamlEditor] path \u4E0D\u80FD\u4E3A\u7A7A");
|
|
1360
|
+
const pair = this.getpair(path30, isSplit);
|
|
1361
|
+
if (!pair) throw new Error(`[YamlEditor] \u672A\u627E\u5230\u8282\u70B9 ${path30}`);
|
|
1367
1362
|
comment2 = ` ${comment2}`;
|
|
1368
1363
|
if (prepend) {
|
|
1369
1364
|
pair.key.commentBefore = comment2;
|
|
@@ -1377,10 +1372,10 @@ var init_yaml = __esm({
|
|
|
1377
1372
|
* @param type - 要删除的注释类型,`before` 为注释前,`after` 为注释后,`all` 为全部
|
|
1378
1373
|
* @param isSplit - 是否使用分割路径路径,默认为 `true`
|
|
1379
1374
|
*/
|
|
1380
|
-
uncomment(
|
|
1381
|
-
if (!
|
|
1382
|
-
const pair = this.getpair(
|
|
1383
|
-
if (!pair) throw new Error(`[YamlEditor] \u672A\u627E\u5230\u8282\u70B9 ${
|
|
1375
|
+
uncomment(path30, type = "all", isSplit = true) {
|
|
1376
|
+
if (!path30) throw new Error("[YamlEditor] path \u4E0D\u80FD\u4E3A\u7A7A");
|
|
1377
|
+
const pair = this.getpair(path30, isSplit);
|
|
1378
|
+
if (!pair) throw new Error(`[YamlEditor] \u672A\u627E\u5230\u8282\u70B9 ${path30}`);
|
|
1384
1379
|
if (type === "all") {
|
|
1385
1380
|
delete pair.key.comment;
|
|
1386
1381
|
delete pair.key.commentBefore;
|
|
@@ -1396,10 +1391,10 @@ var init_yaml = __esm({
|
|
|
1396
1391
|
* @param type - 要检查的注释类型,`before` 为注释前,`after` 为注释后
|
|
1397
1392
|
* @param isSplit - 是否使用分割路径路径,默认为 `true`
|
|
1398
1393
|
*/
|
|
1399
|
-
hascomment(
|
|
1400
|
-
if (!
|
|
1401
|
-
const pair = this.getpair(
|
|
1402
|
-
if (!pair) throw new Error(`[YamlEditor] \u672A\u627E\u5230\u8282\u70B9 ${
|
|
1394
|
+
hascomment(path30, type, isSplit = true) {
|
|
1395
|
+
if (!path30) throw new Error("[YamlEditor] path \u4E0D\u80FD\u4E3A\u7A7A");
|
|
1396
|
+
const pair = this.getpair(path30, isSplit);
|
|
1397
|
+
if (!pair) throw new Error(`[YamlEditor] \u672A\u627E\u5230\u8282\u70B9 ${path30}`);
|
|
1403
1398
|
if (type === "before") {
|
|
1404
1399
|
return !!pair.key.commentBefore;
|
|
1405
1400
|
} else if (type === "after") {
|
|
@@ -1412,10 +1407,10 @@ var init_yaml = __esm({
|
|
|
1412
1407
|
* @param path - 路径,多个路径使用`.`连接,例如:`a.b.c`
|
|
1413
1408
|
* @param isSplit - 是否使用分割路径路径,默认为 `true`
|
|
1414
1409
|
*/
|
|
1415
|
-
getcomment(
|
|
1416
|
-
if (!
|
|
1417
|
-
const pair = this.getpair(
|
|
1418
|
-
if (!pair) throw new Error(`[YamlEditor] \u672A\u627E\u5230\u8282\u70B9 ${
|
|
1410
|
+
getcomment(path30, isSplit = true) {
|
|
1411
|
+
if (!path30) throw new Error("[YamlEditor] path \u4E0D\u80FD\u4E3A\u7A7A");
|
|
1412
|
+
const pair = this.getpair(path30, isSplit);
|
|
1413
|
+
if (!pair) throw new Error(`[YamlEditor] \u672A\u627E\u5230\u8282\u70B9 ${path30}`);
|
|
1419
1414
|
return pair.key.commentBefore || pair.key.comment;
|
|
1420
1415
|
}
|
|
1421
1416
|
/**
|
|
@@ -1427,11 +1422,11 @@ var init_yaml = __esm({
|
|
|
1427
1422
|
logger.debug("[YamlEditor] \u6587\u4EF6\u5DF2\u4FDD\u5B58");
|
|
1428
1423
|
}
|
|
1429
1424
|
};
|
|
1430
|
-
read = (
|
|
1431
|
-
const data = YAML.parse(fs5.readFileSync(
|
|
1425
|
+
read = (path30) => {
|
|
1426
|
+
const data = YAML.parse(fs5.readFileSync(path30, "utf-8"));
|
|
1432
1427
|
read.save = (options) => {
|
|
1433
1428
|
try {
|
|
1434
|
-
save(
|
|
1429
|
+
save(path30, data, typeof options === "string" ? JSON.parse(options) : options);
|
|
1435
1430
|
return true;
|
|
1436
1431
|
} catch (error) {
|
|
1437
1432
|
logger.error("[YamlEditor] \u4FDD\u5B58\u6587\u4EF6\u65F6\u51FA\u9519");
|
|
@@ -1441,23 +1436,23 @@ var init_yaml = __esm({
|
|
|
1441
1436
|
};
|
|
1442
1437
|
return data;
|
|
1443
1438
|
};
|
|
1444
|
-
write = (
|
|
1439
|
+
write = (path30, value) => {
|
|
1445
1440
|
try {
|
|
1446
|
-
fs5.writeFileSync(
|
|
1441
|
+
fs5.writeFileSync(path30, YAML.stringify(value));
|
|
1447
1442
|
return true;
|
|
1448
1443
|
} catch {
|
|
1449
1444
|
return false;
|
|
1450
1445
|
}
|
|
1451
1446
|
};
|
|
1452
|
-
save = (
|
|
1447
|
+
save = (path30, value, options) => {
|
|
1453
1448
|
if (!options) {
|
|
1454
|
-
fs5.writeFileSync(
|
|
1449
|
+
fs5.writeFileSync(path30, YAML.stringify(value));
|
|
1455
1450
|
return;
|
|
1456
1451
|
}
|
|
1457
1452
|
const editor = new YamlEditor(YAML.stringify(value));
|
|
1458
1453
|
const comment2 = typeof options === "string" ? JSON.parse(fs5.readFileSync(options, "utf8")) : options;
|
|
1459
1454
|
applyComments(editor, comment2);
|
|
1460
|
-
fs5.writeFileSync(
|
|
1455
|
+
fs5.writeFileSync(path30, editor.document.toString());
|
|
1461
1456
|
};
|
|
1462
1457
|
comment = (filePath, commentConfig) => {
|
|
1463
1458
|
const editor = new YamlEditor(filePath);
|
|
@@ -1814,16 +1809,20 @@ var init_fs2 = __esm({
|
|
|
1814
1809
|
init_fs();
|
|
1815
1810
|
}
|
|
1816
1811
|
});
|
|
1817
|
-
var diffArray, clamp, random, formatNumber, percentage, formatUnit, isEven, average, round;
|
|
1812
|
+
var diffArray, diffSimpleArray, clamp, random, formatNumber, percentage, formatUnit, isEven, average, round;
|
|
1818
1813
|
var init_number = __esm({
|
|
1819
1814
|
"src/utils/common/number.ts"() {
|
|
1820
1815
|
diffArray = (old, data) => {
|
|
1821
|
-
const removed =
|
|
1822
|
-
const added =
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1816
|
+
const removed = lodash3.differenceWith(old, data, lodash3.isEqual);
|
|
1817
|
+
const added = lodash3.differenceWith(data, old, lodash3.isEqual);
|
|
1818
|
+
const common = lodash3.intersectionWith(old, data, lodash3.isEqual);
|
|
1819
|
+
return { removed, added, common };
|
|
1820
|
+
};
|
|
1821
|
+
diffSimpleArray = (old, data) => {
|
|
1822
|
+
const removed = lodash3.difference(old, data);
|
|
1823
|
+
const added = lodash3.difference(data, old);
|
|
1824
|
+
const common = lodash3.intersection(old, data);
|
|
1825
|
+
return { removed, added, common };
|
|
1827
1826
|
};
|
|
1828
1827
|
clamp = (value, min, max) => {
|
|
1829
1828
|
return Math.min(Math.max(value, min), max);
|
|
@@ -2213,7 +2212,7 @@ var init_message = __esm({
|
|
|
2213
2212
|
case "markdownTpl":
|
|
2214
2213
|
return `[markdowntpl:${JSON.stringify({ templateId: v.templateId, ...v.params })}]`;
|
|
2215
2214
|
default:
|
|
2216
|
-
return `[\u672A\u77E5:${
|
|
2215
|
+
return `[\u672A\u77E5:${lodash3.truncate(JSON.stringify(v), { length: 200 })}]`;
|
|
2217
2216
|
}
|
|
2218
2217
|
}).join("");
|
|
2219
2218
|
return {
|
|
@@ -2281,7 +2280,7 @@ var init_sendMsg = __esm({
|
|
|
2281
2280
|
priority: options.priority ?? 1e4,
|
|
2282
2281
|
callback
|
|
2283
2282
|
});
|
|
2284
|
-
return { id, list:
|
|
2283
|
+
return { id, list: lodash3.orderBy(list2, ["priority"], ["asc"]) };
|
|
2285
2284
|
};
|
|
2286
2285
|
sendMsg = {
|
|
2287
2286
|
/**
|
|
@@ -2539,8 +2538,8 @@ var init_base = __esm({
|
|
|
2539
2538
|
* @param level 日志等级
|
|
2540
2539
|
* @param args 日志内容
|
|
2541
2540
|
*/
|
|
2542
|
-
logger(
|
|
2543
|
-
logger.bot(
|
|
2541
|
+
logger(level, ...args) {
|
|
2542
|
+
logger.bot(level, this.account.selfId, ...args);
|
|
2544
2543
|
}
|
|
2545
2544
|
/**
|
|
2546
2545
|
* 发送消息
|
|
@@ -3917,9 +3916,9 @@ var init_other = __esm({
|
|
|
3917
3916
|
}
|
|
3918
3917
|
}
|
|
3919
3918
|
};
|
|
3920
|
-
initPrint = (ctx3, type, prefix,
|
|
3919
|
+
initPrint = (ctx3, type, prefix, level = "info") => {
|
|
3921
3920
|
ctx3.logText = `[${type}:${ctx3.userId}(${ctx3.sender.nick || ""})]`;
|
|
3922
|
-
logger.bot(
|
|
3921
|
+
logger.bot(level, ctx3.selfId, `${prefix}: [${ctx3.userId}(${ctx3.sender.nick || ""})] ${ctx3.tips}`);
|
|
3923
3922
|
};
|
|
3924
3923
|
deal = async (ctx3, config2) => {
|
|
3925
3924
|
for (const plugin of cache3.accept) {
|
|
@@ -4179,7 +4178,7 @@ var init_messaeg = __esm({
|
|
|
4179
4178
|
priority: options.priority ?? 1e4,
|
|
4180
4179
|
callback
|
|
4181
4180
|
});
|
|
4182
|
-
return { id, list:
|
|
4181
|
+
return { id, list: lodash3.orderBy(list2, ["priority"], ["asc"]) };
|
|
4183
4182
|
};
|
|
4184
4183
|
message = Object.assign(
|
|
4185
4184
|
/**
|
|
@@ -4333,7 +4332,7 @@ var init_emptyMessage = __esm({
|
|
|
4333
4332
|
priority: options.priority ?? 1e4,
|
|
4334
4333
|
callback
|
|
4335
4334
|
});
|
|
4336
|
-
return { id, list:
|
|
4335
|
+
return { id, list: lodash3.orderBy(list2, ["priority"], ["asc"]) };
|
|
4337
4336
|
};
|
|
4338
4337
|
emptyMessage = Object.assign(
|
|
4339
4338
|
/**
|
|
@@ -4489,9 +4488,9 @@ var init_groups3 = __esm({
|
|
|
4489
4488
|
});
|
|
4490
4489
|
}
|
|
4491
4490
|
};
|
|
4492
|
-
initPrint2 = (ctx3, type, prefix,
|
|
4491
|
+
initPrint2 = (ctx3, type, prefix, level = "info") => {
|
|
4493
4492
|
ctx3.logText = `[${type}:${ctx3.userId}(${ctx3.sender.nick || ""})]`;
|
|
4494
|
-
logger.bot(
|
|
4493
|
+
logger.bot(level, ctx3.selfId, `${prefix}: [${ctx3.userId}(${ctx3.sender.nick || ""})] ${ctx3.rawMessage}`);
|
|
4495
4494
|
};
|
|
4496
4495
|
groupsDeal = async (ctx3, config2, isPrint, filter) => {
|
|
4497
4496
|
for (const plugin of cache3.command) {
|
|
@@ -4510,7 +4509,7 @@ var init_groups3 = __esm({
|
|
|
4510
4509
|
if (!disableViaPluginBlacklist(plugin, config2)) return true;
|
|
4511
4510
|
ctx3.logFnc = `[${plugin.pkg.name}][${plugin.file.method}]`;
|
|
4512
4511
|
const logFnc = logger.fnc(ctx3.logFnc);
|
|
4513
|
-
isPrint && plugin.log(ctx3.selfId, `${logFnc}${ctx3.logText} ${
|
|
4512
|
+
isPrint && plugin.log(ctx3.selfId, `${logFnc}${ctx3.logText} ${lodash3.truncate(ctx3.msg, { length: 100 })}`);
|
|
4514
4513
|
const start3 = Date.now();
|
|
4515
4514
|
try {
|
|
4516
4515
|
if (!Permission.groups(ctx3, plugin)) return false;
|
|
@@ -4543,7 +4542,7 @@ var init_groups3 = __esm({
|
|
|
4543
4542
|
return false;
|
|
4544
4543
|
} finally {
|
|
4545
4544
|
const time2 = logger.green(Date.now() - start3 + "ms");
|
|
4546
|
-
const msg =
|
|
4545
|
+
const msg = lodash3.truncate(ctx3.msg, { length: 100 });
|
|
4547
4546
|
isPrint && plugin.log(ctx3.selfId, `${logFnc} ${msg} \u5904\u7406\u5B8C\u6210 ${time2}`);
|
|
4548
4547
|
}
|
|
4549
4548
|
};
|
|
@@ -4623,9 +4622,9 @@ var init_private3 = __esm({
|
|
|
4623
4622
|
});
|
|
4624
4623
|
}
|
|
4625
4624
|
};
|
|
4626
|
-
initPrint3 = (ctx3, type, prefix,
|
|
4625
|
+
initPrint3 = (ctx3, type, prefix, level = "info") => {
|
|
4627
4626
|
ctx3.logText = `[${type}:${ctx3.userId}(${ctx3.sender.nick || ""})]`;
|
|
4628
|
-
logger.bot(
|
|
4627
|
+
logger.bot(level, ctx3.selfId, `${prefix}: [${ctx3.userId}(${ctx3.sender.nick || ""})] ${ctx3.rawMessage}`);
|
|
4629
4628
|
};
|
|
4630
4629
|
privateDeal = async (ctx3, config2, filter) => {
|
|
4631
4630
|
for (const plugin of cache3.command) {
|
|
@@ -4644,7 +4643,7 @@ var init_private3 = __esm({
|
|
|
4644
4643
|
if (!disableViaPluginBlacklist(plugin, config2)) return true;
|
|
4645
4644
|
ctx3.logFnc = `[${plugin.pkg.name}][${plugin.file.method}]`;
|
|
4646
4645
|
const logFnc = logger.fnc(ctx3.logFnc);
|
|
4647
|
-
plugin.log(ctx3.selfId, `${logFnc}${ctx3.logText} ${
|
|
4646
|
+
plugin.log(ctx3.selfId, `${logFnc}${ctx3.logText} ${lodash3.truncate(ctx3.msg, { length: 100 })}`);
|
|
4648
4647
|
const start3 = Date.now();
|
|
4649
4648
|
try {
|
|
4650
4649
|
if (!Permission.private(ctx3, plugin)) return false;
|
|
@@ -4678,7 +4677,7 @@ var init_private3 = __esm({
|
|
|
4678
4677
|
return false;
|
|
4679
4678
|
} finally {
|
|
4680
4679
|
const time2 = logger.green(Date.now() - start3 + "ms");
|
|
4681
|
-
const msg =
|
|
4680
|
+
const msg = lodash3.truncate(ctx3.msg, { length: 100 });
|
|
4682
4681
|
plugin.log(ctx3.selfId, `${logFnc} ${msg} \u5904\u7406\u5B8C\u6210 ${time2}`);
|
|
4683
4682
|
}
|
|
4684
4683
|
};
|
|
@@ -6500,7 +6499,7 @@ var init_sender = __esm({
|
|
|
6500
6499
|
uin
|
|
6501
6500
|
};
|
|
6502
6501
|
};
|
|
6503
|
-
senderGroup = (userId, role, name, sex, age, card, area,
|
|
6502
|
+
senderGroup = (userId, role, name, sex, age, card, area, level, title, uid, uin) => {
|
|
6504
6503
|
if (typeof userId === "object") {
|
|
6505
6504
|
const name2 = userId.name || "";
|
|
6506
6505
|
return {
|
|
@@ -6526,7 +6525,7 @@ var init_sender = __esm({
|
|
|
6526
6525
|
role: role || "unknown",
|
|
6527
6526
|
card,
|
|
6528
6527
|
area,
|
|
6529
|
-
level
|
|
6528
|
+
level,
|
|
6530
6529
|
title,
|
|
6531
6530
|
sex,
|
|
6532
6531
|
age,
|
|
@@ -6695,9 +6694,9 @@ var init_message5 = __esm({
|
|
|
6695
6694
|
if (event.message_type === "group" && event.sub_type === "normal") {
|
|
6696
6695
|
const groupId = event.group_id + "";
|
|
6697
6696
|
const userId = event.sender.user_id + "";
|
|
6698
|
-
const { nickname, role, sex, age, card, area, level
|
|
6697
|
+
const { nickname, role, sex, age, card, area, level, title } = event.sender;
|
|
6699
6698
|
const contact3 = contactGroup(groupId);
|
|
6700
|
-
const sender2 = senderGroup(userId, role, nickname, sex, age, card, area,
|
|
6699
|
+
const sender2 = senderGroup(userId, role, nickname, sex, age, card, area, level, title);
|
|
6701
6700
|
createGroupMessage({
|
|
6702
6701
|
bot,
|
|
6703
6702
|
contact: contact3,
|
|
@@ -8789,11 +8788,11 @@ var init_list = __esm({
|
|
|
8789
8788
|
delete cache5.info;
|
|
8790
8789
|
}
|
|
8791
8790
|
if (isInfo) {
|
|
8792
|
-
if (((_a = cache5 == null ? void 0 : cache5.info) == null ? void 0 : _a[type]) && !
|
|
8791
|
+
if (((_a = cache5 == null ? void 0 : cache5.info) == null ? void 0 : _a[type]) && !lodash3.isEqual(cache5.info[type], cache5.info[type])) {
|
|
8793
8792
|
return cache5.info[type];
|
|
8794
8793
|
}
|
|
8795
8794
|
} else {
|
|
8796
|
-
if (((_b = cache5 == null ? void 0 : cache5.list) == null ? void 0 : _b[type]) && !
|
|
8795
|
+
if (((_b = cache5 == null ? void 0 : cache5.list) == null ? void 0 : _b[type]) && !lodash3.isEqual(cache5.list[type], cache5.list[type])) {
|
|
8797
8796
|
return cache5.list[type];
|
|
8798
8797
|
}
|
|
8799
8798
|
}
|
|
@@ -9164,11 +9163,11 @@ var init_update = __esm({
|
|
|
9164
9163
|
}
|
|
9165
9164
|
};
|
|
9166
9165
|
getCommit = async (options) => {
|
|
9167
|
-
const { path:
|
|
9166
|
+
const { path: path30, count: count3 = 1, hash, branch } = options;
|
|
9168
9167
|
let cmd = `git log -${count3} --format="[%ad]%s %n" --date="format:%m-%d %H:%M"`;
|
|
9169
9168
|
if (hash) cmd = `git log ${hash}..HEAD --format="[%ad] %s %n" --date="format:%m-%d %H:%M"`;
|
|
9170
9169
|
if (branch) cmd = `git log -${count3} ${branch} --format="[%ad] %s %n" --date="format:%m-%d %H:%M"`;
|
|
9171
|
-
const { stdout, error } = await exec(cmd, { cwd:
|
|
9170
|
+
const { stdout, error } = await exec(cmd, { cwd: path30 });
|
|
9172
9171
|
if (error) {
|
|
9173
9172
|
throw error;
|
|
9174
9173
|
}
|
|
@@ -9259,6 +9258,562 @@ var init_update = __esm({
|
|
|
9259
9258
|
};
|
|
9260
9259
|
}
|
|
9261
9260
|
});
|
|
9261
|
+
var logPrefix, SQLiteWrapper;
|
|
9262
|
+
var init_sqlite = __esm({
|
|
9263
|
+
"src/core/db/redis/mock/sqlite/index.ts"() {
|
|
9264
|
+
init_fsSync();
|
|
9265
|
+
logPrefix = (message2) => `[redis-mock] ${message2}`;
|
|
9266
|
+
SQLiteWrapper = class {
|
|
9267
|
+
db;
|
|
9268
|
+
#isClosing = false;
|
|
9269
|
+
#inTransaction = false;
|
|
9270
|
+
dbPath;
|
|
9271
|
+
/**
|
|
9272
|
+
* 构造函数
|
|
9273
|
+
* @param dbPath 数据库路径
|
|
9274
|
+
*/
|
|
9275
|
+
constructor(dbPath2) {
|
|
9276
|
+
this.dbPath = dbPath2;
|
|
9277
|
+
}
|
|
9278
|
+
/**
|
|
9279
|
+
* 初始化数据库连接和表结构
|
|
9280
|
+
*/
|
|
9281
|
+
async init() {
|
|
9282
|
+
mkdirSync(path5.dirname(this.dbPath));
|
|
9283
|
+
await new Promise((resolve, reject) => {
|
|
9284
|
+
this.db = new sqlite3.Database(
|
|
9285
|
+
this.dbPath,
|
|
9286
|
+
sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,
|
|
9287
|
+
(err) => {
|
|
9288
|
+
if (err) {
|
|
9289
|
+
logger.error(logPrefix("SQLite\u6570\u636E\u5E93\u8FDE\u63A5\u5931\u8D25:"));
|
|
9290
|
+
logger.error(err);
|
|
9291
|
+
reject(err);
|
|
9292
|
+
return;
|
|
9293
|
+
}
|
|
9294
|
+
resolve();
|
|
9295
|
+
}
|
|
9296
|
+
);
|
|
9297
|
+
});
|
|
9298
|
+
await new Promise((resolve, reject) => {
|
|
9299
|
+
this.db.exec(
|
|
9300
|
+
`
|
|
9301
|
+
PRAGMA foreign_keys = ON;
|
|
9302
|
+
PRAGMA journal_mode = WAL;
|
|
9303
|
+
PRAGMA synchronous = NORMAL;
|
|
9304
|
+
`,
|
|
9305
|
+
(pragmaErr) => {
|
|
9306
|
+
if (pragmaErr) {
|
|
9307
|
+
logger.warn(logPrefix("\u8BBE\u7F6ESQLite PRAGMA\u5931\u8D25:"));
|
|
9308
|
+
logger.warn(pragmaErr);
|
|
9309
|
+
}
|
|
9310
|
+
resolve();
|
|
9311
|
+
}
|
|
9312
|
+
);
|
|
9313
|
+
});
|
|
9314
|
+
await new Promise((resolve, reject) => {
|
|
9315
|
+
this.db.run(
|
|
9316
|
+
`
|
|
9317
|
+
CREATE TABLE IF NOT EXISTS redis_data (
|
|
9318
|
+
key TEXT PRIMARY KEY,
|
|
9319
|
+
type TEXT NOT NULL,
|
|
9320
|
+
expire INTEGER NOT NULL,
|
|
9321
|
+
value TEXT NOT NULL
|
|
9322
|
+
)
|
|
9323
|
+
`,
|
|
9324
|
+
(err) => {
|
|
9325
|
+
if (err) {
|
|
9326
|
+
logger.error(logPrefix("\u521B\u5EFASQLite\u8868\u5931\u8D25:"));
|
|
9327
|
+
logger.error(err);
|
|
9328
|
+
reject(err);
|
|
9329
|
+
return;
|
|
9330
|
+
}
|
|
9331
|
+
resolve();
|
|
9332
|
+
}
|
|
9333
|
+
);
|
|
9334
|
+
});
|
|
9335
|
+
return this;
|
|
9336
|
+
}
|
|
9337
|
+
/**
|
|
9338
|
+
* 获取所有键
|
|
9339
|
+
* @returns 返回所有键的数组
|
|
9340
|
+
*/
|
|
9341
|
+
async keys() {
|
|
9342
|
+
if (this.#isClosing) {
|
|
9343
|
+
throw new Error("\u6570\u636E\u5E93\u6B63\u5728\u5173\u95ED\u4E2D");
|
|
9344
|
+
}
|
|
9345
|
+
return new Promise((resolve, reject) => {
|
|
9346
|
+
this.db.all(
|
|
9347
|
+
"SELECT key FROM redis_data",
|
|
9348
|
+
[],
|
|
9349
|
+
(err, rows) => {
|
|
9350
|
+
if (err) {
|
|
9351
|
+
logger.error(logPrefix("\u83B7\u53D6\u6240\u6709\u952E\u5931\u8D25:"));
|
|
9352
|
+
logger.error(err);
|
|
9353
|
+
reject(err);
|
|
9354
|
+
return;
|
|
9355
|
+
}
|
|
9356
|
+
resolve(rows ? rows.map((row) => row.key) : []);
|
|
9357
|
+
}
|
|
9358
|
+
);
|
|
9359
|
+
});
|
|
9360
|
+
}
|
|
9361
|
+
/**
|
|
9362
|
+
* 获取指定键的数据
|
|
9363
|
+
* @param key 键名
|
|
9364
|
+
* @returns 返回键的数据或null
|
|
9365
|
+
*/
|
|
9366
|
+
async get(key) {
|
|
9367
|
+
if (!key) {
|
|
9368
|
+
return null;
|
|
9369
|
+
}
|
|
9370
|
+
if (this.#isClosing) {
|
|
9371
|
+
throw new Error("\u6570\u636E\u5E93\u6B63\u5728\u5173\u95ED\u4E2D");
|
|
9372
|
+
}
|
|
9373
|
+
return await this.query(
|
|
9374
|
+
"SELECT type, expire, value FROM redis_data WHERE key = ?",
|
|
9375
|
+
[key]
|
|
9376
|
+
).then((rows) => rows[0] || null).catch((err) => {
|
|
9377
|
+
logger.error(logPrefix(`\u83B7\u53D6\u952E${key}\u7684\u503C\u5931\u8D25:`));
|
|
9378
|
+
logger.error(err);
|
|
9379
|
+
return null;
|
|
9380
|
+
});
|
|
9381
|
+
}
|
|
9382
|
+
/**
|
|
9383
|
+
* 设置键值对
|
|
9384
|
+
* @param key 键名
|
|
9385
|
+
* @param type 类型
|
|
9386
|
+
* @param expire 过期时间
|
|
9387
|
+
* @param value 值
|
|
9388
|
+
* @returns 成功返回true
|
|
9389
|
+
*/
|
|
9390
|
+
async set(key, value, type, expire = -1) {
|
|
9391
|
+
if (!key) {
|
|
9392
|
+
throw new Error("\u952E\u540D\u4E0D\u80FD\u4E3A\u7A7A");
|
|
9393
|
+
}
|
|
9394
|
+
if (this.#isClosing) {
|
|
9395
|
+
throw new Error("\u6570\u636E\u5E93\u6B63\u5728\u5173\u95ED\u4E2D");
|
|
9396
|
+
}
|
|
9397
|
+
return await this.run(
|
|
9398
|
+
"INSERT OR REPLACE INTO redis_data (key, type, expire, value) VALUES (?, ?, ?, ?)",
|
|
9399
|
+
[key, type, expire, value]
|
|
9400
|
+
).then((changes) => changes > 0).catch((err) => {
|
|
9401
|
+
logger.error(logPrefix(`\u8BBE\u7F6E\u952E${key}\u7684\u503C\u5931\u8D25:`));
|
|
9402
|
+
logger.error(err);
|
|
9403
|
+
return false;
|
|
9404
|
+
});
|
|
9405
|
+
}
|
|
9406
|
+
/**
|
|
9407
|
+
* 删除键
|
|
9408
|
+
* @param key 键名
|
|
9409
|
+
* @returns 成功返回true
|
|
9410
|
+
*/
|
|
9411
|
+
async del(key) {
|
|
9412
|
+
if (!key) {
|
|
9413
|
+
return false;
|
|
9414
|
+
}
|
|
9415
|
+
if (this.#isClosing) {
|
|
9416
|
+
throw new Error("\u6570\u636E\u5E93\u6B63\u5728\u5173\u95ED\u4E2D");
|
|
9417
|
+
}
|
|
9418
|
+
return await this.run(
|
|
9419
|
+
"DELETE FROM redis_data WHERE key = ?",
|
|
9420
|
+
[key]
|
|
9421
|
+
).then((changes) => changes > 0).catch((err) => {
|
|
9422
|
+
logger.error(logPrefix(`\u5220\u9664\u952E${key}\u5931\u8D25:`));
|
|
9423
|
+
logger.error(err);
|
|
9424
|
+
return false;
|
|
9425
|
+
});
|
|
9426
|
+
}
|
|
9427
|
+
/**
|
|
9428
|
+
* 设置键的过期时间
|
|
9429
|
+
* @param key 键名
|
|
9430
|
+
* @param expire 过期时间
|
|
9431
|
+
* @returns 成功返回true
|
|
9432
|
+
*/
|
|
9433
|
+
async expire(key, expire) {
|
|
9434
|
+
if (!key) {
|
|
9435
|
+
return false;
|
|
9436
|
+
}
|
|
9437
|
+
return await this.run("UPDATE redis_data SET expire = ? WHERE key = ?", [expire, key]).then((changes) => changes > 0).catch((err) => {
|
|
9438
|
+
logger.error(logPrefix(`\u8BBE\u7F6E\u952E${key}\u7684\u8FC7\u671F\u65F6\u95F4\u5931\u8D25:`));
|
|
9439
|
+
logger.error(err);
|
|
9440
|
+
return false;
|
|
9441
|
+
});
|
|
9442
|
+
}
|
|
9443
|
+
/**
|
|
9444
|
+
* 获取所有数据
|
|
9445
|
+
* @returns 返回所有数据的数组
|
|
9446
|
+
*/
|
|
9447
|
+
async getAllData() {
|
|
9448
|
+
if (this.#isClosing) {
|
|
9449
|
+
throw new Error("\u6570\u636E\u5E93\u6B63\u5728\u5173\u95ED\u4E2D");
|
|
9450
|
+
}
|
|
9451
|
+
return new Promise((resolve, reject) => {
|
|
9452
|
+
this.db.all(
|
|
9453
|
+
"SELECT key, type, expire, value FROM redis_data",
|
|
9454
|
+
[],
|
|
9455
|
+
(err, rows) => {
|
|
9456
|
+
if (err) {
|
|
9457
|
+
logger.error(logPrefix("\u83B7\u53D6\u6240\u6709\u6570\u636E\u5931\u8D25:"));
|
|
9458
|
+
logger.error(err);
|
|
9459
|
+
reject(err);
|
|
9460
|
+
return;
|
|
9461
|
+
}
|
|
9462
|
+
resolve(rows || []);
|
|
9463
|
+
}
|
|
9464
|
+
);
|
|
9465
|
+
});
|
|
9466
|
+
}
|
|
9467
|
+
/**
|
|
9468
|
+
* 关闭数据库连接
|
|
9469
|
+
*/
|
|
9470
|
+
async close() {
|
|
9471
|
+
if (this.#isClosing) {
|
|
9472
|
+
return;
|
|
9473
|
+
}
|
|
9474
|
+
this.#isClosing = true;
|
|
9475
|
+
return new Promise((resolve, reject) => {
|
|
9476
|
+
this.db.close((err) => {
|
|
9477
|
+
if (err) {
|
|
9478
|
+
logger.error(logPrefix("\u5173\u95EDSQLite\u6570\u636E\u5E93\u5931\u8D25:"));
|
|
9479
|
+
logger.error(err);
|
|
9480
|
+
this.#isClosing = false;
|
|
9481
|
+
reject(err);
|
|
9482
|
+
return;
|
|
9483
|
+
}
|
|
9484
|
+
resolve();
|
|
9485
|
+
});
|
|
9486
|
+
});
|
|
9487
|
+
}
|
|
9488
|
+
/**
|
|
9489
|
+
* 开始事务
|
|
9490
|
+
*/
|
|
9491
|
+
async beginTransaction() {
|
|
9492
|
+
if (this.#isClosing) {
|
|
9493
|
+
throw new Error("\u6570\u636E\u5E93\u6B63\u5728\u5173\u95ED\u4E2D");
|
|
9494
|
+
}
|
|
9495
|
+
if (this.#inTransaction) {
|
|
9496
|
+
logger.warn(logPrefix("\u5DF2\u5728\u4E8B\u52A1\u4E2D\uFF0C\u8DF3\u8FC7\u5F00\u59CB\u65B0\u4E8B\u52A1"));
|
|
9497
|
+
return;
|
|
9498
|
+
}
|
|
9499
|
+
return new Promise((resolve, reject) => {
|
|
9500
|
+
this.db.run("BEGIN TRANSACTION", (err) => {
|
|
9501
|
+
if (err) {
|
|
9502
|
+
logger.error(logPrefix("\u5F00\u59CB\u4E8B\u52A1\u5931\u8D25:"));
|
|
9503
|
+
logger.error(err);
|
|
9504
|
+
reject(err);
|
|
9505
|
+
return;
|
|
9506
|
+
}
|
|
9507
|
+
this.#inTransaction = true;
|
|
9508
|
+
resolve();
|
|
9509
|
+
});
|
|
9510
|
+
});
|
|
9511
|
+
}
|
|
9512
|
+
/**
|
|
9513
|
+
* 提交事务
|
|
9514
|
+
*/
|
|
9515
|
+
async commitTransaction() {
|
|
9516
|
+
if (this.#isClosing) {
|
|
9517
|
+
throw new Error("\u6570\u636E\u5E93\u6B63\u5728\u5173\u95ED\u4E2D");
|
|
9518
|
+
}
|
|
9519
|
+
if (!this.#inTransaction) {
|
|
9520
|
+
logger.warn(logPrefix("\u6CA1\u6709\u6D3B\u52A8\u4E8B\u52A1\uFF0C\u8DF3\u8FC7\u63D0\u4EA4"));
|
|
9521
|
+
return;
|
|
9522
|
+
}
|
|
9523
|
+
return new Promise((resolve, reject) => {
|
|
9524
|
+
this.db.run("COMMIT", (err) => {
|
|
9525
|
+
if (err) {
|
|
9526
|
+
logger.error(logPrefix("\u63D0\u4EA4\u4E8B\u52A1\u5931\u8D25:"));
|
|
9527
|
+
logger.error(err);
|
|
9528
|
+
reject(err);
|
|
9529
|
+
return;
|
|
9530
|
+
}
|
|
9531
|
+
this.#inTransaction = false;
|
|
9532
|
+
resolve();
|
|
9533
|
+
});
|
|
9534
|
+
});
|
|
9535
|
+
}
|
|
9536
|
+
/**
|
|
9537
|
+
* 回滚事务
|
|
9538
|
+
*/
|
|
9539
|
+
async rollbackTransaction() {
|
|
9540
|
+
if (this.#isClosing) {
|
|
9541
|
+
throw new Error("\u6570\u636E\u5E93\u6B63\u5728\u5173\u95ED\u4E2D");
|
|
9542
|
+
}
|
|
9543
|
+
if (!this.#inTransaction) {
|
|
9544
|
+
logger.warn(logPrefix("\u6CA1\u6709\u6D3B\u52A8\u4E8B\u52A1\uFF0C\u8DF3\u8FC7\u56DE\u6EDA"));
|
|
9545
|
+
return;
|
|
9546
|
+
}
|
|
9547
|
+
return new Promise((resolve, reject) => {
|
|
9548
|
+
this.db.run("ROLLBACK", (err) => {
|
|
9549
|
+
if (err) {
|
|
9550
|
+
logger.error(logPrefix("\u56DE\u6EDA\u4E8B\u52A1\u5931\u8D25:"));
|
|
9551
|
+
logger.error(err);
|
|
9552
|
+
reject(err);
|
|
9553
|
+
return;
|
|
9554
|
+
}
|
|
9555
|
+
this.#inTransaction = false;
|
|
9556
|
+
resolve();
|
|
9557
|
+
});
|
|
9558
|
+
});
|
|
9559
|
+
}
|
|
9560
|
+
/**
|
|
9561
|
+
* 执行SQL查询并返回结果
|
|
9562
|
+
* @param sql SQL语句
|
|
9563
|
+
* @param params 参数
|
|
9564
|
+
* @returns 查询结果
|
|
9565
|
+
*/
|
|
9566
|
+
async query(sql, params = []) {
|
|
9567
|
+
if (!this.db) throw new Error("\u6570\u636E\u5E93\u672A\u521D\u59CB\u5316");
|
|
9568
|
+
return new Promise((resolve, reject) => {
|
|
9569
|
+
this.db.all(sql, params, (err, rows) => {
|
|
9570
|
+
if (err) {
|
|
9571
|
+
logger.error(logPrefix(`\u67E5\u8BE2\u5931\u8D25: ${sql}`));
|
|
9572
|
+
logger.error(err);
|
|
9573
|
+
reject(err);
|
|
9574
|
+
return;
|
|
9575
|
+
}
|
|
9576
|
+
resolve(rows);
|
|
9577
|
+
});
|
|
9578
|
+
});
|
|
9579
|
+
}
|
|
9580
|
+
/**
|
|
9581
|
+
* 清理过期键
|
|
9582
|
+
*/
|
|
9583
|
+
async cleanupExpiredKeys() {
|
|
9584
|
+
const now = Date.now();
|
|
9585
|
+
const expiredKeys = await this.query(
|
|
9586
|
+
"SELECT key FROM redis_data WHERE expire != -1 AND expire < ? LIMIT 500",
|
|
9587
|
+
[now]
|
|
9588
|
+
);
|
|
9589
|
+
return expiredKeys.length;
|
|
9590
|
+
}
|
|
9591
|
+
/**
|
|
9592
|
+
* 将db.run方法封装为Promise
|
|
9593
|
+
* @param sql SQL语句
|
|
9594
|
+
* @param params 参数数组
|
|
9595
|
+
* @returns 返回受影响的行数
|
|
9596
|
+
*/
|
|
9597
|
+
async run(sql, params) {
|
|
9598
|
+
if (this.#isClosing) {
|
|
9599
|
+
throw new Error("\u6570\u636E\u5E93\u6B63\u5728\u5173\u95ED\u4E2D...");
|
|
9600
|
+
}
|
|
9601
|
+
return new Promise((resolve, reject) => {
|
|
9602
|
+
this.db.run(sql, params, function(err) {
|
|
9603
|
+
if (err) {
|
|
9604
|
+
reject(err);
|
|
9605
|
+
return;
|
|
9606
|
+
}
|
|
9607
|
+
resolve(this.changes);
|
|
9608
|
+
});
|
|
9609
|
+
});
|
|
9610
|
+
}
|
|
9611
|
+
};
|
|
9612
|
+
}
|
|
9613
|
+
});
|
|
9614
|
+
var SQLiteWrapper2;
|
|
9615
|
+
var init_sqlite2 = __esm({
|
|
9616
|
+
"src/core/db/kv/sqlite.ts"() {
|
|
9617
|
+
init_fsSync();
|
|
9618
|
+
init_sqlite();
|
|
9619
|
+
SQLiteWrapper2 = class {
|
|
9620
|
+
dbPath;
|
|
9621
|
+
_db;
|
|
9622
|
+
constructor(dbPath2) {
|
|
9623
|
+
this.dbPath = dbPath2;
|
|
9624
|
+
}
|
|
9625
|
+
async _init() {
|
|
9626
|
+
mkdirSync(path5.dirname(this.dbPath));
|
|
9627
|
+
await new Promise((resolve, reject) => {
|
|
9628
|
+
this._db = new sqlite3.Database(
|
|
9629
|
+
this.dbPath,
|
|
9630
|
+
sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,
|
|
9631
|
+
(err) => {
|
|
9632
|
+
if (err) {
|
|
9633
|
+
logger.error(logPrefix("SQLite\u6570\u636E\u5E93\u8FDE\u63A5\u5931\u8D25:"));
|
|
9634
|
+
logger.error(err);
|
|
9635
|
+
reject(err);
|
|
9636
|
+
return;
|
|
9637
|
+
}
|
|
9638
|
+
resolve();
|
|
9639
|
+
}
|
|
9640
|
+
);
|
|
9641
|
+
});
|
|
9642
|
+
await new Promise((resolve, reject) => {
|
|
9643
|
+
this._db.exec(
|
|
9644
|
+
`
|
|
9645
|
+
PRAGMA foreign_keys = ON;
|
|
9646
|
+
PRAGMA journal_mode = WAL;
|
|
9647
|
+
PRAGMA synchronous = NORMAL;
|
|
9648
|
+
`,
|
|
9649
|
+
(pragmaErr) => {
|
|
9650
|
+
if (pragmaErr) {
|
|
9651
|
+
logger.warn(logPrefix("\u8BBE\u7F6ESQLite PRAGMA\u5931\u8D25:"));
|
|
9652
|
+
logger.warn(pragmaErr);
|
|
9653
|
+
}
|
|
9654
|
+
resolve();
|
|
9655
|
+
}
|
|
9656
|
+
);
|
|
9657
|
+
});
|
|
9658
|
+
await new Promise((resolve, reject) => {
|
|
9659
|
+
this._db.run(
|
|
9660
|
+
`
|
|
9661
|
+
CREATE TABLE IF NOT EXISTS redis_data (
|
|
9662
|
+
key TEXT PRIMARY KEY,
|
|
9663
|
+
value TEXT NOT NULL DEFAULT ''
|
|
9664
|
+
)
|
|
9665
|
+
`,
|
|
9666
|
+
(err) => {
|
|
9667
|
+
if (err) {
|
|
9668
|
+
logger.error(logPrefix("\u521B\u5EFASQLite\u8868\u5931\u8D25:"));
|
|
9669
|
+
logger.error(err);
|
|
9670
|
+
reject(err);
|
|
9671
|
+
return;
|
|
9672
|
+
}
|
|
9673
|
+
resolve();
|
|
9674
|
+
}
|
|
9675
|
+
);
|
|
9676
|
+
});
|
|
9677
|
+
this._init = () => Promise.resolve(this);
|
|
9678
|
+
return this;
|
|
9679
|
+
}
|
|
9680
|
+
/**
|
|
9681
|
+
* 设置键值对
|
|
9682
|
+
* @param key 键名
|
|
9683
|
+
* @param value 值
|
|
9684
|
+
* @returns 操作是否成功
|
|
9685
|
+
*/
|
|
9686
|
+
async set(key, value) {
|
|
9687
|
+
await this._init();
|
|
9688
|
+
return new Promise((resolve) => {
|
|
9689
|
+
this._db.run(
|
|
9690
|
+
"INSERT OR REPLACE INTO redis_data (key, value) VALUES (?, ?)",
|
|
9691
|
+
[key, JSON.stringify(value)],
|
|
9692
|
+
(err) => {
|
|
9693
|
+
if (err) {
|
|
9694
|
+
logger.error(logPrefix("\u8BBE\u7F6E\u952E\u503C\u5BF9\u5931\u8D25:"));
|
|
9695
|
+
logger.error(err);
|
|
9696
|
+
resolve(false);
|
|
9697
|
+
return;
|
|
9698
|
+
}
|
|
9699
|
+
resolve(true);
|
|
9700
|
+
}
|
|
9701
|
+
);
|
|
9702
|
+
});
|
|
9703
|
+
}
|
|
9704
|
+
/**
|
|
9705
|
+
* 获取所有匹配模式的键
|
|
9706
|
+
* @param pattern 匹配模式,支持SQL LIKE语法的通配符
|
|
9707
|
+
* @returns 匹配的键列表,失败时返回空数组
|
|
9708
|
+
*/
|
|
9709
|
+
async keys(pattern = "*") {
|
|
9710
|
+
await this._init();
|
|
9711
|
+
const sqlPattern = pattern.replace(/\*/g, "%").replace(/\?/g, "_");
|
|
9712
|
+
return new Promise((resolve) => {
|
|
9713
|
+
this._db.all(
|
|
9714
|
+
"SELECT key FROM redis_data WHERE key LIKE ?",
|
|
9715
|
+
[sqlPattern],
|
|
9716
|
+
(err, rows) => {
|
|
9717
|
+
if (err) {
|
|
9718
|
+
logger.error(logPrefix("\u83B7\u53D6\u952E\u5217\u8868\u5931\u8D25:"));
|
|
9719
|
+
logger.error(err);
|
|
9720
|
+
resolve([]);
|
|
9721
|
+
return;
|
|
9722
|
+
}
|
|
9723
|
+
resolve(rows.map((row) => row.key));
|
|
9724
|
+
}
|
|
9725
|
+
);
|
|
9726
|
+
});
|
|
9727
|
+
}
|
|
9728
|
+
/**
|
|
9729
|
+
* 获取键对应的值
|
|
9730
|
+
* @param key 键名
|
|
9731
|
+
* @returns 值,如果键不存在或值损坏则返回null
|
|
9732
|
+
*/
|
|
9733
|
+
async get(key) {
|
|
9734
|
+
await this._init();
|
|
9735
|
+
return new Promise((resolve) => {
|
|
9736
|
+
this._db.get(
|
|
9737
|
+
"SELECT value FROM redis_data WHERE key = ?",
|
|
9738
|
+
[key],
|
|
9739
|
+
async (err, row) => {
|
|
9740
|
+
if (err || !row) {
|
|
9741
|
+
resolve(null);
|
|
9742
|
+
return;
|
|
9743
|
+
}
|
|
9744
|
+
try {
|
|
9745
|
+
resolve(JSON.parse(row.value));
|
|
9746
|
+
} catch (e) {
|
|
9747
|
+
await this.del(key);
|
|
9748
|
+
resolve(null);
|
|
9749
|
+
}
|
|
9750
|
+
}
|
|
9751
|
+
);
|
|
9752
|
+
});
|
|
9753
|
+
}
|
|
9754
|
+
/**
|
|
9755
|
+
* 删除键
|
|
9756
|
+
* @param key 要删除的键
|
|
9757
|
+
* @returns 是否删除成功
|
|
9758
|
+
*/
|
|
9759
|
+
async del(key) {
|
|
9760
|
+
await this._init();
|
|
9761
|
+
return new Promise((resolve) => {
|
|
9762
|
+
this._db.run(
|
|
9763
|
+
"DELETE FROM redis_data WHERE key = ?",
|
|
9764
|
+
[key],
|
|
9765
|
+
function(err) {
|
|
9766
|
+
if (err) {
|
|
9767
|
+
logger.error(logPrefix("\u5220\u9664\u952E\u5931\u8D25:"));
|
|
9768
|
+
logger.error(err);
|
|
9769
|
+
resolve(false);
|
|
9770
|
+
return;
|
|
9771
|
+
}
|
|
9772
|
+
resolve(this.changes > 0);
|
|
9773
|
+
}
|
|
9774
|
+
);
|
|
9775
|
+
});
|
|
9776
|
+
}
|
|
9777
|
+
};
|
|
9778
|
+
}
|
|
9779
|
+
});
|
|
9780
|
+
|
|
9781
|
+
// src/core/db/kv/index.ts
|
|
9782
|
+
var kv_exports = {};
|
|
9783
|
+
__export(kv_exports, {
|
|
9784
|
+
createDB: () => createDB,
|
|
9785
|
+
db: () => db
|
|
9786
|
+
});
|
|
9787
|
+
var db, initialized, initializingPromise, init, createDB;
|
|
9788
|
+
var init_kv = __esm({
|
|
9789
|
+
"src/core/db/kv/index.ts"() {
|
|
9790
|
+
init_root();
|
|
9791
|
+
init_sqlite2();
|
|
9792
|
+
initialized = false;
|
|
9793
|
+
initializingPromise = null;
|
|
9794
|
+
init = async (dbPath2) => {
|
|
9795
|
+
db = await new SQLiteWrapper2(dbPath2)._init();
|
|
9796
|
+
return db;
|
|
9797
|
+
};
|
|
9798
|
+
createDB = () => {
|
|
9799
|
+
if (initialized && db) {
|
|
9800
|
+
return Promise.resolve(db);
|
|
9801
|
+
}
|
|
9802
|
+
if (initializingPromise) {
|
|
9803
|
+
return initializingPromise;
|
|
9804
|
+
}
|
|
9805
|
+
initializingPromise = init(path5.join(kvPath, "kv.db")).then((result) => {
|
|
9806
|
+
initialized = true;
|
|
9807
|
+
initializingPromise = null;
|
|
9808
|
+
return result;
|
|
9809
|
+
}).catch((error) => {
|
|
9810
|
+
initializingPromise = null;
|
|
9811
|
+
throw error;
|
|
9812
|
+
});
|
|
9813
|
+
return initializingPromise;
|
|
9814
|
+
};
|
|
9815
|
+
}
|
|
9816
|
+
});
|
|
9262
9817
|
|
|
9263
9818
|
// src/utils/system/restart.ts
|
|
9264
9819
|
var restart, restartDirect;
|
|
@@ -9272,9 +9827,10 @@ var init_restart = __esm({
|
|
|
9272
9827
|
messageId,
|
|
9273
9828
|
time: Date.now()
|
|
9274
9829
|
};
|
|
9830
|
+
const { createDB: createDB2 } = await Promise.resolve().then(() => (init_kv(), kv_exports));
|
|
9275
9831
|
const key = `karin:restart:${selfId}`;
|
|
9276
|
-
const
|
|
9277
|
-
await
|
|
9832
|
+
const db2 = await createDB2();
|
|
9833
|
+
await db2.set(key, options);
|
|
9278
9834
|
if (isFront && process.send) {
|
|
9279
9835
|
process.send("restart");
|
|
9280
9836
|
return { status: "success", data: "\u5DF2\u53D1\u9001\u91CD\u542F\u4FE1\u53F7" };
|
|
@@ -9993,10 +10549,10 @@ var init_admin = __esm({
|
|
|
9993
10549
|
fs5.promises.rm(file, { recursive: true, force: true });
|
|
9994
10550
|
});
|
|
9995
10551
|
};
|
|
9996
|
-
updateLevel = (
|
|
9997
|
-
if (
|
|
9998
|
-
logger.level =
|
|
9999
|
-
return
|
|
10552
|
+
updateLevel = (level) => {
|
|
10553
|
+
if (level) {
|
|
10554
|
+
logger.level = level;
|
|
10555
|
+
return level;
|
|
10000
10556
|
}
|
|
10001
10557
|
const newLevel = process.env.LOG_LEVEL || "info";
|
|
10002
10558
|
logger.level = newLevel;
|
|
@@ -10134,6 +10690,7 @@ __export(common_exports, {
|
|
|
10134
10690
|
clamp: () => clamp,
|
|
10135
10691
|
createRawMessage: () => createRawMessage,
|
|
10136
10692
|
diffArray: () => diffArray,
|
|
10693
|
+
diffSimpleArray: () => diffSimpleArray,
|
|
10137
10694
|
downFile: () => downFile,
|
|
10138
10695
|
exists: () => existToMkdir,
|
|
10139
10696
|
formatNumber: () => formatNumber,
|
|
@@ -10385,9 +10942,10 @@ var init_bot = __esm({
|
|
|
10385
10942
|
return originSendForwardMsg.call(bot, contact3, elements, options);
|
|
10386
10943
|
};
|
|
10387
10944
|
setTimeout(async () => {
|
|
10388
|
-
const {
|
|
10945
|
+
const { createDB: createDB2 } = await Promise.resolve().then(() => (init_kv(), kv_exports));
|
|
10946
|
+
const db2 = await createDB2();
|
|
10389
10947
|
const key = `karin:restart:${bot.selfId}`;
|
|
10390
|
-
const options = await
|
|
10948
|
+
const options = await db2.get(key);
|
|
10391
10949
|
if (!options) return;
|
|
10392
10950
|
try {
|
|
10393
10951
|
const { selfId, contact: contact3, messageId, time: time2 } = options;
|
|
@@ -10402,7 +10960,7 @@ var init_bot = __esm({
|
|
|
10402
10960
|
];
|
|
10403
10961
|
await sendMsg2(selfId, contact3, element);
|
|
10404
10962
|
} finally {
|
|
10405
|
-
await
|
|
10963
|
+
await db2.del(key);
|
|
10406
10964
|
}
|
|
10407
10965
|
}, 10);
|
|
10408
10966
|
setTimeout(() => {
|
|
@@ -10864,7 +11422,7 @@ var init_check = __esm({
|
|
|
10864
11422
|
"src/service/process/check.ts"() {
|
|
10865
11423
|
init_sleep();
|
|
10866
11424
|
tips = (msg, isTrim = false) => `[process]${isTrim ? "" : " "}${msg}`;
|
|
10867
|
-
request = async (url,
|
|
11425
|
+
request = async (url, path30, method, timeout2) => {
|
|
10868
11426
|
const client = axios8.create({
|
|
10869
11427
|
baseURL: url,
|
|
10870
11428
|
timeout: timeout2,
|
|
@@ -10872,11 +11430,11 @@ var init_check = __esm({
|
|
|
10872
11430
|
validateStatus: () => true
|
|
10873
11431
|
});
|
|
10874
11432
|
try {
|
|
10875
|
-
const result = await client[method](
|
|
11433
|
+
const result = await client[method](path30);
|
|
10876
11434
|
if (result.status === 200) {
|
|
10877
11435
|
logger.info(
|
|
10878
11436
|
tips(`[${method}] \u8BF7\u6C42\u6210\u529F:
|
|
10879
|
-
`, true) + `path: ${
|
|
11437
|
+
`, true) + `path: ${path30}
|
|
10880
11438
|
body: ${JSON.stringify(result.data)}
|
|
10881
11439
|
`
|
|
10882
11440
|
);
|
|
@@ -10885,16 +11443,16 @@ body: ${JSON.stringify(result.data)}
|
|
|
10885
11443
|
if (result.status === 401) {
|
|
10886
11444
|
logger.error(
|
|
10887
11445
|
tips(`[${method}] \u9274\u6743\u5931\u8D25:
|
|
10888
|
-
`, true) + `path: ${
|
|
11446
|
+
`, true) + `path: ${path30}
|
|
10889
11447
|
body: ${JSON.stringify(result.data)}
|
|
10890
11448
|
`
|
|
10891
11449
|
);
|
|
10892
11450
|
return { code: result.status, success: false };
|
|
10893
11451
|
}
|
|
10894
|
-
(
|
|
11452
|
+
(path30 === "/ping" ? logger.debug : logger.error).call(
|
|
10895
11453
|
logger,
|
|
10896
11454
|
tips(`[${method}] \u8BF7\u6C42\u5931\u8D25:
|
|
10897
|
-
`, true) + `path: ${
|
|
11455
|
+
`, true) + `path: ${path30}
|
|
10898
11456
|
body: ${JSON.stringify(result.data)}
|
|
10899
11457
|
`
|
|
10900
11458
|
);
|
|
@@ -10902,7 +11460,7 @@ body: ${JSON.stringify(result.data)}
|
|
|
10902
11460
|
} catch (error) {
|
|
10903
11461
|
logger.debug(
|
|
10904
11462
|
tips(`[${method}] \u8BF7\u6C42\u5F02\u5E38:
|
|
10905
|
-
`, true) + `path: ${
|
|
11463
|
+
`, true) + `path: ${path30}
|
|
10906
11464
|
error: ${(error == null ? void 0 : error.message) || "\u672A\u77E5\u9519\u8BEF"}
|
|
10907
11465
|
`
|
|
10908
11466
|
);
|
|
@@ -10962,8 +11520,8 @@ var init_exit = __esm({
|
|
|
10962
11520
|
try {
|
|
10963
11521
|
if (exitStatus) return;
|
|
10964
11522
|
exitStatus = true;
|
|
10965
|
-
const { redis: redis3
|
|
10966
|
-
await
|
|
11523
|
+
const { redis: redis3 } = await Promise.resolve().then(() => (init_index(), index_exports));
|
|
11524
|
+
await redis3.save();
|
|
10967
11525
|
logger.mark(tips(`\u8FD0\u884C\u7ED3\u675F \u8FD0\u884C\u65F6\u95F4\uFF1A${uptime2()} \u9000\u51FA\u7801\uFF1A${code ?? "\u672A\u77E5"}`));
|
|
10968
11526
|
if (process.env.pm_id) {
|
|
10969
11527
|
await exec(`pm2 delete ${process.env.pm_id}`);
|
|
@@ -12087,12 +12645,12 @@ var init_getLog = __esm({
|
|
|
12087
12645
|
};
|
|
12088
12646
|
logLevelRouter = async (req, res) => {
|
|
12089
12647
|
var _a;
|
|
12090
|
-
const
|
|
12648
|
+
const level = (_a = req.body) == null ? void 0 : _a.level;
|
|
12091
12649
|
const list2 = ["trace", "debug", "info", "warn", "error", "fatal"];
|
|
12092
|
-
if (!
|
|
12650
|
+
if (!level || !list2.includes(level)) {
|
|
12093
12651
|
return createBadRequestResponse(res, "\u53C2\u6570\u9519\u8BEF");
|
|
12094
12652
|
}
|
|
12095
|
-
updateLevel(
|
|
12653
|
+
updateLevel(level);
|
|
12096
12654
|
createSuccessResponse(res, null, "\u4FEE\u6539\u6210\u529F");
|
|
12097
12655
|
};
|
|
12098
12656
|
activeConnections = 0;
|
|
@@ -13962,12 +14520,12 @@ var init_loader = __esm({
|
|
|
13962
14520
|
* 排序
|
|
13963
14521
|
*/
|
|
13964
14522
|
sort() {
|
|
13965
|
-
cache3.accept =
|
|
13966
|
-
cache3.command =
|
|
13967
|
-
cache3.task =
|
|
13968
|
-
cache3.button =
|
|
14523
|
+
cache3.accept = lodash3.sortBy(cache3.accept, ["rank"], ["asc"]);
|
|
14524
|
+
cache3.command = lodash3.sortBy(cache3.command, ["rank"], ["asc"]);
|
|
14525
|
+
cache3.task = lodash3.sortBy(cache3.task, ["rank"], ["asc"]);
|
|
14526
|
+
cache3.button = lodash3.sortBy(cache3.button, ["rank"], ["asc"]);
|
|
13969
14527
|
for (const key of Object.keys(cache3.handler)) {
|
|
13970
|
-
cache3.handler[key] =
|
|
14528
|
+
cache3.handler[key] = lodash3.sortBy(cache3.handler[key], ["rank"], ["asc"]);
|
|
13971
14529
|
}
|
|
13972
14530
|
}
|
|
13973
14531
|
};
|
|
@@ -13994,51 +14552,20 @@ var init_start = __esm({
|
|
|
13994
14552
|
};
|
|
13995
14553
|
}
|
|
13996
14554
|
});
|
|
13997
|
-
|
|
13998
|
-
|
|
13999
|
-
|
|
14000
|
-
|
|
14001
|
-
LevelDB = class extends Level {
|
|
14002
|
-
id;
|
|
14003
|
-
get;
|
|
14004
|
-
constructor(path26) {
|
|
14005
|
-
super(path26, { valueEncoding: "json" });
|
|
14006
|
-
this.id = "Level";
|
|
14007
|
-
this.get = super.get.bind(this);
|
|
14008
|
-
}
|
|
14009
|
-
/**
|
|
14010
|
-
* 和get方法一样
|
|
14011
|
-
* @param key 键
|
|
14012
|
-
* @param value 值
|
|
14013
|
-
*/
|
|
14014
|
-
async set(key, value) {
|
|
14015
|
-
return await super.put(key, value);
|
|
14016
|
-
}
|
|
14017
|
-
/**
|
|
14018
|
-
* 和get方法一样 但是不抛出错误
|
|
14019
|
-
* @param key 键
|
|
14020
|
-
*/
|
|
14021
|
-
async has(key) {
|
|
14022
|
-
try {
|
|
14023
|
-
return await super.get(key);
|
|
14024
|
-
} catch {
|
|
14025
|
-
return null;
|
|
14026
|
-
}
|
|
14027
|
-
}
|
|
14028
|
-
};
|
|
14029
|
-
createLevelDB = () => {
|
|
14030
|
-
return new LevelDB(levelPath);
|
|
14031
|
-
};
|
|
14555
|
+
|
|
14556
|
+
// src/core/db/redis/mock/key/index.ts
|
|
14557
|
+
var init_key2 = __esm({
|
|
14558
|
+
"src/core/db/redis/mock/key/index.ts"() {
|
|
14032
14559
|
}
|
|
14033
14560
|
});
|
|
14034
14561
|
var RedisClient;
|
|
14035
14562
|
var init_mock = __esm({
|
|
14036
|
-
"src/core/db/redis/mock.ts"() {
|
|
14037
|
-
|
|
14038
|
-
|
|
14563
|
+
"src/core/db/redis/mock/index.ts"() {
|
|
14564
|
+
init_key2();
|
|
14565
|
+
init_common();
|
|
14039
14566
|
RedisClient = class extends EventEmitter {
|
|
14040
14567
|
/** 键、类型、过期时间映射 */
|
|
14041
|
-
|
|
14568
|
+
store = {};
|
|
14042
14569
|
/** 键值对 */
|
|
14043
14570
|
#str = {};
|
|
14044
14571
|
/** 数字对 */
|
|
@@ -14055,11 +14582,11 @@ var init_mock = __esm({
|
|
|
14055
14582
|
#pf = {};
|
|
14056
14583
|
/** 位图 */
|
|
14057
14584
|
#bit = {};
|
|
14058
|
-
/**
|
|
14059
|
-
#
|
|
14060
|
-
constructor() {
|
|
14585
|
+
/** sqlite3 */
|
|
14586
|
+
#sqlite;
|
|
14587
|
+
constructor(sqlite) {
|
|
14061
14588
|
super();
|
|
14062
|
-
this
|
|
14589
|
+
this.store = {};
|
|
14063
14590
|
this.#str = {};
|
|
14064
14591
|
this.#num = {};
|
|
14065
14592
|
this.#hash = {};
|
|
@@ -14068,83 +14595,67 @@ var init_mock = __esm({
|
|
|
14068
14595
|
this.#zset = {};
|
|
14069
14596
|
this.#pf = {};
|
|
14070
14597
|
this.#bit = {};
|
|
14598
|
+
this.#sqlite = sqlite;
|
|
14071
14599
|
}
|
|
14072
14600
|
async init() {
|
|
14073
|
-
|
|
14074
|
-
this.#level = new Level(redisLevelPath);
|
|
14601
|
+
await this.loadData();
|
|
14075
14602
|
setInterval(() => {
|
|
14076
|
-
const keys = Object.keys(this
|
|
14603
|
+
const keys = Object.keys(this.store);
|
|
14077
14604
|
keys.forEach((key) => this.checkExpire(key));
|
|
14078
14605
|
}, 3e4);
|
|
14079
|
-
setInterval(() => this.save(),
|
|
14080
|
-
|
|
14081
|
-
|
|
14082
|
-
|
|
14083
|
-
|
|
14084
|
-
|
|
14085
|
-
|
|
14086
|
-
|
|
14087
|
-
|
|
14088
|
-
|
|
14089
|
-
|
|
14090
|
-
|
|
14091
|
-
|
|
14092
|
-
|
|
14093
|
-
|
|
14094
|
-
|
|
14095
|
-
|
|
14096
|
-
|
|
14097
|
-
|
|
14098
|
-
|
|
14099
|
-
}
|
|
14100
|
-
this.#hash[key] = hash;
|
|
14101
|
-
return;
|
|
14102
|
-
}
|
|
14103
|
-
case "list" /* LIST */: {
|
|
14104
|
-
const list3 = JSON.parse(value);
|
|
14105
|
-
for (let i = 0; i < list3.length; i++) {
|
|
14106
|
-
if (typeof list3[i] !== "string") {
|
|
14107
|
-
list3[i] = Buffer.from(list3[i]);
|
|
14108
|
-
}
|
|
14109
|
-
}
|
|
14110
|
-
this.#list[key] = list3;
|
|
14111
|
-
return;
|
|
14112
|
-
}
|
|
14113
|
-
case "set" /* SET */: {
|
|
14114
|
-
const list3 = JSON.parse(value);
|
|
14115
|
-
for (let i = 0; i < list3.length; i++) {
|
|
14116
|
-
if (typeof list3[i] !== "string") {
|
|
14117
|
-
list3[i] = Buffer.from(list3[i]);
|
|
14118
|
-
}
|
|
14119
|
-
}
|
|
14120
|
-
this.#set[key] = new Set(list3);
|
|
14121
|
-
return;
|
|
14122
|
-
}
|
|
14123
|
-
case "zset" /* ZSET */: {
|
|
14124
|
-
const list3 = JSON.parse(value);
|
|
14125
|
-
for (let i = 0; i < list3.length; i++) {
|
|
14126
|
-
if (typeof list3[i].member !== "string") {
|
|
14127
|
-
list3[i].member = Buffer.from(list3[i].member);
|
|
14128
|
-
}
|
|
14129
|
-
}
|
|
14130
|
-
this.#zset[key] = list3;
|
|
14131
|
-
return;
|
|
14132
|
-
}
|
|
14133
|
-
case "pf" /* PF */: {
|
|
14134
|
-
const list3 = JSON.parse(value);
|
|
14135
|
-
for (let i = 0; i < list3.length; i++) {
|
|
14136
|
-
if (typeof list3[i] !== "string") {
|
|
14137
|
-
list3[i] = Buffer.from(list3[i]);
|
|
14138
|
-
}
|
|
14606
|
+
setInterval(() => this.save(), 5 * 60 * 1e3);
|
|
14607
|
+
return this;
|
|
14608
|
+
}
|
|
14609
|
+
/**
|
|
14610
|
+
* @description 加载数据
|
|
14611
|
+
*/
|
|
14612
|
+
async loadData() {
|
|
14613
|
+
const list2 = await this.#sqlite.getAllData();
|
|
14614
|
+
const keyMap = {
|
|
14615
|
+
["str" /* STR */]: (key, value) => {
|
|
14616
|
+
this.#str[key] = value;
|
|
14617
|
+
},
|
|
14618
|
+
["num" /* NUM */]: (key, value) => {
|
|
14619
|
+
this.#num[key] = Number(value);
|
|
14620
|
+
},
|
|
14621
|
+
["hash" /* HASH */]: (key, value) => {
|
|
14622
|
+
const hash = JSON.parse(value);
|
|
14623
|
+
for (const field in hash) {
|
|
14624
|
+
if (typeof hash[field] !== "string") {
|
|
14625
|
+
hash[field] = Buffer.from(hash[field]);
|
|
14139
14626
|
}
|
|
14140
|
-
this.#pf[key] = new Set(list3);
|
|
14141
|
-
return;
|
|
14142
14627
|
}
|
|
14143
|
-
|
|
14144
|
-
|
|
14628
|
+
this.#hash[key] = hash;
|
|
14629
|
+
},
|
|
14630
|
+
["list" /* LIST */]: (key, value) => {
|
|
14631
|
+
this.#list[key] = JSON.parse(value);
|
|
14632
|
+
},
|
|
14633
|
+
["set" /* SET */]: (key, value) => {
|
|
14634
|
+
this.#set[key] = new Set(JSON.parse(value));
|
|
14635
|
+
},
|
|
14636
|
+
["zset" /* ZSET */]: (key, value) => {
|
|
14637
|
+
this.#zset[key] = JSON.parse(value);
|
|
14638
|
+
},
|
|
14639
|
+
["pf" /* PF */]: (key, value) => {
|
|
14640
|
+
this.#pf[key] = new Set(JSON.parse(value));
|
|
14641
|
+
},
|
|
14642
|
+
["bit" /* BIT */]: (key, value) => {
|
|
14643
|
+
this.#bit[key] = Buffer.from(value);
|
|
14145
14644
|
}
|
|
14146
|
-
}
|
|
14147
|
-
|
|
14645
|
+
};
|
|
14646
|
+
const isKey = (type) => {
|
|
14647
|
+
return keyMap[type] !== void 0;
|
|
14648
|
+
};
|
|
14649
|
+
list2.forEach((item) => {
|
|
14650
|
+
const { key, type, expire, value } = item;
|
|
14651
|
+
if (isKey(type)) {
|
|
14652
|
+
this.store[key] = { type, expire };
|
|
14653
|
+
keyMap[type](key, value);
|
|
14654
|
+
} else {
|
|
14655
|
+
this.#sqlite.del(key);
|
|
14656
|
+
}
|
|
14657
|
+
});
|
|
14658
|
+
logger.debug(`[Redis-mock] \u52A0\u8F7D\u6570\u636E\u5B8C\u6210: ${list2.length}`);
|
|
14148
14659
|
}
|
|
14149
14660
|
/**
|
|
14150
14661
|
* @description 检查过期
|
|
@@ -14153,8 +14664,8 @@ var init_mock = __esm({
|
|
|
14153
14664
|
* @returns 是否过期或值
|
|
14154
14665
|
*/
|
|
14155
14666
|
checkExpire(key, isRemove = true) {
|
|
14156
|
-
if (!this
|
|
14157
|
-
if (this
|
|
14667
|
+
if (!this.store[key]) return false;
|
|
14668
|
+
if (this.store[key].expire !== -1 && this.store[key].expire < moment2().valueOf()) {
|
|
14158
14669
|
if (!isRemove) return true;
|
|
14159
14670
|
this.#del(key);
|
|
14160
14671
|
return true;
|
|
@@ -14166,8 +14677,8 @@ var init_mock = __esm({
|
|
|
14166
14677
|
* @param key 键
|
|
14167
14678
|
*/
|
|
14168
14679
|
#del(key) {
|
|
14169
|
-
const { type } = this
|
|
14170
|
-
delete this
|
|
14680
|
+
const { type } = this.store[key];
|
|
14681
|
+
delete this.store[key];
|
|
14171
14682
|
switch (type) {
|
|
14172
14683
|
case "str" /* STR */:
|
|
14173
14684
|
delete this.#str[key];
|
|
@@ -14194,6 +14705,7 @@ var init_mock = __esm({
|
|
|
14194
14705
|
delete this.#bit[key];
|
|
14195
14706
|
break;
|
|
14196
14707
|
}
|
|
14708
|
+
this.#sqlite.del(key);
|
|
14197
14709
|
logger.trace(`[Redis-mock] \u5220\u9664\u952E ${key}`);
|
|
14198
14710
|
}
|
|
14199
14711
|
/**
|
|
@@ -14203,7 +14715,7 @@ var init_mock = __esm({
|
|
|
14203
14715
|
*/
|
|
14204
14716
|
type(key) {
|
|
14205
14717
|
var _a;
|
|
14206
|
-
return (_a = this
|
|
14718
|
+
return (_a = this.store[key]) == null ? void 0 : _a.type;
|
|
14207
14719
|
}
|
|
14208
14720
|
/**
|
|
14209
14721
|
* @description 存储键值对
|
|
@@ -14212,46 +14724,47 @@ var init_mock = __esm({
|
|
|
14212
14724
|
* @param options 其他参数
|
|
14213
14725
|
*/
|
|
14214
14726
|
async set(key, value, options = {}) {
|
|
14727
|
+
let expire = -1;
|
|
14215
14728
|
if (!Buffer.isBuffer(value) && typeof value !== "string") {
|
|
14216
14729
|
value = String(value);
|
|
14217
14730
|
} else if (Buffer.isBuffer(value)) {
|
|
14218
14731
|
value = value.toString();
|
|
14219
14732
|
}
|
|
14220
|
-
if (
|
|
14221
|
-
this
|
|
14733
|
+
if (lodash3.isEmpty(options)) {
|
|
14734
|
+
this.store[key] = { type: "str" /* STR */, expire };
|
|
14222
14735
|
this.#str[key] = value;
|
|
14736
|
+
this.#sqlite.set(key, value, "str" /* STR */, expire);
|
|
14223
14737
|
return "OK";
|
|
14224
14738
|
}
|
|
14225
|
-
let expire = -1;
|
|
14226
14739
|
if ((options == null ? void 0 : options.EX) !== void 0) {
|
|
14227
14740
|
const EX = Number(options.EX);
|
|
14228
14741
|
if (!isNaN(EX)) expire = moment2().add(EX, "seconds").valueOf();
|
|
14229
|
-
this
|
|
14742
|
+
this.store[key] = { type: "str" /* STR */, expire };
|
|
14230
14743
|
this.#str[key] = value;
|
|
14231
14744
|
} else if ((options == null ? void 0 : options.PX) !== void 0) {
|
|
14232
14745
|
const PX = Number(options.PX);
|
|
14233
14746
|
if (!isNaN(PX)) expire = moment2().add(PX, "milliseconds").valueOf();
|
|
14234
|
-
this
|
|
14747
|
+
this.store[key] = { type: "str" /* STR */, expire };
|
|
14235
14748
|
this.#str[key] = value;
|
|
14236
14749
|
} else if ((options == null ? void 0 : options.EXAT) !== void 0) {
|
|
14237
14750
|
const EXAT = Number(options.EXAT);
|
|
14238
14751
|
if (!isNaN(EXAT)) expire = EXAT;
|
|
14239
|
-
this
|
|
14752
|
+
this.store[key] = { type: "str" /* STR */, expire };
|
|
14240
14753
|
this.#str[key] = value;
|
|
14241
14754
|
} else if ((options == null ? void 0 : options.PXAT) !== void 0) {
|
|
14242
14755
|
const PXAT = Number(options.PXAT);
|
|
14243
14756
|
if (!isNaN(PXAT)) expire = PXAT;
|
|
14244
|
-
this
|
|
14757
|
+
this.store[key] = { type: "str" /* STR */, expire };
|
|
14245
14758
|
} else if (options == null ? void 0 : options.KEEPTTL) {
|
|
14246
14759
|
if (this.#str[key]) {
|
|
14247
14760
|
this.#str[key] = value;
|
|
14248
14761
|
} else {
|
|
14249
|
-
this
|
|
14762
|
+
this.store[key] = { type: "str" /* STR */, expire: -1 };
|
|
14250
14763
|
this.#str[key] = value;
|
|
14251
14764
|
}
|
|
14252
14765
|
} else if (options == null ? void 0 : options.NX) {
|
|
14253
14766
|
if (!this.#str[key]) {
|
|
14254
|
-
this
|
|
14767
|
+
this.store[key] = { type: "str" /* STR */, expire: -1 };
|
|
14255
14768
|
this.#str[key] = value;
|
|
14256
14769
|
}
|
|
14257
14770
|
} else if (options == null ? void 0 : options.XX) {
|
|
@@ -14259,18 +14772,21 @@ var init_mock = __esm({
|
|
|
14259
14772
|
this.#str[key] = value;
|
|
14260
14773
|
}
|
|
14261
14774
|
} else if (options == null ? void 0 : options.GET) {
|
|
14262
|
-
this
|
|
14775
|
+
this.store[key] = { type: "str" /* STR */, expire: -1 };
|
|
14263
14776
|
if (this.#str[key]) {
|
|
14264
14777
|
const oldValue = this.#str[key];
|
|
14265
14778
|
this.#str[key] = value;
|
|
14779
|
+
this.#sqlite.set(key, value, "str" /* STR */, expire);
|
|
14266
14780
|
return oldValue;
|
|
14267
14781
|
}
|
|
14268
14782
|
this.#str[key] = value;
|
|
14783
|
+
this.#sqlite.set(key, value, "str" /* STR */, expire);
|
|
14269
14784
|
return null;
|
|
14270
14785
|
} else {
|
|
14271
|
-
this
|
|
14786
|
+
this.store[key] = { type: "str" /* STR */, expire: -1 };
|
|
14272
14787
|
this.#str[key] = value;
|
|
14273
14788
|
}
|
|
14789
|
+
this.#sqlite.set(key, value, "str" /* STR */, expire);
|
|
14274
14790
|
return "OK";
|
|
14275
14791
|
}
|
|
14276
14792
|
/**
|
|
@@ -14278,9 +14794,9 @@ var init_mock = __esm({
|
|
|
14278
14794
|
* @param key 键
|
|
14279
14795
|
*/
|
|
14280
14796
|
async get(key) {
|
|
14281
|
-
if (!this
|
|
14797
|
+
if (!this.store[key]) return null;
|
|
14282
14798
|
if (this.checkExpire(key)) return null;
|
|
14283
|
-
const { type } = this
|
|
14799
|
+
const { type } = this.store[key];
|
|
14284
14800
|
if (type === "num" /* NUM */) {
|
|
14285
14801
|
return String(this.#num[key]);
|
|
14286
14802
|
} else {
|
|
@@ -14292,7 +14808,7 @@ var init_mock = __esm({
|
|
|
14292
14808
|
* @param key 键
|
|
14293
14809
|
*/
|
|
14294
14810
|
async del(key) {
|
|
14295
|
-
if (!this
|
|
14811
|
+
if (!this.store[key]) return 0;
|
|
14296
14812
|
this.#del(key);
|
|
14297
14813
|
return 1;
|
|
14298
14814
|
}
|
|
@@ -14301,7 +14817,7 @@ var init_mock = __esm({
|
|
|
14301
14817
|
* @param key 键
|
|
14302
14818
|
*/
|
|
14303
14819
|
async exists(key) {
|
|
14304
|
-
if (!this
|
|
14820
|
+
if (!this.store[key]) return 0;
|
|
14305
14821
|
if (this.checkExpire(key)) return 0;
|
|
14306
14822
|
return 1;
|
|
14307
14823
|
}
|
|
@@ -14311,8 +14827,10 @@ var init_mock = __esm({
|
|
|
14311
14827
|
* @param seconds 过期时间(秒)
|
|
14312
14828
|
*/
|
|
14313
14829
|
async expire(key, seconds) {
|
|
14314
|
-
if (!this
|
|
14315
|
-
|
|
14830
|
+
if (!this.store[key]) return 0;
|
|
14831
|
+
const expire = moment2().add(seconds, "seconds").valueOf();
|
|
14832
|
+
this.store[key].expire = expire;
|
|
14833
|
+
this.#sqlite.expire(key, expire);
|
|
14316
14834
|
return 1;
|
|
14317
14835
|
}
|
|
14318
14836
|
/**
|
|
@@ -14320,10 +14838,10 @@ var init_mock = __esm({
|
|
|
14320
14838
|
* @param key 键
|
|
14321
14839
|
*/
|
|
14322
14840
|
async ttl(key) {
|
|
14323
|
-
if (!this
|
|
14324
|
-
if (this
|
|
14841
|
+
if (!this.store[key]) return -2;
|
|
14842
|
+
if (this.store[key].expire === -1) return -1;
|
|
14325
14843
|
if (this.checkExpire(key)) return -2;
|
|
14326
|
-
return moment2(this
|
|
14844
|
+
return moment2(this.store[key].expire).diff(moment2(), "seconds");
|
|
14327
14845
|
}
|
|
14328
14846
|
/**
|
|
14329
14847
|
* @description 获取所有键
|
|
@@ -14331,7 +14849,7 @@ var init_mock = __esm({
|
|
|
14331
14849
|
*/
|
|
14332
14850
|
async keys(pattern) {
|
|
14333
14851
|
const reg = new RegExp(pattern.replace(/\*/g, ".*"));
|
|
14334
|
-
const keys = Object.keys(this
|
|
14852
|
+
const keys = Object.keys(this.store);
|
|
14335
14853
|
const result = [];
|
|
14336
14854
|
await Promise.all(keys.map(async (key) => {
|
|
14337
14855
|
if (this.checkExpire(key)) return;
|
|
@@ -14353,7 +14871,7 @@ var init_mock = __esm({
|
|
|
14353
14871
|
this.#zset = {};
|
|
14354
14872
|
this.#pf = {};
|
|
14355
14873
|
this.#bit = {};
|
|
14356
|
-
this
|
|
14874
|
+
this.store = {};
|
|
14357
14875
|
return "OK";
|
|
14358
14876
|
}
|
|
14359
14877
|
/**
|
|
@@ -14363,11 +14881,13 @@ var init_mock = __esm({
|
|
|
14363
14881
|
async incr(key) {
|
|
14364
14882
|
if (!this.#num[key]) {
|
|
14365
14883
|
this.#num[key] = 0;
|
|
14884
|
+
this.store[key] = { type: "num" /* NUM */, expire: -1 };
|
|
14366
14885
|
} else if (this.checkExpire(key, false)) {
|
|
14367
|
-
this
|
|
14886
|
+
this.store[key].expire = -1;
|
|
14368
14887
|
this.#num[key] = 0;
|
|
14369
14888
|
}
|
|
14370
14889
|
this.#num[key] += 1;
|
|
14890
|
+
this.#sqlite.set(key, String(this.#num[key]), "num" /* NUM */, this.store[key].expire);
|
|
14371
14891
|
return this.#num[key];
|
|
14372
14892
|
}
|
|
14373
14893
|
/**
|
|
@@ -14377,11 +14897,13 @@ var init_mock = __esm({
|
|
|
14377
14897
|
async decr(key) {
|
|
14378
14898
|
if (!this.#num[key]) {
|
|
14379
14899
|
this.#num[key] = 0;
|
|
14900
|
+
this.store[key] = { type: "num" /* NUM */, expire: -1 };
|
|
14380
14901
|
} else if (this.checkExpire(key, false)) {
|
|
14381
|
-
this
|
|
14902
|
+
this.store[key].expire = -1;
|
|
14382
14903
|
this.#num[key] = 0;
|
|
14383
14904
|
}
|
|
14384
14905
|
this.#num[key] -= 1;
|
|
14906
|
+
this.#sqlite.set(key, String(this.#num[key]), "num" /* NUM */, this.store[key].expire);
|
|
14385
14907
|
return this.#num[key];
|
|
14386
14908
|
}
|
|
14387
14909
|
/**
|
|
@@ -14392,8 +14914,9 @@ var init_mock = __esm({
|
|
|
14392
14914
|
async append(key, value) {
|
|
14393
14915
|
if (!this.#str[key]) {
|
|
14394
14916
|
this.#str[key] = "";
|
|
14917
|
+
this.store[key] = { type: "str" /* STR */, expire: -1 };
|
|
14395
14918
|
} else if (this.checkExpire(key, false)) {
|
|
14396
|
-
this
|
|
14919
|
+
this.store[key].expire = -1;
|
|
14397
14920
|
this.#str[key] = "";
|
|
14398
14921
|
}
|
|
14399
14922
|
if (Buffer.isBuffer(value)) {
|
|
@@ -14401,6 +14924,7 @@ var init_mock = __esm({
|
|
|
14401
14924
|
} else {
|
|
14402
14925
|
this.#str[key] += value;
|
|
14403
14926
|
}
|
|
14927
|
+
this.#sqlite.set(key, this.#str[key], "str" /* STR */, this.store[key].expire);
|
|
14404
14928
|
return this.#str[key].length;
|
|
14405
14929
|
}
|
|
14406
14930
|
/**
|
|
@@ -14420,13 +14944,14 @@ var init_mock = __esm({
|
|
|
14420
14944
|
*/
|
|
14421
14945
|
async hSet(key, field, value) {
|
|
14422
14946
|
if (!this.#hash[key]) {
|
|
14423
|
-
this
|
|
14947
|
+
this.store[key] = { type: "hash" /* HASH */, expire: -1 };
|
|
14424
14948
|
this.#hash[key] = {};
|
|
14425
14949
|
} else if (this.checkExpire(key, false)) {
|
|
14426
|
-
this
|
|
14950
|
+
this.store[key].expire = -1;
|
|
14427
14951
|
this.#hash[key] = {};
|
|
14428
14952
|
}
|
|
14429
14953
|
this.#hash[key][field] = value;
|
|
14954
|
+
this.#sqlite.set(key, JSON.stringify(this.#hash[key]), "hash" /* HASH */, this.store[key].expire);
|
|
14430
14955
|
return 1;
|
|
14431
14956
|
}
|
|
14432
14957
|
/**
|
|
@@ -14450,6 +14975,7 @@ var init_mock = __esm({
|
|
|
14450
14975
|
if (!this.#hash[key] || !this.#hash[key][field]) return 0;
|
|
14451
14976
|
if (this.checkExpire(key)) return 0;
|
|
14452
14977
|
delete this.#hash[key][field];
|
|
14978
|
+
this.#sqlite.set(key, JSON.stringify(this.#hash[key]), "hash" /* HASH */, this.store[key].expire);
|
|
14453
14979
|
return 1;
|
|
14454
14980
|
}
|
|
14455
14981
|
/**
|
|
@@ -14460,7 +14986,7 @@ var init_mock = __esm({
|
|
|
14460
14986
|
async hGetAll(key) {
|
|
14461
14987
|
if (!this.#hash[key]) return {};
|
|
14462
14988
|
if (this.checkExpire(key)) return {};
|
|
14463
|
-
return
|
|
14989
|
+
return lodash3.mapValues(this.#hash[key], (value) => value.toString());
|
|
14464
14990
|
}
|
|
14465
14991
|
/**
|
|
14466
14992
|
* 将一个或多个值插入到列表的头部
|
|
@@ -14469,13 +14995,14 @@ var init_mock = __esm({
|
|
|
14469
14995
|
*/
|
|
14470
14996
|
async lPush(key, ...values) {
|
|
14471
14997
|
if (!this.#list[key]) {
|
|
14472
|
-
this
|
|
14998
|
+
this.store[key] = { type: "list" /* LIST */, expire: -1 };
|
|
14473
14999
|
this.#list[key] = [];
|
|
14474
15000
|
} else if (this.checkExpire(key, false)) {
|
|
14475
|
-
this
|
|
15001
|
+
this.store[key].expire = -1;
|
|
14476
15002
|
this.#list[key] = [];
|
|
14477
15003
|
}
|
|
14478
15004
|
this.#list[key].unshift(...values);
|
|
15005
|
+
this.#sqlite.set(key, JSON.stringify(this.#list[key]), "list" /* LIST */, this.store[key].expire);
|
|
14479
15006
|
return this.#list[key].length;
|
|
14480
15007
|
}
|
|
14481
15008
|
/**
|
|
@@ -14485,13 +15012,14 @@ var init_mock = __esm({
|
|
|
14485
15012
|
*/
|
|
14486
15013
|
async rPush(key, ...values) {
|
|
14487
15014
|
if (!this.#list[key]) {
|
|
14488
|
-
this
|
|
15015
|
+
this.store[key] = { type: "list" /* LIST */, expire: -1 };
|
|
14489
15016
|
this.#list[key] = [];
|
|
14490
15017
|
} else if (this.checkExpire(key, false)) {
|
|
14491
|
-
this
|
|
15018
|
+
this.store[key].expire = -1;
|
|
14492
15019
|
this.#list[key] = [];
|
|
14493
15020
|
}
|
|
14494
15021
|
this.#list[key].push(...values);
|
|
15022
|
+
this.#sqlite.set(key, JSON.stringify(this.#list[key]), "list" /* LIST */, this.store[key].expire);
|
|
14495
15023
|
return this.#list[key].length;
|
|
14496
15024
|
}
|
|
14497
15025
|
/**
|
|
@@ -14503,6 +15031,7 @@ var init_mock = __esm({
|
|
|
14503
15031
|
if (!this.#list[key] || this.#list[key].length === 0) return null;
|
|
14504
15032
|
if (this.checkExpire(key)) return null;
|
|
14505
15033
|
const value = this.#list[key].shift();
|
|
15034
|
+
this.#sqlite.set(key, JSON.stringify(this.#list[key]), "list" /* LIST */, this.store[key].expire);
|
|
14506
15035
|
return value ? value.toString() : null;
|
|
14507
15036
|
}
|
|
14508
15037
|
/**
|
|
@@ -14514,6 +15043,7 @@ var init_mock = __esm({
|
|
|
14514
15043
|
if (!this.#list[key] || this.#list[key].length === 0) return null;
|
|
14515
15044
|
if (this.checkExpire(key)) return null;
|
|
14516
15045
|
const value = this.#list[key].pop();
|
|
15046
|
+
this.#sqlite.set(key, JSON.stringify(this.#list[key]), "list" /* LIST */, this.store[key].expire);
|
|
14517
15047
|
return value ? value.toString() : null;
|
|
14518
15048
|
}
|
|
14519
15049
|
/**
|
|
@@ -14524,7 +15054,9 @@ var init_mock = __esm({
|
|
|
14524
15054
|
async lRange(key, start3, stop) {
|
|
14525
15055
|
if (!this.#list[key]) return [];
|
|
14526
15056
|
if (this.checkExpire(key)) return [];
|
|
14527
|
-
|
|
15057
|
+
const value = this.#list[key].slice(start3, stop + 1).map((value2) => value2.toString());
|
|
15058
|
+
this.#sqlite.set(key, JSON.stringify(this.#list[key]), "list" /* LIST */, this.store[key].expire);
|
|
15059
|
+
return value;
|
|
14528
15060
|
}
|
|
14529
15061
|
/**
|
|
14530
15062
|
* 向集合添加一个或多个成员
|
|
@@ -14534,10 +15066,10 @@ var init_mock = __esm({
|
|
|
14534
15066
|
*/
|
|
14535
15067
|
async sAdd(key, ...members) {
|
|
14536
15068
|
if (!this.#set[key]) {
|
|
14537
|
-
this
|
|
15069
|
+
this.store[key] = { type: "set" /* SET */, expire: -1 };
|
|
14538
15070
|
this.#set[key] = /* @__PURE__ */ new Set();
|
|
14539
15071
|
} else if (this.checkExpire(key, false)) {
|
|
14540
|
-
this
|
|
15072
|
+
this.store[key].expire = -1;
|
|
14541
15073
|
this.#set[key] = /* @__PURE__ */ new Set();
|
|
14542
15074
|
}
|
|
14543
15075
|
let added = 0;
|
|
@@ -14547,6 +15079,7 @@ var init_mock = __esm({
|
|
|
14547
15079
|
added++;
|
|
14548
15080
|
}
|
|
14549
15081
|
}
|
|
15082
|
+
this.#sqlite.set(key, JSON.stringify(this.#set[key]), "set" /* SET */, this.store[key].expire);
|
|
14550
15083
|
return added;
|
|
14551
15084
|
}
|
|
14552
15085
|
/**
|
|
@@ -14565,6 +15098,7 @@ var init_mock = __esm({
|
|
|
14565
15098
|
removed++;
|
|
14566
15099
|
}
|
|
14567
15100
|
}
|
|
15101
|
+
this.#sqlite.set(key, JSON.stringify(this.#set[key]), "set" /* SET */, this.store[key].expire);
|
|
14568
15102
|
return removed;
|
|
14569
15103
|
}
|
|
14570
15104
|
/**
|
|
@@ -14598,10 +15132,10 @@ var init_mock = __esm({
|
|
|
14598
15132
|
*/
|
|
14599
15133
|
async zAdd(key, score, member) {
|
|
14600
15134
|
if (!this.#zset[key]) {
|
|
14601
|
-
this
|
|
15135
|
+
this.store[key] = { type: "zset" /* ZSET */, expire: -1 };
|
|
14602
15136
|
this.#zset[key] = [];
|
|
14603
15137
|
} else if (this.checkExpire(key, false)) {
|
|
14604
|
-
this
|
|
15138
|
+
this.store[key].expire = -1;
|
|
14605
15139
|
this.#zset[key] = [];
|
|
14606
15140
|
}
|
|
14607
15141
|
const index4 = this.#zset[key].findIndex((entry) => entry.member === member.toString());
|
|
@@ -14610,35 +15144,9 @@ var init_mock = __esm({
|
|
|
14610
15144
|
} else {
|
|
14611
15145
|
this.#zset[key][index4] = { score, member };
|
|
14612
15146
|
}
|
|
15147
|
+
this.#sqlite.set(key, JSON.stringify(this.#zset[key]), "zset" /* ZSET */, this.store[key].expire);
|
|
14613
15148
|
return 1;
|
|
14614
15149
|
}
|
|
14615
|
-
/**
|
|
14616
|
-
* 返回有序集合的成员数量
|
|
14617
|
-
* @param key 有序集合的键
|
|
14618
|
-
* @returns 返回有序集合的成员数量
|
|
14619
|
-
*/
|
|
14620
|
-
async zRange(key, start3, stop) {
|
|
14621
|
-
if (!this.#list[key]) return [];
|
|
14622
|
-
if (this.checkExpire(key)) return [];
|
|
14623
|
-
const zset = this.#list[key];
|
|
14624
|
-
return zset.slice(start3, stop + 1).map((entry) => entry.toString());
|
|
14625
|
-
}
|
|
14626
|
-
/**
|
|
14627
|
-
* 从有序集合中移除一个或多个成员
|
|
14628
|
-
* @param key 有序集合的键
|
|
14629
|
-
* @param members 要移除的成员
|
|
14630
|
-
* @returns 返回成功移除的成员数量
|
|
14631
|
-
*/
|
|
14632
|
-
async zRem(key, member) {
|
|
14633
|
-
if (!this.#list[key]) return 0;
|
|
14634
|
-
if (this.checkExpire(key)) return 0;
|
|
14635
|
-
const index4 = this.#list[key].findIndex((entry) => entry === member.toString());
|
|
14636
|
-
if (index4 !== -1) {
|
|
14637
|
-
this.#list[key].splice(index4, 1);
|
|
14638
|
-
return 1;
|
|
14639
|
-
}
|
|
14640
|
-
return 0;
|
|
14641
|
-
}
|
|
14642
15150
|
/**
|
|
14643
15151
|
* 返回有序集合的成员数量
|
|
14644
15152
|
* @param key 有序集合的键
|
|
@@ -14681,10 +15189,10 @@ var init_mock = __esm({
|
|
|
14681
15189
|
*/
|
|
14682
15190
|
async pfAdd(key, ...elements) {
|
|
14683
15191
|
if (!this.#pf[key]) {
|
|
14684
|
-
this
|
|
15192
|
+
this.store[key] = { type: "pf" /* PF */, expire: -1 };
|
|
14685
15193
|
this.#pf[key] = /* @__PURE__ */ new Set();
|
|
14686
15194
|
} else if (this.checkExpire(key, false)) {
|
|
14687
|
-
this
|
|
15195
|
+
this.store[key].expire = -1;
|
|
14688
15196
|
this.#pf[key] = /* @__PURE__ */ new Set();
|
|
14689
15197
|
}
|
|
14690
15198
|
let added = 0;
|
|
@@ -14694,6 +15202,7 @@ var init_mock = __esm({
|
|
|
14694
15202
|
added++;
|
|
14695
15203
|
}
|
|
14696
15204
|
}
|
|
15205
|
+
this.#sqlite.set(key, JSON.stringify(this.#pf[key]), "pf" /* PF */, this.store[key].expire);
|
|
14697
15206
|
return added > 0;
|
|
14698
15207
|
}
|
|
14699
15208
|
/**
|
|
@@ -14714,7 +15223,8 @@ var init_mock = __esm({
|
|
|
14714
15223
|
*/
|
|
14715
15224
|
async pExpire(key, seconds) {
|
|
14716
15225
|
if (!this.#pf[key]) return false;
|
|
14717
|
-
this
|
|
15226
|
+
this.store[key].expire = moment2().add(seconds, "seconds").valueOf();
|
|
15227
|
+
this.#sqlite.set(key, JSON.stringify(this.#pf[key]), "pf" /* PF */, this.store[key].expire);
|
|
14718
15228
|
return true;
|
|
14719
15229
|
}
|
|
14720
15230
|
/**
|
|
@@ -14725,10 +15235,12 @@ var init_mock = __esm({
|
|
|
14725
15235
|
*/
|
|
14726
15236
|
async pTTL(key) {
|
|
14727
15237
|
if (!this.#pf[key]) return -2;
|
|
14728
|
-
if (this
|
|
15238
|
+
if (this.store[key].expire === -1) return -1;
|
|
14729
15239
|
if (this.checkExpire(key)) return -2;
|
|
14730
|
-
moment2(this
|
|
14731
|
-
|
|
15240
|
+
const ttl = moment2(this.store[key].expire).diff(moment2(), "seconds");
|
|
15241
|
+
this.store[key].expire = ttl;
|
|
15242
|
+
this.#sqlite.set(key, JSON.stringify(this.#pf[key]), "pf" /* PF */, this.store[key].expire);
|
|
15243
|
+
return ttl;
|
|
14732
15244
|
}
|
|
14733
15245
|
/**
|
|
14734
15246
|
* 为键设置到某个特定时间点的过期时间
|
|
@@ -14739,7 +15251,8 @@ var init_mock = __esm({
|
|
|
14739
15251
|
async pExpireAt(key, timestamp) {
|
|
14740
15252
|
if (!this.#pf[key]) return false;
|
|
14741
15253
|
if (this.checkExpire(key)) return false;
|
|
14742
|
-
this
|
|
15254
|
+
this.store[key].expire = timestamp;
|
|
15255
|
+
this.#sqlite.set(key, JSON.stringify(this.#pf[key]), "pf" /* PF */, this.store[key].expire);
|
|
14743
15256
|
return true;
|
|
14744
15257
|
}
|
|
14745
15258
|
/**
|
|
@@ -14781,10 +15294,10 @@ var init_mock = __esm({
|
|
|
14781
15294
|
*/
|
|
14782
15295
|
async setBit(key, offset, value) {
|
|
14783
15296
|
if (!this.#bit[key]) {
|
|
14784
|
-
this
|
|
15297
|
+
this.store[key] = { type: "bit" /* BIT */, expire: -1 };
|
|
14785
15298
|
this.#bit[key] = Buffer.alloc(0);
|
|
14786
15299
|
} else if (this.checkExpire(key, false)) {
|
|
14787
|
-
this
|
|
15300
|
+
this.store[key].expire = -1;
|
|
14788
15301
|
this.#bit[key] = Buffer.alloc(0);
|
|
14789
15302
|
}
|
|
14790
15303
|
const byteOffset = Math.floor(offset / 8);
|
|
@@ -14792,6 +15305,7 @@ var init_mock = __esm({
|
|
|
14792
15305
|
const oldValue = this.#bit[key].readUInt8(byteOffset);
|
|
14793
15306
|
const newValue = value ? oldValue | 1 << bitOffset : oldValue & ~(1 << bitOffset);
|
|
14794
15307
|
this.#bit[key].writeUInt8(newValue, byteOffset);
|
|
15308
|
+
this.#sqlite.set(key, this.#bit[key].toString("base64"), "bit" /* BIT */, this.store[key].expire);
|
|
14795
15309
|
return oldValue;
|
|
14796
15310
|
}
|
|
14797
15311
|
/**
|
|
@@ -14824,29 +15338,422 @@ var init_mock = __esm({
|
|
|
14824
15338
|
}
|
|
14825
15339
|
return result;
|
|
14826
15340
|
}
|
|
15341
|
+
/**
|
|
15342
|
+
* 获取哈希表中字段是否存在
|
|
15343
|
+
* @param key 哈希表的键
|
|
15344
|
+
* @param field 哈希表中的字段
|
|
15345
|
+
* @returns 返回1表示字段存在,0表示字段不存在
|
|
15346
|
+
*/
|
|
15347
|
+
async hExists(key, field) {
|
|
15348
|
+
if (!this.#hash[key]) return 0;
|
|
15349
|
+
if (this.checkExpire(key)) return 0;
|
|
15350
|
+
return this.#hash[key][field] !== void 0 ? 1 : 0;
|
|
15351
|
+
}
|
|
15352
|
+
/**
|
|
15353
|
+
* 获取哈希表中所有字段名
|
|
15354
|
+
* @param key 哈希表的键
|
|
15355
|
+
* @returns 返回所有字段名数组
|
|
15356
|
+
*/
|
|
15357
|
+
async hKeys(key) {
|
|
15358
|
+
if (!this.#hash[key]) return [];
|
|
15359
|
+
if (this.checkExpire(key)) return [];
|
|
15360
|
+
return Object.keys(this.#hash[key]);
|
|
15361
|
+
}
|
|
15362
|
+
/**
|
|
15363
|
+
* 获取哈希表中所有值
|
|
15364
|
+
* @param key 哈希表的键
|
|
15365
|
+
* @returns 返回所有值数组
|
|
15366
|
+
*/
|
|
15367
|
+
async hVals(key) {
|
|
15368
|
+
if (!this.#hash[key]) return [];
|
|
15369
|
+
if (this.checkExpire(key)) return [];
|
|
15370
|
+
return Object.values(this.#hash[key]).map((value) => value.toString());
|
|
15371
|
+
}
|
|
15372
|
+
/**
|
|
15373
|
+
* 获取哈希表中字段数量
|
|
15374
|
+
* @param key 哈希表的键
|
|
15375
|
+
* @returns 返回字段数量
|
|
15376
|
+
*/
|
|
15377
|
+
async hLen(key) {
|
|
15378
|
+
if (!this.#hash[key]) return 0;
|
|
15379
|
+
if (this.checkExpire(key)) return 0;
|
|
15380
|
+
return Object.keys(this.#hash[key]).length;
|
|
15381
|
+
}
|
|
15382
|
+
/**
|
|
15383
|
+
* 批量获取哈希表中字段的值
|
|
15384
|
+
* @param key 哈希表的键
|
|
15385
|
+
* @param fields 要获取的字段数组
|
|
15386
|
+
* @returns 返回字段值数组,不存在的字段返回null
|
|
15387
|
+
*/
|
|
15388
|
+
async hMGet(key, ...fields) {
|
|
15389
|
+
if (!this.#hash[key]) return fields.map(() => null);
|
|
15390
|
+
if (this.checkExpire(key)) return fields.map(() => null);
|
|
15391
|
+
return fields.map((field) => {
|
|
15392
|
+
const value = this.#hash[key][field];
|
|
15393
|
+
return value !== void 0 ? value.toString() : null;
|
|
15394
|
+
});
|
|
15395
|
+
}
|
|
15396
|
+
/**
|
|
15397
|
+
* 批量设置哈希表中字段的值
|
|
15398
|
+
* @param key 哈希表的键
|
|
15399
|
+
* @param fieldValues 字段和值的数组,格式为[field1, value1, field2, value2, ...]
|
|
15400
|
+
* @returns 返回"OK"
|
|
15401
|
+
*/
|
|
15402
|
+
async hMSet(key, ...fieldValues) {
|
|
15403
|
+
if (!this.#hash[key]) {
|
|
15404
|
+
this.store[key] = { type: "hash" /* HASH */, expire: -1 };
|
|
15405
|
+
this.#hash[key] = {};
|
|
15406
|
+
} else if (this.checkExpire(key, false)) {
|
|
15407
|
+
this.store[key].expire = -1;
|
|
15408
|
+
this.#hash[key] = {};
|
|
15409
|
+
}
|
|
15410
|
+
for (let i = 0; i < fieldValues.length; i += 2) {
|
|
15411
|
+
if (i + 1 < fieldValues.length) {
|
|
15412
|
+
const field = fieldValues[i].toString();
|
|
15413
|
+
const value = fieldValues[i + 1];
|
|
15414
|
+
this.#hash[key][field] = value;
|
|
15415
|
+
}
|
|
15416
|
+
}
|
|
15417
|
+
this.#sqlite.set(key, JSON.stringify(this.#hash[key]), "hash" /* HASH */, this.store[key].expire);
|
|
15418
|
+
return "OK";
|
|
15419
|
+
}
|
|
15420
|
+
/**
|
|
15421
|
+
* 获取列表长度
|
|
15422
|
+
* @param key 列表的键
|
|
15423
|
+
* @returns 返回列表长度
|
|
15424
|
+
*/
|
|
15425
|
+
async lLen(key) {
|
|
15426
|
+
if (!this.#list[key]) return 0;
|
|
15427
|
+
if (this.checkExpire(key)) return 0;
|
|
15428
|
+
return this.#list[key].length;
|
|
15429
|
+
}
|
|
15430
|
+
/**
|
|
15431
|
+
* 获取列表指定索引的元素
|
|
15432
|
+
* @param key 列表的键
|
|
15433
|
+
* @param index 索引,0表示第一个元素,-1表示最后一个元素
|
|
15434
|
+
* @returns 返回元素值,索引超出范围返回null
|
|
15435
|
+
*/
|
|
15436
|
+
async lIndex(key, index4) {
|
|
15437
|
+
if (!this.#list[key]) return null;
|
|
15438
|
+
if (this.checkExpire(key)) return null;
|
|
15439
|
+
const list2 = this.#list[key];
|
|
15440
|
+
if (index4 < 0) {
|
|
15441
|
+
index4 = list2.length + index4;
|
|
15442
|
+
}
|
|
15443
|
+
if (index4 < 0 || index4 >= list2.length) {
|
|
15444
|
+
return null;
|
|
15445
|
+
}
|
|
15446
|
+
return list2[index4].toString();
|
|
15447
|
+
}
|
|
15448
|
+
/**
|
|
15449
|
+
* 设置列表指定索引的元素值
|
|
15450
|
+
* @param key 列表的键
|
|
15451
|
+
* @param index 索引
|
|
15452
|
+
* @param value 值
|
|
15453
|
+
* @returns 成功返回"OK",失败返回错误
|
|
15454
|
+
*/
|
|
15455
|
+
async lSet(key, index4, value) {
|
|
15456
|
+
if (!this.#list[key]) return null;
|
|
15457
|
+
if (this.checkExpire(key)) return null;
|
|
15458
|
+
const list2 = this.#list[key];
|
|
15459
|
+
if (index4 < 0) {
|
|
15460
|
+
index4 = list2.length + index4;
|
|
15461
|
+
}
|
|
15462
|
+
if (index4 < 0 || index4 >= list2.length) {
|
|
15463
|
+
return null;
|
|
15464
|
+
}
|
|
15465
|
+
list2[index4] = value;
|
|
15466
|
+
this.#sqlite.set(key, JSON.stringify(list2), "list" /* LIST */, this.store[key].expire);
|
|
15467
|
+
return "OK";
|
|
15468
|
+
}
|
|
15469
|
+
/**
|
|
15470
|
+
* 移除列表中与指定值相等的元素
|
|
15471
|
+
* @param key 列表的键
|
|
15472
|
+
* @param count 移除的数量,0表示移除所有匹配的元素,正数表示从头部开始移除,负数表示从尾部开始移除
|
|
15473
|
+
* @param value 要移除的值
|
|
15474
|
+
* @returns 返回移除的元素数量
|
|
15475
|
+
*/
|
|
15476
|
+
async lRem(key, count3, value) {
|
|
15477
|
+
if (!this.#list[key]) return 0;
|
|
15478
|
+
if (this.checkExpire(key)) return 0;
|
|
15479
|
+
const list2 = this.#list[key];
|
|
15480
|
+
const strValue = value.toString();
|
|
15481
|
+
let removed = 0;
|
|
15482
|
+
if (count3 === 0) {
|
|
15483
|
+
const newList = list2.filter((item) => item.toString() !== strValue);
|
|
15484
|
+
removed = list2.length - newList.length;
|
|
15485
|
+
this.#list[key] = newList;
|
|
15486
|
+
} else if (count3 > 0) {
|
|
15487
|
+
for (let i = 0; i < list2.length && removed < count3; i++) {
|
|
15488
|
+
if (list2[i].toString() === strValue) {
|
|
15489
|
+
list2.splice(i, 1);
|
|
15490
|
+
removed++;
|
|
15491
|
+
i--;
|
|
15492
|
+
}
|
|
15493
|
+
}
|
|
15494
|
+
} else {
|
|
15495
|
+
count3 = Math.abs(count3);
|
|
15496
|
+
for (let i = list2.length - 1; i >= 0 && removed < count3; i--) {
|
|
15497
|
+
if (list2[i].toString() === strValue) {
|
|
15498
|
+
list2.splice(i, 1);
|
|
15499
|
+
removed++;
|
|
15500
|
+
}
|
|
15501
|
+
}
|
|
15502
|
+
}
|
|
15503
|
+
this.#sqlite.set(key, JSON.stringify(list2), "list" /* LIST */, this.store[key].expire);
|
|
15504
|
+
return removed;
|
|
15505
|
+
}
|
|
15506
|
+
/**
|
|
15507
|
+
* 获取集合中元素数量
|
|
15508
|
+
* @param key 集合的键
|
|
15509
|
+
* @returns 返回集合中元素数量
|
|
15510
|
+
*/
|
|
15511
|
+
async sCard(key) {
|
|
15512
|
+
if (!this.#set[key]) return 0;
|
|
15513
|
+
if (this.checkExpire(key)) return 0;
|
|
15514
|
+
return this.#set[key].size;
|
|
15515
|
+
}
|
|
15516
|
+
/**
|
|
15517
|
+
* 计算集合的差集
|
|
15518
|
+
* @param keys 集合的键数组
|
|
15519
|
+
* @returns 返回差集数组
|
|
15520
|
+
*/
|
|
15521
|
+
async sDiff(...keys) {
|
|
15522
|
+
if (keys.length === 0) return [];
|
|
15523
|
+
const firstKey = keys[0];
|
|
15524
|
+
if (!this.#set[firstKey]) return [];
|
|
15525
|
+
if (this.checkExpire(firstKey)) return [];
|
|
15526
|
+
const result = /* @__PURE__ */ new Set();
|
|
15527
|
+
for (const item of this.#set[firstKey]) {
|
|
15528
|
+
result.add(item.toString());
|
|
15529
|
+
}
|
|
15530
|
+
for (let i = 1; i < keys.length; i++) {
|
|
15531
|
+
const key = keys[i];
|
|
15532
|
+
if (!this.#set[key] || this.checkExpire(key)) continue;
|
|
15533
|
+
for (const item of this.#set[key]) {
|
|
15534
|
+
result.delete(item.toString());
|
|
15535
|
+
}
|
|
15536
|
+
}
|
|
15537
|
+
return Array.from(result);
|
|
15538
|
+
}
|
|
15539
|
+
/**
|
|
15540
|
+
* 计算集合的交集
|
|
15541
|
+
* @param keys 集合的键数组
|
|
15542
|
+
* @returns 返回交集数组
|
|
15543
|
+
*/
|
|
15544
|
+
async sInter(...keys) {
|
|
15545
|
+
if (keys.length === 0) return [];
|
|
15546
|
+
const validKeys = keys.filter((key) => this.#set[key] && !this.checkExpire(key));
|
|
15547
|
+
if (validKeys.length === 0) return [];
|
|
15548
|
+
const result = /* @__PURE__ */ new Set();
|
|
15549
|
+
const firstKey = validKeys[0];
|
|
15550
|
+
for (const item of this.#set[firstKey]) {
|
|
15551
|
+
let inAllSets = true;
|
|
15552
|
+
for (let i = 1; i < validKeys.length; i++) {
|
|
15553
|
+
const key = validKeys[i];
|
|
15554
|
+
if (!this.#set[key].has(item.toString())) {
|
|
15555
|
+
inAllSets = false;
|
|
15556
|
+
break;
|
|
15557
|
+
}
|
|
15558
|
+
}
|
|
15559
|
+
if (inAllSets) {
|
|
15560
|
+
result.add(item.toString());
|
|
15561
|
+
}
|
|
15562
|
+
}
|
|
15563
|
+
return Array.from(result);
|
|
15564
|
+
}
|
|
15565
|
+
/**
|
|
15566
|
+
* 计算集合的并集
|
|
15567
|
+
* @param keys 集合的键数组
|
|
15568
|
+
* @returns 返回并集数组
|
|
15569
|
+
*/
|
|
15570
|
+
async sUnion(...keys) {
|
|
15571
|
+
const result = /* @__PURE__ */ new Set();
|
|
15572
|
+
for (const key of keys) {
|
|
15573
|
+
if (!this.#set[key] || this.checkExpire(key)) continue;
|
|
15574
|
+
for (const item of this.#set[key]) {
|
|
15575
|
+
result.add(item.toString());
|
|
15576
|
+
}
|
|
15577
|
+
}
|
|
15578
|
+
return Array.from(result);
|
|
15579
|
+
}
|
|
15580
|
+
/**
|
|
15581
|
+
* 将多个键的值同时获取
|
|
15582
|
+
* @param keys 要获取的键数组
|
|
15583
|
+
* @returns 返回值数组,不存在的键返回null
|
|
15584
|
+
*/
|
|
15585
|
+
async mGet(...keys) {
|
|
15586
|
+
return Promise.all(keys.map((key) => this.get(key)));
|
|
15587
|
+
}
|
|
15588
|
+
/**
|
|
15589
|
+
* 同时设置多个键值对
|
|
15590
|
+
* @param keyValues 键值对数组,格式为[key1, value1, key2, value2, ...]
|
|
15591
|
+
* @returns 返回"OK"
|
|
15592
|
+
*/
|
|
15593
|
+
async mSet(...keyValues) {
|
|
15594
|
+
for (let i = 0; i < keyValues.length; i += 2) {
|
|
15595
|
+
if (i + 1 < keyValues.length) {
|
|
15596
|
+
const key = keyValues[i].toString();
|
|
15597
|
+
const value = keyValues[i + 1];
|
|
15598
|
+
await this.set(key, value);
|
|
15599
|
+
}
|
|
15600
|
+
}
|
|
15601
|
+
return "OK";
|
|
15602
|
+
}
|
|
15603
|
+
/**
|
|
15604
|
+
* 设置键的新值并返回旧值
|
|
15605
|
+
* @param key 键
|
|
15606
|
+
* @param value 新值
|
|
15607
|
+
* @returns 返回旧值,如果键不存在则返回null
|
|
15608
|
+
*/
|
|
15609
|
+
async getSet(key, value) {
|
|
15610
|
+
const oldValue = await this.get(key);
|
|
15611
|
+
await this.set(key, value);
|
|
15612
|
+
return oldValue;
|
|
15613
|
+
}
|
|
15614
|
+
/**
|
|
15615
|
+
* 修复zRange方法,使用正确的zset数据结构
|
|
15616
|
+
* 返回有序集合的成员数量
|
|
15617
|
+
* @param key 有序集合的键
|
|
15618
|
+
* @returns 返回有序集合的成员数量
|
|
15619
|
+
*/
|
|
15620
|
+
async zRange(key, start3, stop) {
|
|
15621
|
+
if (!this.#zset[key]) return [];
|
|
15622
|
+
if (this.checkExpire(key)) return [];
|
|
15623
|
+
const sortedEntries = [...this.#zset[key]].sort((a, b) => a.score - b.score);
|
|
15624
|
+
return sortedEntries.slice(start3, stop + 1).map((entry) => entry.member.toString());
|
|
15625
|
+
}
|
|
15626
|
+
/**
|
|
15627
|
+
* 按分数范围返回有序集合的成员
|
|
15628
|
+
* @param key 有序集合的键
|
|
15629
|
+
* @param min 最小分数
|
|
15630
|
+
* @param max 最大分数
|
|
15631
|
+
* @returns 返回指定分数范围的成员数组
|
|
15632
|
+
*/
|
|
15633
|
+
async zRangeByScore(key, min, max) {
|
|
15634
|
+
if (!this.#zset[key]) return [];
|
|
15635
|
+
if (this.checkExpire(key)) return [];
|
|
15636
|
+
return this.#zset[key].filter((entry) => entry.score >= min && entry.score <= max).sort((a, b) => a.score - b.score).map((entry) => entry.member.toString());
|
|
15637
|
+
}
|
|
15638
|
+
/**
|
|
15639
|
+
* 按分数降序返回有序集合的成员
|
|
15640
|
+
* @param key 有序集合的键
|
|
15641
|
+
* @param start 起始索引
|
|
15642
|
+
* @param stop 结束索引
|
|
15643
|
+
* @returns 返回指定范围的成员数组(按分数降序)
|
|
15644
|
+
*/
|
|
15645
|
+
async zRevRange(key, start3, stop) {
|
|
15646
|
+
if (!this.#zset[key]) return [];
|
|
15647
|
+
if (this.checkExpire(key)) return [];
|
|
15648
|
+
const sortedEntries = [...this.#zset[key]].sort((a, b) => b.score - a.score);
|
|
15649
|
+
return sortedEntries.slice(start3, stop + 1).map((entry) => entry.member.toString());
|
|
15650
|
+
}
|
|
15651
|
+
/**
|
|
15652
|
+
* 获取有序集合中指定成员的排名(按分数降序)
|
|
15653
|
+
* @param key 有序集合的键
|
|
15654
|
+
* @param member 成员
|
|
15655
|
+
* @returns 返回成员的排名,不存在返回null
|
|
15656
|
+
*/
|
|
15657
|
+
async zRevRank(key, member) {
|
|
15658
|
+
if (!this.#zset[key]) return null;
|
|
15659
|
+
if (this.checkExpire(key)) return null;
|
|
15660
|
+
const strMember = member.toString();
|
|
15661
|
+
const sortedEntries = [...this.#zset[key]].sort((a, b) => b.score - a.score);
|
|
15662
|
+
for (let i = 0; i < sortedEntries.length; i++) {
|
|
15663
|
+
if (sortedEntries[i].member.toString() === strMember) {
|
|
15664
|
+
return i;
|
|
15665
|
+
}
|
|
15666
|
+
}
|
|
15667
|
+
return null;
|
|
15668
|
+
}
|
|
15669
|
+
/**
|
|
15670
|
+
* 从有序集合中移除一个或多个成员
|
|
15671
|
+
* @param key 有序集合的键
|
|
15672
|
+
* @param member 要移除的成员
|
|
15673
|
+
* @returns 返回成功移除的成员数量
|
|
15674
|
+
*/
|
|
15675
|
+
async zRem(key, member) {
|
|
15676
|
+
if (!this.#zset[key]) return 0;
|
|
15677
|
+
if (this.checkExpire(key)) return 0;
|
|
15678
|
+
const strMember = member.toString();
|
|
15679
|
+
const index4 = this.#zset[key].findIndex((entry) => entry.member.toString() === strMember);
|
|
15680
|
+
if (index4 !== -1) {
|
|
15681
|
+
this.#zset[key].splice(index4, 1);
|
|
15682
|
+
this.#sqlite.set(key, JSON.stringify(this.#zset[key]), "zset" /* ZSET */, this.store[key].expire);
|
|
15683
|
+
return 1;
|
|
15684
|
+
}
|
|
15685
|
+
return 0;
|
|
15686
|
+
}
|
|
15687
|
+
/**
|
|
15688
|
+
* 根据键类型获取值的字符串表示
|
|
15689
|
+
* @param key 键名
|
|
15690
|
+
* @returns 值的字符串表示
|
|
15691
|
+
*/
|
|
15692
|
+
getValueStringByKey(key) {
|
|
15693
|
+
const { type } = this.store[key];
|
|
15694
|
+
switch (type) {
|
|
15695
|
+
case "str" /* STR */:
|
|
15696
|
+
return this.#str[key];
|
|
15697
|
+
case "num" /* NUM */:
|
|
15698
|
+
return String(this.#num[key]);
|
|
15699
|
+
case "hash" /* HASH */:
|
|
15700
|
+
return JSON.stringify(this.#hash[key]);
|
|
15701
|
+
case "list" /* LIST */:
|
|
15702
|
+
return JSON.stringify(this.#list[key]);
|
|
15703
|
+
case "set" /* SET */:
|
|
15704
|
+
return JSON.stringify(Array.from(this.#set[key]));
|
|
15705
|
+
case "zset" /* ZSET */:
|
|
15706
|
+
return JSON.stringify(this.#zset[key]);
|
|
15707
|
+
case "pf" /* PF */:
|
|
15708
|
+
return JSON.stringify(Array.from(this.#pf[key]));
|
|
15709
|
+
case "bit" /* BIT */:
|
|
15710
|
+
return this.#bit[key].toString("base64");
|
|
15711
|
+
default:
|
|
15712
|
+
return "";
|
|
15713
|
+
}
|
|
15714
|
+
}
|
|
14827
15715
|
async save() {
|
|
14828
|
-
const keys = await this.#
|
|
14829
|
-
const
|
|
14830
|
-
|
|
14831
|
-
|
|
14832
|
-
Object.keys(this.#info).forEach((key) => {
|
|
14833
|
-
const { type, expire } = this.#info[key];
|
|
14834
|
-
const value = this.#str[key];
|
|
14835
|
-
list2.push({ type: "put", key, value: JSON.stringify({ type, expire, value }) });
|
|
15716
|
+
const keys = await this.#sqlite.keys();
|
|
15717
|
+
const { removed, added, common } = diffSimpleArray(keys, Object.keys(this.store));
|
|
15718
|
+
removed.forEach((key) => {
|
|
15719
|
+
this.#sqlite.del(key);
|
|
14836
15720
|
});
|
|
14837
|
-
|
|
15721
|
+
added.forEach((key) => {
|
|
15722
|
+
const { type, expire } = this.store[key];
|
|
15723
|
+
const value = this.getValueStringByKey(key);
|
|
15724
|
+
this.#sqlite.set(key, value, type, expire);
|
|
15725
|
+
});
|
|
15726
|
+
await Promise.all(common.map(async (key) => {
|
|
15727
|
+
const data = this.store[key];
|
|
15728
|
+
if (!data) return;
|
|
15729
|
+
const { type, expire } = data;
|
|
15730
|
+
const currentValue = this.getValueStringByKey(key);
|
|
15731
|
+
const sql = await this.#sqlite.get(key);
|
|
15732
|
+
if ((sql == null ? void 0 : sql.expire) !== expire || (sql == null ? void 0 : sql.value) !== currentValue) {
|
|
15733
|
+
this.#sqlite.set(key, currentValue, type, expire);
|
|
15734
|
+
}
|
|
15735
|
+
}));
|
|
14838
15736
|
return "OK";
|
|
14839
15737
|
}
|
|
14840
15738
|
};
|
|
14841
15739
|
}
|
|
14842
15740
|
});
|
|
15741
|
+
|
|
15742
|
+
// src/core/db/redis/mock.ts
|
|
15743
|
+
var init_mock2 = __esm({
|
|
15744
|
+
"src/core/db/redis/mock.ts"() {
|
|
15745
|
+
init_mock();
|
|
15746
|
+
}
|
|
15747
|
+
});
|
|
14843
15748
|
var create, start, createRedis, isArm64, mock;
|
|
14844
15749
|
var init_redis2 = __esm({
|
|
14845
15750
|
"src/core/db/redis/redis.ts"() {
|
|
14846
|
-
init_mock();
|
|
14847
15751
|
init_env();
|
|
14848
|
-
init_exec();
|
|
14849
15752
|
init_config();
|
|
15753
|
+
init_root();
|
|
15754
|
+
init_exec();
|
|
15755
|
+
init_mock2();
|
|
15756
|
+
init_sqlite();
|
|
14850
15757
|
create = async (options) => {
|
|
14851
15758
|
try {
|
|
14852
15759
|
const client = createClient(options);
|
|
@@ -14888,7 +15795,7 @@ var init_redis2 = __esm({
|
|
|
14888
15795
|
return mock();
|
|
14889
15796
|
};
|
|
14890
15797
|
isArm64 = async () => {
|
|
14891
|
-
if (
|
|
15798
|
+
if (os.arch() !== "arm64") return "";
|
|
14892
15799
|
const { stdout } = await exec("redis-server -v");
|
|
14893
15800
|
const version = stdout.toString();
|
|
14894
15801
|
if (!version) return "";
|
|
@@ -14897,7 +15804,8 @@ var init_redis2 = __esm({
|
|
|
14897
15804
|
return "";
|
|
14898
15805
|
};
|
|
14899
15806
|
mock = async () => {
|
|
14900
|
-
const
|
|
15807
|
+
const sqlite = await new SQLiteWrapper(path5.join(redisSqlite3Path, "redis.db")).init();
|
|
15808
|
+
const redis3 = await new RedisClient(sqlite).init();
|
|
14901
15809
|
Object.defineProperty(redis3, "id", { value: "mock" });
|
|
14902
15810
|
return redis3;
|
|
14903
15811
|
};
|
|
@@ -14907,9 +15815,9 @@ var init_redis2 = __esm({
|
|
|
14907
15815
|
// src/core/db/index.ts
|
|
14908
15816
|
var init_db = __esm({
|
|
14909
15817
|
"src/core/db/index.ts"() {
|
|
14910
|
-
init_level();
|
|
14911
15818
|
init_redis2();
|
|
14912
|
-
|
|
15819
|
+
init_mock2();
|
|
15820
|
+
init_kv();
|
|
14913
15821
|
}
|
|
14914
15822
|
});
|
|
14915
15823
|
|
|
@@ -15850,7 +16758,7 @@ var init_other2 = __esm({
|
|
|
15850
16758
|
* @param uid 隐藏字段 uid
|
|
15851
16759
|
* @param uin 隐藏字段 uin
|
|
15852
16760
|
*/
|
|
15853
|
-
groupSender(userId, role, nick, sex, age, card, area,
|
|
16761
|
+
groupSender(userId, role, nick, sex, age, card, area, level, title, uid, uin) {
|
|
15854
16762
|
return {
|
|
15855
16763
|
userId: String(userId),
|
|
15856
16764
|
role: role || "unknown",
|
|
@@ -15859,7 +16767,7 @@ var init_other2 = __esm({
|
|
|
15859
16767
|
age,
|
|
15860
16768
|
card,
|
|
15861
16769
|
area,
|
|
15862
|
-
level
|
|
16770
|
+
level,
|
|
15863
16771
|
title,
|
|
15864
16772
|
uid,
|
|
15865
16773
|
uin,
|
|
@@ -16712,13 +17620,13 @@ var init_input2 = __esm({
|
|
|
16712
17620
|
const seq2 = Math.floor(Math.random() * 1e9);
|
|
16713
17621
|
const time2 = Date.now();
|
|
16714
17622
|
if (text2.startsWith("log")) {
|
|
16715
|
-
const
|
|
16716
|
-
if (
|
|
17623
|
+
const level = text2.replace(/^log/, "").trim();
|
|
17624
|
+
if (level) {
|
|
16717
17625
|
const list2 = ["trace", "debug", "info", "warn", "error", "fatal"];
|
|
16718
|
-
if (list2.includes(
|
|
17626
|
+
if (list2.includes(level)) {
|
|
16719
17627
|
const { updateLevel: updateLevel2 } = await Promise.resolve().then(() => (init_admin(), admin_exports));
|
|
16720
|
-
updateLevel2(
|
|
16721
|
-
logger.info(`\u65E5\u5FD7\u7B49\u7EA7\u5DF2\u66F4\u65B0\u4E3A: ${
|
|
17628
|
+
updateLevel2(level);
|
|
17629
|
+
logger.info(`\u65E5\u5FD7\u7B49\u7EA7\u5DF2\u66F4\u65B0\u4E3A: ${level}`);
|
|
16722
17630
|
return;
|
|
16723
17631
|
}
|
|
16724
17632
|
}
|
|
@@ -17255,6 +18163,7 @@ __export(index_exports, {
|
|
|
17255
18163
|
createRawMessage: () => createRawMessage,
|
|
17256
18164
|
createReceiveLikeNotice: () => createReceiveLikeNotice,
|
|
17257
18165
|
dataPath: () => dataPath,
|
|
18166
|
+
db: () => db,
|
|
17258
18167
|
dbPath: () => dbPath,
|
|
17259
18168
|
debug: () => debug2,
|
|
17260
18169
|
default: () => karin,
|
|
@@ -17326,8 +18235,7 @@ __export(index_exports, {
|
|
|
17326
18235
|
karinMain: () => karinMain,
|
|
17327
18236
|
karinToQQBot: () => karinToQQBot,
|
|
17328
18237
|
key: () => key_exports,
|
|
17329
|
-
|
|
17330
|
-
levelPath: () => levelPath,
|
|
18238
|
+
kvPath: () => kvPath,
|
|
17331
18239
|
lock: () => lock,
|
|
17332
18240
|
lockMethod: () => lockMethod,
|
|
17333
18241
|
lockProp: () => lockProp,
|
|
@@ -17351,7 +18259,7 @@ __export(index_exports, {
|
|
|
17351
18259
|
readJson: () => readJson,
|
|
17352
18260
|
readJsonSync: () => readJsonSync,
|
|
17353
18261
|
redis: () => redis2,
|
|
17354
|
-
|
|
18262
|
+
redisSqlite3Path: () => redisSqlite3Path,
|
|
17355
18263
|
registerBot: () => registerBot,
|
|
17356
18264
|
registerRender: () => registerRender,
|
|
17357
18265
|
render: () => render2,
|
|
@@ -17365,7 +18273,6 @@ __export(index_exports, {
|
|
|
17365
18273
|
rmSync: () => rmSync,
|
|
17366
18274
|
router: () => router,
|
|
17367
18275
|
sandboxDataPath: () => sandboxDataPath,
|
|
17368
|
-
sandboxLevelPath: () => sandboxLevelPath,
|
|
17369
18276
|
sandboxTempPath: () => sandboxTempPath,
|
|
17370
18277
|
save: () => save,
|
|
17371
18278
|
segment: () => segment_exports,
|
|
@@ -17400,7 +18307,7 @@ __export(index_exports, {
|
|
|
17400
18307
|
writeJsonSync: () => writeJsonSync,
|
|
17401
18308
|
yaml: () => yaml2
|
|
17402
18309
|
});
|
|
17403
|
-
var logger2, redis2,
|
|
18310
|
+
var logger2, redis2, start2;
|
|
17404
18311
|
var init_index = __esm({
|
|
17405
18312
|
"src/index.ts"() {
|
|
17406
18313
|
init_debug2();
|
|
@@ -17430,6 +18337,7 @@ var init_index = __esm({
|
|
|
17430
18337
|
init_list();
|
|
17431
18338
|
init_class2();
|
|
17432
18339
|
init_karin();
|
|
18340
|
+
init_kv();
|
|
17433
18341
|
if (!process.env.EBV_FILE) process.env.EBV_FILE = ".env";
|
|
17434
18342
|
start2 = async () => {
|
|
17435
18343
|
dotenv.config({ path: `${path5.resolve(process.cwd(), process.env.EBV_FILE)}` });
|
|
@@ -17438,8 +18346,8 @@ var init_index = __esm({
|
|
|
17438
18346
|
printStartLog(process.env.KARIN_VERSION);
|
|
17439
18347
|
await initProcess(Number(process.env.HTTP_PORT));
|
|
17440
18348
|
await initExpress(root_default, Number(process.env.HTTP_PORT), process.env.HTTP_HOST);
|
|
17441
|
-
level = createLevelDB();
|
|
17442
18349
|
redis2 = await createRedis();
|
|
18350
|
+
await createDB();
|
|
17443
18351
|
await initPlugin();
|
|
17444
18352
|
await Promise.resolve().then(() => (init_adapter3(), adapter_exports));
|
|
17445
18353
|
await initOneBot();
|
|
@@ -17450,4 +18358,4 @@ var init_index = __esm({
|
|
|
17450
18358
|
});
|
|
17451
18359
|
init_index();
|
|
17452
18360
|
|
|
17453
|
-
export { AdapterBase, BATCH_UPDATE_PLUGINS_ROUTER, BaseEvent, Bot, CHECK_PLUGIN_ROUTER, CLOSE_TERMINAL_ROUTER, CONSOLE_ROUTER, CREATE_TERMINAL_ROUTER, DirectMessage, EVENT_COUNT, EXIT_ROUTER, FILE_CHANGE, FriendDecreaseNotice, FriendIncreaseNotice, FriendMessage, GET_BOTS_ROUTER, GET_CONFIG_ROUTER, GET_LOCAL_PLUGIN_LIST_ROUTER, GET_LOG_FILE_LIST_ROUTER, GET_LOG_FILE_ROUTER, GET_LOG_ROUTER, GET_NETWORK_STATUS_ROUTER, GET_ONLINE_PLUGIN_LIST_ROUTER, GET_PLUGIN_APPS_ROUTER, GET_PLUGIN_CONFIG_ROUTER, GET_PLUGIN_FILE_ROUTER, GET_PLUGIN_LIST_ROUTER, GET_TASK_LIST_ROUTER, GET_TASK_STATUS_ROUTER, GET_TERMINAL_LIST_ROUTER, GET_UPDATABLE_PLUGINS_ROUTER, GET_WEBUI_PLUGIN_LIST_ROUTER, GET_WEBUI_PLUGIN_VERSIONS_ROUTER, GroupAdminChangedNotice, GroupApplyRequest, GroupCardChangedNotice, GroupFileUploadedNotice, GroupHlightsChangedNotice, GroupHonorChangedNotice, GroupInviteRequest, GroupLuckKingNotice, GroupMemberBanNotice, GroupMemberDecreaseNotice, GroupMemberIncreaseNotice, GroupMemberTitleUpdatedNotice, GroupMessage, GroupMessageReactionNotice, GroupNotice, GroupPokeNotice, GroupRecallNotice, GroupSignInNotice, GroupTempMessage, GroupWholeBanNotice, GuildMessage, INSTALL_PLUGIN_ROUTER, INSTALL_WEBUI_PLUGIN_ROUTER, IS_PLUGIN_CONFIG_EXIST_ROUTER, LOGIN_ROUTER, MessageBase, NoticeBase, OB11ApiAction, OB11Event, OB11MessageSubType, OB11MessageType, OB11NoticeType, OB11RequestType, OB11Sex, PING_ROUTER, Plugin, PrivateApplyRequest, PrivateFileUploadedNotice, PrivatePokeNotice, PrivateRecallNotice, RECV_MSG, REFRESH_ROUTER, RESTART_ROUTER, ReceiveLikeNotice, Renderer, RequestBase, SAVE_CONFIG_ROUTER, SAVE_PLUGIN_CONFIG_ROUTER, SEND_MSG, SET_LOG_LEVEL_ROUTER, SYSTEM_INFO_ROUTER, SYSTEM_STATUS_KARIN_ROUTER, SYSTEM_STATUS_ROUTER, SYSTEM_STATUS_WS_ROUTER, UNINSTALL_PLUGIN_ROUTER, UNINSTALL_WEBUI_PLUGIN_ROUTER, UPDATE_CORE_ROUTER, UPDATE_PLUGIN_ROUTER, UPDATE_TASK_STATUS_ROUTER, UPDATE_WEBUI_PLUGIN_VERSION_ROUTER, WS_CLOSE, WS_CLOSE_ONEBOT, WS_CLOSE_PUPPETEER, WS_CLOSE_SANDBOX, WS_CONNECTION, WS_CONNECTION_ONEBOT, WS_CONNECTION_PUPPETEER, WS_CONNECTION_SANDBOX, WS_CONNECTION_TERMINAL, Watch, Watcher, YamlEditor, absPath, accordion, accordionItem, accordionPro, app, applyComments, base64, basePath, buffer, buttonHandle, callRender, changelog_exports as changelog, checkGitPluginUpdate, checkPkgUpdate, clearRequire, clearRequireFile, comment, commentPath, common_exports as common, components, config_exports as config, configPath, consolePath, contact2 as contact, contactDirect, contactFriend, contactGroup, contactGroupTemp, contactGuild, copyConfig, copyConfigSync, copyFiles, copyFilesSync, createClient2 as createClient, createDirectMessage, createFriendDecreaseNotice, createFriendIncreaseNotice, createFriendMessage, createGroupAdminChangedNotice, createGroupApplyRequest, createGroupCardChangedNotice, createGroupFileUploadedNotice, createGroupHlightsChangedNotice, createGroupHonorChangedNotice, createGroupInviteRequest, createGroupLuckKingNotice, createGroupMemberAddNotice, createGroupMemberBanNotice, createGroupMemberDelNotice, createGroupMemberTitleUpdatedNotice, createGroupMessage, createGroupMessageReactionNotice, createGroupPokeNotice, createGroupRecallNotice, createGroupSignInNotice, createGroupTempMessage, createGroupWholeBanNotice, createGuildMessage, createHttp, createInnerLogger, createPluginDir, createPrivateApplyRequest, createPrivateFileUploadedNotice, createPrivatePokeNotice, createPrivateRecallNotice, createRawMessage, createReceiveLikeNotice, dataPath, dbPath, debug2 as debug, karin as default, defaultConfigPath, defaultViewPath, divider, downFile, errorToString, exec, existToMkdir, existToMkdirSync, exists, existsSync, ffmpeg, ffplay, ffprobe, fs_exports as file, fileToUrl, fileToUrlHandlerKey, filesByExt, formatTime, fs_exports2 as fs, getAllBot, getAllBotID, getAllBotList, getBot, getBotCount, getCommit, getFiles, getHash, getPid, getPkgVersion, getPluginInfo, getPlugins, getRelPath, getRemotePkgVersion, getRender, getRenderCount, getRenderList, getRequestIp, getTime, handler, hooks, htmlPath, importModule, initOneBot, input, isClass, isDir, isDirSync, isDocker, isFile, isFileSync, isIPv4Loop, isIPv6Loop, isLinux, isLocalRequest, isLoopback, isMac, isPkg, isPlugin, isRoot, isStatic, isSubPath, isWin2 as isWin, json, karin, karinDir, karinMain, karinToQQBot, key_exports as key,
|
|
18361
|
+
export { AdapterBase, BATCH_UPDATE_PLUGINS_ROUTER, BaseEvent, Bot, CHECK_PLUGIN_ROUTER, CLOSE_TERMINAL_ROUTER, CONSOLE_ROUTER, CREATE_TERMINAL_ROUTER, DirectMessage, EVENT_COUNT, EXIT_ROUTER, FILE_CHANGE, FriendDecreaseNotice, FriendIncreaseNotice, FriendMessage, GET_BOTS_ROUTER, GET_CONFIG_ROUTER, GET_LOCAL_PLUGIN_LIST_ROUTER, GET_LOG_FILE_LIST_ROUTER, GET_LOG_FILE_ROUTER, GET_LOG_ROUTER, GET_NETWORK_STATUS_ROUTER, GET_ONLINE_PLUGIN_LIST_ROUTER, GET_PLUGIN_APPS_ROUTER, GET_PLUGIN_CONFIG_ROUTER, GET_PLUGIN_FILE_ROUTER, GET_PLUGIN_LIST_ROUTER, GET_TASK_LIST_ROUTER, GET_TASK_STATUS_ROUTER, GET_TERMINAL_LIST_ROUTER, GET_UPDATABLE_PLUGINS_ROUTER, GET_WEBUI_PLUGIN_LIST_ROUTER, GET_WEBUI_PLUGIN_VERSIONS_ROUTER, GroupAdminChangedNotice, GroupApplyRequest, GroupCardChangedNotice, GroupFileUploadedNotice, GroupHlightsChangedNotice, GroupHonorChangedNotice, GroupInviteRequest, GroupLuckKingNotice, GroupMemberBanNotice, GroupMemberDecreaseNotice, GroupMemberIncreaseNotice, GroupMemberTitleUpdatedNotice, GroupMessage, GroupMessageReactionNotice, GroupNotice, GroupPokeNotice, GroupRecallNotice, GroupSignInNotice, GroupTempMessage, GroupWholeBanNotice, GuildMessage, INSTALL_PLUGIN_ROUTER, INSTALL_WEBUI_PLUGIN_ROUTER, IS_PLUGIN_CONFIG_EXIST_ROUTER, LOGIN_ROUTER, MessageBase, NoticeBase, OB11ApiAction, OB11Event, OB11MessageSubType, OB11MessageType, OB11NoticeType, OB11RequestType, OB11Sex, PING_ROUTER, Plugin, PrivateApplyRequest, PrivateFileUploadedNotice, PrivatePokeNotice, PrivateRecallNotice, RECV_MSG, REFRESH_ROUTER, RESTART_ROUTER, ReceiveLikeNotice, Renderer, RequestBase, SAVE_CONFIG_ROUTER, SAVE_PLUGIN_CONFIG_ROUTER, SEND_MSG, SET_LOG_LEVEL_ROUTER, SYSTEM_INFO_ROUTER, SYSTEM_STATUS_KARIN_ROUTER, SYSTEM_STATUS_ROUTER, SYSTEM_STATUS_WS_ROUTER, UNINSTALL_PLUGIN_ROUTER, UNINSTALL_WEBUI_PLUGIN_ROUTER, UPDATE_CORE_ROUTER, UPDATE_PLUGIN_ROUTER, UPDATE_TASK_STATUS_ROUTER, UPDATE_WEBUI_PLUGIN_VERSION_ROUTER, WS_CLOSE, WS_CLOSE_ONEBOT, WS_CLOSE_PUPPETEER, WS_CLOSE_SANDBOX, WS_CONNECTION, WS_CONNECTION_ONEBOT, WS_CONNECTION_PUPPETEER, WS_CONNECTION_SANDBOX, WS_CONNECTION_TERMINAL, Watch, Watcher, YamlEditor, absPath, accordion, accordionItem, accordionPro, app, applyComments, base64, basePath, buffer, buttonHandle, callRender, changelog_exports as changelog, checkGitPluginUpdate, checkPkgUpdate, clearRequire, clearRequireFile, comment, commentPath, common_exports as common, components, config_exports as config, configPath, consolePath, contact2 as contact, contactDirect, contactFriend, contactGroup, contactGroupTemp, contactGuild, copyConfig, copyConfigSync, copyFiles, copyFilesSync, createClient2 as createClient, createDirectMessage, createFriendDecreaseNotice, createFriendIncreaseNotice, createFriendMessage, createGroupAdminChangedNotice, createGroupApplyRequest, createGroupCardChangedNotice, createGroupFileUploadedNotice, createGroupHlightsChangedNotice, createGroupHonorChangedNotice, createGroupInviteRequest, createGroupLuckKingNotice, createGroupMemberAddNotice, createGroupMemberBanNotice, createGroupMemberDelNotice, createGroupMemberTitleUpdatedNotice, createGroupMessage, createGroupMessageReactionNotice, createGroupPokeNotice, createGroupRecallNotice, createGroupSignInNotice, createGroupTempMessage, createGroupWholeBanNotice, createGuildMessage, createHttp, createInnerLogger, createPluginDir, createPrivateApplyRequest, createPrivateFileUploadedNotice, createPrivatePokeNotice, createPrivateRecallNotice, createRawMessage, createReceiveLikeNotice, dataPath, db, dbPath, debug2 as debug, karin as default, defaultConfigPath, defaultViewPath, divider, downFile, errorToString, exec, existToMkdir, existToMkdirSync, exists, existsSync, ffmpeg, ffplay, ffprobe, fs_exports as file, fileToUrl, fileToUrlHandlerKey, filesByExt, formatTime, fs_exports2 as fs, getAllBot, getAllBotID, getAllBotList, getBot, getBotCount, getCommit, getFiles, getHash, getPid, getPkgVersion, getPluginInfo, getPlugins, getRelPath, getRemotePkgVersion, getRender, getRenderCount, getRenderList, getRequestIp, getTime, handler, hooks, htmlPath, importModule, initOneBot, input, isClass, isDir, isDirSync, isDocker, isFile, isFileSync, isIPv4Loop, isIPv6Loop, isLinux, isLocalRequest, isLoopback, isMac, isPkg, isPlugin, isRoot, isStatic, isSubPath, isWin2 as isWin, json, karin, karinDir, karinMain, karinToQQBot, key_exports as key, kvPath, lock, lockMethod, lockProp, log, logger2 as logger, logs, logsPath, makeForward, makeMessage, mkdir, mkdirSync, parseChangelog, pkgRoot, pluginDir, pm2Path, qqbotToKarin, randomStr, range, read, readFile, readJson, readJsonSync, redis2 as redis, redisSqlite3Path, registerBot, registerRender, render2 as render, renderHtml, renderMultiHtml, requireFile, requireFileSync, resourcePath, restart, restartDirect, rmSync, router, sandboxDataPath, sandboxTempPath, save, segment_exports as segment, sendMsg2 as sendMsg, sender, senderDirect, senderFriend, senderGroup, senderGroupTemp, senderGuild, sep, server, splitPath, start2 as start, stream, stringifyError, switchComponent, system_exports as system, tempPath, unregisterBot, unregisterRender, updateAllGitPlugin, updateAllPkg, updateGitPlugin, updatePkg, uptime, urlToPath, watch, watchAndMerge, write, writeJson, writeJsonSync, yaml2 as yaml };
|