index.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /* global hexo */
  2. 'use strict';
  3. hexo.on('generateBefore', () => {
  4. // Merge config.
  5. require('./lib/config')(hexo);
  6. // Add filter type `theme_inject`
  7. require('./lib/injects')(hexo);
  8. });
  9. hexo.on('generateAfter', () => {
  10. if (!hexo.theme.config.reminder) return;
  11. const https = require('https');
  12. const path = require('path');
  13. const { version } = require(path.normalize('../../package.json'));
  14. https.get('https://api.github.com/repos/theme-next/hexo-theme-next/releases/latest', {
  15. headers: {
  16. 'User-Agent': 'Theme NexT Client'
  17. }
  18. }, res => {
  19. let result = '';
  20. res.on('data', data => {
  21. result += data;
  22. });
  23. res.on('end', () => {
  24. try {
  25. let latest = JSON.parse(result).tag_name.replace('v', '').split('.');
  26. let current = version.split('.');
  27. let isOutdated = false;
  28. for (let i = 0; i < Math.max(latest.length, current.length); i++) {
  29. if (!current[i] || latest[i] > current[i]) {
  30. isOutdated = true;
  31. break;
  32. }
  33. if (latest[i] < current[i]) {
  34. break;
  35. }
  36. }
  37. if (isOutdated) {
  38. hexo.log.warn(`Your theme NexT is outdated. Current version: v${current.join('.')}, latest version: v${latest.join('.')}`);
  39. hexo.log.warn('Visit https://github.com/theme-next/hexo-theme-next/releases for more information.');
  40. } else {
  41. hexo.log.info('Congratulations! Your are using the latest version of theme NexT.');
  42. }
  43. } catch (err) {
  44. hexo.log.error('Failed to detect version info. Error message:');
  45. hexo.log.error(err);
  46. }
  47. });
  48. }).on('error', err => {
  49. hexo.log.error('Failed to detect version info. Error message:');
  50. hexo.log.error(err);
  51. });
  52. });