@@ -259,6 +259,13 @@ export type LoaderFunction<TRenderer extends Renderer = Renderer, TArgs = Args>
259259 context : StoryContextForLoaders < TRenderer , TArgs >
260260) => Promise < Record < string , any > | void > | Record < string , any > | void ;
261261
262+ type Awaitable < T > = T | PromiseLike < T > ;
263+ export type CleanupCallback = ( ) => Awaitable < unknown > ;
264+
265+ export type BeforeEach < TRenderer extends Renderer = Renderer , TArgs = Args > = (
266+ context : StoryContext < TRenderer , TArgs >
267+ ) => Awaitable < CleanupCallback | void > ;
268+
262269export interface StoryContext < TRenderer extends Renderer = Renderer , TArgs = Args >
263270 extends StoryContextForLoaders < TRenderer , TArgs > {
264271 loaded : Record < string , any > ;
@@ -356,6 +363,16 @@ export type BaseAnnotations<TRenderer extends Renderer = Renderer, TArgs = Args>
356363 */
357364 loaders ?: LoaderFunction < TRenderer , TArgs > [ ] | LoaderFunction < TRenderer , TArgs > ;
358365
366+ /**
367+ * Function to be called before each story. When the function is async, it will be awaited.
368+ *
369+ * `beforeEach` can be added to preview, the default export and to a specific story.
370+ * They are run (and awaited) in the order: preview, default export, story
371+ *
372+ * A cleanup function can be returned.
373+ */
374+ beforeEach ?: BeforeEach < TRenderer , TArgs > [ ] | BeforeEach < TRenderer , TArgs > ;
375+
359376 /**
360377 * Define a custom render function for the story(ies). If not passed, a default render function by the renderer will be used.
361378 */
0 commit comments