import "regenerator-runtime/runtime";
import type {
  InitData,
  ObjectValue,
  ObjectValueWithVariables,
  Query,
  RemoteLoggingMode,
  CreateOptions,
  LocalLogger,
  LogsHandler,
  DehydratedState,
  DeepPartial,
  UpdateListener,
  Value,
} from "./shared/types";
import create from "./lib/create";
import Node from "./lib/Node";
import decodeFlagValues from "./lib/decodeFlagValues";
import getFieldQueryForPath from "./lib/getFieldQueryForPath";
import getOverrideFromOverridesList from "./lib/getOverrideFromOverridesList";
import merge from "./lib/merge";
import mergeFieldQueryAndArgs from "./lib/mergeFieldQueryAndArgs";
import HypertuneEdgeInitDataProvider from "./lib/initDataProviders/HypertuneEdgeInitDataProvider";
import VercelEdgeConfigInitDataProvider from "./lib/initDataProviders/VercelEdgeConfigInitDataProvider";

export type {
  CreateOptions,
  DehydratedState,
  DeepPartial,
  Query,
  InitData,
  LocalLogger,
  LogsHandler,
  ObjectValue,
  ObjectValueWithVariables,
  RemoteLoggingMode,
  /**
   * @deprecated use CreateOptions directly instead.
   */
  CreateOptions as InitOptions,
  UpdateListener,
  Value,
};

export { LogLevel } from "./shared/types";

export {
  create,
  decodeFlagValues,
  getFieldQueryForPath,
  getOverrideFromOverridesList,
  merge,
  mergeFieldQueryAndArgs,
  /**
   * @deprecated use create directly instead.
   */
  create as init,
  Node,
  HypertuneEdgeInitDataProvider,
  VercelEdgeConfigInitDataProvider,
};

export {
  BooleanNode,
  FloatNode,
  IntNode,
  StringNode,
  VoidNode,
} from "./lib/primitiveNodes";
