/** * Copyright (c) 2025 Elara AI Pty Ltd * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details. */ import type * as ts from "typescript"; import type { RuleContext } from "./types.js"; /** * Walk a call/member chain down to its base receiver — `a.b().c[d]` -> `a`. Used * to find the thing a chained expression is ultimately rooted on (e.g. to ask * whether a `$.if(...).else(...)` chain is rooted on the block builder `$`). */ export declare function chainRootReceiver(node: ts.Node, ctx: RuleContext): ts.Node; /** * Does `body` EMIT East IR into the enclosing block — i.e. contain a call rooted * on the block builder `$` (`$.let`/`$.const`/`$(…)`/`$.assign`/`$.if`/…)? This * is the discriminator between a host loop that BUILDS East IR (abuse) and one * that only assembles a plain JS array/object (legitimate — the array is bound * once afterwards). It deliberately does NOT count mere East-`Expr` reads * (`p.x.get(k)` inside a `jsArray.push({...})`), and does not descend into a * nested East block callback (`data.map(($, x) => …)`) — that is its own scope. */ export declare function bodyBuildsEastIr(body: ts.Node, ctx: RuleContext): boolean; //# sourceMappingURL=east-ir.d.ts.map