worker.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { ThreadWorker } from 'poolifier'
  2. import { kebabCase } from 'lodash-es'
  3. import path from 'node:path'
  4. // ----------------------------------------
  5. // Init Minimal Core
  6. // ----------------------------------------
  7. const 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. export default new ThreadWorker(async (job) => {
  36. WIKI.INSTANCE_ID = job.INSTANCE_ID
  37. const task = (await import(`./tasks/workers/${kebabCase(job.task)}.mjs`)).task
  38. await task(job)
  39. return true
  40. }, { async: true })