// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:file/file.dart'; import 'package:file/local.dart'; import 'package:path/path.dart' as path; // Represents the locations of all of the data for snippets. class SnippetConfiguration { const SnippetConfiguration({ required this.configDirectory, required this.skeletonsDirectory, this.filesystem = const LocalFileSystem(), }); final FileSystem filesystem; /// This is the configuration directory for the snippets system, containing /// the skeletons and templates. final Directory configDirectory; /// The directory containing the HTML skeletons to be filled out with metadata /// and returned to dartdoc for insertion in the output. final Directory skeletonsDirectory; /// Gets the skeleton file to use for the given [SampleType] and DartPad /// preference. File getHtmlSkeletonFile(String type) { final String filename = type == 'dartpad' ? 'dartpad-sample.html' : '$type.html'; return filesystem.file(path.join(skeletonsDirectory.path, filename)); } } /// A class to compute the configuration of the snippets input and output /// locations based in the current location of the snippets main.dart. class FlutterRepoSnippetConfiguration extends SnippetConfiguration { FlutterRepoSnippetConfiguration({required this.flutterRoot, super.filesystem}) : super( configDirectory: _underRoot(filesystem, flutterRoot, const [ 'dev', 'snippets', 'config', ]), skeletonsDirectory: _underRoot(filesystem, flutterRoot, const [ 'dev', 'snippets', 'config', 'skeletons', ]), ); final Directory flutterRoot; static Directory _underRoot(FileSystem fs, Directory flutterRoot, List dirs) => fs.directory(path.canonicalize(path.joinAll([flutterRoot.absolute.path, ...dirs]))); }