Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[labs/ssr-dom-shim] Patch localName and tagName with customElements.define call #4553

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

kyubisation
Copy link

This change extends the CustomElementRegistryShim to patch localName and tagName into the web component, when calling define.
This allows instances to call this.localName and this.tagName accordingly.

Fixes #3375

Copy link

changeset-bot bot commented Feb 20, 2024

🦋 Changeset detected

Latest commit: 4c2fe5b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@lit-labs/ssr-dom-shim Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Contributor

📊 Tachometer Benchmark Results

Summary

A summary of the benchmark results will show here once they finish.

Results

The full results of your benchmarks will show here once they finish.

tachometer-reporter-action v2 for Benchmarks

@kyubisation kyubisation changed the title fix(@lit-labs/ssr-dom-shim): patch localName and tagName with customElements.define call [labs/ssr-dom-shim] Patch localName and tagName with customElements.define call Mar 28, 2024
…lements.define call

This change extends the CustomElementRegistryShim to patch localName and tagName into the web component, when calling define.
This allows instances to call `this.localName` and `this.tagName` accordingly.

Fixes lit#3375
@kyubisation
Copy link
Author

Sorry, I missed the section in CONTRIBUTING.md about changesets. I have rebased and appended the changeset.

Copy link
Collaborator

@justinfagnani justinfagnani left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

One comment about where the getters are implemented.

@@ -148,6 +148,17 @@ const CustomElementRegistryShim = class CustomElementRegistry {
);
}
}
// Polyfill tagName and localName for the component.
Object.defineProperties(ctor.prototype, {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of patching the prototype, which could theoretically have overridden these getters, I think they should be defined on the Element shim above with the other Element methods.

Here the registry can set an internal property of the element to the registry, either like ctor.__registry = this, or ctor.__localName = name to use in the getters.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll have a look 👍

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have adapted the code with __localName.
Feel free to have another look. If you have any other suggestion, I will improve the PR as desired.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[labs/ssr] Add localName to DOM emulation for SSR
2 participants