diff options
Diffstat (limited to 'src/write/tidy-modes')
| -rw-r--r-- | src/write/tidy-modes/format-urls.js | 34 | ||||
| -rw-r--r-- | src/write/tidy-modes/index.js | 2 | ||||
| -rw-r--r-- | src/write/tidy-modes/sort.js | 61 |
3 files changed, 97 insertions, 0 deletions
diff --git a/src/write/tidy-modes/format-urls.js b/src/write/tidy-modes/format-urls.js new file mode 100644 index 00000000..5771fe3e --- /dev/null +++ b/src/write/tidy-modes/format-urls.js @@ -0,0 +1,34 @@ +export const description = `Update data files in-place to satisfy formatting rules for curated URLs`; + +import {logInfo} from '#cli'; +import {reformatCuratedURLs} from '#reformat-urls'; + +export async function go({ + dataPath, + tidyingOnly, +}) { + const changedFiles = + await reformatCuratedURLs({ + dataPath, + showChangedFiles: true, + showSatisfiedRules: tidyingOnly, + }); + + if (changedFiles.size === 0) { + if (tidyingOnly) { + logInfo`All URL formatting rules were already satisfied. Good to go!`; + return 'clean'; + } else { + logInfo`All curated URL formatting rules are satisfied - nice!`; + return 'clean'; + } + } else { + const filesPart = + (changedFiles.size === 1 + ? `1 file` + : `${changedFiles.size} files`); + + logInfo`Updated ${filesPart} to satisfy URL formatting rules.`; + return 'updated'; + } +} diff --git a/src/write/tidy-modes/index.js b/src/write/tidy-modes/index.js new file mode 100644 index 00000000..54e2bbf3 --- /dev/null +++ b/src/write/tidy-modes/index.js @@ -0,0 +1,2 @@ +export * as 'format-urls' from './format-urls.js'; +export * as 'sort' from './sort.js'; diff --git a/src/write/tidy-modes/sort.js b/src/write/tidy-modes/sort.js new file mode 100644 index 00000000..967a5be1 --- /dev/null +++ b/src/write/tidy-modes/sort.js @@ -0,0 +1,61 @@ +export const description = `Update data files in-place to satisfy custom sorting rules`; + +import {logInfo} from '#cli'; +import {empty} from '#sugar'; +import thingConstructors from '#things'; + +export async function go({ + wikiData, + dataPath, + tidyingOnly, +}) { + if (empty(wikiData.sortingRules)) { + if (tidyingOnly) { + logInfo`There aren't any sorting rules in for this wiki.`; + } + + return 'clean'; + } + + const {SortingRule} = thingConstructors; + + if (!tidyingOnly) { + const results = + await Array.fromAsync(SortingRule.go({dataPath, wikiData})); + + if (results.some(result => result.changed)) { + logInfo`Updated data files to satisfy sorting.`; + return 'updated'; + } else { + logInfo`All sorting rules are satisfied - nice!`; + return 'clean'; + } + } + + let numUpdated = 0; + let numActive = 0; + + for await (const result of SortingRule.go({wikiData, dataPath})) { + numActive++; + + const niceMessage = `"${result.rule.message}"`; + + if (result.changed) { + numUpdated++; + logInfo`Updated to satisfy ${niceMessage}.`; + } else { + logInfo`Already good: ${niceMessage}`; + } + } + + if (numUpdated > 1) { + logInfo`Updated data files to satisfy ${numUpdated} sorting rules.`; + return 'updated'; + } else if (numUpdated === 1) { + logInfo`Updated data files to satisfy ${1} sorting rule.` + return 'updated'; + } else { + logInfo`All sorting rules were already satisfied. Good to go!`; + return 'clean'; + } +} |