export default function once(emitter, name, { signal } = {}) {
    return new Promise((resolve, reject) => {
        function cleanup() {
            signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', onAbort);
            emitter.removeListener(name, onEvent);
            emitter.removeListener('error', onError);
        }
        function onEvent(...args) {
            cleanup();
            resolve(args);
        }
        function onError(err) {
            cleanup();
            reject(err);
        }
        function onAbort() {
            cleanup();
            const err = new Error('The operation was aborted');
            err.name = 'AbortError';
            reject(err);
        }
        if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
            onAbort();
            return;
        }
        signal === null || signal === void 0 ? void 0 : signal.addEventListener('abort', onAbort);
        emitter.on(name, onEvent);
        emitter.on('error', onError);
    });
}//# sourceMappingURL=https://main.vscode-cdn.net/sourcemaps/10c8e557c8b9f9ed0a87f61f1c9a44bde731c409/node_modules/@tootallnate/once/dist/index.js.map