- From: Justin Fagnani <notifications@github.com>
- Date: Fri, 23 Feb 2018 15:55:28 +0000 (UTC)
- To: w3c/webcomponents <webcomponents@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/webcomponents/issues/716/368049564@github.com>
I think a common pattern that might emerge is sharing a registry across a whole package rather than per-module. Since in npm generally a package can only resolve a dependency to a single version, it'll be relatively safe to have a package-wide registry that handles the element subclassing automatically and is tolerant of re-registrations: registry.js ```js export class AutoScopingCustomElementRegistry extends CustomElementRegistry { constructor() { this.bases = new Map(); } define(name, constructor, options) { if (this.bases.has(tagname)) { const base = defined.get(tagname); if (base !== constructor) { throw new Error('Tried to redefine a tagname with a different class'); } return; // already defined } super.define(name, class extends constructor {}, options); } } export const registry = new AutoScopingCustomElementRegistry(); ``` Now one module can define the element without making a trivial subclass: container-a.js ```js import {registry} from './registry.js'; import {ChildElement) from './child-element.js'; registry.define('child-element', ChildElement); ``` And another module too, but it's safe and shares the definition: container-b.js ```js import {registry} from './registry.js'; import {ChildElement) from './child-element.js'; registry.define('child-element', ChildElement); ``` It's possible this is useful enough that it should make it into the proposal. -- 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/716#issuecomment-368049564
Received on Friday, 23 February 2018 15:55:53 UTC