UNPKG

clean-publish

Version:
140 lines (123 loc) 4.34 kB
#!/usr/bin/env node import { cleanComments, cleanDocs, clearPackageJSON, copyFiles, createFilesFilter, createTempDirectory, publish, readPackageJSON, removeTempDirectory, runScript, writePackageJSON } from './core.js' import { getConfig } from './get-config.js' import { parseListArg } from './utils.js' const HELP = 'npx clean-publish\n' + '\n' + 'Options:\n' + ' --help Show help\n' + ' --version Show version number\n' + ' --clean-docs Keep only main section of README.md' + ' --clean-comments Clean inline comments from JS files' + ' --files One or more exclude files\n' + ' --fields One or more exclude package.json fields\n' + ' --without-publish Clean package without npm publish\n' + ' --dry-run Reports the details of what would have been published\n' + ' --package-manager Package manager to use\n' + ' --access Whether the npm registry publishes this package\n' + ' as a public package, or restricted\n' + ' --tag Registers the package with the given tag\n' + ' --before-script Run script on the to-release dir before npm\n' + ' publish\n' + ' --temp-dir Create temporary directory with given name\n' + ' -- Pass next arguments as package manager options' const DEFAULT_OPTIONS = { packageManager: 'npm' } async function handleOptions() { let options = {} for (let i = 2; i < process.argv.length; i++) { if (process.argv[i] === '--help') { process.stdout.write(HELP + '\n') process.exit(0) } else if (process.argv[i] === '--version') { process.stdout.write(require('./package.json').version + '\n') process.exit(0) } else if (process.argv[i] === '--without-publish') { options.withoutPublish = true } else if (process.argv[i] === '--dry-run') { options.dryRun = true i += 1 } else if (process.argv[i] === '--package-manager') { options.packageManager = process.argv[i + 1] i += 1 } else if (process.argv[i] === '--before-script') { options.beforeScript = process.argv[i + 1] i += 1 } else if (process.argv[i] === '--access') { options.access = process.argv[i + 1] i += 1 } else if (process.argv[i] === '--files') { options.files = parseListArg(process.argv[i + 1]) i += 1 } else if (process.argv[i] === '--clean-docs') { options.cleanDocs = true i += 1 } else if (process.argv[i] === '--clean-comments') { options.cleanComments = true i += 1 } else if (process.argv[i] === '--tag') { options.tag = process.argv[i + 1] i += 1 } else if (process.argv[i] === '--fields') { options.fields = parseListArg(process.argv[i + 1]) i += 1 } else if (process.argv[i] === '--temp-dir') { options.tempDir = process.argv[i + 1] i += 1 } else if (process.argv[i] === '--') { options.packageManagerOptions = process.argv.slice(i + 1) break } else { options._ = process.argv[i] } } if (!options._) { let config = await getConfig() return { ...DEFAULT_OPTIONS, ...config, ...options } } else { return options } } async function run() { const options = await handleOptions() const tempDirectoryName = await createTempDirectory(options.tempDir) const filesFilter = createFilesFilter(options.files) await copyFiles(tempDirectoryName, filesFilter) const packageJson = await readPackageJSON() if (options.cleanDocs) { await cleanDocs(tempDirectoryName, packageJson.repository, packageJson.homepage) } if (options.cleanComments) { await cleanComments(tempDirectoryName) } const cleanPackageJSON = clearPackageJSON(packageJson, options.fields) await writePackageJSON(tempDirectoryName, cleanPackageJSON) let prepublishSuccess = true if (options.beforeScript) { prepublishSuccess = await runScript(options.beforeScript, tempDirectoryName) } if (!options.withoutPublish && prepublishSuccess) { await publish(tempDirectoryName, options) } if (!options.withoutPublish) { await removeTempDirectory(tempDirectoryName) } } run().catch(error => { process.stderr.write(error.stack + '\n') process.exit(1) })