refactor: circular deps part 12

This commit is contained in:
Nathan Walker
2025-07-09 12:16:50 -07:00
parent 33d967b5b2
commit ee03774ec0
6 changed files with 74 additions and 45 deletions

View File

@ -3,6 +3,7 @@ import { CSSUtils } from '../css/system-classes';
import { Device, Screen } from '../platform'; import { Device, Screen } from '../platform';
import { profile } from '../profiling'; import { profile } from '../profiling';
import { Trace } from '../trace'; import { Trace } from '../trace';
import { clearResolverCache, prepareAppForModuleResolver, _setResolver } from '../module-name-resolver/helpers';
import { Builder } from '../ui/builder'; import { Builder } from '../ui/builder';
import * as bindableResources from '../ui/core/bindable/bindable-resources'; import * as bindableResources from '../ui/core/bindable/bindable-resources';
import type { View } from '../ui/core/view'; import type { View } from '../ui/core/view';
@ -629,3 +630,10 @@ export class ApplicationCommon {
return this.ios; return this.ios;
} }
} }
prepareAppForModuleResolver(() => {
ApplicationCommon.on('livesync', (args) => clearResolverCache());
ApplicationCommon.on('orientationChanged', (args) => {
_setResolver(undefined);
});
});

View File

@ -40,8 +40,10 @@ export * as Http from './http';
export { ImageAsset } from './image-asset'; export { ImageAsset } from './image-asset';
export type { ImageAssetOptions } from './image-asset'; export type { ImageAssetOptions } from './image-asset';
export { ImageSource } from './image-source'; export { ImageSource } from './image-source';
export { ModuleNameResolver, _setResolver } from './module-name-resolver'; export { ModuleNameResolver } from './module-name-resolver';
export type { ModuleListProvider, PlatformContext } 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 { isAndroid, isIOS, isVisionOS, isApple, Screen, Device, platformNames } from './platform';
export type { IDevice } 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'; 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';

View File

@ -31,8 +31,10 @@ export * as Http from './http';
export { ImageAsset } from './image-asset'; export { ImageAsset } from './image-asset';
export type { ImageAssetOptions } from './image-asset'; export type { ImageAssetOptions } from './image-asset';
export { ImageSource } from './image-source'; export { ImageSource } from './image-source';
export { ModuleNameResolver, _setResolver } from './module-name-resolver'; export { ModuleNameResolver } from './module-name-resolver';
export type { ModuleListProvider, PlatformContext } 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 { isAndroid, isIOS, isVisionOS, isApple, Screen, Device, platformNames } from './platform';
export type { IDevice } from './platform'; export type { IDevice } from './platform';

View 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();
}
}

View File

@ -2,12 +2,10 @@
* Provides ModuleNameResolver class used for loading files based on device capabilities. * 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 { PlatformContext } from './qualifier-matcher';
export type ModuleListProvider = () => string[];
export class ModuleNameResolver { export class ModuleNameResolver {
constructor(context: PlatformContext, moduleListProvider?: ModuleListProvider); constructor(context: PlatformContext, moduleListProvider?: ModuleListProvider);
resolveModuleName(path: string, ext: string): string; resolveModuleName(path: string, ext: string): string;
@ -15,10 +13,3 @@ export class ModuleNameResolver {
} }
export function resolveModuleName(path: string, ext: string): string; 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);

View File

@ -1,21 +1,18 @@
import { Screen, Device } from '../platform'; import { Screen, Device } from '../platform';
import { PlatformContext, findMatch, stripQualifiers } from './qualifier-matcher'; import { PlatformContext, findMatch, stripQualifiers } from './qualifier-matcher';
import { registerModulesFromFileSystem } from './non-bundle-workflow-compat';
import { Trace } from '../trace'; import { Trace } from '../trace';
import { Application } from '../application'; import { ModuleNameResolverType, ModuleListProvider, initAppForModuleResolver, getResolveInstance, _setResolver } from './helpers';
export type { PlatformContext } from './qualifier-matcher'; export type { PlatformContext } from './qualifier-matcher';
export type ModuleListProvider = () => string[]; export class ModuleNameResolver implements ModuleNameResolverType {
export class ModuleNameResolver {
private _cache = {}; private _cache = {};
constructor(private context: PlatformContext, private moduleListProvider: ModuleListProvider = global.getRegisteredModules) { constructor(
Application.on('livesync', (args) => clearCache()); private context: PlatformContext,
Application.on('orientationChanged', (args) => { private moduleListProvider: ModuleListProvider = global.getRegisteredModules,
resolverInstance = undefined; ) {
}); initAppForModuleResolver();
} }
public resolveModuleName(path: string, ext: string): string { 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 { export function resolveModuleName(path: string, ext: string): string {
if (global.__snapshot) { if (global.__snapshot) {
return resolveModuleSnapshot(path, ext); return resolveModuleSnapshot(path, ext);
} }
if (!resolverInstance) { if (!getResolveInstance()) {
resolverInstance = new ModuleNameResolver({ _setResolver(
new ModuleNameResolver({
width: Screen.mainScreen.widthDIPs, width: Screen.mainScreen.widthDIPs,
height: Screen.mainScreen.heightDIPs, height: Screen.mainScreen.heightDIPs,
os: Device.os, os: Device.os,
deviceType: Device.deviceType, deviceType: Device.deviceType,
}); }),
);
} }
return resolverInstance.resolveModuleName(path, ext); return getResolveInstance().resolveModuleName(path, ext);
} }
function resolveModuleSnapshot(path, ext) { function resolveModuleSnapshot(path, ext) {
@ -89,13 +86,3 @@ function resolveModuleSnapshot(path, ext) {
deviceType: 'Phone', deviceType: 'Phone',
}).resolveModuleName(path, ext); }).resolveModuleName(path, ext);
} }
export function clearCache() {
if (resolverInstance) {
resolverInstance.clearCache();
}
}
export function _setResolver(resolver: ModuleNameResolver) {
resolverInstance = resolver;
}