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 | import type { InvocationKey } from '../definition.ts';
/**
* A stack abstraction used by the invocation tracker (`createInvocationTracker`) to track the nesting of invocation
* keys.
*
* `InvocationStack` enables the tracker to determine parent-child relationships between invocations by tracking the
* currently active `InvocationKey` at any point in the program. This is particularly useful when correlating nested or
* reentrant function calls and building hierarchical traces.
*
* The tracker uses the top value from the stack (via `peek()`) to determine the parent for the next invocation. The
* stack is updated automatically by the tracker: `push()` is called at the start of a tracked function, and `pop()` is
* called after the function completes or throws. The return value of `pop()` is the key that was just removed.
*
* Clients may provide their own implementation if they need integration with custom async contexts, request-local
* storage, or thread-local semantics in other platforms. Any implementation must conform to this interface.
*
* The stack is automatically closed when the associated tracker is closed.
*/
export type InvocationStack = {
/**
* Closes the stack, clearing all invocation keys.
*/
readonly close: () => void;
/**
* Pushes a new invocation key onto the stack.
*/
readonly push: (key: InvocationKey) => void;
/**
* Returns the top invocation key from the stack without removing it. Returns `undefined` if the stack is empty.
*/
readonly peek: () => InvocationKey | undefined;
/**
* Removes the top invocation key from the stack and returns the removed key.If the stack is empty, returns
* `undefined`.
*/
readonly pop: () => InvocationKey | undefined;
};
/**
* A stack storage to support thread-safe scenarios, modeled after NodeJS's `AsyncLocalStorage`.
*/
export interface AsyncStackStorage {
getStore(): InvocationKey[] | undefined;
enterWith(store: InvocationKey[]): void;
disable(): void;
}
|