import type { RunRecord, RunState, TerminationReason } from "./types.js";
function nowMs() { return Date.now();
}
const DEFAULT_MAX_EXITED_RECORDS = 2_000;
function resolveMaxExitedRecords(value?: number): number { if (typeof value !== "number" || !Number.isFinite(value) || value < 1) { return DEFAULT_MAX_EXITED_RECORDS;
} return Math.max(1, Math.floor(value));
}
export function createRunRegistry(options?: { maxExitedRecords?: number }): RunRegistry { const records = new Map<string, RunRecord>(); const maxExitedRecords = resolveMaxExitedRecords(options?.maxExitedRecords);
const pruneExitedRecords = () => { if (!records.size) { return;
}
let exited = 0; for (const record of records.values()) { if (record.state === "exited") {
exited += 1;
}
} if (exited <= maxExitedRecords) { return;
}
let remove = exited - maxExitedRecords; for (const [runId, record] of records.entries()) { if (remove <= 0) { break;
} if (record.state !== "exited") { continue;
}
records.delete(runId);
remove -= 1;
}
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.