1
0
mirror of synced 2025-12-19 18:10:59 -05:00
Files
docs/script/remove-unused-assets.js
Jason Etcovitch 8d4f3e65fe Move test & script utils out of /lib (#17517)
* Remove an unused file

* Move authenticate-to-aws to scripts/utils

* Move crowdin-config to tests/utils

* Remove add-frontmatter-to-file

* Move find-unused-assets

* Move git-utils to script/utils

* Move lib/github to script/utils

* Revert "Remove an unused file"

This reverts commit cd93ad846a0354e957359f23124eb0724c9147cf.

* Move find-extraneous-translation-files to script/utils

* We already have tests/helpers

* Rename script/utils => helpers for consistency

* Forgot a path

* Fix path to crowdin-config

Co-authored-by: Chiedo John <2156688+chiedo@users.noreply.github.com>
2021-01-29 10:30:51 -05:00

88 lines
2.5 KiB
JavaScript
Executable File

#!/usr/bin/env node
const fs = require('fs')
const path = require('path')
const findUnusedAssets = require('./helpers/find-unused-assets')
// [start-readme]
//
// Run this script to remove reusables and image files that exist in the repo but
// are not used in content files. It also displays a list of unused variables. Set
// the `--dry-run` to flag to print results without deleting any files. For images
// you don't want to delete, add them to `ignoreList` in `lib/find-unused-assets.js`
//
// [end-readme]
const dryRun = process.argv.slice(2).includes('--dry-run')
main()
async function main () {
if (dryRun) {
console.log('This is a dry run! The script will report unused files without deleting anything.')
}
removeUnusedReusables(await findUnusedAssets('reusables'))
removeUnusedImages(await findUnusedAssets('images'))
printUnusedVariables(await findUnusedAssets('variables'))
}
function removeUnusedReusables (reusables) {
logMessage(reusables, 'reusable')
reusables.forEach(reusable => {
const reusablePath = path.join(__dirname, '..', reusable
.replace('site', '')
.replace(/\./g, '/')
.replace(/$/, '.md'))
dryRun
? console.log(reusable)
: fs.unlinkSync(reusablePath)
})
}
function removeUnusedImages (images) {
logMessage(images, 'image')
images.forEach(image => {
const imagePath = path.join(__dirname, '..', image)
dryRun
? console.log(image)
: fs.unlinkSync(imagePath)
})
}
// multiple variables are embedded in within the same YML file
// so we can't just delete the files, and we can't parse/modify
// them either because js-yaml does not preserve whitespace :[
function printUnusedVariables (variables) {
logMessage(variables, 'variable')
variables.forEach(variable => {
const variableKey = variable.split('.').pop()
const variablePath = path.join(process.cwd(), variable
.replace('site', '')
.replace(`.${variableKey}`, '')
.replace(/\./g, '/')
.replace(/$/, '.yml'))
dryRun
? console.log(variable)
: console.log(`* found but did not delete '${variableKey}' in ${variablePath.replace(process.cwd(), '')}`)
})
if (!dryRun) console.log('\nYou will need to manually delete any variables you want to remove.')
}
function logMessage (list, type) {
let action
if (dryRun) {
action = '\n**Found'
} else {
action = type === 'variable'
? ':eyes: **Found'
: ':scissors: **Removed'
}
console.log(`${action} ${list.length} unused ${type} ${list.length === 1 ? 'file' : 'files'}**\n`)
}