Skip to content

Commit 2803dc8

Browse files
committed
fix: fix compat mode
1 parent e99200f commit 2803dc8

File tree

2 files changed

+26
-34
lines changed

2 files changed

+26
-34
lines changed

packages/@lwc/engine-dom/src/apis/create-element.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
disconnectRootElement,
2121
LightningElement,
2222
} from '@lwc/engine-core';
23-
import { getUpgradableElement } from '../renderer';
23+
import { getUpgradableElement, getUserConstructor } from '../renderer';
2424

2525
// TODO [#2472]: Remove this workaround when appropriate.
2626
// eslint-disable-next-line lwc-internal/no-global-node
@@ -115,21 +115,18 @@ export function createElement(
115115
* mechanism that only passes that argument if the constructor is known to be
116116
* an upgradable custom element.
117117
*/
118-
class UserElement extends HTMLElement {
119-
constructor() {
120-
super();
121-
const elm = this;
122-
createVM(elm, Ctor, {
123-
tagName,
124-
mode: options.mode !== 'closed' ? 'open' : 'closed',
125-
owner: null,
126-
});
127-
ConnectingSlot.set(elm, connectRootElement);
128-
DisconnectingSlot.set(elm, disconnectRootElement);
129-
wasComponentUpgraded = true;
130-
}
131-
}
132-
const element = new UpgradableConstructor(UserElement.prototype.constructor);
118+
const upgradeCallback = (elm: HTMLElement) => {
119+
createVM(elm, Ctor, {
120+
tagName,
121+
mode: options.mode !== 'closed' ? 'open' : 'closed',
122+
owner: null,
123+
});
124+
ConnectingSlot.set(elm, connectRootElement);
125+
DisconnectingSlot.set(elm, disconnectRootElement);
126+
wasComponentUpgraded = true;
127+
};
128+
const UserConstructor = getUserConstructor(upgradeCallback);
129+
const element = new UpgradableConstructor(UserConstructor);
133130
if (!wasComponentUpgraded) {
134131
/* eslint-disable-next-line no-console */
135132
console.error(

packages/@lwc/engine-dom/src/renderer.ts

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -90,25 +90,28 @@ interface UpgradableCustomElementConstructor extends CustomElementConstructor {
9090
new (upgradeCallback?: UpgradeCallback): HTMLElement;
9191
}
9292
export let getUpgradableElement: (name: string) => CustomElementConstructor;
93+
export let getUserConstructor: (
94+
upgradeCallback: UpgradeCallback
95+
) => UpgradableCustomElementConstructor | UpgradeCallback;
9396
if (isCustomElementRegistryAvailable()) {
9497
const getPivotCustomElement = patchCustomElementRegistry();
9598
const cachedConstructor: Record<string, CustomElementConstructor> = create(null);
9699
getUpgradableElement = (name: string) => {
97100
let Ctor = cachedConstructor[name];
98101
if (!Ctor) {
99-
class LWCUpgradableElement extends HTMLElement {
100-
constructor(upgradeCallback?: UpgradeCallback) {
101-
super();
102-
if (isFunction(upgradeCallback)) {
103-
upgradeCallback(this); // nothing to do with the result for now
104-
}
105-
}
106-
}
107-
102+
class LWCUpgradableElement extends HTMLElement {}
108103
Ctor = getPivotCustomElement(name, LWCUpgradableElement);
109104
}
110105
return Ctor;
111106
};
107+
getUserConstructor = (upgradeCallback: UpgradeCallback) => {
108+
return class UserElement extends HTMLElement {
109+
constructor() {
110+
super();
111+
upgradeCallback(this);
112+
}
113+
};
114+
};
112115
} else {
113116
// no registry available here
114117
getUpgradableElement = (name: string): UpgradableCustomElementConstructor => {
@@ -120,17 +123,9 @@ if (isCustomElementRegistryAvailable()) {
120123
return elm;
121124
} as unknown as UpgradableCustomElementConstructor;
122125
};
126+
getUserConstructor = (upgradeCallback: UpgradeCallback) => upgradeCallback;
123127
}
124128

125-
export const getUserConstructor = (upgradeCallback: UpgradeCallback) => {
126-
return class UserElement extends HTMLElement {
127-
constructor() {
128-
super();
129-
upgradeCallback(this);
130-
}
131-
};
132-
};
133-
134129
let hydrating = false;
135130

136131
export function setIsHydrating(value: boolean) {

0 commit comments

Comments
 (0)