@kya-os/mcp-i
Version:
The TypeScript MCP framework with identity features built-in
50 lines (49 loc) • 1.71 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Watcher = void 0;
const chokidar_1 = __importDefault(require("chokidar"));
const subscribable_1 = require("./subscribable");
class Watcher {
watchers = [];
isReady = false;
globalOptions = {};
onReadySubscribable = (0, subscribable_1.subscribable)();
constructor(options = {}) {
this.globalOptions = options;
}
watch(path, options, chokidarOptions = {}) {
const instance = chokidar_1.default.watch(path, {
...this.globalOptions,
...chokidarOptions,
});
options.onAdd && instance.on("add", options.onAdd);
options.onUnlink && instance.on("unlink", options.onUnlink);
options.onChange && instance.on("change", options.onChange);
const watcherInstance = {
isReady: false,
watcher: instance,
};
this.watchers.push(watcherInstance);
instance.on("ready", () => {
watcherInstance.isReady = true;
this.checkReady();
});
}
onReady(callback) {
this.onReadySubscribable.addCallback(callback);
}
checkReady() {
if (this.watchers.every((watcher) => watcher.isReady)) {
this.onReadySubscribable.runCallbacks();
this.onReadySubscribable.clearCallbacks();
}
}
async close() {
await Promise.all(this.watchers.map((watcherInstance) => watcherInstance.watcher.close()));
this.watchers = [];
}
}
exports.Watcher = Watcher;