import * as babel from "@babel/types";

//#region src/ast-transform/node-types.d.ts
type Range = [number, number];
type StartEnd = {
  start: number;
  end: number;
};
type LocationInformation = StartEnd & {
  range: Range;
  extra?: any;
};
type NGBaseNode = LocationInformation & {
  type: string;
};
type CommentLine = babel.CommentLine & LocationInformation;
type NGOwnNode = NGEmptyExpression | NGPipeExpression | NGChainedExpression;
type NGNode = babel.Expression | babel.ObjectProperty | babel.SpreadElement | babel.TemplateElement | NGOwnNode;
interface NGEmptyExpression extends NGBaseNode {
  type: 'NGEmptyExpression';
}
interface NGPipeExpression extends NGBaseNode {
  type: 'NGPipeExpression';
  left: babel.Expression;
  right: babel.Identifier;
  arguments: babel.Expression[];
}
interface NGChainedExpression extends NGBaseNode {
  type: 'NGChainedExpression';
  expressions: NGNode[];
}
//#endregion
export { CommentLine, LocationInformation, NGBaseNode, NGChainedExpression, NGEmptyExpression, NGNode, NGOwnNode, NGPipeExpression, Range, StartEnd };