diff --git a/scripts/docs/directory_extension.dart b/scripts/docs/directory_extension.dart new file mode 100644 index 0000000..7baa4b5 --- /dev/null +++ b/scripts/docs/directory_extension.dart @@ -0,0 +1,50 @@ +import "dart:io"; +import "dart:typed_data"; + +import "package:path/path.dart"; + +extension DirectoryExtension on Directory { + Future recreate({ + Iterable filenamesToPreserve = const [], + bool recursive = true, + }) async { + final filesToPreserveContents = {}; + + for (final filename in filenamesToPreserve) { + final filePath = joinAll([path, filename]); + + switch (await FileSystemEntity.type(filePath)) { + case .directory: + if (!recursive) break; + + final Directory dir = .new(filePath); + + await for (final file in dir.list(recursive: recursive)) { + if (file is! File) continue; + filesToPreserveContents[file] = await file.readAsBytes(); + } + + break; + case .file: + final File file = .new(filePath); + + filesToPreserveContents[file] = await file.readAsBytes(); + + break; + default: + break; + } + } + + await delete(recursive: true); + await create(); + + for (final entry in filesToPreserveContents.entries) { + if (!await entry.key.parent.exists()) { + await entry.key.parent.create(recursive: true); + } + + await entry.key.writeAsBytes(entry.value, flush: true); + } + } +} diff --git a/scripts/docs/generate.dart b/scripts/docs/generate.dart index 2b484d5..075d148 100644 --- a/scripts/docs/generate.dart +++ b/scripts/docs/generate.dart @@ -1,38 +1,23 @@ // dart scripts/docs/generate.dart import "dart:io"; -import "dart:typed_data"; import "package:args/command_runner.dart"; import "package:discloud/cli/runner.dart"; import "package:discloud/version.dart"; -import "package:path/path.dart"; +import "directory_extension.dart"; import "generate/commands.dart"; import "generate/index.dart"; import "markdown_to_html_converter.dart"; const _docsRootPath = "docs"; +const _filenamesToPreserve = {"_config.yml"}; void main() async { final docRootDir = Directory(_docsRootPath); - const filesToPreserve = {"_config.yml"}; - final filesToPreserveContents = {}; - - for (final filename in filesToPreserve) { - final File file = .new(joinAll([_docsRootPath, filename])); - if (!await file.exists()) continue; - - filesToPreserveContents[file] = await file.readAsBytes(); - } - - await docRootDir.delete(recursive: true); - await docRootDir.create(recursive: true); - - for (final entry in filesToPreserveContents.entries) { - await entry.key.writeAsBytes(entry.value, flush: true); - } + await docRootDir.recreate(filenamesToPreserve: _filenamesToPreserve); const version = packageVersion == "0.0.0" ? "" : " v$packageVersion";