growi-facade-utils.ts 841 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import type { GrowiFacade } from '@growi/core/dist/interfaces/growi-facade';
  2. import { isServer } from '@growi/core/dist/utils/browser-utils';
  3. import deepmerge from 'ts-deepmerge';
  4. declare global {
  5. // eslint-disable-next-line vars-on-top, no-var
  6. var growiFacade: GrowiFacade;
  7. }
  8. export const initializeGrowiFacade = (): void => {
  9. if (isServer()) {
  10. return;
  11. }
  12. if (window.growiFacade == null) {
  13. window.growiFacade = {};
  14. }
  15. };
  16. export const getGrowiFacade = (): GrowiFacade => {
  17. if (isServer()) {
  18. return {};
  19. }
  20. initializeGrowiFacade();
  21. return window.growiFacade;
  22. };
  23. export const registerGrowiFacade = (addedFacade: GrowiFacade): void => {
  24. if (isServer()) {
  25. throw new Error('This method is available only in client.');
  26. }
  27. window.growiFacade = deepmerge(
  28. getGrowiFacade(),
  29. addedFacade,
  30. );
  31. };