parseStDesignJson function

STDesignIr parseStDesignJson(
  1. Map<String, dynamic> json
)

Reads a JSON object (from jsonDecode) into a Dart-only design IR.

Implementation

STDesignIr parseStDesignJson(Map<String, dynamic> json) {
  final rawName =
      json['variable'] as String? ?? json['name'] as String? ?? 'appST';
  final variableName =
      stDartIdentifier(rawName) == rawName
          ? rawName
          : stDartIdentifier(rawName);
  final extensionName =
      json['extension'] as String? ?? stDefaultExtensionName(variableName);
  final partOf = json['partOf'] as String?;

  final colorsRaw = json['colors'];
  if (colorsRaw == null) {
    throw const FormatException('JSON needs a "colors" object');
  }
  final colors = _colors(_map(colorsRaw, 'colors'));

  STRadiusIr? radius;
  if (json['radius'] != null) {
    final radiusMap = _map(json['radius'], 'radius');
    radius = STRadiusIr(
      xs: _double(radiusMap['xs'], 'radius.xs'),
      sm: _double(radiusMap['sm'], 'radius.sm'),
      md: _double(radiusMap['md'], 'radius.md'),
      lg: _double(radiusMap['lg'], 'radius.lg'),
      xl: _double(radiusMap['xl'], 'radius.xl'),
    );
  }

  STTypographyIr? typography;
  if (json['typography'] != null) {
    typography = _typography(_map(json['typography'], 'typography'));
  }

  STComponentsIr? components;
  if (json['components'] != null) {
    components = _components(_map(json['components'], 'components'));
  }

  return STDesignIr(
    variableName: variableName,
    extensionName: extensionName,
    partOf: partOf,
    colors: colors,
    radius: radius,
    typography: typography,
    components: components,
    extras: _extras(json['extras']),
  );
}