0.0.10 • Published 8 months ago
@webcomponents/scoped-custom-element-registry v0.0.10
Scoped CustomElementRegistry polyfill prototype
🚨 Work in progress
This polyfill explores implementation of a non-finalized spec proposal and is currently a work in progress.
Overview
Scoped CustomElementRegistry polyfill based on Scoped Custom Element Registries WICG proposal.
Technique: uses native CustomElements to register stand-in classes that
delegate to the constructor in the registry for the element's scope; this
avoids any manual treewalks to identify custom elements that need upgrading.
Constructor delegation is achieved by constructing a bare HTMLElement,
inspecting its tree scope (or the tree scope of the node it was created via) to
determine its registry, and then applying the "constructor call trick" to
upgrade it.
Notes/limitations:
- In order to leverage native CE when available,
observedAttributeshandling must be simulated by patchingsetAttribute/getAttribute/toggleAttributeto callattributeChangedCallbackmanually, since while we can delegate constructors, theobservedAttributesrespected by the browser are fixed at define time. This means that native reflecting properties are not observable when set via properties. - In theory, this should be able to be layered on top of the Custom Elements
polyfill for use on older browsers, although this is yet to be tested. Use of
Reflect.constructmay need to be modified in those cases
Outstanding TODOs: