write method

  1. @override
FileWriteResult write({
  1. required Brick brick,
  2. required Set<Variable> outOfFileVariables,
})
override

the path to the target file

Implementation

@override
FileWriteResult write({
  required Brick brick,
  required Set<Variable> outOfFileVariables,
}) {
  final targetPathConfig = configurePath(
    urls: brick.urls,
    dirs: brick.directories,
  );

  final targetPath = p.join(targetDir, targetPathConfig.content);

  if (targetPathConfig.data['url'] != null) {
    di<FileSystem>().file(targetPath).createSync(recursive: true);
    return FileWriteResult(
      usedVariables: targetPathConfig.used,
      usedPartials: const {},
    );
  }

  try {
    final configuredVariables = [
      for (final MapEntry(key: placeholder, value: variable)
          in (variableConfig ?? {}).entries)
        VariableImpl(
          name: variable ?? placeholder,
          placeholder: placeholder,
        ),
    ];

    final writeResult = writeFile(
      targetPath: targetPath,
      sourcePath: sourcePath,
      variables: configuredVariables,
      outOfFileVariables: outOfFileVariables,
      partials: brick.partials,
    );

    return FileWriteResult(
      usedPartials: writeResult.usedPartials,
      usedVariables: {
        ...writeResult.usedVariables,
        ...targetPathConfig.used,
      },
    );
  } catch (e) {
    if (e is ConfigException) {
      throw FileException(
        file: sourcePath,
        reason: e.message,
      );
    }
    throw FileException(
      file: sourcePath,
      reason: e.toString(),
    );
  }
}