tibi-docs/.yarn/unplugged/metalsmith-npm-2.5.1-131e5add51/node_modules/metalsmith/metalsmith-migrated-plugins.js
2022-11-02 06:40:25 +00:00

78 lines
2.1 KiB
JavaScript

const { join } = require('path')
const { readFile } = require('fs')
const { isObject } = require('./lib/helpers')
const outdatedPlugins = [
'markdown',
'in-place',
'layouts',
'collections',
'drafts',
'ignore',
'postcss',
'permalinks',
'default-values',
'metadata',
'excerpts',
'autotoc'
]
const renamedPlugins = {
ignore: 'remove',
autotoc: 'table-of-contents'
}
// only provided when running npm scripts
// otherwise default to working directory
const projectDir = process.env.INIT_CWD || process.cwd()
// when reading package.json
// always fail silently as to not interrupt the install DX
readFile(join(projectDir, 'package.json'), 'utf-8', (err, data) => {
if (err) return
let parsed = false
try {
parsed = JSON.parse(data)
} catch (err) {
return
}
if (!parsed) return
const toCheck = []
if (isObject(parsed.devDependencies)) {
toCheck.push.apply(toCheck, Object.keys(parsed.devDependencies))
}
if (isObject(parsed.dependencies)) {
toCheck.push.apply(toCheck, Object.keys(parsed.dependencies))
}
const pluginMap = toCheck.reduce((all, fullname) => {
if (!fullname.startsWith('metalsmith-')) return all
const name = fullname.replace(/^metalsmith-/, '')
if (outdatedPlugins.includes(name)) {
const newName = renamedPlugins[name] ? renamedPlugins[name] : name
all[`metalsmith-${name}`] = `@metalsmith/${newName}`
}
return all
}, {})
if (Object.keys(pluginMap).length) {
process.stdout.write(
`\x1b[43m\x1b[30m WARN \x1b[0m\x1b[49m\x1b[33m Metalsmith has detected deprecated core plugins that have moved to the @metalsmith org on NPM:\n\n`
)
Object.entries(pluginMap).forEach(([oldName, newName]) => {
process.stdout.write(`· ${oldName} -> ${newName}\n`)
})
process.stdout.write(
[
'\nRun the commands below to migrate:',
` npm remove ${Object.keys(pluginMap).join(' ')}`,
` npm i ${Object.values(pluginMap).join(' ')}\n`,
'For all available core plugins, see https://github.com/search?q=topic%3Ametalsmith-plugin+org%3Ametalsmith&type=Repositories',
'\x1b[0m'
].join('\n')
)
}
})