1 
2 /**
3  `BaseModule` is just a stub class that fulfils `AnyModule` protocol requirement of public default initializer,
4  but doesn't implement that protocol explicitly, though — it would have to provide a definition which would require
5  other modules to use `override` keyword in the function returning the definition.
6  */
7 open class BaseModule {
8   public private(set) weak var appContext: AppContext?
9 
10   required public init(appContext: AppContext) {
11     self.appContext = appContext
12   }
13 }
14 
15 /**
16  An alias for `AnyModule` extended by the `BaseModule` class that provides public default initializer.
17  */
18 public typealias Module = AnyModule & BaseModule
19