worker.mjs 1.4 KB

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