Views.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. const logger = require('@overleaf/logger')
  2. const pug = require('pug')
  3. const globby = require('globby')
  4. const Settings = require('@overleaf/settings')
  5. const path = require('path')
  6. // Generate list of view names from app/views
  7. const viewList = globby
  8. .sync('app/views/**/*.pug', {
  9. onlyFiles: true,
  10. concurrency: 1,
  11. ignore: '**/_*.pug',
  12. })
  13. .concat(
  14. globby.sync('modules/*/app/views/**/*.pug', {
  15. onlyFiles: true,
  16. concurrency: 1,
  17. ignore: '**/_*.pug',
  18. })
  19. )
  20. .map(x => {
  21. return x.replace(/\.pug$/, '') // strip trailing .pug extension
  22. })
  23. .filter(x => {
  24. return !/^_/.test(x)
  25. })
  26. module.exports = {
  27. precompileViews(app) {
  28. const startTime = Date.now()
  29. let success = 0
  30. let failures = 0
  31. viewList.forEach(view => {
  32. const filename = path.resolve(view + '.pug') // express views are cached using the absolute path
  33. try {
  34. pug.compileFile(filename, {
  35. cache: true,
  36. compileDebug: Settings.debugPugTemplates,
  37. })
  38. logger.debug({ filename }, 'compiled')
  39. success++
  40. } catch (err) {
  41. logger.error({ filename, err: err.message }, 'error compiling')
  42. failures++
  43. }
  44. })
  45. logger.debug(
  46. { timeTaken: Date.now() - startTime, failures, success },
  47. 'compiled templates'
  48. )
  49. },
  50. }