takt/src/core/piece/engine/abort-signal.ts
nrs a82d6d9d8a
github-issue-244 (#250)
* dist-tag 検証をリトライ付きに変更(npm レジストリの結果整合性対策)

* takt run 実行時に蓋閉じスリープを抑制

* takt: github-issue-244

* takt: #244/implement-parallel-subtasks
2026-02-12 11:51:34 +09:00

30 lines
860 B
TypeScript

export function buildAbortSignal(
timeoutMs: number,
parentSignal: AbortSignal | undefined,
): { signal: AbortSignal; dispose: () => void } {
const timeoutController = new AbortController();
const timeoutId = setTimeout(() => {
timeoutController.abort(new Error(`Part timeout after ${timeoutMs}ms`));
}, timeoutMs);
let abortListener: (() => void) | undefined;
if (parentSignal) {
abortListener = () => timeoutController.abort(parentSignal.reason);
if (parentSignal.aborted) {
abortListener();
} else {
parentSignal.addEventListener('abort', abortListener, { once: true });
}
}
return {
signal: timeoutController.signal,
dispose: () => {
clearTimeout(timeoutId);
if (parentSignal && abortListener) {
parentSignal.removeEventListener('abort', abortListener);
}
},
};
}