tasks.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /* global config */
  2. const Promise = require('bluebird')
  3. const colors = require('colors/safe')
  4. const fs = Promise.promisifyAll(require('fs-extra'))
  5. const path = require('path')
  6. const uglify = require('uglify-es')
  7. const request = require('request-promise')
  8. const yaml = require('js-yaml')
  9. const _ = require('lodash')
  10. module.exports = {
  11. async fetchLocalizationResources () {
  12. console.info(colors.white(' └── ') + colors.green('Fetching latest localization resources...'))
  13. let langs = await request({
  14. method: 'POST',
  15. uri: `${config.lokalise.api}/string/list`,
  16. form: {
  17. api_token: config.lokalise.key,
  18. id: config.lokalise.project
  19. },
  20. json: true
  21. })
  22. if (langs && langs.strings && _.isPlainObject(langs.strings)) {
  23. _.forIn(langs.strings, (langData, langKey) => {
  24. let lang = {}
  25. let langTotal = 0
  26. langData.forEach(item => {
  27. if (item.is_archived === '1') { return }
  28. item.key = _.replace(item.key, '::', '.')
  29. _.set(lang, item.key, item.translation)
  30. langTotal++
  31. })
  32. let langYaml = yaml.safeDump(lang, {
  33. indent: 2,
  34. sortKeys: true,
  35. lineWidth: 2048
  36. })
  37. fs.writeFileSync(path.join(process.cwd(), `server/locales/${langKey}.yml`), langYaml, 'utf8')
  38. console.info(colors.white(` ${langKey}.yml - ${langTotal} keys written`))
  39. })
  40. } else {
  41. throw new Error('Failed to fetch language list from Lokalise API.')
  42. }
  43. return true
  44. },
  45. /**
  46. * SimpleMDE
  47. */
  48. copySimpleMdeAssets () {
  49. return fs.accessAsync('./assets/js/simplemde').then(() => {
  50. console.info(colors.white(' └── ') + colors.magenta('SimpleMDE directory already exists. Task skipped.'))
  51. return true
  52. }).catch(err => {
  53. if (err.code === 'ENOENT') {
  54. console.info(colors.white(' └── ') + colors.green('Copy + Minify SimpleMDE to assets...'))
  55. return fs.copy('./node_modules/simplemde/dist/simplemde.min.js', './assets/js/simplemde/simplemde.min.js')
  56. } else {
  57. throw err
  58. }
  59. })
  60. },
  61. /**
  62. * ACE Modes
  63. */
  64. copyAceModes () {
  65. return fs.accessAsync('./assets/js/ace').then(() => {
  66. console.info(colors.white(' └── ') + colors.magenta('ACE modes directory already exists. Task skipped.'))
  67. return true
  68. }).catch(err => {
  69. if (err.code === 'ENOENT') {
  70. console.info(colors.white(' └── ') + colors.green('Copy + Minify ACE modes to assets...'))
  71. return fs.ensureDirAsync('./assets/js/ace').then(() => {
  72. return Promise.join(
  73. // Core
  74. Promise.all([
  75. fs.readFileAsync('./node_modules/brace/index.js', 'utf8'),
  76. fs.readFileAsync('./node_modules/brace/ext/modelist.js', 'utf8'),
  77. fs.readFileAsync('./node_modules/brace/theme/dawn.js', 'utf8'),
  78. fs.readFileAsync('./node_modules/brace/theme/tomorrow_night.js', 'utf8'),
  79. fs.readFileAsync('./node_modules/brace/mode/markdown.js', 'utf8')
  80. ]).then(items => {
  81. console.info(colors.white(' ace.js'))
  82. let result = uglify.minify(items.join(';\n'), { output: { 'max_line_len': 1000000 } })
  83. return fs.writeFileAsync('./assets/js/ace/ace.js', result.code)
  84. }),
  85. // Modes
  86. fs.readdirAsync('./node_modules/brace/mode').then(modeList => {
  87. return Promise.map(modeList, mdFile => {
  88. return fs.readFileAsync(path.join('./node_modules/brace/mode', mdFile), 'utf8').then(modeCode => {
  89. console.info(colors.white(' mode-' + mdFile))
  90. let result = uglify.minify(modeCode, { output: { 'max_line_len': 1000000 } })
  91. return fs.writeFileAsync(path.join('./assets/js/ace', 'mode-' + mdFile), result.code)
  92. })
  93. }, { concurrency: 3 })
  94. })
  95. )
  96. })
  97. } else {
  98. throw err
  99. }
  100. })
  101. },
  102. /**
  103. * Delete Fusebox cache
  104. */
  105. cleanFuseboxCache () {
  106. console.info(colors.white(' └── ') + colors.green('Clearing fuse-box cache...'))
  107. return fs.emptyDirAsync('./.fusebox')
  108. },
  109. /**
  110. * Delete Test Results
  111. */
  112. cleanTestResults () {
  113. console.info(colors.white(' └── ') + colors.green('Clearing test results...'))
  114. return fs.remove('./test-results')
  115. }
  116. }