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

[core] Fix CSSStyleSheet is not defined error in Node build #3222

Merged
merged 3 commits into from Aug 18, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/fifty-monkeys-shop.md
@@ -0,0 +1,6 @@
---
'@lit/reactive-element': patch
'lit': patch
---

Fix `CSSStyleSheet is not defined` error that would occur when importing a Lit component in Node when both static `styles` and the `@property` decorator were used.
10 changes: 6 additions & 4 deletions packages/reactive-element/src/css-tag.ts
Expand Up @@ -195,7 +195,9 @@ const cssResultFromStyleSheet = (sheet: CSSStyleSheet) => {
return unsafeCSS(cssText);
};

export const getCompatibleStyle = supportsAdoptingStyleSheets
? (s: CSSResultOrNative) => s
: (s: CSSResultOrNative) =>
s instanceof CSSStyleSheet ? cssResultFromStyleSheet(s) : s;
export const getCompatibleStyle =
supportsAdoptingStyleSheets ||
(NODE_MODE && global.CSSStyleSheet === undefined)
? (s: CSSResultOrNative) => s
: (s: CSSResultOrNative) =>
s instanceof CSSStyleSheet ? cssResultFromStyleSheet(s) : s;
19 changes: 16 additions & 3 deletions packages/reactive-element/src/test/node-imports.ts
Expand Up @@ -22,11 +22,24 @@ import '@lit/reactive-element/decorators/query-assigned-elements.js';
import '@lit/reactive-element/decorators/query-assigned-nodes.js';
import '@lit/reactive-element/decorators/query-async.js';

import {customElement} from '@lit/reactive-element/decorators.js';
import {ReactiveElement} from '@lit/reactive-element';
import {customElement, property} from '@lit/reactive-element/decorators.js';
import {ReactiveElement, css} from '@lit/reactive-element';

@customElement('my-element')
export class MyElement extends ReactiveElement {}
export class MyElement extends ReactiveElement {
// Include both static styles and a @property decorator in the test. The
// @property decorator trigggers class initialization, and if there are also
// static styles, it will trigger an instanceof check for CSSStyleSheet, which
// could explode if not handled with care in the node build.
static override styles = css`
p {
color: purple;
}
`;

@property()
name = 'World';
}

export class MyOtherElement extends ReactiveElement {}
customElements.define('my-other-element', MyOtherElement);