import { CellId } from "@nteract/commutable"; import { ContentRef, HostRef, KernelRef, KernelspecsRef } from "@nteract/types"; import { Subtract } from "utility-types"; export interface Action { type: T; payload: P; } export interface ErrorAction extends Action { error: true; } export const makeActionFunction = > (type: T["type"]) => { const func = (payload: T["payload"]) => ({ type, payload }); func.with = >(partial: U) => (payload: Subtract) => ({ type, payload: { ...partial, ...payload } as T["payload"] }); return func; }; export const makeErrorActionFunction = > (type: T["type"]) => (payload: T["payload"]) => ({ type, payload, error: true }) as { type: T["type"]; payload: T["payload"]; error: true; }; export const makeZeroArgActionFunction = > (type: T["type"]) => () => ({ type }); export interface HasKernel { kernelRef: KernelRef } export interface MaybeHasKernel { kernelRef?: KernelRef | null } export interface HasContent { contentRef: ContentRef } export interface MaybeHasContent { contentRef?: ContentRef | null } export interface HasCell extends HasContent { id: CellId } export interface MaybeHasCell extends HasContent { id?: CellId } export interface HasFilepath { filepath: string; } export interface HasFilepathChange extends HasFilepath { prevFilePath: string } export interface HasKernelspecs { kernelspecsRef: KernelspecsRef } export interface HasHost { hostRef: HostRef }