setup-crowi.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { Server } from 'http';
  2. import Crowi from '../../src/server/crowi';
  3. import { setupModelsDependentOnCrowi } from '../../src/server/crowi/setup-models';
  4. let _instance: Crowi;
  5. const initCrowi = async(crowi: Crowi) => {
  6. crowi.models = await setupModelsDependentOnCrowi(crowi);
  7. await crowi.setupConfigManager();
  8. await crowi.setupSocketIoService();
  9. await crowi.socketIoService.attachServer(new Server()); // attach dummy server
  10. await Promise.all([
  11. crowi.setUpApp(),
  12. ]);
  13. await Promise.all([
  14. crowi.setupPassport(),
  15. crowi.setupAttachmentService(),
  16. crowi.setUpAcl(),
  17. crowi.setupPageService(),
  18. crowi.setupInAppNotificationService(),
  19. crowi.setupActivityService(),
  20. crowi.setupUserGroupService(),
  21. ]);
  22. };
  23. export async function getInstance(isNewInstance?: boolean): Promise<Crowi> {
  24. if (isNewInstance) {
  25. const crowi = new Crowi();
  26. await initCrowi(crowi);
  27. return crowi;
  28. }
  29. // initialize singleton instance
  30. if (_instance == null) {
  31. _instance = new Crowi();
  32. await initCrowi(_instance);
  33. }
  34. return _instance;
  35. }