107 lines
2.9 KiB
Dart
107 lines
2.9 KiB
Dart
// Copyright (C) 2023 WYATT GROUP
|
|
// Please see the AUTHORS file for details.
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
import 'package:brick_generator/logger.dart';
|
|
import 'package:brick_generator/models/brick_variable.dart';
|
|
import 'package:yaml/yaml.dart';
|
|
|
|
const _nameKey = 'name';
|
|
const _descriptionKey = 'description';
|
|
const _versionKey = 'version';
|
|
const _pathToBrickifyKey = 'path_to_brickify';
|
|
const _varsKey = 'vars';
|
|
|
|
class BrickConfig {
|
|
String? name;
|
|
String? description;
|
|
String? version;
|
|
String? pathToBrickify;
|
|
List<BrickVariable?>? variables;
|
|
|
|
BrickConfig({
|
|
required this.name,
|
|
required this.description,
|
|
required this.version,
|
|
required this.pathToBrickify,
|
|
required this.variables,
|
|
});
|
|
|
|
BrickConfig._();
|
|
factory BrickConfig.parser() => BrickConfig._();
|
|
|
|
static BrickConfig? from(YamlMap? data) => data != null
|
|
? BrickConfig(
|
|
name: data[_nameKey] as String?,
|
|
description: data[_descriptionKey] as String?,
|
|
version: data[_versionKey] as String?,
|
|
pathToBrickify: data[_pathToBrickifyKey] as String?,
|
|
variables: (data[_varsKey] as YamlMap?)
|
|
?.map<dynamic, BrickVariable?>(
|
|
(dynamic key, dynamic value) =>
|
|
MapEntry<dynamic, BrickVariable?>(
|
|
key,
|
|
BrickVariable.from(value as YamlMap?),
|
|
),
|
|
)
|
|
.values
|
|
.toList(),
|
|
)
|
|
: null;
|
|
|
|
void checkFormat() {
|
|
if (name == null || description == null || pathToBrickify == null) {
|
|
final err = 'Yaml file is not conform';
|
|
Logger.throwError(ArgumentError(err), err);
|
|
}
|
|
if (variables != null) {
|
|
for (final variable in variables!) {
|
|
variable?.checkFormat();
|
|
}
|
|
}
|
|
}
|
|
|
|
String toBrickYaml() {
|
|
String content = '''
|
|
name: $name
|
|
description: $description
|
|
|
|
version: $version
|
|
|
|
environment:
|
|
mason: ">=0.1.0-dev.26 <0.1.0"
|
|
|
|
''';
|
|
|
|
if (variables?.isNotEmpty ?? false) {
|
|
content += 'vars:\n';
|
|
for (final BrickVariable? v in variables!) {
|
|
if (v != null) {
|
|
final vString = '''
|
|
${v.name}:
|
|
type: ${v.type.toString()}
|
|
description: ${v.description}
|
|
default: ${v.defaultValue}
|
|
prompt: ${v.prompt}
|
|
''';
|
|
content += vString;
|
|
}
|
|
}
|
|
}
|
|
|
|
return content;
|
|
}
|
|
}
|