/**
 * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author David Sehnal <david.sehnal@gmail.com>
 */

import { StateObject } from '../object';
import { Transformer } from '../transformer';

export interface Transform<A extends StateObject, B extends StateObject, P = any> {
    readonly instanceId: Transform.InstanceId,

    readonly transformer: Transformer<A, B, P>,
    readonly props: Transform.Props,

    readonly transformerId: string,
    readonly params: P,
    readonly ref: string
    // version is part of the tree
}

export namespace Transform {
    export type InstanceId = number & { '@type': 'transform-instance-id' }

    export interface Props {

    }

    export enum Flags {
        // Indicates that the transform was generated by a behaviour and should not be automatically updated
        Generated
    }
}