From 0d2481ed8abdb084f5c10984181c2a7355d5208a Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Sun, 12 Apr 2026 12:14:23 -0300 Subject: upd8, etc: curated url validation, tidying modes, --format-urls --- src/write/tidy-modes/sort.js | 61 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/write/tidy-modes/sort.js (limited to 'src/write/tidy-modes/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'; + } +} -- cgit 1.3.0-6-gf8a5