mira-app-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/HttpRouter.d.ts +17 -0
  2. package/dist/HttpRouter.d.ts.map +1 -0
  3. package/dist/HttpRouter.js +217 -0
  4. package/dist/HttpRouter.js.map +1 -0
  5. package/dist/HttpServer.d.ts +24 -0
  6. package/dist/HttpServer.d.ts.map +1 -0
  7. package/dist/HttpServer.js +55 -0
  8. package/dist/HttpServer.js.map +1 -0
  9. package/dist/ILibraryServerData.d.ts +63 -0
  10. package/dist/ILibraryServerData.d.ts.map +1 -0
  11. package/dist/ILibraryServerData.js +3 -0
  12. package/dist/ILibraryServerData.js.map +1 -0
  13. package/dist/LibraryList.d.ts +9 -0
  14. package/dist/LibraryList.d.ts.map +1 -0
  15. package/dist/LibraryList.js +29 -0
  16. package/dist/LibraryList.js.map +1 -0
  17. package/dist/LibraryServerDataSQLite.d.ts +96 -0
  18. package/dist/LibraryServerDataSQLite.d.ts.map +1 -0
  19. package/dist/LibraryServerDataSQLite.js +683 -0
  20. package/dist/LibraryServerDataSQLite.js.map +1 -0
  21. package/dist/LibraryStorage.d.ts +14 -0
  22. package/dist/LibraryStorage.d.ts.map +1 -0
  23. package/dist/LibraryStorage.js +45 -0
  24. package/dist/LibraryStorage.js.map +1 -0
  25. package/dist/MessageHandler.d.ts +16 -0
  26. package/dist/MessageHandler.d.ts.map +1 -0
  27. package/dist/MessageHandler.js +35 -0
  28. package/dist/MessageHandler.js.map +1 -0
  29. package/dist/ServerExample.d.ts +33 -0
  30. package/dist/ServerExample.d.ts.map +1 -0
  31. package/dist/ServerExample.js +87 -0
  32. package/dist/ServerExample.js.map +1 -0
  33. package/dist/ServerPlugin.d.ts +20 -0
  34. package/dist/ServerPlugin.d.ts.map +1 -0
  35. package/dist/ServerPlugin.js +79 -0
  36. package/dist/ServerPlugin.js.map +1 -0
  37. package/dist/ServerPluginManager.d.ts +30 -0
  38. package/dist/ServerPluginManager.d.ts.map +1 -0
  39. package/dist/ServerPluginManager.js +112 -0
  40. package/dist/ServerPluginManager.js.map +1 -0
  41. package/dist/WebSocketRouter.d.ts +18 -0
  42. package/dist/WebSocketRouter.d.ts.map +1 -0
  43. package/dist/WebSocketRouter.js +31 -0
  44. package/dist/WebSocketRouter.js.map +1 -0
  45. package/dist/WebSocketServer.d.ts +23 -0
  46. package/dist/WebSocketServer.d.ts.map +1 -0
  47. package/dist/WebSocketServer.js +162 -0
  48. package/dist/WebSocketServer.js.map +1 -0
  49. package/dist/event-manager.d.ts +85 -0
  50. package/dist/event-manager.d.ts.map +1 -0
  51. package/dist/event-manager.js +142 -0
  52. package/dist/event-manager.js.map +1 -0
  53. package/dist/handlers/FileHandler.d.ts +10 -0
  54. package/dist/handlers/FileHandler.d.ts.map +1 -0
  55. package/dist/handlers/FileHandler.js +55 -0
  56. package/dist/handlers/FileHandler.js.map +1 -0
  57. package/dist/handlers/FolderHandler.d.ts +10 -0
  58. package/dist/handlers/FolderHandler.d.ts.map +1 -0
  59. package/dist/handlers/FolderHandler.js +59 -0
  60. package/dist/handlers/FolderHandler.js.map +1 -0
  61. package/dist/handlers/LibraryHandler.d.ts +10 -0
  62. package/dist/handlers/LibraryHandler.d.ts.map +1 -0
  63. package/dist/handlers/LibraryHandler.js +49 -0
  64. package/dist/handlers/LibraryHandler.js.map +1 -0
  65. package/dist/handlers/MessageHandler.d.ts +15 -0
  66. package/dist/handlers/MessageHandler.d.ts.map +1 -0
  67. package/dist/handlers/MessageHandler.js +32 -0
  68. package/dist/handlers/MessageHandler.js.map +1 -0
  69. package/dist/handlers/PluginMessageHandler.d.ts +10 -0
  70. package/dist/handlers/PluginMessageHandler.d.ts.map +1 -0
  71. package/dist/handlers/PluginMessageHandler.js +21 -0
  72. package/dist/handlers/PluginMessageHandler.js.map +1 -0
  73. package/dist/handlers/TagHandler.d.ts +10 -0
  74. package/dist/handlers/TagHandler.d.ts.map +1 -0
  75. package/dist/handlers/TagHandler.js +59 -0
  76. package/dist/handlers/TagHandler.js.map +1 -0
  77. package/dist/index.d.ts +39 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +58 -0
  80. package/dist/index.js.map +1 -0
  81. package/package.json +32 -0
  82. package/src/HttpRouter.ts +236 -0
  83. package/src/HttpServer.ts +72 -0
  84. package/src/ILibraryServerData.ts +70 -0
  85. package/src/LibraryList.ts +26 -0
  86. package/src/LibraryServerDataSQLite.ts +778 -0
  87. package/src/LibraryStorage.ts +55 -0
  88. package/src/MessageHandler.ts +41 -0
  89. package/src/ServerExample.ts +72 -0
  90. package/src/ServerPlugin.ts +56 -0
  91. package/src/ServerPluginManager.ts +106 -0
  92. package/src/WebSocketRouter.ts +46 -0
  93. package/src/WebSocketServer.ts +206 -0
  94. package/src/event-manager.ts +191 -0
  95. package/src/handlers/FileHandler.ts +61 -0
  96. package/src/handlers/FolderHandler.ts +65 -0
  97. package/src/handlers/LibraryHandler.ts +55 -0
  98. package/src/handlers/MessageHandler.ts +37 -0
  99. package/src/handlers/PluginMessageHandler.ts +27 -0
  100. package/src/handlers/TagHandler.ts +66 -0
  101. package/src/index.ts +44 -0
  102. package/tsconfig.json +23 -0
@@ -0,0 +1,17 @@
1
+ import { Router, Handler } from 'express';
2
+ import { MiraBackend } from './ServerExample';
3
+ export declare class HttpRouter {
4
+ private router;
5
+ private registerdRounters;
6
+ private libraryServices;
7
+ backend: MiraBackend;
8
+ constructor(bakend: MiraBackend);
9
+ registerRounter(path: string, method: string, router: Handler): void;
10
+ unregisterRounter(path: string): void;
11
+ private setupRoutes;
12
+ private parseLibraryItem;
13
+ private getContentType;
14
+ getRouter(): Router;
15
+ close(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=HttpRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpRouter.d.ts","sourceRoot":"","sources":["../src/HttpRouter.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,MAAM,EAAqB,OAAO,EAAE,MAAM,SAAS,CAAC;AAKtE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAuB9C,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,iBAAiB,CAAoD;IAC7E,OAAO,CAAC,eAAe,CAAiC;IACxD,OAAO,EAAE,WAAW,CAAC;gBAET,MAAM,EAAE,WAAW;IAM/B,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAkB7D,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAI9B,OAAO,CAAC,WAAW;YA6HL,gBAAgB;IAgB9B,OAAO,CAAC,cAAc;IAwBtB,SAAS,IAAI,MAAM;IAIb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HttpRouter = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ const multer_1 = __importDefault(require("multer"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_1 = __importDefault(require("fs"));
11
+ // 配置multer文件上传
12
+ const storage = multer_1.default.diskStorage({
13
+ destination: (req, file, cb) => {
14
+ const tempDir = path_1.default.join(__dirname, '../../temp');
15
+ if (!fs_1.default.existsSync(tempDir)) {
16
+ fs_1.default.mkdirSync(tempDir, { recursive: true });
17
+ }
18
+ cb(null, tempDir);
19
+ },
20
+ filename: (req, file, cb) => {
21
+ const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
22
+ cb(null, uniqueSuffix + path_1.default.extname(file.originalname));
23
+ }
24
+ });
25
+ const upload = (0, multer_1.default)({
26
+ storage: storage,
27
+ // limits: {
28
+ // fileSize: 100 * 1024 * 1024 // 限制100MB
29
+ // }
30
+ });
31
+ class HttpRouter {
32
+ constructor(bakend) {
33
+ this.registerdRounters = new Map();
34
+ this.libraryServices = [];
35
+ this.backend = bakend;
36
+ this.router = express_1.default.Router();
37
+ this.setupRoutes();
38
+ }
39
+ registerRounter(path, method, router) {
40
+ if (this.registerdRounters.has(path)) {
41
+ return;
42
+ }
43
+ this.registerdRounters.set(path, router);
44
+ console.log('register rounter', path, method);
45
+ switch (method) {
46
+ case 'post':
47
+ this.router.post(path, router);
48
+ break;
49
+ case 'get':
50
+ this.router.get(path, router);
51
+ break;
52
+ default:
53
+ throw new Error('不支持的方法');
54
+ }
55
+ }
56
+ unregisterRounter(path) {
57
+ this.router.unlink(path);
58
+ }
59
+ setupRoutes() {
60
+ this.router.post('/libraries/:libraryId/connect', async (req, res) => {
61
+ });
62
+ this.router.get('/libraries/:libraryId/status', (req, res) => {
63
+ });
64
+ // 上传文件
65
+ this.router.post('/libraries/upload', upload.array('files'), async (req, res) => {
66
+ const { libraryId, sourcePath } = req.body; // sourcePath是用户的本地文件位置,用来验证是否上传成功
67
+ const clientId = req.body.clientId || null;
68
+ const fields = req.body.fields ? JSON.parse(req.body.fields) : null;
69
+ const payload = req.body.payload ? JSON.parse(req.body.payload) : null;
70
+ const library = this.backend.libraries.get(libraryId);
71
+ if (!library)
72
+ return res.status(404).send('Library not found');
73
+ // 解析上传的文件
74
+ const files = req.files;
75
+ if (!files || !files.length)
76
+ return res.status(400).send('No files uploaded.');
77
+ try {
78
+ const results = [];
79
+ for (const file of files) {
80
+ try {
81
+ // 确保临时目录存在
82
+ const tempDir = path_1.default.join(__dirname, '../../temp');
83
+ if (!fs_1.default.existsSync(tempDir)) {
84
+ fs_1.default.mkdirSync(tempDir, { recursive: true });
85
+ }
86
+ // 生成唯一文件名并保存文件
87
+ const originalName = Buffer.from(file.originalname, 'latin1').toString('utf8');
88
+ const tempFilePath = path_1.default.join(tempDir, `${Date.now()}-${originalName}`);
89
+ // 确保有有效的文件数据
90
+ if (file.buffer) {
91
+ await fs_1.default.promises.writeFile(tempFilePath, file.buffer);
92
+ }
93
+ else if (file.path) {
94
+ // 如果使用diskStorage,文件已保存到指定路径
95
+ await fs_1.default.promises.copyFile(file.path, tempFilePath);
96
+ }
97
+ else {
98
+ throw new Error('No valid file data available');
99
+ }
100
+ const { tags, folder_id } = payload.data || {};
101
+ const fileData = {
102
+ name: req.body.name || originalName,
103
+ tags: JSON.stringify(tags || []),
104
+ folder_id: folder_id || null,
105
+ };
106
+ const result = await library.createFileFromPath(tempFilePath, fileData, { importType: 'move' }); // 使用move上传完成后自动删除临时文件
107
+ results.push({
108
+ success: true,
109
+ file: tempFilePath,
110
+ result
111
+ });
112
+ // 发布公告
113
+ this.backend.webSocketServer.broadcastPluginEvent('file::created', {
114
+ message: {
115
+ type: 'file',
116
+ action: 'create',
117
+ fields, payload
118
+ }, result, libraryId
119
+ });
120
+ if (clientId) {
121
+ const ws = this.backend.webSocketServer.getWsClientById(libraryId, clientId);
122
+ ws && this.backend.webSocketServer.sendToWebsocket(ws, { eventName: 'file::uploaded', data: { path: sourcePath } });
123
+ this.backend.webSocketServer.broadcastLibraryEvent(libraryId, 'file::created', { ...result, libraryId });
124
+ }
125
+ }
126
+ catch (error) {
127
+ results.push({
128
+ success: false,
129
+ file: file.path,
130
+ error: error instanceof Error ? error.message : String(error)
131
+ });
132
+ }
133
+ }
134
+ res.send({ results });
135
+ }
136
+ catch (error) {
137
+ console.error('Error uploading files:', error);
138
+ res.status(500).send('Internal server error while processing the upload.');
139
+ }
140
+ });
141
+ // 添加文件流路由
142
+ this.router.get('/thumb/:libraryId/:id', async (req, res) => {
143
+ try {
144
+ const ret = await this.parseLibraryItem(req, res);
145
+ if (ret) {
146
+ const thumbPath = await ret.library.getItemThumbPath(ret.item, { isNetworkImage: false });
147
+ if (!fs_1.default.existsSync(thumbPath))
148
+ return res.status(404).send('Thumbnail not found');
149
+ res.setHeader('Content-Type', 'image/png');
150
+ fs_1.default.createReadStream(thumbPath).pipe(res);
151
+ }
152
+ }
153
+ catch (err) {
154
+ console.error('Error serving thumbnail:', err);
155
+ res.status(500).send('Internal server error');
156
+ }
157
+ });
158
+ this.router.get('/file/:libraryId/:id', async (req, res) => {
159
+ const ret = await this.parseLibraryItem(req, res);
160
+ if (ret) {
161
+ const filePath = await ret.library.getItemFilePath(ret.item);
162
+ if (!filePath || !fs_1.default.existsSync(filePath)) {
163
+ return res.status(404).send('File not found');
164
+ }
165
+ const fileExt = path_1.default.extname(filePath).toLowerCase();
166
+ const contentType = this.getContentType(fileExt);
167
+ res.setHeader('Content-Type', contentType);
168
+ fs_1.default.createReadStream(filePath).pipe(res);
169
+ }
170
+ });
171
+ }
172
+ async parseLibraryItem(req, res) {
173
+ const { libraryId, id } = req.params;
174
+ const library = this.backend.libraries.get(libraryId);
175
+ if (!library) {
176
+ res.status(404).send('Library not found');
177
+ return;
178
+ }
179
+ const item = await library.getFile(parseInt(id));
180
+ if (!item) {
181
+ res.status(404).send('Item not found');
182
+ return;
183
+ }
184
+ return { library, item };
185
+ }
186
+ getContentType(ext) {
187
+ const mimeTypes = {
188
+ '.png': 'image/png',
189
+ '.jpg': 'image/jpeg',
190
+ '.jpeg': 'image/jpeg',
191
+ '.gif': 'image/gif',
192
+ '.pdf': 'application/pdf',
193
+ '.txt': 'text/plain',
194
+ '.html': 'text/html',
195
+ '.json': 'application/json',
196
+ '.mp4': 'video/mp4',
197
+ '.mp3': 'audio/mpeg',
198
+ '.zip': 'application/zip',
199
+ '.doc': 'application/msword',
200
+ '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
201
+ '.xls': 'application/vnd.ms-excel',
202
+ '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
203
+ '.ppt': 'application/vnd.ms-powerpoint',
204
+ '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
205
+ };
206
+ return mimeTypes[ext] || 'application/octet-stream';
207
+ }
208
+ getRouter() {
209
+ return this.router;
210
+ }
211
+ async close() {
212
+ await Promise.all(this.libraryServices.map(service => service.close()));
213
+ this.libraryServices = [];
214
+ }
215
+ }
216
+ exports.HttpRouter = HttpRouter;
217
+ //# sourceMappingURL=HttpRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpRouter.js","sourceRoot":"","sources":["../src/HttpRouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { HttpRouter } from "./HttpRouter";
2
+ import { Express } from 'express';
3
+ import http from 'http';
4
+ import { LibraryStorage } from "./LibraryStorage";
5
+ import { MiraBackend } from "./ServerExample";
6
+ export declare class MiraHttpServer {
7
+ httpRouter: HttpRouter;
8
+ server: http.Server;
9
+ port: number;
10
+ app: Express;
11
+ backend: MiraBackend;
12
+ libraries: LibraryStorage;
13
+ getRouter(): HttpRouter;
14
+ constructor(port: number, backend: MiraBackend);
15
+ request(options: {
16
+ method: string;
17
+ url: string;
18
+ headers?: Record<string, string>;
19
+ data?: any;
20
+ }): Promise<any>;
21
+ getPublicURL(url: string): string;
22
+ stop(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=HttpServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpServer.d.ts","sourceRoot":"","sources":["../src/HttpServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9C,qBAAa,cAAc;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,cAAc,CAAC;IAE3B,SAAS,IAAI,UAAU;gBAEX,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW;IAoBxC,OAAO,CAAC,OAAO,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,GAAG,CAAC;KACd,GAAG,OAAO,CAAC,GAAG,CAAC;IAiBhB,YAAY,CAAC,GAAG,EAAE,MAAM;IAIlB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAM9B"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MiraHttpServer = void 0;
7
+ const HttpRouter_1 = require("./HttpRouter");
8
+ const http_1 = __importDefault(require("http"));
9
+ const express_1 = __importDefault(require("express"));
10
+ const axios_1 = __importDefault(require("axios"));
11
+ class MiraHttpServer {
12
+ getRouter() { return this.httpRouter; }
13
+ constructor(port, backend) {
14
+ this.port = port;
15
+ this.backend = backend;
16
+ this.libraries = backend.libraries;
17
+ // 创建Express应用
18
+ this.app = (0, express_1.default)();
19
+ this.port = port;
20
+ this.httpRouter = new HttpRouter_1.HttpRouter(backend);
21
+ this.app.use(express_1.default.json());
22
+ this.server = http_1.default.createServer(this.app);
23
+ this.app.use('/api', this.httpRouter.getRouter());
24
+ // 启动HTTP服务器
25
+ this.server.listen(this.port, () => {
26
+ console.log(`HTTP server running on port ${this.port}`);
27
+ });
28
+ }
29
+ async request(options) {
30
+ try {
31
+ const response = await axios_1.default.request({
32
+ method: options.method,
33
+ url: options.url,
34
+ headers: options.headers,
35
+ data: options.data
36
+ });
37
+ return response.data;
38
+ }
39
+ catch (error) {
40
+ if (axios_1.default.isAxiosError(error)) {
41
+ throw new Error(`Request failed: ${error.message}`);
42
+ }
43
+ throw error;
44
+ }
45
+ }
46
+ getPublicURL(url) {
47
+ return `http://127.0.0.1:${this.port}/${url}`;
48
+ }
49
+ async stop() {
50
+ this.server.close();
51
+ this.httpRouter.close();
52
+ }
53
+ }
54
+ exports.MiraHttpServer = MiraHttpServer;
55
+ //# sourceMappingURL=HttpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpServer.js","sourceRoot":"","sources":["../src/HttpServer.ts"],"names":[],"mappings":";;;;;;AAAA,6CAA0C;AAE1C,gDAAwB;AACxB,sDAA8B;AAG9B,kDAA0B;AAG1B,MAAa,cAAc;IAQvB,SAAS,KAAiB,OAAO,IAAI,CAAC,UAAU,CAAA,CAAC,CAAC;IAElD,YAAY,IAAY,EAAE,OAAoB;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAEnC,cAAc;QACd,IAAI,CAAC,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7B,IAAI,CAAC,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;QAElD,YAAY;QACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAKb;QACG,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,OAAO,CAAC;gBACjC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;aACrB,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,YAAY,CAAC,GAAW;QACpB,OAAO,oBAAoB,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,IAAI;QACN,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CAGJ;AA9DD,wCA8DC"}
@@ -0,0 +1,63 @@
1
+ import { EventManager } from "./event-manager";
2
+ export interface ILibraryServerData {
3
+ initialize(): Promise<void>;
4
+ createFile(fileData: Record<string, any>): Promise<Record<string, any>>;
5
+ updateFile(id: number, fileData: Record<string, any>): Promise<boolean>;
6
+ deleteFile(id: number, options?: {
7
+ moveToRecycleBin: boolean;
8
+ }): Promise<boolean>;
9
+ recoverFile(id: number): Promise<boolean>;
10
+ getFile(id: number): Promise<Record<string, any> | null>;
11
+ getFiles(options?: {
12
+ select?: string;
13
+ filters?: Record<string, any>;
14
+ isUrlFile?: boolean;
15
+ }): Promise<{
16
+ result: Record<string, any>[];
17
+ limit: number;
18
+ offset: number;
19
+ total: number;
20
+ }>;
21
+ createFolder(folderData: Record<string, any>): Promise<number>;
22
+ updateFolder(id: number, folderData: Record<string, any>): Promise<boolean>;
23
+ deleteFolder(id: number): Promise<boolean>;
24
+ getFolder(id: number): Promise<Record<string, any> | null>;
25
+ getFolders(options?: {
26
+ parentId?: number;
27
+ limit?: number;
28
+ offset?: number;
29
+ }): Promise<Record<string, any>[]>;
30
+ createTag(tagData: Record<string, any>): Promise<number>;
31
+ updateTag(id: number, tagData: Record<string, any>): Promise<boolean>;
32
+ deleteTag(id: number): Promise<boolean>;
33
+ getTag(id: number): Promise<Record<string, any> | null>;
34
+ getTags(options?: {
35
+ parentId?: number;
36
+ limit?: number;
37
+ offset?: number;
38
+ }): Promise<Record<string, any>[]>;
39
+ beginTransaction(): Promise<void>;
40
+ commitTransaction(): Promise<void>;
41
+ rollbackTransaction(): Promise<void>;
42
+ close(): Promise<void>;
43
+ createFileFromPath(filePath: string, fileMeta: Record<string, any>, options?: {
44
+ importType: string;
45
+ }): Promise<Record<string, any>>;
46
+ getFileFolder(fileId: number): Promise<Record<string, any>[]>;
47
+ getFileTags(fileId: number): Promise<Record<string, any>[]>;
48
+ setFileFolder(fileId: number, folderId: string): Promise<boolean>;
49
+ setFileTags(fileId: number, tagIds: string[]): Promise<boolean>;
50
+ getAllTags(): Promise<Record<string, any>[]>;
51
+ getAllFolders(): Promise<Record<string, any>[]>;
52
+ getLibraryId(): string;
53
+ getItemPath(item: Record<string, any>): Promise<string>;
54
+ getItemFilePath(item: Record<string, any>, options?: {
55
+ isUrlFile: boolean;
56
+ }): Promise<string>;
57
+ getItemThumbPath(item: Record<string, any>, options?: {
58
+ isUrlFile: boolean;
59
+ }): Promise<string>;
60
+ getEventManager(): EventManager | undefined;
61
+ getLibraryInfo(): Promise<Record<string, any>>;
62
+ }
63
+ //# sourceMappingURL=ILibraryServerData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ILibraryServerData.d.ts","sourceRoot":"","sources":["../src/ILibraryServerData.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ILibraryServerData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ILibraryServerData.js","sourceRoot":"","sources":["../src/ILibraryServerData.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 获取目录下的librarys.json文件内容
3
+ * @param dirPath 目录路径
4
+ * @returns 返回解析后的JSON对象
5
+ * @throws 当文件不存在或JSON解析失败时抛出错误
6
+ */
7
+ declare function getLibrarysJson(dirPath?: string): Promise<any>;
8
+ export { getLibrarysJson };
9
+ //# sourceMappingURL=LibraryList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LibraryList.d.ts","sourceRoot":"","sources":["../src/LibraryList.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,iBAAe,eAAe,CAAC,OAAO,GAAE,MAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAgBnE;AAGD,OAAO,EAAC,eAAe,EAAC,CAAA"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLibrarysJson = getLibrarysJson;
4
+ /**
5
+ * 获取目录下的librarys.json文件内容
6
+ * @param dirPath 目录路径
7
+ * @returns 返回解析后的JSON对象
8
+ * @throws 当文件不存在或JSON解析失败时抛出错误
9
+ */
10
+ async function getLibrarysJson(dirPath = './') {
11
+ const fs = require('fs').promises;
12
+ const path = require('path');
13
+ try {
14
+ const filePath = path.join(dirPath, 'librarys.json');
15
+ try {
16
+ await fs.access(filePath);
17
+ }
18
+ catch {
19
+ await fs.writeFile(filePath, '[]', 'utf8');
20
+ }
21
+ const data = await fs.readFile(filePath, 'utf8');
22
+ return JSON.parse(data);
23
+ }
24
+ catch (err) {
25
+ console.error(err);
26
+ return [];
27
+ }
28
+ }
29
+ //# sourceMappingURL=LibraryList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LibraryList.js","sourceRoot":"","sources":["../src/LibraryList.ts"],"names":[],"mappings":";;AAyBQ,0CAAe;AAzBvB;;;;;GAKG;AACH,KAAK,UAAU,eAAe,CAAC,UAAkB,IAAI;IACjD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACrD,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACL,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC"}
@@ -0,0 +1,96 @@
1
+ import { ILibraryServerData } from './ILibraryServerData';
2
+ import { EventManager } from './event-manager';
3
+ import { ServerPluginManager } from './ServerPluginManager';
4
+ import { MiraHttpServer } from './HttpServer';
5
+ export declare class LibraryServerDataSQLite implements ILibraryServerData {
6
+ private db;
7
+ private inTransaction;
8
+ private enableHash;
9
+ private readonly websocketServer;
10
+ eventManager: EventManager | undefined;
11
+ readonly config: Record<string, any>;
12
+ pluginManager: ServerPluginManager | undefined;
13
+ httpServer: MiraHttpServer | undefined;
14
+ private initializePlugins;
15
+ constructor(config: Record<string, any>, opts: any);
16
+ initialize(): Promise<void>;
17
+ createFile(fileData: Record<string, any>): Promise<Record<string, any>>;
18
+ updateFile(id: number, fileData: Record<string, any>): Promise<boolean>;
19
+ deleteFile(id: number, options?: {
20
+ moveToRecycleBin: boolean;
21
+ }): Promise<boolean>;
22
+ recoverFile(id: number): Promise<boolean>;
23
+ getFile(id: number): Promise<Record<string, any> | null>;
24
+ getFiles(options?: {
25
+ select?: string;
26
+ filters?: Record<string, any>;
27
+ isUrlFile?: boolean;
28
+ }): Promise<{
29
+ result: Record<string, any>[];
30
+ limit: number;
31
+ offset: number;
32
+ total: number;
33
+ }>;
34
+ createFolder(folderData: Record<string, any>): Promise<number>;
35
+ updateFolder(id: number, folderData: Record<string, any>): Promise<boolean>;
36
+ deleteFolder(id: number): Promise<boolean>;
37
+ getFolder(id: number): Promise<Record<string, any> | null>;
38
+ findFolderByName(name: string, parentId?: number | null): Promise<Record<string, any> | null>;
39
+ getFolders(options?: {
40
+ parentId?: number;
41
+ limit?: number;
42
+ offset?: number;
43
+ }): Promise<Record<string, any>[]>;
44
+ createTag(tagData: Record<string, any>): Promise<number>;
45
+ updateTag(id: number, tagData: Record<string, any>): Promise<boolean>;
46
+ deleteTag(id: number): Promise<boolean>;
47
+ getTag(id: number): Promise<Record<string, any> | null>;
48
+ getTags(options?: {
49
+ parentId?: number;
50
+ limit?: number;
51
+ offset?: number;
52
+ }): Promise<Record<string, any>[]>;
53
+ beginTransaction(): Promise<void>;
54
+ commitTransaction(): Promise<void>;
55
+ rollbackTransaction(): Promise<void>;
56
+ close(): Promise<void>;
57
+ createFileFromPath(filePath: string, fileMeta: Record<string, any>, options?: {
58
+ importType: string;
59
+ }): Promise<Record<string, any>>;
60
+ getFileFolder(fileId: number): Promise<Record<string, any>[]>;
61
+ getFileTags(fileId: number): Promise<Record<string, any>[]>;
62
+ setFileFolder(fileId: number, folderId: string): Promise<boolean>;
63
+ setFileTags(fileId: number, tagIds: string[]): Promise<boolean>;
64
+ getAllTags(): Promise<Record<string, any>[]>;
65
+ getAllFolders(): Promise<Record<string, any>[]>;
66
+ getLibraryId(): string;
67
+ getItemPath(item: Record<string, any>): Promise<string>;
68
+ getItemFilePath(item: Record<string, any>, options?: {
69
+ isUrlFile: boolean;
70
+ }): Promise<string>;
71
+ getItemThumbPath(item: Record<string, any>, options?: {
72
+ isUrlFile: boolean;
73
+ }): Promise<string>;
74
+ getEventManager(): EventManager | undefined;
75
+ private rowToMap;
76
+ private calculateFileHashSync;
77
+ private handleFile;
78
+ private getFolderName;
79
+ private executeSql;
80
+ private runSql;
81
+ private getSql;
82
+ getLibraryPath(): Promise<string>;
83
+ query(sql: string, params?: any[]): Promise<any[]>;
84
+ getLibraryInfo(): Promise<Record<string, any>>;
85
+ queryFile(query: Record<string, any>, isUrlFile?: boolean): Promise<Record<string, any>[]>;
86
+ processingFiles(files: Record<string, any>[], isUrlFile?: boolean): Promise<{
87
+ thumb: string;
88
+ path: string;
89
+ }[]>;
90
+ queryFolder(query: Record<string, any>): Promise<Record<string, any>[]>;
91
+ queryLibrary(query: Record<string, any>): Promise<Record<string, any>>;
92
+ createLibrary(data: Record<string, any>): Promise<Record<string, any>>;
93
+ closeLibrary(): Promise<boolean>;
94
+ queryTag(query: Record<string, any>): Promise<Record<string, any>[]>;
95
+ }
96
+ //# sourceMappingURL=LibraryServerDataSQLite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LibraryServerDataSQLite.d.ts","sourceRoot":"","sources":["../src/LibraryServerDataSQLite.ts"],"names":[],"mappings":"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"}