feat(lint-staged): add .USAGE.md → README.md
So that it's not needed to manually runs from `normalize-packages.js`.
This commit is contained in:
@@ -89,6 +89,7 @@
|
||||
"eslint",
|
||||
"jest --testRegex='^(?!.*.integ.spec.js$).*.spec.js$' --findRelatedTests --passWithNoTests"
|
||||
],
|
||||
".USAGE.md": "scripts/usage-to-readme.js --git-add",
|
||||
"./CHANGELOG.unreleased.md": "sh -c scripts/gen-deps-list.js --"
|
||||
},
|
||||
"private": true,
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
const isEmpty = require('lodash/isEmpty')
|
||||
const sortedObject = require('sorted-object')
|
||||
const { dirname, join, relative } = require('path')
|
||||
const { getPackages, noop, readFile, symlink, writeFile, unlink } = require('./utils')
|
||||
|
||||
const usageToReadme = require('./usage-to-readme.js')
|
||||
const { getPackages, noop, symlink, writeFile, unlink } = require('./utils')
|
||||
|
||||
const BABEL_ESLINTRC_PATH = join(__dirname, 'babel-eslintrc.js')
|
||||
const NPMIGNORE_PATH = join(__dirname, 'npmignore')
|
||||
@@ -27,10 +29,6 @@ const deleteProperties = (object, property, properties) => {
|
||||
deleteIfEmpty(object, property)
|
||||
}
|
||||
|
||||
const generateReadme = require('handlebars').compile(
|
||||
require('fs').readFileSync(join(__dirname, 'README.md.tpl'), 'utf8')
|
||||
)
|
||||
|
||||
const forceRelativeSymlink = async (target, path) => {
|
||||
await unlink(path).catch(noop)
|
||||
return symlink(relative(dirname(path), target), path)
|
||||
@@ -128,21 +126,11 @@ require('exec-promise')(() =>
|
||||
|
||||
return Promise.all([
|
||||
forceRelativeSymlink(NPMIGNORE_PATH, `${dir}/.npmignore`),
|
||||
readFile(`${dir}/.USAGE.md`, 'utf8')
|
||||
.then(content =>
|
||||
writeFile(
|
||||
`${dir}/README.md`,
|
||||
generateReadme({
|
||||
pkg,
|
||||
usage: content.trim(),
|
||||
})
|
||||
)
|
||||
)
|
||||
.catch(error => {
|
||||
if (error.code !== 'ENOENT') {
|
||||
console.error('Error while handling README', error)
|
||||
}
|
||||
}),
|
||||
usageToReadme(`${dir}/.USAGE.md`).catch(error => {
|
||||
if (error.code !== 'ENOENT') {
|
||||
console.error('Error while handling README', error)
|
||||
}
|
||||
}),
|
||||
useBabel ? forceRelativeSymlink(BABEL_ESLINTRC_PATH, `${dir}/.eslintrc.js`) : unlink(`${dir}/.eslintrc.js`),
|
||||
writeFile(`${dir}/package.json`, JSON.stringify(pkg, null, 2) + '\n'),
|
||||
useBabel || unlink(`${dir}/.babelrc.js`),
|
||||
|
||||
46
scripts/usage-to-readme.js
Executable file
46
scripts/usage-to-readme.js
Executable file
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
'use strict'
|
||||
|
||||
const { compile } = require('handlebars')
|
||||
const { dirname, join } = require('node:path')
|
||||
const { readFile, writeFile } = require('node:fs/promises')
|
||||
const { execFile } = require('node:child_process')
|
||||
|
||||
const generateReadme = readFile(join(__dirname, 'README.md.tpl'), 'utf8').then(compile)
|
||||
|
||||
async function usageToReadme(...args) {
|
||||
const gitAdd = args[0] === '--git-add'
|
||||
if (gitAdd) {
|
||||
args.shift()
|
||||
}
|
||||
|
||||
const usagePath = args[0]
|
||||
const dir = dirname(usagePath)
|
||||
|
||||
const [usage, pkg] = await Promise.all([
|
||||
readFile(usagePath, 'utf8'),
|
||||
readFile(join(dir, 'package.json')).then(JSON.parse),
|
||||
])
|
||||
|
||||
const readmePath = join(dir, 'README.md')
|
||||
await writeFile(readmePath, (await generateReadme)({ pkg, usage: usage.trim() }))
|
||||
|
||||
if (gitAdd) {
|
||||
await new Promise((resolve, reject) => {
|
||||
execFile('git', ['add', '--', readmePath])
|
||||
.on('error', reject)
|
||||
.on('exit', code => {
|
||||
if (code !== 0) {
|
||||
reject(new Error('command exited with non-zero status code: ' + code))
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (module.parent !== null) {
|
||||
module.exports = usageToReadme
|
||||
} else {
|
||||
usageToReadme(...process.argv.slice(2))
|
||||
}
|
||||
Reference in New Issue
Block a user