All files / src/start-application start-electron-application.injectable.ts

100% Statements 49/49
100% Branches 6/6
100% Functions 3/3
100% Lines 49/49

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 501x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 1x 1x 1x 5x 5x 1x 1x 1x 1x 1x 8x 8x 8x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
import {
  DiContainer,
  getInjectable,
  instantiationDecoratorToken,
  lifecycleEnum,
} from "@ogre-tools/injectable";
import { startApplicationInjectionToken } from "@k8slens/application";
import whenAppIsReadyInjectable from "./when-app-is-ready.injectable";
import { beforeAnythingInjectionToken, beforeElectronIsReadyInjectionToken } from "./time-slots";
import { runManySyncFor } from "@k8slens/run-many";
import { curry } from "lodash";
 
type ToBeDecorated = (di: DiContainer, ...args: unknown[]) => (...args: unknown[]) => unknown;
 
const decorator = (toBeDecorated: unknown, di: DiContainer, ...args: unknown[]) => {
  const whenAppIsReady = di.inject(whenAppIsReadyInjectable);
  const runManySync = runManySyncFor(di);
  const beforeAnything = runManySync(beforeAnythingInjectionToken);
  const beforeElectronIsReady = runManySync(beforeElectronIsReadyInjectionToken);
  const startApplication = (toBeDecorated as ToBeDecorated)(di, ...args);
 
  return (...startApplicationArgs: unknown[]) => {
    beforeAnything();
    beforeElectronIsReady();
 
    return (async () => {
      await whenAppIsReady();
 
      return startApplication(...startApplicationArgs);
    })();
  };
};
 
const startElectronApplicationInjectable = getInjectable({
  id: "start-electron-application",
 
  instantiate: () => ({
    decorate: curry(decorator),
    target: startApplicationInjectionToken,
  }),
 
  decorable: false,
 
  injectionToken: instantiationDecoratorToken,
 
  lifecycle: lifecycleEnum.singleton,
});
 
export default startElectronApplicationInjectable;