import { Adt } from '@ephox/katamari'; type InjectPositionHandler = (item: E) => U; type InvalidHandler = (item: E, offset: number) => U; export interface InjectPosition { fold: ( onBefore: InjectPositionHandler, onAfter: InjectPositionHandler, onRest: InjectPositionHandler, onLast: InjectPositionHandler, onInvalid: InvalidHandler ) => U; match: (branches: { before: InjectPositionHandler; after: InjectPositionHandler; rest: InjectPositionHandler; last: InjectPositionHandler; invalid: InvalidHandler; }) => U; log: (label: string) => void; } const adt: { before: (element: E) => InjectPosition; after: (element: E) => InjectPosition; rest: (element: E) => InjectPosition; last: (element: E) => InjectPosition; invalid: (element: E, offset: number) => InjectPosition; } = Adt.generate([ { before: [ 'element' ] }, { after: [ 'element' ] }, { rest: [ 'element' ] }, { last: [ 'element' ] }, { invalid: [ 'element', 'offset' ] } ]); export const InjectPosition = { before: adt.before, after: adt.after, rest: adt.rest, last: adt.last, invalid: adt.invalid };