The holder for the lazily-loaded TSL registry — a zero-runtime-import leaf.
Split from load.ts for one structural reason: the ShaderSource.webgpu
closures in the GLSL shader modules need requireTslMaterials(), and if that
lived in load.ts those modules would gain a graph edge to
load.ts → registry.ts → *-tsl.ts → *-glsl.ts and close a cycle. The cycle
is broken at runtime by the dynamic import, but no-circular in
.dependency-cruiser.cjs is an error-severity rule and counts a dynamic edge
like any other — correctly, since a cycle that only works because of import
timing is exactly the kind of thing that rule exists to stop people relying
on.
So the accessor lives here, importing nothing at runtime, and load.ts is
the only module that both reaches registry.ts and writes this slot. Same
shape and same motivation as material-manager/soft-dispose-flag.ts.
The holder for the lazily-loaded TSL registry — a zero-runtime-import leaf.
Split from
load.tsfor one structural reason: theShaderSource.webgpuclosures in the GLSL shader modules needrequireTslMaterials(), and if that lived inload.tsthose modules would gain a graph edge toload.ts → registry.ts → *-tsl.ts → *-glsl.tsand close a cycle. The cycle is broken at runtime by the dynamic import, butno-circularin.dependency-cruiser.cjsis an error-severity rule and counts a dynamic edge like any other — correctly, since a cycle that only works because of import timing is exactly the kind of thing that rule exists to stop people relying on.So the accessor lives here, importing nothing at runtime, and
load.tsis the only module that both reachesregistry.tsand writes this slot. Same shape and same motivation asmaterial-manager/soft-dispose-flag.ts.