@dayinxisheng/novel-tools 0.1.0 → 0.2.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.
@@ -0,0 +1,314 @@
1
+ import { FileUtils } from '../core/file.js';
2
+ import * as path from 'path';
3
+ /**
4
+ * 临时设定服务类
5
+ * 管理待审核的临时设定,包括人物和元素
6
+ */
7
+ export class TempSettingService {
8
+ REVIEW_QUEUE_FILE = 'temp_settings/review_queue.json';
9
+ PENDING_CHARACTERS_DIR = 'temp_settings/pending_characters';
10
+ PENDING_ELEMENTS_DIR = 'temp_settings/pending_elements';
11
+ CHARACTERS_DIR = 'characters/cards';
12
+ SETTINGS_DIR = 'settings/elements';
13
+ /**
14
+ * 添加临时设定
15
+ */
16
+ async addTempSetting(projectPath, options) {
17
+ const timestamp = new Date().toISOString();
18
+ // 创建临时设定项
19
+ const tempItem = {
20
+ type: options.type,
21
+ name: options.name,
22
+ description: options.description || '',
23
+ chapter: options.chapter,
24
+ addedAt: timestamp
25
+ };
26
+ // 生成临时文件
27
+ const tempFilePath = await this.generateTempFile(projectPath, tempItem);
28
+ // 更新审核队列
29
+ await this.updateReviewQueue(projectPath, (queue) => {
30
+ const pendingItem = {
31
+ name: options.name,
32
+ type: options.type,
33
+ file: tempFilePath,
34
+ first_appear_chapter: options.chapter,
35
+ added_at: timestamp,
36
+ status: 'pending'
37
+ };
38
+ if (options.type === 'character') {
39
+ queue.pending_characters.push(pendingItem);
40
+ }
41
+ else {
42
+ queue.pending_elements.push(pendingItem);
43
+ }
44
+ });
45
+ return tempFilePath;
46
+ }
47
+ /**
48
+ * 列出待审核项
49
+ */
50
+ async listPending(projectPath, type) {
51
+ const queue = await this.getReviewQueue(projectPath);
52
+ let items = [];
53
+ if (!type) {
54
+ items = [...queue.pending_characters, ...queue.pending_elements];
55
+ }
56
+ else if (type === 'character') {
57
+ items = queue.pending_characters;
58
+ }
59
+ else {
60
+ items = queue.pending_elements.filter(item => item.type === type);
61
+ }
62
+ return items.filter(item => item.status === 'pending');
63
+ }
64
+ /**
65
+ * 获取审核队列
66
+ */
67
+ async getReviewQueue(projectPath) {
68
+ const queuePath = path.join(projectPath, this.REVIEW_QUEUE_FILE);
69
+ const data = await FileUtils.readJson(queuePath);
70
+ if (!data) {
71
+ return {
72
+ pending_characters: [],
73
+ pending_elements: [],
74
+ last_review: null
75
+ };
76
+ }
77
+ // 规范化数据格式(兼容旧格式)
78
+ const queue = {
79
+ pending_characters: this.normalizePendingItems(data.pending_characters || []),
80
+ pending_elements: this.normalizePendingItems(data.pending_elements || []),
81
+ last_review: data.last_review || null
82
+ };
83
+ return queue;
84
+ }
85
+ /**
86
+ * 规范化待审核项(兼容旧格式)
87
+ */
88
+ normalizePendingItems(items) {
89
+ return items.map(item => {
90
+ // 检查是否为旧格式(数据嵌套在 data 对象中)
91
+ if (item.data && typeof item.data === 'object') {
92
+ return {
93
+ name: item.data.name || item.name,
94
+ type: item.data.type || item.type,
95
+ file: item.data.file || item.file,
96
+ first_appear_chapter: item.data.first_appear_chapter || item.first_appear_chapter || 0,
97
+ added_at: item.added_at || new Date().toISOString(),
98
+ status: item.status || 'pending'
99
+ };
100
+ }
101
+ // 新格式
102
+ return {
103
+ name: item.name,
104
+ type: item.type,
105
+ file: item.file,
106
+ first_appear_chapter: item.first_appear_chapter || 0,
107
+ added_at: item.added_at || new Date().toISOString(),
108
+ status: item.status || 'pending'
109
+ };
110
+ });
111
+ }
112
+ /**
113
+ * 审核通过并迁移
114
+ */
115
+ async approveAndMigrate(projectPath, itemName, options) {
116
+ const queue = await this.getReviewQueue(projectPath);
117
+ // 查找待审核项
118
+ const item = this.findPendingItem(queue, itemName);
119
+ if (!item) {
120
+ throw new Error(`未找到待审核项: ${itemName}`);
121
+ }
122
+ // 迁移到正式设定
123
+ await this.migrateToFormal(projectPath, item, options);
124
+ // 从审核队列中移除
125
+ await this.removeFromQueue(projectPath, itemName);
126
+ }
127
+ /**
128
+ * 拒绝并删除
129
+ */
130
+ async rejectAndRemove(projectPath, itemName) {
131
+ const queue = await this.getReviewQueue(projectPath);
132
+ // 查找待审核项
133
+ const item = this.findPendingItem(queue, itemName);
134
+ if (!item) {
135
+ throw new Error(`未找到待审核项: ${itemName}`);
136
+ }
137
+ // 删除临时文件
138
+ const tempFilePath = path.join(projectPath, item.file);
139
+ await FileUtils.remove(tempFilePath);
140
+ // 从审核队列中移除
141
+ await this.removeFromQueue(projectPath, itemName);
142
+ }
143
+ /**
144
+ * 交互式审核
145
+ */
146
+ async reviewInteractive(projectPath) {
147
+ const { createInterface } = await import('readline');
148
+ const rl = createInterface({
149
+ input: process.stdin,
150
+ output: process.stdout
151
+ });
152
+ const question = (prompt) => {
153
+ return new Promise(resolve => {
154
+ rl.question(prompt, resolve);
155
+ });
156
+ };
157
+ try {
158
+ const items = await this.listPending(projectPath);
159
+ if (items.length === 0) {
160
+ console.log('没有待审核的设定');
161
+ return;
162
+ }
163
+ for (const item of items) {
164
+ console.log(`\n审核: ${item.name} (${item.type}, 第${item.first_appear_chapter}章)`);
165
+ console.log('1. 查看详情');
166
+ console.log('2. 批准并迁移');
167
+ console.log('3. 拒绝并删除');
168
+ console.log('4. 跳过');
169
+ const choice = await question('选择? [1-4]: ');
170
+ switch (choice) {
171
+ case '1': {
172
+ const tempPath = path.join(projectPath, item.file);
173
+ const content = await FileUtils.readText(tempPath);
174
+ console.log('\n' + content);
175
+ await question('\n按 Enter 继续...');
176
+ break;
177
+ }
178
+ case '2': {
179
+ const migrateType = await question('迁移类型 (character/element)? [character]: ');
180
+ const options = {
181
+ toCharacter: migrateType === 'character' || migrateType === '',
182
+ toElement: migrateType === 'element'
183
+ };
184
+ await this.approveAndMigrate(projectPath, item.name, options);
185
+ console.log(`✓ 已迁移 ${item.name}`);
186
+ break;
187
+ }
188
+ case '3': {
189
+ await this.rejectAndRemove(projectPath, item.name);
190
+ console.log(`✓ 已删除 ${item.name}`);
191
+ break;
192
+ }
193
+ case '4':
194
+ console.log('跳过');
195
+ break;
196
+ default:
197
+ console.log('无效选择,跳过');
198
+ }
199
+ }
200
+ // 更新最后审核时间
201
+ await this.updateReviewQueue(projectPath, (queue) => {
202
+ queue.last_review = new Date().toISOString();
203
+ });
204
+ }
205
+ finally {
206
+ rl.close();
207
+ }
208
+ }
209
+ /**
210
+ * 生成临时设定文件
211
+ */
212
+ async generateTempFile(projectPath, item) {
213
+ const isCharacter = item.type === 'character';
214
+ const dir = isCharacter ? this.PENDING_CHARACTERS_DIR : this.PENDING_ELEMENTS_DIR;
215
+ const fileName = `${item.name}.md`;
216
+ const filePath = path.join(projectPath, dir, fileName);
217
+ // 确保目录存在
218
+ await FileUtils.ensureDir(path.join(projectPath, dir));
219
+ // 生成文件内容
220
+ const content = this.generateTempFileContent(item);
221
+ await FileUtils.writeText(filePath, content);
222
+ return path.relative(projectPath, filePath);
223
+ }
224
+ /**
225
+ * 生成临时文件内容
226
+ */
227
+ generateTempFileContent(item) {
228
+ const date = new Date(item.addedAt).toLocaleString('zh-CN');
229
+ return `# ${item.name}
230
+
231
+ ## 临时设定
232
+
233
+ **状态**: 待审核
234
+ **类型**: ${this.getTypeLabel(item.type)}
235
+ **首次出场**: 第 ${item.chapter} 章
236
+ **添加时间**: ${date}
237
+
238
+ ## 基本信息
239
+
240
+ ${item.description || '暂无描述'}
241
+
242
+ ## 待确认
243
+
244
+ - [ ] 是否与原作冲突(同人)
245
+ - [ ] 设定是否合理
246
+ - [ ] 是否需要补充详情
247
+
248
+ ---
249
+ *此文件由 novel-tools 自动生成,审核后请手动整理到正式设定目录*
250
+ `;
251
+ }
252
+ /**
253
+ * 获取类型标签
254
+ */
255
+ getTypeLabel(type) {
256
+ const labels = {
257
+ character: '人物',
258
+ location: '地点',
259
+ item: '物品',
260
+ skill: '技能',
261
+ other: '其他'
262
+ };
263
+ return labels[type] || type;
264
+ }
265
+ /**
266
+ * 迁移到正式设定
267
+ */
268
+ async migrateToFormal(projectPath, item, options) {
269
+ // 读取临时文件
270
+ const tempFilePath = path.join(projectPath, item.file);
271
+ const content = await FileUtils.readText(tempFilePath);
272
+ let targetPath;
273
+ if (options.customPath) {
274
+ targetPath = path.join(projectPath, options.customPath);
275
+ }
276
+ else if (options.toCharacter || item.type === 'character') {
277
+ // 迁移到人物卡片
278
+ targetPath = path.join(projectPath, this.CHARACTERS_DIR, 'main', `${item.name}.md`);
279
+ }
280
+ else {
281
+ // 迁移到设定元素
282
+ targetPath = path.join(projectPath, this.SETTINGS_DIR, `${item.name}.md`);
283
+ }
284
+ // 复制到目标位置
285
+ await FileUtils.writeText(targetPath, content);
286
+ // 删除临时文件
287
+ await FileUtils.remove(tempFilePath);
288
+ }
289
+ /**
290
+ * 从审核队列中移除
291
+ */
292
+ async removeFromQueue(projectPath, itemName) {
293
+ await this.updateReviewQueue(projectPath, (queue) => {
294
+ queue.pending_characters = queue.pending_characters.filter(i => i.name !== itemName);
295
+ queue.pending_elements = queue.pending_elements.filter(i => i.name !== itemName);
296
+ });
297
+ }
298
+ /**
299
+ * 查找待审核项
300
+ */
301
+ findPendingItem(queue, itemName) {
302
+ return [...queue.pending_characters, ...queue.pending_elements].find(item => item.name === itemName && item.status === 'pending');
303
+ }
304
+ /**
305
+ * 更新审核队列
306
+ */
307
+ async updateReviewQueue(projectPath, updater) {
308
+ const queue = await this.getReviewQueue(projectPath);
309
+ updater(queue);
310
+ const queuePath = path.join(projectPath, this.REVIEW_QUEUE_FILE);
311
+ await FileUtils.writeJson(queuePath, queue);
312
+ }
313
+ }
314
+ //# sourceMappingURL=temp-setting.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temp-setting.service.js","sourceRoot":"","sources":["../../src/services/temp-setting.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dayinxisheng/novel-tools",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "小说创作辅助工具集 - TypeScript 实现",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",