import { default as babel } from '@babel/core'; import { Config, DeletableNodes, HmrStyle } from '../config.js'; import { CodeSplitGroupings } from '../constants.js'; import { SplitNodeMeta } from './types.js'; import type * as t from '@babel/types'; export type CompileCodeSplitReferenceRouteOptions = { codeSplitGroupings: CodeSplitGroupings; deleteNodes?: Set; targetFramework: Config['target']; filename: string; id: string; addHmr?: boolean; hmrStyle?: HmrStyle; hmrRouteId?: string; sharedBindings?: Set; }; export type ReferenceRouteCompilerPluginContext = { programPath: babel.NodePath; callExpressionPath: babel.NodePath; insertionPath: babel.NodePath; routeOptions: t.ObjectExpression; createRouteFn: string; opts: CompileCodeSplitReferenceRouteOptions; }; export type ReferenceRouteSplitPropertyCompilerPluginContext = { programPath: babel.NodePath; callExpressionPath: babel.NodePath; insertionPath: babel.NodePath; routeOptions: t.ObjectExpression; prop: t.ObjectProperty; splitNodeMeta: SplitNodeMeta; lazyRouteComponentIdent: string; opts: CompileCodeSplitReferenceRouteOptions; }; export type ReferenceRouteCompilerPluginResult = { modified?: boolean; }; export type VirtualRouteSplitNodeCompilerPluginContext = { programPath: babel.NodePath; splitNode: t.Node; splitNodeMeta: SplitNodeMeta; }; export type CodeSplitCompilerPlugin = { name: string; getStableRouteOptionKeys?: () => Array; onRouteOptions?: (ctx: ReferenceRouteCompilerPluginContext) => void | ReferenceRouteCompilerPluginResult; onAddHmr?: (ctx: ReferenceRouteCompilerPluginContext) => void | ReferenceRouteCompilerPluginResult; onUnsplittableRoute?: (ctx: ReferenceRouteCompilerPluginContext) => void | ReferenceRouteCompilerPluginResult; onSplitRouteProperty?: (ctx: ReferenceRouteSplitPropertyCompilerPluginContext) => void | t.Expression; onVirtualRouteSplitNode?: (ctx: VirtualRouteSplitNodeCompilerPluginContext) => void; }; export type ReferenceRouteCompilerPlugin = CodeSplitCompilerPlugin;