import { ActionMetaData, ActionResult, Effects, ExportedAction, } from "../types"; import { Utils, utils } from "../util"; export class CreatedAction { private constructor( readonly metaData: ActionMetaData, readonly fn: (options: { effects: Effects; utils: Utils; input: Input; }) => Promise, ) {} static of( metaData: ActionMetaData, fn: (options: { effects: Effects; utils: Utils; input: Input; }) => Promise, ) { return new CreatedAction(metaData, fn); } exportedAction: ExportedAction = ({ effects, input }) => { return this.fn({ effects, utils: utils(effects), input: input as Input, }); }; async exportAction(effects: Effects) { await effects.exportAction(this.metaData); } } export const createAction = CreatedAction.of;