nmPreviewTransformation function
Runs pipeline (a list of {operation, …} maps) on input and records each step.
Implementation
NmTransformationPreview nmPreviewTransformation(Object? input, List<dynamic> pipeline, {Map<String, Object?> record = const {}}) {
Object? value = input;
final steps = <NmTransformationStep>[];
for (final raw in pipeline) {
if (raw is! Map) continue;
final operation = raw['operation']?.toString() ?? '';
final before = value;
String? diagnostic;
try {
value = _apply(value, operation, raw, record);
} catch (error) {
final policy = raw['on_error'] ?? 'reject';
diagnostic = error.toString();
if (policy == 'keep_original') value = before;
if (policy == 'null') value = null;
if (policy == 'reject') {
steps.add(NmTransformationStep(operation: operation, input: before, output: before, diagnostic: diagnostic));
break;
}
}
steps.add(NmTransformationStep(operation: operation, input: before, output: value, diagnostic: diagnostic));
}
return NmTransformationPreview(value, steps);
}