build method

  1. @override
Future<void> build(
  1. BuildStep buildStep
)

Generates the outputs for a given BuildStep.

Implementation

@override
Future<void> build(BuildStep buildStep) async {
  var scratchSpace = await buildStep.fetchResource(scratchSpaceResource);

  await scratchSpace.ensureAssets({buildStep.inputId}, buildStep);

  var outputId =
      buildStep.inputId.changeExtension('').changeExtension('.css');

  final jasprTailwindUri = await Isolate.resolvePackageUri(
    Uri.parse('package:jaspr_tailwind/builder.dart'),
  );
  if (jasprTailwindUri == null) {
    log.severe(
        "Cannot find 'jaspr_tailwind' package. Make sure it's a dependency.");
    return;
  }

  // in order to rebuild when source files change
  var assets = await buildStep.findAssets(Glob('{lib,web}/**.dart')).toList();
  await Future.wait(assets.map((a) => buildStep.canRead(a)));

  var configFile = File('tailwind.config.js');
  var hasCustomConfig = await configFile.exists();

  await Process.run(
    'tailwindcss',
    [
      '--input',
      scratchSpace.fileFor(buildStep.inputId).path,
      '--output',
      scratchSpace.fileFor(outputId).path.toPosix(),
      if (options.config.containsKey('tailwindcss'))
        options.config['tailwindcss'],
      if (hasCustomConfig) ...[
        '--config',
        p.join(Directory.current.path, 'tailwind.config.js').toPosix(),
      ] else ...[
        '--content',
        p
            .join(Directory.current.path, '{lib,web}', '**', '*.dart')
            .toPosix(true),
      ],
    ],
    runInShell: true,
  );

  await scratchSpace.copyOutput(outputId, buildStep);
}