index.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. var fs = require('fs')
  2. var path = require('path')
  3. var vm = require('vm')
  4. var uglify = require('uglify-js')
  5. // load prism languages
  6. var include = (file) => {
  7. var fpath = path.resolve(__dirname, `../../node_modules/prismjs/${file}.js`)
  8. var source = fs.readFileSync(fpath, 'utf8')
  9. var ctx = vm.createContext()
  10. vm.runInContext(source, ctx)
  11. return ctx
  12. }
  13. var {components: {languages}} = include('components')
  14. delete languages.meta
  15. // update prism languages config
  16. var config = require('./prism.json')
  17. // sort the included ones
  18. config['markdown-viewer'] = config['markdown-viewer'].sort()
  19. // add any new
  20. config.all = Object.keys(languages)
  21. fs.writeFileSync(path.resolve(__dirname, 'prism.json'),
  22. JSON.stringify(config, null, 2), 'utf8')
  23. // build prism.min.js
  24. var core = fs.readFileSync(
  25. path.resolve(__dirname, '../../node_modules/prismjs/prism.js'), 'utf8')
  26. // core
  27. var source = uglify.minify(core, {compress: {}, mangle: true}).code
  28. // components
  29. source += config['markdown-viewer'].reduce((source, component) => (
  30. source += fs.readFileSync(path.resolve(__dirname,
  31. `../../node_modules/prismjs/components/prism-${component}.min.js`), 'utf8') + '\n',
  32. source
  33. ), '')
  34. fs.writeFileSync(path.resolve(__dirname, '../../vendor/prism.min.js'), source, 'utf8')
  35. // build css
  36. var csso = require('csso')
  37. var source = fs.readFileSync(
  38. path.resolve(__dirname, '../../node_modules/prismjs/themes/prism.css'),
  39. 'utf8'
  40. )
  41. fs.writeFileSync(
  42. path.resolve(__dirname, '../../vendor/prism.min.css'),
  43. csso.minify(source).css,
  44. 'utf8'
  45. )
  46. // print stats
  47. var included = config.all
  48. .filter((name) => config['markdown-viewer'].includes(name))
  49. .map((name) => ({
  50. name,
  51. size: fs.lstatSync(path.resolve(__dirname,
  52. `../../node_modules/prismjs/components/prism-${name}.min.js`)).size
  53. }))
  54. var excluded = config.all
  55. .filter((name) => !config['markdown-viewer'].includes(name))
  56. .map((name) => ({
  57. name,
  58. size: fs.lstatSync(path.resolve(__dirname,
  59. `../../node_modules/prismjs/components/prism-${name}.min.js`)).size
  60. }))
  61. console.log('Excluded:')
  62. excluded // sorted by name
  63. // .sort((a, b) => b.size - a.size) // sorted by size
  64. .forEach(({name, size}) => console.log(name, '\t\t\t', size))
  65. console.log('Included:', included.length, included.reduce((total, {size}) => total += size, 0))
  66. console.log('Excluded:', excluded.length, excluded.reduce((total, {size}) => total += size, 0))