// node_modules/hookable/dist/index.mjs function flatHooks(configHooks, hooks = {}, parentName) { for (const key in configHooks) { const subHook = configHooks[key]; const name = parentName ? `${parentName}:${key}` : key; if (typeof subHook === "object" && subHook !== null) { flatHooks(subHook, hooks, name); } else if (typeof subHook === "function") { hooks[name] = subHook; } } return hooks; } var defaultTask = { run: (function_) => function_() }; var _createTask = () => defaultTask; var createTask = typeof console.createTask !== "undefined" ? console.createTask : _createTask; function serialTaskCaller(hooks, args) { const name = args.shift(); const task = createTask(name); return hooks.reduce( (promise, hookFunction) => promise.then(() => task.run(() => hookFunction(...args))), Promise.resolve() ); } function parallelTaskCaller(hooks, args) { const name = args.shift(); const task = createTask(name); return Promise.all(hooks.map((hook) => task.run(() => hook(...args)))); } function callEachWith(callbacks, arg0) { for (const callback of [...callbacks]) { callback(arg0); } } var Hookable = class { constructor() { this._hooks = {}; this._before = void 0; this._after = void 0; this._deprecatedMessages = void 0; this._deprecatedHooks = {}; this.hook = this.hook.bind(this); this.callHook = this.callHook.bind(this); this.callHookWith = this.callHookWith.bind(this); } hook(name, function_, options = {}) { if (!name || typeof function_ !== "function") { return () => { }; } const originalName = name; let dep; while (this._deprecatedHooks[name]) { dep = this._deprecatedHooks[name]; name = dep.to; } if (dep && !options.allowDeprecated) { let message = dep.message; if (!message) { message = `${originalName} hook has been deprecated` + (dep.to ? `, please use ${dep.to}` : ""); } if (!this._deprecatedMessages) { this._deprecatedMessages = /* @__PURE__ */ new Set(); } if (!this._deprecatedMessages.has(message)) { console.warn(message); this._deprecatedMessages.add(message); } } if (!function_.name) { try { Object.defineProperty(function_, "name", { get: () => "_" + name.replace(/\W+/g, "_") + "_hook_cb", configurable: true }); } catch { } } this._hooks[name] = this._hooks[name] || []; this._hooks[name].push(function_); return () => { if (function_) { this.removeHook(name, function_); function_ = void 0; } }; } hookOnce(name, function_) { let _unreg; let _function = (...arguments_) => { if (typeof _unreg === "function") { _unreg(); } _unreg = void 0; _function = void 0; return function_(...arguments_); }; _unreg = this.hook(name, _function); return _unreg; } removeHook(name, function_) { if (this._hooks[name]) { const index = this._hooks[name].indexOf(function_); if (index !== -1) { this._hooks[name].splice(index, 1); } if (this._hooks[name].length === 0) { delete this._hooks[name]; } } } deprecateHook(name, deprecated) { this._deprecatedHooks[name] = typeof deprecated === "string" ? { to: deprecated } : deprecated; const _hooks = this._hooks[name] || []; delete this._hooks[name]; for (const hook of _hooks) { this.hook(name, hook); } } deprecateHooks(deprecatedHooks) { Object.assign(this._deprecatedHooks, deprecatedHooks); for (const name in deprecatedHooks) { this.deprecateHook(name, deprecatedHooks[name]); } } addHooks(configHooks) { const hooks = flatHooks(configHooks); const removeFns = Object.keys(hooks).map( (key) => this.hook(key, hooks[key]) ); return () => { for (const unreg of removeFns.splice(0, removeFns.length)) { unreg(); } }; } removeHooks(configHooks) { const hooks = flatHooks(configHooks); for (const key in hooks) { this.removeHook(key, hooks[key]); } } removeAllHooks() { for (const key in this._hooks) { delete this._hooks[key]; } } callHook(name, ...arguments_) { arguments_.unshift(name); return this.callHookWith(serialTaskCaller, name, ...arguments_); } callHookParallel(name, ...arguments_) { arguments_.unshift(name); return this.callHookWith(parallelTaskCaller, name, ...arguments_); } callHookWith(caller, name, ...arguments_) { const event = this._before || this._after ? { name, args: arguments_, context: {} } : void 0; if (this._before) { callEachWith(this._before, event); } const result = caller( name in this._hooks ? [...this._hooks[name]] : [], arguments_ ); if (result instanceof Promise) { return result.finally(() => { if (this._after && event) { callEachWith(this._after, event); } }); } if (this._after && event) { callEachWith(this._after, event); } return result; } beforeEach(function_) { this._before = this._before || []; this._before.push(function_); return () => { if (this._before !== void 0) { const index = this._before.indexOf(function_); if (index !== -1) { this._before.splice(index, 1); } } }; } afterEach(function_) { this._after = this._after || []; this._after.push(function_); return () => { if (this._after !== void 0) { const index = this._after.indexOf(function_); if (index !== -1) { this._after.splice(index, 1); } } }; } }; function createHooks() { return new Hookable(); } // node_modules/birpc/dist/index.mjs var { clearTimeout, setTimeout } = globalThis; var random = Math.random.bind(Math); export { createHooks }; //# sourceMappingURL=chunk-IIQZHHRC.js.map