build method

  1. @override
  2. @mustCallSuper
FutureOr<void> build([
  1. BuildStep? buildStep
])
override

Generate fileMap from files under importPath.

Loads .json and .yaml files and skips others.

Implementation

@override
@mustCallSuper
FutureOr<void> build([final BuildStep? buildStep]) async {
  await super.build(buildStep);
  if (models.isEmpty) {
  } else if (buildStep != null && buildStep.allowedOutputs.length == 1) {
    await buildStep.writeAsString(
      buildStep.allowedOutputs.single,
      buildStep.trackStage('Generate $_exportPath.', () => generate(models)),
      encoding: exportEncoding,
    );
  } else if (_isDirectoryExport) {
    final Map<String, Iterable<ClassModel>> files =
        <String, Iterable<ClassModel>>{};
    for (final ClassModel model in models) {
      final List<String> parts =
          (model.reference.isEmpty ? model.name : model.reference).split('.');
      final String filename =
          parts.length >= 2 ? parts.elementAt(parts.length - 2) : parts.last;
      final String path = joinAll(<String>[
        ...split(_exportPath),
        if (parts.length >= 2) ...parts.sublist(0, parts.length - 2),
        '$filename$_suffix'
      ]);
      files[path] = <ClassModel>[...?files[path], model];
    }

    if (buildStep != null) {
      for (final AssetId output in buildStep.allowedOutputs) {
        final Iterable<ClassModel>? models =
            files[joinAll(split(output.path).sublist(1))];
        if (models != null) {
          await buildStep.writeAsString(
            output,
            buildStep.trackStage(
              'Generate ${output.path}.',
              () => generate(models),
            ),
            encoding: exportEncoding,
          );
        }
      }
    } else {
      for (final String path in files.keys) {
        final File file = File(path);
        await file.parent.create(recursive: true);
        await file.writeAsString(
          generate(files[path]!),
          encoding: exportEncoding,
          mode: FileMode.writeOnly,
          flush: true,
        );
      }
    }
  } else {
    final File file = File(_exportPath);
    await file.parent.create(recursive: true);
    await file.writeAsString(
      generate(models),
      encoding: exportEncoding,
      mode: FileMode.writeOnly,
      flush: true,
    );
  }
}