kaiselOriginFrames function

List<KaiselOriginFrame> kaiselOriginFrames(
  1. StackTrace? trace, {
  2. int limit = 5,
})

Reduces a captured navigation origin to the app call frames behind it — dropping kaisel, Flutter, and SDK frames plus async-suspension markers, and keeping the closest limit. Each frame keeps its display line and, when the location parses, the source uri/line/column (so a host can open it in an editor). Empty for a null trace. Exposed via kaisel_core/framework.dart.

Implementation

List<KaiselOriginFrame> kaiselOriginFrames(StackTrace? trace, {int limit = 5}) {
  if (trace == null) return const <KaiselOriginFrame>[];
  final frames = <KaiselOriginFrame>[];
  for (final raw in trace.toString().split('\n')) {
    final line = raw.trim();
    if (line.isEmpty || line == '<asynchronous suspension>') continue;
    if (_sdkFrame.hasMatch(line)) continue;
    if (_frameworkFramePrefixes.any(line.contains)) continue;
    final match = _frameLocation.firstMatch(line);
    frames.add(
      KaiselOriginFrame(
        display: line,
        uri: match?.group(1),
        line: int.tryParse(match?.group(2) ?? ''),
        column: int.tryParse(match?.group(3) ?? ''),
      ),
    );
    if (frames.length >= limit) break;
  }
  return frames;
}