node-karin 1.15.5 → 1.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/adapter-BqlH3u3X.mjs +218 -0
  3. package/dist/app-DdMQbBEY.mjs +4109 -0
  4. package/dist/cache-CPcPeo6N.mjs +163 -0
  5. package/dist/chunk-NzVPYdc1.mjs +21 -0
  6. package/dist/cli/index.cjs +10900 -1
  7. package/dist/cli/index.d.ts +1 -1
  8. package/dist/cli/index.mjs +10770 -10224
  9. package/dist/file-ZGuqNDd-.mjs +15987 -0
  10. package/dist/file-dGy9of8-.mjs +268 -0
  11. package/dist/fsSync-Cf5MWILk.mjs +65 -0
  12. package/dist/index.d.ts +12235 -12738
  13. package/dist/index.mjs +2054 -25247
  14. package/dist/internal-DupfycKE.mjs +597 -0
  15. package/dist/kv-DZp4UIxg.mjs +192 -0
  16. package/dist/module/art-template.d.ts +2 -13
  17. package/dist/module/art-template.mjs +3 -1
  18. package/dist/module/axios.d.ts +3 -2
  19. package/dist/module/axios.mjs +5 -2
  20. package/dist/module/chalk.d.ts +3 -2
  21. package/dist/module/chalk.mjs +5 -2
  22. package/dist/module/chokidar.d.ts +3 -2
  23. package/dist/module/chokidar.mjs +5 -2
  24. package/dist/module/express.d.ts +2 -1
  25. package/dist/module/express.mjs +3 -1
  26. package/dist/module/lodash.d.ts +2 -1
  27. package/dist/module/lodash.mjs +3 -1
  28. package/dist/module/log4js.d.ts +3 -2
  29. package/dist/module/log4js.mjs +5 -2
  30. package/dist/module/moment.d.ts +2 -1
  31. package/dist/module/moment.mjs +3 -1
  32. package/dist/module/node-schedule.d.ts +3 -2
  33. package/dist/module/node-schedule.mjs +5 -2
  34. package/dist/module/redis.d.ts +3 -2
  35. package/dist/module/redis.mjs +5 -2
  36. package/dist/module/sqlite3.d.ts +3 -2
  37. package/dist/module/sqlite3.mjs +5 -2
  38. package/dist/module/ws.d.ts +3 -2
  39. package/dist/module/ws.mjs +5 -2
  40. package/dist/module/yaml.d.ts +3 -2
  41. package/dist/module/yaml.mjs +5 -2
  42. package/dist/queue-CnKedaZA.mjs +70 -0
  43. package/dist/redis-aLJ7wbJH.mjs +1556 -0
  44. package/dist/render-DPqueDZr.mjs +170 -0
  45. package/dist/root.d.ts +46 -46
  46. package/dist/root.mjs +136 -93
  47. package/dist/router-zPSN9-tY.mjs +124 -0
  48. package/dist/server-DT64D-m-.mjs +38 -0
  49. package/dist/snapka-BTlnZOyI.mjs +450 -0
  50. package/dist/sqlite-Dcj9jlW9.mjs +307 -0
  51. package/dist/start/app.d.ts +1 -1
  52. package/dist/start/app.mjs +14 -7
  53. package/dist/start/index.d.ts +1 -1
  54. package/dist/start/index.mjs +325 -656
  55. package/dist/template-Djk6y0uC.mjs +133 -0
  56. package/dist/terminalManager-Lxa8Sm06.mjs +783 -0
  57. package/dist/uptime-C121X_rq.mjs +210 -0
  58. package/dist/web/{CompressaPRO-GX.woff2.br → CompressaPRO-GX.woff2} +0 -0
  59. package/dist/web/assets/css/style-CBB8wM_W.css +14880 -0
  60. package/dist/web/assets/js/entry-Blf4Trpx.js +258540 -0
  61. package/dist/web/{googleapis.woff2.br → googleapis.woff2} +0 -0
  62. package/dist/web/index.html +2 -15
  63. package/dist/web/karin.png +0 -0
  64. package/dist/web/sha256.min.js +9 -0
  65. package/dist/ws-BLDoC2gV.mjs +80 -0
  66. package/dist/ws-CcoWd3Ar.mjs +106 -0
  67. package/package.json +7 -7
  68. package/dist/global.d.d.ts +0 -68
  69. package/dist/types-hAhbXJDZ.d.ts +0 -109
  70. package/dist/web/assets/css/components-ep7vm38G.css +0 -1
  71. package/dist/web/assets/css/index-Dadvd9mn.css.br +0 -0
  72. package/dist/web/assets/css/vendor-editor-CFbL2ovg.css.br +0 -0
  73. package/dist/web/assets/css/vendor-others-ZgkIHsf0.css +0 -1
  74. package/dist/web/assets/js/components-CU2xw4lY.js.br +0 -0
  75. package/dist/web/assets/js/entry-Dvb7eYLE.js.br +0 -0
  76. package/dist/web/assets/js/hooks-CRfhs4ON.js.br +0 -0
  77. package/dist/web/assets/js/page-404.tsx-DYMd_RI_.js +0 -1
  78. package/dist/web/assets/js/page-dashboard-CG60V_Z-.js.br +0 -0
  79. package/dist/web/assets/js/page-loading.tsx-wY8a9me3.js.br +0 -0
  80. package/dist/web/assets/js/page-login.tsx-B54ZOEZB.js.br +0 -0
  81. package/dist/web/assets/js/utils-C9nWTSuo.js +0 -2
  82. package/dist/web/assets/js/vendor-editor-BmqYP7lh.js.br +0 -0
  83. package/dist/web/assets/js/vendor-heroui-ClBCy2zk.js.br +0 -0
  84. package/dist/web/assets/js/vendor-others-6GiMrjd4.js.br +0 -0
  85. package/dist/web/assets/js/vendor-react-Dc9jdQiK.js.br +0 -0
  86. package/dist/web/assets/js/vendor-ui-utils-D0xkboLL.js.br +0 -0
  87. package/dist/web/assets/js/vendor-visual-saF8KLH_.js.br +0 -0
  88. package/dist/web/karin.png.br +0 -0
  89. package/dist/web/sha256.min.js.br +0 -0
@@ -0,0 +1,192 @@
1
+ import { t as __exportAll } from "./chunk-NzVPYdc1.mjs";
2
+ import { kvPath } from "./root.mjs";
3
+ import { a as mkdirSync } from "./fsSync-Cf5MWILk.mjs";
4
+ import { n as logPrefix } from "./sqlite-Dcj9jlW9.mjs";
5
+ import path from "node:path";
6
+ import sqlite3 from "sqlite3";
7
+
8
+ //#region src/core/db/kv/sqlite.ts
9
+ /**
10
+ * @description 简单的kv存储
11
+ */
12
+ var SQLiteWrapper = class {
13
+ dbPath;
14
+ _db;
15
+ constructor(dbPath) {
16
+ this.dbPath = dbPath;
17
+ }
18
+ async _init() {
19
+ mkdirSync(path.dirname(this.dbPath));
20
+ await new Promise((resolve, reject) => {
21
+ this._db = new sqlite3.Database(this.dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => {
22
+ if (err) {
23
+ logger.error(logPrefix("SQLite数据库连接失败:"));
24
+ logger.error(err);
25
+ reject(err);
26
+ return;
27
+ }
28
+ resolve();
29
+ });
30
+ });
31
+ await new Promise((resolve) => {
32
+ this._db.exec(`
33
+ PRAGMA foreign_keys = ON;
34
+ PRAGMA journal_mode = WAL;
35
+ PRAGMA synchronous = NORMAL;
36
+ `, (pragmaErr) => {
37
+ if (pragmaErr) {
38
+ logger.warn(logPrefix("设置SQLite PRAGMA失败:"));
39
+ logger.warn(pragmaErr);
40
+ }
41
+ resolve();
42
+ });
43
+ });
44
+ await new Promise((resolve, reject) => {
45
+ this._db.run(`
46
+ CREATE TABLE IF NOT EXISTS redis_data (
47
+ key TEXT PRIMARY KEY,
48
+ value TEXT NOT NULL DEFAULT ''
49
+ )
50
+ `, (err) => {
51
+ if (err) {
52
+ logger.error(logPrefix("创建SQLite表失败:"));
53
+ logger.error(err);
54
+ reject(err);
55
+ return;
56
+ }
57
+ resolve();
58
+ });
59
+ });
60
+ this._init = () => Promise.resolve(this);
61
+ return this;
62
+ }
63
+ /**
64
+ * 设置键值对
65
+ * @param key 键名
66
+ * @param value 值
67
+ * @returns 操作是否成功
68
+ */
69
+ async set(key, value) {
70
+ await this._init();
71
+ return new Promise((resolve) => {
72
+ this._db.run("INSERT OR REPLACE INTO redis_data (key, value) VALUES (?, ?)", [key, JSON.stringify(value)], (err) => {
73
+ if (err) {
74
+ logger.error(logPrefix("设置键值对失败:"));
75
+ logger.error(err);
76
+ resolve(false);
77
+ return;
78
+ }
79
+ resolve(true);
80
+ });
81
+ });
82
+ }
83
+ /**
84
+ * 获取所有匹配模式的键
85
+ * @param pattern 匹配模式,支持SQL LIKE语法的通配符
86
+ * @returns 匹配的键列表,失败时返回空数组
87
+ */
88
+ async keys(pattern = "*") {
89
+ await this._init();
90
+ const sqlPattern = pattern.replace(/\*/g, "%").replace(/\?/g, "_");
91
+ return new Promise((resolve) => {
92
+ this._db.all("SELECT key FROM redis_data WHERE key LIKE ?", [sqlPattern], (err, rows) => {
93
+ if (err) {
94
+ logger.error(logPrefix("获取键列表失败:"));
95
+ logger.error(err);
96
+ resolve([]);
97
+ return;
98
+ }
99
+ resolve(rows.map((row) => row.key));
100
+ });
101
+ });
102
+ }
103
+ /**
104
+ * 获取键对应的值
105
+ * @param key 键名
106
+ * @returns 值,如果键不存在或值损坏则返回null
107
+ */
108
+ async get(key) {
109
+ await this._init();
110
+ return new Promise((resolve) => {
111
+ this._db.get("SELECT value FROM redis_data WHERE key = ?", [key], async (err, row) => {
112
+ if (err || !row) {
113
+ resolve(null);
114
+ return;
115
+ }
116
+ try {
117
+ resolve(JSON.parse(row.value));
118
+ } catch (e) {
119
+ await this.del(key);
120
+ resolve(null);
121
+ }
122
+ });
123
+ });
124
+ }
125
+ /**
126
+ * 删除键
127
+ * @param key 要删除的键
128
+ * @returns 是否删除成功
129
+ */
130
+ async del(key) {
131
+ await this._init();
132
+ return new Promise((resolve) => {
133
+ this._db.run("DELETE FROM redis_data WHERE key = ?", [key], function(err) {
134
+ if (err) {
135
+ logger.error(logPrefix("删除键失败:"));
136
+ logger.error(err);
137
+ resolve(false);
138
+ return;
139
+ }
140
+ resolve(this.changes > 0);
141
+ });
142
+ });
143
+ }
144
+ };
145
+
146
+ //#endregion
147
+ //#region src/core/db/kv/index.ts
148
+ var kv_exports = /* @__PURE__ */ __exportAll({
149
+ createDB: () => createDB,
150
+ db: () => db
151
+ });
152
+ /**
153
+ * @description kv数据库
154
+ */
155
+ let db;
156
+ /**
157
+ * @description 初始化状态,防止重复初始化
158
+ */
159
+ let initialized = false;
160
+ /**
161
+ * @description 正在进行的初始化Promise
162
+ */
163
+ let initializingPromise = null;
164
+ /**
165
+ * @description 初始化
166
+ * @param dbPath 数据库路径
167
+ * @returns 数据库实例
168
+ */
169
+ const init = async (dbPath) => {
170
+ db = await new SQLiteWrapper(dbPath)._init();
171
+ return db;
172
+ };
173
+ /**
174
+ * @description 创建一个kv数据库
175
+ * @returns 数据库实例的Promise
176
+ */
177
+ const createDB = () => {
178
+ if (initialized && db) return Promise.resolve(db);
179
+ if (initializingPromise) return initializingPromise;
180
+ initializingPromise = init(path.join(kvPath, "kv.db")).then((result) => {
181
+ initialized = true;
182
+ initializingPromise = null;
183
+ return result;
184
+ }).catch((error) => {
185
+ initializingPromise = null;
186
+ throw error;
187
+ });
188
+ return initializingPromise;
189
+ };
190
+
191
+ //#endregion
192
+ export { db as n, kv_exports as r, createDB as t };
@@ -1,13 +1,2 @@
1
- export { default } from 'art-template';
2
- import 'axios';
3
- import 'chalk';
4
- import 'chokidar';
5
- import 'express';
6
- import 'lodash';
7
- import 'log4js';
8
- import 'moment';
9
- import 'node-schedule';
10
- import 'redis';
11
- import 'sqlite3';
12
- import 'ws';
13
- import 'yaml';
1
+ import art_template_default from "art-template";
2
+ export { art_template_default as default };
@@ -1 +1,3 @@
1
- export { default } from 'art-template';
1
+ import art_template_default from "art-template";
2
+
3
+ export { art_template_default as default };
@@ -1,2 +1,3 @@
1
- export * from 'axios';
2
- export { default } from 'axios';
1
+ import axios_default from "axios";
2
+ export * from "axios";
3
+ export { axios_default as default };
@@ -1,2 +1,5 @@
1
- export * from 'axios';
2
- export { default } from 'axios';
1
+ import axios_default from "axios";
2
+
3
+ export * from "axios"
4
+
5
+ export { axios_default as default };
@@ -1,2 +1,3 @@
1
- export * from 'chalk';
2
- export { default } from 'chalk';
1
+ import chalk_default from "chalk";
2
+ export * from "chalk";
3
+ export { chalk_default as default };
@@ -1,2 +1,5 @@
1
- export * from 'chalk';
2
- export { default } from 'chalk';
1
+ import chalk_default from "chalk";
2
+
3
+ export * from "chalk"
4
+
5
+ export { chalk_default as default };
@@ -1,2 +1,3 @@
1
- export * from 'chokidar';
2
- export { default } from 'chokidar';
1
+ import chokidar_default from "chokidar";
2
+ export * from "chokidar";
3
+ export { chokidar_default as default };
@@ -1,2 +1,5 @@
1
- export * from 'chokidar';
2
- export { default } from 'chokidar';
1
+ import chokidar_default from "chokidar";
2
+
3
+ export * from "chokidar"
4
+
5
+ export { chokidar_default as default };
@@ -1 +1,2 @@
1
- export { Application, CookieOptions, Errback, ErrorRequestHandler, Express, Handler, IRoute, IRouter, IRouterHandler, IRouterMatcher, Locals, MediaType, NextFunction, Request, RequestHandler, RequestParamHandler, Response, Route, Router, RouterOptions, Send, application, default, json, raw, request, response, text, urlencoded } from 'express';
1
+ import express_default, { Application, CookieOptions, Errback, ErrorRequestHandler, Express, Handler, IRoute, IRouter, IRouterHandler, IRouterMatcher, Locals, MediaType, NextFunction, Request, RequestHandler, RequestParamHandler, Response, Route, Router, RouterOptions, Send, application, json, raw, request, response, text, urlencoded } from "express";
2
+ export { type Application, type CookieOptions, type Errback, type ErrorRequestHandler, type Express, type Handler, type IRoute, type IRouter, type IRouterHandler, type IRouterMatcher, type Locals, type MediaType, type NextFunction, type Request, type RequestHandler, type RequestParamHandler, type Response, Route, Router, type RouterOptions, type Send, application, express_default as default, json, raw, request, response, text, urlencoded };
@@ -1 +1,3 @@
1
- export { Route, Router, application, default, json, raw, request, response, text, urlencoded } from 'express';
1
+ import express_default, { Route, Router, application, json, raw, request, response, text, urlencoded } from "express";
2
+
3
+ export { Route, Router, application, express_default as default, json, raw, request, response, text, urlencoded };
@@ -1 +1,2 @@
1
- export { default } from 'lodash';
1
+ import lodash_default from "lodash";
2
+ export { lodash_default as default };
@@ -1 +1,3 @@
1
- export { default } from 'lodash';
1
+ import lodash_default from "lodash";
2
+
3
+ export { lodash_default as default };
@@ -1,2 +1,3 @@
1
- export * from 'log4js';
2
- export { default } from 'log4js';
1
+ import log4js_default from "log4js";
2
+ export * from "log4js";
3
+ export { log4js_default as default };
@@ -1,2 +1,5 @@
1
- export * from 'log4js';
2
- export { default } from 'log4js';
1
+ import log4js_default from "log4js";
2
+
3
+ export * from "log4js"
4
+
5
+ export { log4js_default as default };
@@ -1 +1,2 @@
1
- export { default } from 'moment';
1
+ import moment_default from "moment";
2
+ export { moment_default as default };
@@ -1 +1,3 @@
1
- export { default } from 'moment';
1
+ import moment_default from "moment";
2
+
3
+ export { moment_default as default };
@@ -1,2 +1,3 @@
1
- export * from 'node-schedule';
2
- export { default } from 'node-schedule';
1
+ import node_schedule_default from "node-schedule";
2
+ export * from "node-schedule";
3
+ export { node_schedule_default as default };
@@ -1,2 +1,5 @@
1
- export * from 'node-schedule';
2
- export { default } from 'node-schedule';
1
+ import node_schedule_default from "node-schedule";
2
+
3
+ export * from "node-schedule"
4
+
5
+ export { node_schedule_default as default };
@@ -1,2 +1,3 @@
1
- export * from 'redis';
2
- export { default } from 'redis';
1
+ import redis_default from "redis";
2
+ export * from "redis";
3
+ export { redis_default as default };
@@ -1,2 +1,5 @@
1
- export * from 'redis';
2
- export { default } from 'redis';
1
+ import redis_default from "redis";
2
+
3
+ export * from "redis"
4
+
5
+ export { redis_default as default };
@@ -1,2 +1,3 @@
1
- export * from 'sqlite3';
2
- export { default } from 'sqlite3';
1
+ import sqlite3_default from "sqlite3";
2
+ export * from "sqlite3";
3
+ export { sqlite3_default as default };
@@ -1,2 +1,5 @@
1
- export * from 'sqlite3';
2
- export { default } from 'sqlite3';
1
+ import sqlite3_default from "sqlite3";
2
+
3
+ export * from "sqlite3"
4
+
5
+ export { sqlite3_default as default };
@@ -1,2 +1,3 @@
1
- export * from 'ws';
2
- export { default } from 'ws';
1
+ import ws_default from "ws";
2
+ export * from "ws";
3
+ export { ws_default as default };
@@ -1,2 +1,5 @@
1
- export * from 'ws';
2
- export { default } from 'ws';
1
+ import ws_default from "ws";
2
+
3
+ export * from "ws"
4
+
5
+ export { ws_default as default };
@@ -1,2 +1,3 @@
1
- export * from 'yaml';
2
- export { default } from 'yaml';
1
+ import yaml_default from "yaml";
2
+ export * from "yaml";
3
+ export { yaml_default as default };
@@ -1,2 +1,5 @@
1
- export * from 'yaml';
2
- export { default } from 'yaml';
1
+ import yaml_default from "yaml";
2
+
3
+ export * from "yaml"
4
+
5
+ export { yaml_default as default };
@@ -0,0 +1,70 @@
1
+ import { t as __exportAll } from "./chunk-NzVPYdc1.mjs";
2
+
3
+ //#region src/service/task/queue.ts
4
+ var queue_exports = /* @__PURE__ */ __exportAll({
5
+ executeTask: () => executeTask,
6
+ getTaskCallback: () => getTaskCallback,
7
+ removeTaskCallback: () => removeTaskCallback,
8
+ setTaskCallback: () => setTaskCallback
9
+ });
10
+ /**
11
+ * 任务回调函数存储
12
+ */
13
+ const taskCallbacks = /* @__PURE__ */ new Map();
14
+ /**
15
+ * 设置任务回调函数
16
+ * @param taskId - 任务ID
17
+ * @param executor - 任务执行函数
18
+ */
19
+ const setTaskCallback = (taskId, executor) => {
20
+ taskCallbacks.set(taskId, executor);
21
+ };
22
+ /**
23
+ * 获取任务回调函数
24
+ * @param taskId - 任务ID
25
+ * @returns 对应任务的执行函数,如果未找到返回undefined
26
+ */
27
+ const getTaskCallback = (taskId) => {
28
+ return taskCallbacks.get(taskId);
29
+ };
30
+ /**
31
+ * 删除任务回调函数
32
+ * @param taskId - 任务ID
33
+ * @returns 是否成功删除
34
+ */
35
+ const removeTaskCallback = (taskId) => {
36
+ return taskCallbacks.delete(taskId);
37
+ };
38
+ /**
39
+ * 执行任务
40
+ * @param task - 任务实体
41
+ * @param emitLog - 日志回调
42
+ * @param emitStatus - 状态回调
43
+ * @returns 执行是否成功的Promise
44
+ */
45
+ const executeTask = async (task, emitLog, emitStatus) => {
46
+ /** 通知状态为运行中 */
47
+ emitStatus("running");
48
+ try {
49
+ const callback = taskCallbacks.get(task.id);
50
+ if (!callback) {
51
+ emitLog(`未找到任务 ${task.id} 的回调函数`);
52
+ emitStatus("failed");
53
+ return false;
54
+ }
55
+ emitLog(`开始执行任务: ${task.name} (目标: ${task.target})\n`);
56
+ /** 执行任务回调 */
57
+ const result = await callback(task, emitLog);
58
+ /** 根据结果设置状态 */
59
+ emitStatus(result ? "success" : "failed");
60
+ if (typeof result === "boolean") return result;
61
+ throw new Error("任务执行器返回值类型错误");
62
+ } catch (error) {
63
+ emitLog(`执行任务出错: ${error instanceof Error ? error.message : String(error)}\n`);
64
+ emitStatus("failed");
65
+ return false;
66
+ }
67
+ };
68
+
69
+ //#endregion
70
+ export { setTaskCallback as a, removeTaskCallback as i, getTaskCallback as n, queue_exports as r, executeTask as t };