worker.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. const { ThreadWorker } = require('poolifier')
  2. const { kebabCase } = require('lodash')
  3. const path = require('node:path')
  4. // ----------------------------------------
  5. // Init Minimal Core
  6. // ----------------------------------------
  7. let WIKI = {
  8. IS_DEBUG: process.env.NODE_ENV === 'development',
  9. ROOTPATH: process.cwd(),
  10. INSTANCE_ID: 'worker',
  11. SERVERPATH: path.join(process.cwd(), 'server'),
  12. Error: require('./helpers/error'),
  13. configSvc: require('./core/config'),
  14. ensureDb: async () => {
  15. if (WIKI.db) { return true }
  16. WIKI.db = require('./core/db').init(true)
  17. try {
  18. await WIKI.configSvc.loadFromDb()
  19. await WIKI.configSvc.applyFlags()
  20. } catch (err) {
  21. WIKI.logger.error('Database Initialization Error: ' + err.message)
  22. if (WIKI.IS_DEBUG) {
  23. WIKI.logger.error(err)
  24. }
  25. process.exit(1)
  26. }
  27. }
  28. }
  29. global.WIKI = WIKI
  30. WIKI.configSvc.init(true)
  31. WIKI.logger = require('./core/logger').init()
  32. // ----------------------------------------
  33. // Execute Task
  34. // ----------------------------------------
  35. module.exports = new ThreadWorker(async (job) => {
  36. WIKI.INSTANCE_ID = job.INSTANCE_ID
  37. const task = require(`./tasks/workers/${kebabCase(job.task)}.js`)
  38. await task(job)
  39. return true
  40. }, { async: true })