index.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. // print the excluded ones and their corresponding files sizes
  36. console.log('Excluded:')
  37. config.all
  38. .filter((component) => !config['markdown-viewer'].includes(component))
  39. .map((component) => console.log(
  40. component, '\t\t\t',
  41. fs.lstatSync(path.resolve(__dirname,
  42. `../../node_modules/prismjs/components/prism-${component}.min.js`)).size
  43. ))
  44. // build css
  45. var csso = require('csso')
  46. var source = fs.readFileSync(
  47. path.resolve(__dirname, '../../node_modules/prismjs/themes/prism.css'),
  48. 'utf8'
  49. )
  50. fs.writeFileSync(
  51. path.resolve(__dirname, '../../vendor/prism.min.css'),
  52. csso.minify(source).css,
  53. 'utf8'
  54. )