parseStDesignJson function
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']),
);
}