activate-plugin.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { readFileSync } from 'fs';
  2. import path from 'path';
  3. import { GrowiPlugin } from '~/interfaces/plugin';
  4. import { initializeGrowiFacade } from '~/utils/growi-facade';
  5. import { resolveFromRoot } from '~/utils/project-dir-utils';
  6. declare global {
  7. // eslint-disable-next-line vars-on-top, no-var
  8. var pluginActivators: {
  9. [key: string]: {
  10. activate: () => void,
  11. deactivate: () => void,
  12. },
  13. };
  14. }
  15. export type GrowiPluginManifestEntries = [growiPlugin: GrowiPlugin, manifest: any][];
  16. export class ActivatePluginService {
  17. static async retrievePluginManifests(growiPlugins: GrowiPlugin[]): Promise<GrowiPluginManifestEntries> {
  18. const entries: GrowiPluginManifestEntries = [];
  19. growiPlugins.forEach(async(growiPlugin) => {
  20. const manifestPath = resolveFromRoot(path.join('tmp/plugins', growiPlugin.installedPath, 'dist/manifest.json'));
  21. const customManifestStr: string = await readFileSync(manifestPath, 'utf-8');
  22. entries.push([growiPlugin, JSON.parse(customManifestStr)]);
  23. });
  24. return entries;
  25. }
  26. static activateAll(): void {
  27. initializeGrowiFacade();
  28. const { pluginActivators } = window;
  29. if (pluginActivators == null) {
  30. return;
  31. }
  32. Object.entries(pluginActivators).forEach(([, activator]) => {
  33. activator.activate();
  34. });
  35. }
  36. }