setup-crowi.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { Server } from 'node: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([crowi.setUpApp()]);
  11. await Promise.all([
  12. crowi.setupPassport(),
  13. crowi.setupAttachmentService(),
  14. crowi.setUpAcl(),
  15. crowi.setupPageService(),
  16. crowi.setupInAppNotificationService(),
  17. crowi.setupActivityService(),
  18. crowi.setupUserGroupService(),
  19. ]);
  20. };
  21. export async function getInstance(isNewInstance?: boolean): Promise<Crowi> {
  22. if (isNewInstance) {
  23. const crowi = new Crowi();
  24. await initCrowi(crowi);
  25. return crowi;
  26. }
  27. // initialize singleton instance
  28. if (_instance == null) {
  29. _instance = new Crowi();
  30. await initCrowi(_instance);
  31. }
  32. return _instance;
  33. }