tryBuild method

TenunOptionBuildResult tryBuild({
  1. bool deep = true,
  2. bool requireRegisteredType = true,
  3. bool buildWhenInvalid = false,
})

Non-throwing variant of build for developer tools and JSON-driven UIs.

By default, config resolution is skipped when validation has errors. Set buildWhenInvalid to true when you need to collect parser failures as well, for example in diagnostics tooling.

Implementation

TenunOptionBuildResult tryBuild({
  bool deep = true,
  bool requireRegisteredType = true,
  bool buildWhenInvalid = false,
}) {
  final payload = toRenderJson();
  final validation = ChartConfigValidator.validateJsonPayload(
    payload,
    deep: deep,
    requireRegisteredType: requireRegisteredType,
  );

  if (!validation.isValid && !buildWhenInvalid) {
    return TenunOptionBuildResult(
      payload: payload,
      validation: validation,
      config: null,
      error: null,
      stackTrace: null,
      buildAttempted: false,
    );
  }

  try {
    final config = ChartRegistry.resolve(payload);
    return TenunOptionBuildResult(
      payload: payload,
      validation: validation,
      config: config,
      error: null,
      stackTrace: null,
      buildAttempted: true,
    );
  } catch (error, stackTrace) {
    return TenunOptionBuildResult(
      payload: payload,
      validation: validation,
      config: null,
      error: error,
      stackTrace: stackTrace,
      buildAttempted: true,
    );
  }
}