@dcl/ecs
Version:
Decentraland ECS
33 lines (32 loc) • 1.26 kB
JavaScript
import { Schemas } from '../schemas';
import { getCompositeRootComponent } from './components';
let currentProvider = null;
/**
* Register the composite provider used to resolve composite files. Also registers
* any `provider.schemas` on the engine pre-seal so composites that reference those
* components can be instanced without further setup.
* @public
*/
export function setCompositeProvider(engine, provider) {
currentProvider = provider;
// Define composite::root pre-seal. setCompositeProvider runs at module-load,
// so this guarantees the component exists before the engine seals — composites
// instanced at runtime (post-seal) would otherwise trip the seal when
// instanceComposite looks it up via getCompositeRootComponent.
getCompositeRootComponent(engine);
if (!provider.schemas)
return;
for (const { name, jsonSchema } of provider.schemas) {
if (engine.getComponentOrNull(name))
continue;
engine.defineComponentFromSchema(name, Schemas.fromJson(jsonSchema));
}
}
/**
* Get the composite provider registered via setCompositeProvider. Returns null if
* no provider has been set.
* @public
*/
export function getCompositeProvider() {
return currentProvider;
}