nmPreviewTransformation function

NmTransformationPreview nmPreviewTransformation(
  1. Object? input,
  2. List pipeline, {
  3. Map<String, Object?> record = const {},
})

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);
}