mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00
refactor: circular deps part 12
This commit is contained in:
@ -3,6 +3,7 @@ import { CSSUtils } from '../css/system-classes';
|
||||
import { Device, Screen } from '../platform';
|
||||
import { profile } from '../profiling';
|
||||
import { Trace } from '../trace';
|
||||
import { clearResolverCache, prepareAppForModuleResolver, _setResolver } from '../module-name-resolver/helpers';
|
||||
import { Builder } from '../ui/builder';
|
||||
import * as bindableResources from '../ui/core/bindable/bindable-resources';
|
||||
import type { View } from '../ui/core/view';
|
||||
@ -629,3 +630,10 @@ export class ApplicationCommon {
|
||||
return this.ios;
|
||||
}
|
||||
}
|
||||
|
||||
prepareAppForModuleResolver(() => {
|
||||
ApplicationCommon.on('livesync', (args) => clearResolverCache());
|
||||
ApplicationCommon.on('orientationChanged', (args) => {
|
||||
_setResolver(undefined);
|
||||
});
|
||||
});
|
||||
|
6
packages/core/index.d.ts
vendored
6
packages/core/index.d.ts
vendored
@ -40,8 +40,10 @@ export * as Http from './http';
|
||||
export { ImageAsset } from './image-asset';
|
||||
export type { ImageAssetOptions } from './image-asset';
|
||||
export { ImageSource } from './image-source';
|
||||
export { ModuleNameResolver, _setResolver } from './module-name-resolver';
|
||||
export type { ModuleListProvider, PlatformContext } from './module-name-resolver';
|
||||
export { ModuleNameResolver } from './module-name-resolver';
|
||||
export { _setResolver } from './module-name-resolver/helpers';
|
||||
export type { PlatformContext } from './module-name-resolver';
|
||||
export type { ModuleListProvider } from './module-name-resolver/helpers';
|
||||
export { isAndroid, isIOS, isVisionOS, isApple, Screen, Device, platformNames } from './platform';
|
||||
export type { IDevice } from './platform';
|
||||
export { profile, enable as profilingEnable, disable as profilingDisable, time as profilingTime, uptime as profilingUptime, start as profilingStart, stop as profilingStop, isRunning as profilingIsRunning, dumpProfiles as profilingDumpProfiles, resetProfiles as profilingResetProfiles, startCPUProfile as profilingStartCPU, stopCPUProfile as profilingStopCPU } from './profiling';
|
||||
|
@ -31,8 +31,10 @@ export * as Http from './http';
|
||||
export { ImageAsset } from './image-asset';
|
||||
export type { ImageAssetOptions } from './image-asset';
|
||||
export { ImageSource } from './image-source';
|
||||
export { ModuleNameResolver, _setResolver } from './module-name-resolver';
|
||||
export type { ModuleListProvider, PlatformContext } from './module-name-resolver';
|
||||
export { ModuleNameResolver } from './module-name-resolver';
|
||||
export { _setResolver } from './module-name-resolver/helpers';
|
||||
export type { PlatformContext } from './module-name-resolver';
|
||||
export type { ModuleListProvider } from './module-name-resolver/helpers';
|
||||
export { isAndroid, isIOS, isVisionOS, isApple, Screen, Device, platformNames } from './platform';
|
||||
export type { IDevice } from './platform';
|
||||
|
||||
|
39
packages/core/module-name-resolver/helpers.ts
Normal file
39
packages/core/module-name-resolver/helpers.ts
Normal file
@ -0,0 +1,39 @@
|
||||
export type ModuleListProvider = () => string[];
|
||||
|
||||
let appForModuleResolverCallback: () => void;
|
||||
export function prepareAppForModuleResolver(callback: () => void) {
|
||||
appForModuleResolverCallback = callback;
|
||||
}
|
||||
|
||||
export function initAppForModuleResolver() {
|
||||
console.log('initAppForModuleResolver has callback?', appForModuleResolverCallback);
|
||||
if (appForModuleResolverCallback) {
|
||||
appForModuleResolverCallback();
|
||||
appForModuleResolverCallback = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
export interface ModuleNameResolverType {
|
||||
resolveModuleName(path: string, ext: string): string;
|
||||
clearCache(): void;
|
||||
}
|
||||
|
||||
let resolverInstance: ModuleNameResolverType;
|
||||
|
||||
export function getResolveInstance() {
|
||||
return resolverInstance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to set a global singular instance of ModuleNameResolver
|
||||
* @param resolver instance
|
||||
*/
|
||||
export function _setResolver(resolver: ModuleNameResolverType) {
|
||||
resolverInstance = resolver;
|
||||
}
|
||||
|
||||
export function clearResolverCache() {
|
||||
if (resolverInstance) {
|
||||
resolverInstance.clearCache();
|
||||
}
|
||||
}
|
13
packages/core/module-name-resolver/index.d.ts
vendored
13
packages/core/module-name-resolver/index.d.ts
vendored
@ -2,12 +2,10 @@
|
||||
* Provides ModuleNameResolver class used for loading files based on device capabilities.
|
||||
*/ /** */
|
||||
|
||||
import { PlatformContext } from './qualifier-matcher';
|
||||
|
||||
import type { PlatformContext } from './qualifier-matcher';
|
||||
import type { ModuleListProvider } from './helpers';
|
||||
export { PlatformContext } from './qualifier-matcher';
|
||||
|
||||
export type ModuleListProvider = () => string[];
|
||||
|
||||
export class ModuleNameResolver {
|
||||
constructor(context: PlatformContext, moduleListProvider?: ModuleListProvider);
|
||||
resolveModuleName(path: string, ext: string): string;
|
||||
@ -15,10 +13,3 @@ export class ModuleNameResolver {
|
||||
}
|
||||
|
||||
export function resolveModuleName(path: string, ext: string): string;
|
||||
export function clearCache(): void;
|
||||
|
||||
/**
|
||||
* Used to set a global singular instance of ModuleNameResolver
|
||||
* @param resolver instance
|
||||
*/
|
||||
export function _setResolver(resolver: ModuleNameResolver);
|
||||
|
@ -1,21 +1,18 @@
|
||||
import { Screen, Device } from '../platform';
|
||||
import { PlatformContext, findMatch, stripQualifiers } from './qualifier-matcher';
|
||||
import { registerModulesFromFileSystem } from './non-bundle-workflow-compat';
|
||||
import { Trace } from '../trace';
|
||||
import { Application } from '../application';
|
||||
import { ModuleNameResolverType, ModuleListProvider, initAppForModuleResolver, getResolveInstance, _setResolver } from './helpers';
|
||||
|
||||
export type { PlatformContext } from './qualifier-matcher';
|
||||
|
||||
export type ModuleListProvider = () => string[];
|
||||
|
||||
export class ModuleNameResolver {
|
||||
export class ModuleNameResolver implements ModuleNameResolverType {
|
||||
private _cache = {};
|
||||
|
||||
constructor(private context: PlatformContext, private moduleListProvider: ModuleListProvider = global.getRegisteredModules) {
|
||||
Application.on('livesync', (args) => clearCache());
|
||||
Application.on('orientationChanged', (args) => {
|
||||
resolverInstance = undefined;
|
||||
});
|
||||
constructor(
|
||||
private context: PlatformContext,
|
||||
private moduleListProvider: ModuleListProvider = global.getRegisteredModules,
|
||||
) {
|
||||
initAppForModuleResolver();
|
||||
}
|
||||
|
||||
public resolveModuleName(path: string, ext: string): string {
|
||||
@ -57,23 +54,23 @@ export class ModuleNameResolver {
|
||||
}
|
||||
}
|
||||
|
||||
let resolverInstance: ModuleNameResolver;
|
||||
|
||||
export function resolveModuleName(path: string, ext: string): string {
|
||||
if (global.__snapshot) {
|
||||
return resolveModuleSnapshot(path, ext);
|
||||
}
|
||||
|
||||
if (!resolverInstance) {
|
||||
resolverInstance = new ModuleNameResolver({
|
||||
width: Screen.mainScreen.widthDIPs,
|
||||
height: Screen.mainScreen.heightDIPs,
|
||||
os: Device.os,
|
||||
deviceType: Device.deviceType,
|
||||
});
|
||||
if (!getResolveInstance()) {
|
||||
_setResolver(
|
||||
new ModuleNameResolver({
|
||||
width: Screen.mainScreen.widthDIPs,
|
||||
height: Screen.mainScreen.heightDIPs,
|
||||
os: Device.os,
|
||||
deviceType: Device.deviceType,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
return resolverInstance.resolveModuleName(path, ext);
|
||||
return getResolveInstance().resolveModuleName(path, ext);
|
||||
}
|
||||
|
||||
function resolveModuleSnapshot(path, ext) {
|
||||
@ -89,13 +86,3 @@ function resolveModuleSnapshot(path, ext) {
|
||||
deviceType: 'Phone',
|
||||
}).resolveModuleName(path, ext);
|
||||
}
|
||||
|
||||
export function clearCache() {
|
||||
if (resolverInstance) {
|
||||
resolverInstance.clearCache();
|
||||
}
|
||||
}
|
||||
|
||||
export function _setResolver(resolver: ModuleNameResolver) {
|
||||
resolverInstance = resolver;
|
||||
}
|
||||
|
Reference in New Issue
Block a user