SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
4e23b01 verified
Raw
History Blame Contribute Delete
1.31 kB
import type { CascadeEngine } from '#/_base/di/cascadeEngine';
import type { InstantiationService } from '#/_base/di/instantiationService';
export interface ScopeContainerInfo {
readonly container: InstantiationService;
readonly path: string;
readonly label: string;
}
export function scopeContainerLabel(container: InstantiationService): string {
return container.debugLabel ?? `#${container.cascadeTree.seqOf(container)}`;
}
export function walkScopeContainers(root: InstantiationService): ScopeContainerInfo[] {
const out: ScopeContainerInfo[] = [];
const visit = (container: InstantiationService, path: string): void => {
out.push({ container, path, label: scopeContainerLabel(container) });
for (const child of container.children) {
visit(child, `${path}/${scopeContainerLabel(child)}`);
}
};
visit(root, scopeContainerLabel(root));
return out;
}
export function resolveScopeContainer(
root: InstantiationService,
path: string,
): InstantiationService | undefined {
return walkScopeContainers(root).find((info) => info.path === path)?.container;
}
export function scopePathOfEngine(
root: InstantiationService,
engine: CascadeEngine,
): string | undefined {
return walkScopeContainers(root).find((info) => info.container.cascade === engine)?.path;
}