kaiselOriginFrames function
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;
}