@mdfriday/foundry 25.8.5 → 25.8.6
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/dist/pkg/web/watcher/content-file-watcher.d.ts +6 -1
- package/dist/pkg/web/watcher/content-file-watcher.d.ts.map +1 -1
- package/dist/pkg/web/watcher/content-file-watcher.js +186 -10
- package/dist/pkg/web/watcher/content-file-watcher.js.map +1 -1
- package/dist/pkg/web/watcher/test-watcher.d.ts +7 -0
- package/dist/pkg/web/watcher/test-watcher.d.ts.map +1 -0
- package/dist/pkg/web/watcher/test-watcher.js +94 -0
- package/dist/pkg/web/watcher/test-watcher.js.map +1 -0
- package/dist/pkg/web/watcher/types.d.ts +21 -0
- package/dist/pkg/web/watcher/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FileChangeEvent, FileWatcher, WatcherConfig } from './types';
|
|
1
|
+
import { FileChangeEvent, FileWatcher, WatcherConfig, DiagnosticResult } from './types';
|
|
2
2
|
export declare class ContentFileWatcher implements FileWatcher {
|
|
3
3
|
private config;
|
|
4
4
|
private watcher;
|
|
@@ -6,6 +6,7 @@ export declare class ContentFileWatcher implements FileWatcher {
|
|
|
6
6
|
private batchTimer;
|
|
7
7
|
private readonly batchDelay;
|
|
8
8
|
private callbacks;
|
|
9
|
+
private readonly isElectron;
|
|
9
10
|
constructor(config: WatcherConfig);
|
|
10
11
|
startWatching(): Promise<void>;
|
|
11
12
|
onFileChange(callback: (events: FileChangeEvent[]) => Promise<void>): void;
|
|
@@ -16,5 +17,9 @@ export declare class ContentFileWatcher implements FileWatcher {
|
|
|
16
17
|
private scheduleBatch;
|
|
17
18
|
private deduplicateEvents;
|
|
18
19
|
stopWatching(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* 诊断方法:用于调试 Obsidian 环境中的文件监控问题
|
|
22
|
+
*/
|
|
23
|
+
diagnose(): Promise<DiagnosticResult>;
|
|
19
24
|
}
|
|
20
25
|
//# sourceMappingURL=content-file-watcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-file-watcher.d.ts","sourceRoot":"","sources":["../../../../pkg/web/watcher/content-file-watcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAE,WAAW,EAAE,aAAa,EAAC,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"content-file-watcher.d.ts","sourceRoot":"","sources":["../../../../pkg/web/watcher/content-file-watcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAC,MAAM,SAAS,CAAA;AAkCrF,qBAAa,kBAAmB,YAAW,WAAW;IAQxC,OAAO,CAAC,MAAM;IAP1B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,SAAS,CAA0D;IAC3E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAEhB,MAAM,EAAE,aAAa;IAYnC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAgHpC,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAK1E,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,iBAAiB;IAcnB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAenC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAgE5C"}
|
|
@@ -38,6 +38,30 @@ const chokidar = __importStar(require("chokidar"));
|
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
const log_1 = require("../../log");
|
|
40
40
|
const log = (0, log_1.getDomainLogger)('web', { component: 'content-file-watcher' });
|
|
41
|
+
// 环境检测函数
|
|
42
|
+
function isElectronEnvironment() {
|
|
43
|
+
// 检查是否在 Electron 环境中
|
|
44
|
+
if (typeof globalThis !== 'undefined' && globalThis.window && globalThis.window.process && globalThis.window.process.type) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
// 检查是否有 electron 模块
|
|
48
|
+
try {
|
|
49
|
+
require('electron');
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// electron 模块不存在
|
|
54
|
+
}
|
|
55
|
+
// 检查环境变量
|
|
56
|
+
if (typeof process !== 'undefined' && process.env && (process.env.ELECTRON_RUN_AS_NODE || process.env.ELECTRON_NO_ATTACH_CONSOLE)) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
// 检查 process.versions.electron
|
|
60
|
+
if (typeof process !== 'undefined' && process.versions && process.versions.electron) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
41
65
|
class ContentFileWatcher {
|
|
42
66
|
constructor(config) {
|
|
43
67
|
this.config = config;
|
|
@@ -46,12 +70,43 @@ class ContentFileWatcher {
|
|
|
46
70
|
this.batchTimer = null;
|
|
47
71
|
this.callbacks = [];
|
|
48
72
|
this.batchDelay = config.batchDelay || 500; // 与 Golang 版本保持一致的 500ms
|
|
73
|
+
this.isElectron = isElectronEnvironment();
|
|
74
|
+
log.info('ContentFileWatcher initialized', {
|
|
75
|
+
contentDir: config.contentDir,
|
|
76
|
+
batchDelay: this.batchDelay,
|
|
77
|
+
isElectron: this.isElectron,
|
|
78
|
+
ignorePatterns: config.ignorePatterns
|
|
79
|
+
});
|
|
49
80
|
}
|
|
50
81
|
async startWatching() {
|
|
51
82
|
if (this.watcher) {
|
|
52
83
|
await this.stopWatching();
|
|
53
84
|
}
|
|
54
|
-
|
|
85
|
+
log.info('Starting file watcher', {
|
|
86
|
+
contentDir: this.config.contentDir,
|
|
87
|
+
isElectron: this.isElectron
|
|
88
|
+
});
|
|
89
|
+
// 检查目录是否存在
|
|
90
|
+
try {
|
|
91
|
+
const fs = require('fs');
|
|
92
|
+
const stat = await fs.promises.stat(this.config.contentDir);
|
|
93
|
+
log.info('Target directory info', {
|
|
94
|
+
path: this.config.contentDir,
|
|
95
|
+
isDirectory: stat.isDirectory(),
|
|
96
|
+
isSymbolicLink: stat.isSymbolicLink(),
|
|
97
|
+
size: stat.size,
|
|
98
|
+
mode: stat.mode
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
log.error('Failed to stat content directory', {
|
|
103
|
+
contentDir: this.config.contentDir,
|
|
104
|
+
error: error?.message || String(error)
|
|
105
|
+
});
|
|
106
|
+
throw new Error(`Content directory does not exist or is not accessible: ${this.config.contentDir}`);
|
|
107
|
+
}
|
|
108
|
+
// 针对 Electron 环境的特殊配置
|
|
109
|
+
const watcherOptions = {
|
|
55
110
|
ignored: [
|
|
56
111
|
/(^|[\/\\])\../, // 隐藏文件
|
|
57
112
|
/\.tmp$/, // 临时文件
|
|
@@ -64,29 +119,81 @@ class ContentFileWatcher {
|
|
|
64
119
|
ignoreInitial: true,
|
|
65
120
|
followSymlinks: true,
|
|
66
121
|
awaitWriteFinish: {
|
|
67
|
-
stabilityThreshold: 100,
|
|
68
|
-
pollInterval: 50
|
|
69
|
-
}
|
|
70
|
-
|
|
122
|
+
stabilityThreshold: this.isElectron ? 200 : 100, // Electron 环境中增加稳定性阈值
|
|
123
|
+
pollInterval: this.isElectron ? 100 : 50
|
|
124
|
+
},
|
|
125
|
+
// Electron 环境中的额外配置
|
|
126
|
+
...(this.isElectron && {
|
|
127
|
+
usePolling: false, // 在 Electron 中优先使用原生事件
|
|
128
|
+
atomic: true, // 确保原子性写入检测
|
|
129
|
+
alwaysStat: true, // 总是获取文件状态
|
|
130
|
+
depth: 10 // 限制递归深度
|
|
131
|
+
})
|
|
132
|
+
};
|
|
133
|
+
log.info('Chokidar watcher options', watcherOptions);
|
|
134
|
+
this.watcher = chokidar.watch(this.config.contentDir, watcherOptions);
|
|
135
|
+
// 添加详细的事件监听和日志记录
|
|
71
136
|
this.watcher
|
|
72
|
-
.on('add', (filePath) =>
|
|
73
|
-
.
|
|
74
|
-
|
|
137
|
+
.on('add', (filePath) => {
|
|
138
|
+
log.debug('File added', { filePath });
|
|
139
|
+
this.queueEvent(filePath, 'created');
|
|
140
|
+
})
|
|
141
|
+
.on('change', (filePath) => {
|
|
142
|
+
log.debug('File changed', { filePath });
|
|
143
|
+
this.queueEvent(filePath, 'modified');
|
|
144
|
+
})
|
|
145
|
+
.on('unlink', (filePath) => {
|
|
146
|
+
log.debug('File removed', { filePath });
|
|
147
|
+
this.queueEvent(filePath, 'deleted');
|
|
148
|
+
})
|
|
75
149
|
.on('error', (error) => {
|
|
76
|
-
log.error('File watcher error:',
|
|
150
|
+
log.error('File watcher error:', {
|
|
151
|
+
error: error?.message || String(error),
|
|
152
|
+
stack: error?.stack,
|
|
153
|
+
isElectron: this.isElectron
|
|
154
|
+
});
|
|
155
|
+
})
|
|
156
|
+
.on('ready', () => {
|
|
157
|
+
log.info('File watcher ready', {
|
|
158
|
+
contentDir: this.config.contentDir,
|
|
159
|
+
watchedPaths: this.watcher?.getWatched()
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
// 等待 watcher 准备就绪
|
|
163
|
+
return new Promise((resolve, reject) => {
|
|
164
|
+
if (!this.watcher) {
|
|
165
|
+
reject(new Error('Watcher failed to initialize'));
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
this.watcher.on('ready', () => {
|
|
169
|
+
log.info('File watcher successfully started and ready');
|
|
170
|
+
resolve();
|
|
171
|
+
});
|
|
172
|
+
this.watcher.on('error', (error) => {
|
|
173
|
+
log.error('File watcher failed to start', error);
|
|
174
|
+
reject(error);
|
|
175
|
+
});
|
|
176
|
+
// 超时保护
|
|
177
|
+
setTimeout(() => {
|
|
178
|
+
log.warn('File watcher initialization timeout');
|
|
179
|
+
resolve(); // 即使超时也继续,但记录警告
|
|
180
|
+
}, 5000);
|
|
77
181
|
});
|
|
78
182
|
}
|
|
79
183
|
onFileChange(callback) {
|
|
80
184
|
this.callbacks.push(callback);
|
|
185
|
+
log.debug('File change callback registered', { callbackCount: this.callbacks.length });
|
|
81
186
|
}
|
|
82
187
|
queueEvent(filePath, eventType) {
|
|
83
188
|
const normalizedPath = path.normalize(filePath);
|
|
84
189
|
log.info("File change detected:", {
|
|
85
190
|
filePath: normalizedPath,
|
|
86
|
-
eventType
|
|
191
|
+
eventType,
|
|
192
|
+
isElectron: this.isElectron
|
|
87
193
|
});
|
|
88
194
|
// 只监控 .md 文件和图片文件
|
|
89
195
|
if (!this.isRelevantFile(normalizedPath)) {
|
|
196
|
+
log.debug('File ignored (not relevant)', { filePath: normalizedPath });
|
|
90
197
|
return;
|
|
91
198
|
}
|
|
92
199
|
const event = {
|
|
@@ -97,6 +204,10 @@ class ContentFileWatcher {
|
|
|
97
204
|
isImage: this.isImageFile(normalizedPath)
|
|
98
205
|
};
|
|
99
206
|
this.eventQueue.push(event);
|
|
207
|
+
log.debug('Event queued', {
|
|
208
|
+
event,
|
|
209
|
+
queueLength: this.eventQueue.length
|
|
210
|
+
});
|
|
100
211
|
this.scheduleBatch();
|
|
101
212
|
}
|
|
102
213
|
isRelevantFile(filePath) {
|
|
@@ -154,6 +265,71 @@ class ContentFileWatcher {
|
|
|
154
265
|
this.eventQueue = [];
|
|
155
266
|
this.callbacks = [];
|
|
156
267
|
}
|
|
268
|
+
/**
|
|
269
|
+
* 诊断方法:用于调试 Obsidian 环境中的文件监控问题
|
|
270
|
+
*/
|
|
271
|
+
async diagnose() {
|
|
272
|
+
const diagnosis = {
|
|
273
|
+
environment: this.isElectron ? 'Electron/Obsidian' : 'Node.js',
|
|
274
|
+
contentDir: this.config.contentDir,
|
|
275
|
+
dirExists: false,
|
|
276
|
+
watcherStatus: this.watcher ? 'initialized' : 'not initialized'
|
|
277
|
+
};
|
|
278
|
+
// 检查目录状态
|
|
279
|
+
try {
|
|
280
|
+
const fs = require('fs');
|
|
281
|
+
const stat = await fs.promises.stat(this.config.contentDir);
|
|
282
|
+
diagnosis.dirExists = true;
|
|
283
|
+
diagnosis.dirStats = {
|
|
284
|
+
isDirectory: stat.isDirectory(),
|
|
285
|
+
isSymbolicLink: stat.isSymbolicLink(),
|
|
286
|
+
size: stat.size,
|
|
287
|
+
mode: stat.mode,
|
|
288
|
+
uid: stat.uid,
|
|
289
|
+
gid: stat.gid
|
|
290
|
+
};
|
|
291
|
+
// 检查权限
|
|
292
|
+
try {
|
|
293
|
+
await fs.promises.access(this.config.contentDir, fs.constants.R_OK | fs.constants.W_OK);
|
|
294
|
+
diagnosis.permissions = 'read/write';
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
try {
|
|
298
|
+
await fs.promises.access(this.config.contentDir, fs.constants.R_OK);
|
|
299
|
+
diagnosis.permissions = 'read-only';
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
diagnosis.permissions = 'no access';
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
diagnosis.dirExists = false;
|
|
308
|
+
diagnosis.error = error?.message || String(error);
|
|
309
|
+
}
|
|
310
|
+
// 获取监控路径信息
|
|
311
|
+
if (this.watcher) {
|
|
312
|
+
diagnosis.watchedPaths = this.watcher.getWatched();
|
|
313
|
+
}
|
|
314
|
+
// 获取版本信息
|
|
315
|
+
try {
|
|
316
|
+
const chokidarPkg = require('chokidar/package.json');
|
|
317
|
+
diagnosis.chokidarVersion = chokidarPkg.version;
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
// 忽略错误
|
|
321
|
+
}
|
|
322
|
+
if (typeof process !== 'undefined' && process.versions) {
|
|
323
|
+
if (process.versions.electron) {
|
|
324
|
+
diagnosis.electronVersion = process.versions.electron;
|
|
325
|
+
}
|
|
326
|
+
if (process.versions.node) {
|
|
327
|
+
diagnosis.nodeVersion = process.versions.node;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
log.info('File watcher diagnosis', diagnosis);
|
|
331
|
+
return diagnosis;
|
|
332
|
+
}
|
|
157
333
|
}
|
|
158
334
|
exports.ContentFileWatcher = ContentFileWatcher;
|
|
159
335
|
//# sourceMappingURL=content-file-watcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-file-watcher.js","sourceRoot":"","sources":["../../../../pkg/web/watcher/content-file-watcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAoC;AACpC,2CAA4B;AAE5B,kCAAwC;AAGxC,MAAM,GAAG,GAAG,IAAA,qBAAe,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC,CAAA;AAEzE,MAAa,kBAAkB;
|
|
1
|
+
{"version":3,"file":"content-file-watcher.js","sourceRoot":"","sources":["../../../../pkg/web/watcher/content-file-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-watcher.d.ts","sourceRoot":"","sources":["../../../../pkg/web/watcher/test-watcher.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,iBAAe,eAAe,CAAC,UAAU,EAAE,MAAM,iBA4ChD;AAqBD,OAAO,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.testFileWatcher = testFileWatcher;
|
|
37
|
+
const content_file_watcher_1 = require("./content-file-watcher");
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
/**
|
|
40
|
+
* 测试文件监控器的诊断脚本
|
|
41
|
+
* 用于调试 Obsidian 插件环境中的问题
|
|
42
|
+
*/
|
|
43
|
+
async function testFileWatcher(contentDir) {
|
|
44
|
+
console.log('=== File Watcher Diagnostic Test ===');
|
|
45
|
+
console.log(`Testing directory: ${contentDir}`);
|
|
46
|
+
const config = {
|
|
47
|
+
contentDir: contentDir,
|
|
48
|
+
batchDelay: 500
|
|
49
|
+
};
|
|
50
|
+
const watcher = new content_file_watcher_1.ContentFileWatcher(config);
|
|
51
|
+
// 注册回调
|
|
52
|
+
watcher.onFileChange(async (events) => {
|
|
53
|
+
console.log('File change events received:', events);
|
|
54
|
+
});
|
|
55
|
+
try {
|
|
56
|
+
// 运行诊断
|
|
57
|
+
console.log('\n--- Pre-start Diagnosis ---');
|
|
58
|
+
const preDiagnosis = await watcher.diagnose();
|
|
59
|
+
console.log(JSON.stringify(preDiagnosis, null, 2));
|
|
60
|
+
// 启动监控
|
|
61
|
+
console.log('\n--- Starting Watcher ---');
|
|
62
|
+
await watcher.startWatching();
|
|
63
|
+
// 运行诊断
|
|
64
|
+
console.log('\n--- Post-start Diagnosis ---');
|
|
65
|
+
const postDiagnosis = await watcher.diagnose();
|
|
66
|
+
console.log(JSON.stringify(postDiagnosis, null, 2));
|
|
67
|
+
// 等待一段时间以观察文件变化
|
|
68
|
+
console.log('\n--- Monitoring for 30 seconds ---');
|
|
69
|
+
console.log('Please create, modify, or delete .md files in the watched directory...');
|
|
70
|
+
await new Promise(resolve => setTimeout(resolve, 30000));
|
|
71
|
+
// 停止监控
|
|
72
|
+
console.log('\n--- Stopping Watcher ---');
|
|
73
|
+
await watcher.stopWatching();
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error('Test failed:', error);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// 主函数
|
|
80
|
+
async function main() {
|
|
81
|
+
const args = process.argv.slice(2);
|
|
82
|
+
if (args.length === 0) {
|
|
83
|
+
console.log('Usage: ts-node test-watcher.ts <content-directory>');
|
|
84
|
+
console.log('Example: ts-node test-watcher.ts /path/to/obsidian/vault');
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
const contentDir = path.resolve(args[0]);
|
|
88
|
+
await testFileWatcher(contentDir);
|
|
89
|
+
}
|
|
90
|
+
// 如果直接运行此脚本
|
|
91
|
+
if (require.main === module) {
|
|
92
|
+
main().catch(console.error);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=test-watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-watcher.js","sourceRoot":"","sources":["../../../../pkg/web/watcher/test-watcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyES,0CAAe;AAzExB,iEAA2D;AAE3D,2CAA4B;AAE5B;;;GAGG;AACH,KAAK,UAAU,eAAe,CAAC,UAAkB;IAC/C,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;IACnD,OAAO,CAAC,GAAG,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAA;IAE/C,MAAM,MAAM,GAAkB;QAC5B,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,GAAG;KAChB,CAAA;IAED,MAAM,OAAO,GAAG,IAAI,yCAAkB,CAAC,MAAM,CAAC,CAAA;IAE9C,OAAO;IACP,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACpC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,OAAO;QACP,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAA;QAC5C,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAA;QAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAElD,OAAO;QACP,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;QACzC,MAAM,OAAO,CAAC,aAAa,EAAE,CAAA;QAE7B,OAAO;QACP,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;QAC7C,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAA;QAC9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAEnD,gBAAgB;QAChB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;QAClD,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAA;QAErF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;QAExD,OAAO;QACP,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;QACzC,MAAM,OAAO,CAAC,YAAY,EAAE,CAAA;IAE9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;IACtC,CAAC;AACH,CAAC;AAED,MAAM;AACN,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAElC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAA;QACjE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAA;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACxC,MAAM,eAAe,CAAC,UAAU,CAAC,CAAA;AACnC,CAAC;AAED,YAAY;AACZ,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC"}
|
|
@@ -10,9 +10,30 @@ export interface WatcherConfig {
|
|
|
10
10
|
batchDelay?: number;
|
|
11
11
|
ignorePatterns?: string[];
|
|
12
12
|
}
|
|
13
|
+
export interface DiagnosticResult {
|
|
14
|
+
environment: string;
|
|
15
|
+
contentDir: string;
|
|
16
|
+
dirExists: boolean;
|
|
17
|
+
dirStats?: {
|
|
18
|
+
isDirectory: boolean;
|
|
19
|
+
isSymbolicLink: boolean;
|
|
20
|
+
size: number;
|
|
21
|
+
mode: number;
|
|
22
|
+
uid?: number;
|
|
23
|
+
gid?: number;
|
|
24
|
+
};
|
|
25
|
+
permissions?: 'read/write' | 'read-only' | 'no access';
|
|
26
|
+
watcherStatus: 'initialized' | 'not initialized';
|
|
27
|
+
watchedPaths?: any;
|
|
28
|
+
chokidarVersion?: string;
|
|
29
|
+
electronVersion?: string;
|
|
30
|
+
nodeVersion?: string;
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
13
33
|
export interface FileWatcher {
|
|
14
34
|
startWatching(): Promise<void>;
|
|
15
35
|
stopWatching(): Promise<void>;
|
|
16
36
|
onFileChange(callback: (events: FileChangeEvent[]) => Promise<void>): void;
|
|
37
|
+
diagnose(): Promise<DiagnosticResult>;
|
|
17
38
|
}
|
|
18
39
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../pkg/web/watcher/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAA;IAC7C,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../pkg/web/watcher/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAA;IAC7C,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,OAAO,CAAA;QACpB,cAAc,EAAE,OAAO,CAAA;QACvB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,GAAG,CAAC,EAAE,MAAM,CAAA;KACb,CAAA;IACD,WAAW,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,WAAW,CAAA;IACtD,aAAa,EAAE,aAAa,GAAG,iBAAiB,CAAA;IAChD,YAAY,CAAC,EAAE,GAAG,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC1E,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACtC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mdfriday/foundry",
|
|
3
|
-
"version": "25.8.
|
|
3
|
+
"version": "25.8.6",
|
|
4
4
|
"description": "The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|