Schema-aware normaliser injected from outside the package.
@ifc-lite/mutations cannot import @ifc-lite/parser (cycle), so
the canonical-name registry isn't reachable here. The SDK / viewer
boundary calls setEntityTypeNormalizer once at startup with the
parser's normalizeIfcTypeName helper, and from then on every
addEntity() call resolves to canonical PascalCase before forwarding
to the overlay. Direct callers that don't wire a normalizer fall
back to the lightweight regex check below — typos still surface,
just without registry-grade rejection.
Schema-aware normaliser injected from outside the package.
@ifc-lite/mutationscannot import@ifc-lite/parser(cycle), so the canonical-name registry isn't reachable here. The SDK / viewer boundary callssetEntityTypeNormalizeronce at startup with the parser'snormalizeIfcTypeNamehelper, and from then on everyaddEntity()call resolves to canonical PascalCase before forwarding to the overlay. Direct callers that don't wire a normalizer fall back to the lightweight regex check below — typos still surface, just without registry-grade rejection.