Centralize timer entry creation

master
dev 5 months ago
parent ed888e9f2d
commit 01a621545a

@ -23,6 +23,7 @@ Estado al cierre:
- `arts/conn/connection.ts` delega decode/routing de frames entrantes en `connection-message-router.ts`.
- `arts/conn/connection.ts` delega el intento open/auth/flush/join en `connection-connect.ts`.
- `arts/timr/engine-timers.ts` delega fan-out de listeners y diagnostico de listeners en `timer-events.ts`.
- `arts/timr/engine-timers.ts` delega la construccion de entradas internas en `timer-entry.ts`.
- Integracion total ampliada: `Auth.signOut()` valida anonimizacion, invalidacion de `Permissions` y evento `Cache.invalidate`.
- Tanda focalizada verde: `npx vitest run src/arts/conn src/libs/cach src/arts/cach src/svrs/cach src/arts/auth src/svrs/auth src/libs/auth src/arts/aapp/test/ecosystem.integration.test.ts` -> 19 archivos, 82 tests.
- `/test/ecosystem` revisado en navegador: carga sin errores de consola, `ar` cambia a `rtl`, Formats se actualiza por locale, Perm cambia con rol `viewer`, Cach re-scopea por locale y Conn loopback publica/recibe.

@ -47,6 +47,7 @@ import {
import { createTimerDiagnostics, emitTimerDiagnostic } from './diagnostics.ts';
import { TimrDuplicateKeyError } from './errors.ts';
import {
createInternalTimerEntry,
isTimerKeyInScope,
timerEntrySnapshot,
type InternalTimerEntry
@ -276,29 +277,20 @@ export function createEngineTimers(options: EngineTimersOptions = {}): EngineTim
}
const now = clock.now();
const entry: InternalTimerEntry = {
id: nextId++,
const entry = createInternalTimerEntry({
id: nextId,
key,
version: 0,
kind,
status: TIMER_STATUS_PENDING,
task,
controller: new AbortController(),
native: null,
scheduledAt: now,
dueAt: now + delayMs,
delayMs,
intervalMs,
awaitTask,
maxRuns,
runCount: 0,
lastFiredAt: null,
lastCompletedAt: null,
lastErrorAt: null,
error: null,
removeOnComplete: kind === TIMER_KIND_INTERVAL ? false : options?.removeOnComplete !== false,
meta: options?.meta
};
});
nextId += 1;
entries.set(key, entry);
armEntry(entry, delayMs);

@ -1,4 +1,4 @@
import { DEFAULT_TIMER_SCOPE_SEPARATOR } from './consts.ts';
import { DEFAULT_TIMER_SCOPE_SEPARATOR, TIMER_STATUS_PENDING } from './consts.ts';
import type {
TimerEntrySnapshot,
TimerKind,
@ -31,6 +31,46 @@ export interface InternalTimerEntry {
meta?: Readonly<Record<string, unknown>>;
}
export interface CreateInternalTimerEntryInput {
readonly id: number;
readonly key: string;
readonly kind: TimerKind;
readonly task: TimerTask;
readonly scheduledAt: number;
readonly delayMs: number;
readonly intervalMs: number | null;
readonly awaitTask: boolean;
readonly maxRuns: number | undefined;
readonly removeOnComplete: boolean;
readonly meta?: Readonly<Record<string, unknown>>;
}
export function createInternalTimerEntry(input: CreateInternalTimerEntryInput): InternalTimerEntry {
return {
id: input.id,
key: input.key,
version: 0,
kind: input.kind,
status: TIMER_STATUS_PENDING,
task: input.task,
controller: new AbortController(),
native: null,
scheduledAt: input.scheduledAt,
dueAt: input.scheduledAt + input.delayMs,
delayMs: input.delayMs,
intervalMs: input.intervalMs,
awaitTask: input.awaitTask,
maxRuns: input.maxRuns,
runCount: 0,
lastFiredAt: null,
lastCompletedAt: null,
lastErrorAt: null,
error: null,
removeOnComplete: input.removeOnComplete,
meta: input.meta
};
}
export function scopeOfTimerKey(key: string): string {
const idx = key.lastIndexOf(DEFAULT_TIMER_SCOPE_SEPARATOR);
return idx === -1 ? key : key.slice(0, idx);

Loading…
Cancel
Save

Powered by TurnKey Linux.