publish.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/env node
  2. const { execSync } = require('child_process');
  3. const fs = require('fs');
  4. const path = require('path');
  5. const readline = require('readline');
  6. const PKG_PATH = path.join(__dirname, 'package.json');
  7. const pkg = JSON.parse(fs.readFileSync(PKG_PATH, 'utf-8'));
  8. const [major, minor, patch] = pkg.version.split('.').map(Number);
  9. const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
  10. function ask(question) {
  11. return new Promise((resolve) => rl.question(question, resolve));
  12. }
  13. async function main() {
  14. console.log(`\nCurrent version: ${pkg.version}\n`);
  15. console.log(' 1) patch -> ' + `${major}.${minor}.${patch + 1}`);
  16. console.log(' 2) minor -> ' + `${major}.${minor + 1}.0`);
  17. console.log(' 3) major -> ' + `${major + 1}.0.0`);
  18. console.log('');
  19. const choice = await ask('Bump version (1/2/3): ');
  20. let bump;
  21. switch (choice.trim()) {
  22. case '1': bump = 'patch'; break;
  23. case '2': bump = 'minor'; break;
  24. case '3': bump = 'major'; break;
  25. default:
  26. console.log('Invalid choice. Exiting.');
  27. rl.close();
  28. process.exit(1);
  29. }
  30. // Bump version in package.json
  31. execSync(`npm version ${bump} --no-git-tag-version`, { stdio: 'inherit' });
  32. const updated = JSON.parse(fs.readFileSync(PKG_PATH, 'utf-8'));
  33. console.log(`\nVersion bumped to ${updated.version}`);
  34. const confirm = await ask(`Publish ${updated.name}@${updated.version} to npm? (y/n): `);
  35. if (confirm.trim().toLowerCase() !== 'y') {
  36. console.log('Aborted.');
  37. rl.close();
  38. process.exit(0);
  39. }
  40. // Build and publish
  41. console.log('\nBuilding...');
  42. execSync('npm run build', { stdio: 'inherit' });
  43. console.log('\nPublishing...');
  44. execSync('npm publish --access public', { stdio: 'inherit' });
  45. console.log(`\nPublished ${updated.name}@${updated.version}`);
  46. rl.close();
  47. }
  48. main().catch((err) => {
  49. console.error(err);
  50. rl.close();
  51. process.exit(1);
  52. });