Re: [w3c/webcomponents] Why can't the registry enumerate the custom elements? (#775)

To be clear, I'm talking about something like this:

```javascript
// Extend global customElements registry to allow component discovery.
(function() {
  if (!customElements) return;

  const registry = new Map();
  const super_define = customElements.define;

  Object.defineProperties(customElements, {
    entries: { value: () => registry.entries() },
    // Or if you prefer `[...customElements]`
    [Symbol.iterator]: { value: () => registry.entries() },
    define: {
      value: function define(...args) {
        try {
          super_define.apply(this, args);
          // Only register if the super call succeeds.
          const [name, definition] = args;
          registry.set(name, definition);
        } catch (error) {
          throw error;
        }
      }
    }
  });
})();
```

This works in Chrome and Firefox.  Where by "works" I mean

- if you load the shim before defining any elements
- you can enumerate all successfully-defined elements using `customElements.entries()` (or just `customElements`)
- the enumeration is read-only and cannot be corrupted from the outside (although you could use access to the constructor functions to add properties to them, just as you can currently for known elements)
- everything else works exactly the same as before



-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/webcomponents/issues/775#issuecomment-441310688

Received on Friday, 23 November 2018 19:58:10 UTC