Files
Alexander Vakrilov 8756b3da16 refactor: HMR and webpack improvements (#7462)
* chore: update project

* refactor: clear module-name cache on orientation

* feat: add custom component in qualifiers app

* feat: enable HMR for custom components

* refactor: remove redundant check

* chore: clean console.log
2019-07-08 11:11:14 +03:00

74 lines
2.2 KiB
TypeScript

import { ModuleNameResolver as ModuleNameResolverDefinition, ModuleListProvider } from "./";
import { screen, device } from "../platform/platform";
import * as appCommonModule from "../application/application-common";
import { PlatformContext, findMatch } from "./qualifier-matcher";
export class ModuleNameResolver implements ModuleNameResolverDefinition {
private _cache = {};
constructor(private context: PlatformContext, private moduleListProvider: ModuleListProvider = global.getRegisteredModules) {
}
public resolveModuleName(path: string, ext: string): string {
const key = path + ext;
let result: string = this._cache[key];
if (result === undefined) {
result = this.resolveModuleNameImpl(path, ext);
this._cache[key] = result;
}
return result;
}
public clearCache(): void {
this._cache = {};
}
private resolveModuleNameImpl(path: string, ext: string): string {
let result: string = null;
ext = ext ? "." + ext : "";
const candidates = this.getCandidates(path, ext);
result = findMatch(path, ext, candidates, this.context);
return result;
}
private getCandidates(path: string, ext: string): Array<string> {
const candidates = this.moduleListProvider()
.filter((moduleName) => moduleName.startsWith(path) && (!ext || moduleName.endsWith(ext)));
return candidates;
}
}
let resolverInstance: ModuleNameResolver;
export function resolveModuleName(path: string, ext: string): string {
if (!resolverInstance) {
resolverInstance = new ModuleNameResolver({
width: screen.mainScreen.widthDIPs,
height: screen.mainScreen.heightDIPs,
os: device.os,
deviceType: device.deviceType
});
}
return resolverInstance.resolveModuleName(path, ext);
}
export function clearCache() {
if (resolverInstance) {
resolverInstance.clearCache();
}
}
export function _setResolver(resolver: ModuleNameResolver) {
resolverInstance = resolver;
}
appCommonModule.on("livesync", args => clearCache());
appCommonModule.on("orientationChanged", args => {
resolverInstance = undefined;
});