Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | 1x 1x 1x 1x 1x 10x 10x 10x 1x 24x 24x 24x 24x 22x 22x 24x 24x 24x 24x 1x 9x 9x 1x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 1x 1x 7x 7x 7x 7x 7x | import { type DefineTaskOpts, type PersistedTask, type Task, type TaskStorage, composePersistedTask, defineTaskWithAdapter, } from "./task"; // only used for testing export const inmemoryTasks = new Map<string, PersistedTask<unknown>>(); const InmemoryAdapter: TaskStorage<unknown> = { async enqueue({ data, name }) { const persistedTask = composePersistedTask({ data, name }); inmemoryTasks.set(persistedTask.id, persistedTask); }, async fetch({ name, batchSize, maxRetries, retryIntervall }) { const result = Array.from(inmemoryTasks.values()) .filter( ({ name: taskName, failedNr, failedLast }) => taskName === name && (failedNr ?? 0) <= maxRetries && (failedLast ?? 0) <= Date.now() - retryIntervall, ) .slice(0, batchSize); return result; }, async success({ task }) { inmemoryTasks.delete(task.id); }, async failure({ task, err }) { inmemoryTasks.set(task.id, { ...task, failedNr: (task.failedNr ?? 0) + 1, failedLast: Date.now(), failedError: JSON.stringify({ instance: (err as Error).constructor.name, message: (err as Error).message, stack: (err as Error).stack, }), }); }, }; export function defineInmemoryTask<T>(opts: DefineTaskOpts<T>): Task<T> { return defineTaskWithAdapter( InmemoryAdapter, opts as DefineTaskOpts<unknown>, ); } |