/** * Expands local composite functions (`uses: ./path/to/function`) into a * {@link CompositeBuildStep} tree at parse time. * * Each call becomes a node with prefixed child ids (`caller__inner`); the parser * flattens the tree into the workflow. Expanded steps carry a * {@link BuildStepCompositeFunctionScope} so `${{ steps.* }}` and `${{ inputs.* }}` * resolve against composite-function-local names. */ import { CompositeFunctionCatalog, FunctionStep } from '@expo/eas-build-job'; import { BuildFunctionById } from './BuildFunction'; import { BuildFunctionGroupById } from './BuildFunctionGroup'; import { BuildStepGlobalContext } from './BuildStepContext'; import { CompositeBuildStep } from './CompositeBuildStep'; export type FunctionMaps = { buildFunctionById: BuildFunctionById; buildFunctionGroupById: BuildFunctionGroupById; }; export declare class CompositeFunctionExpander { private readonly ctx; private readonly compositeFunctionCatalog; private readonly functionMaps; constructor(ctx: BuildStepGlobalContext, compositeFunctionCatalog: CompositeFunctionCatalog, functionMaps: FunctionMaps); get buildFunctionById(): BuildFunctionById; get buildFunctionGroupById(): BuildFunctionGroupById; expandCompositeFunctionStep(step: FunctionStep, compositeFunctionPath: string, syntheticStepId: string): CompositeBuildStep; private rejectCompositeFunctionCallWorkingDirectory; private expand; private guardAgainstRunawayRecursion; private lookupCompositeFunction; private expandInnerStep; private resolveStepOverrides; private expandNestedCompositeFunctionCall; private createExpandedShellStep; private createExpandedFunctionStep; /** * Assigns globally unique ids to inner steps. Without namespacing, two * composite function calls with inner step `read` would collide. */ private buildInnerStepIdMap; private buildCompositeFunctionInputs; private toInputValueTypeName; }