Skip to content

Commit 476ca51

Browse files
committed
fix: fix compat mode
1 parent b83bd3a commit 476ca51

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
@@ -119,25 +119,28 @@ interface UpgradableCustomElementConstructor extends CustomElementConstructor {
119119
new (upgradeCallback?: UpgradeCallback): HTMLElement;
120120
}
121121
export let getUpgradableElement: (name: string) => CustomElementConstructor;
122+
export let getUserConstructor: (
123+
upgradeCallback: UpgradeCallback
124+
) => UpgradableCustomElementConstructor | UpgradeCallback;
122125
if (isCustomElementRegistryAvailable()) {
123126
const getPivotCustomElement = patchCustomElementRegistry();
124127
const cachedConstructor: Record<string, CustomElementConstructor> = create(null);
125128
getUpgradableElement = (name: string) => {
126129
let Ctor = cachedConstructor[name];
127130
if (!Ctor) {
128-
class LWCUpgradableElement extends HTMLElement {
129-
constructor(upgradeCallback?: UpgradeCallback) {
130-
super();
131-
if (isFunction(upgradeCallback)) {
132-
upgradeCallback(this); // nothing to do with the result for now
133-
}
134-
}
135-
}
136-
131+
class LWCUpgradableElement extends HTMLElement {}
137132
Ctor = getPivotCustomElement(name, LWCUpgradableElement);
138133
}
139134
return Ctor;
140135
};
136+
getUserConstructor = (upgradeCallback: UpgradeCallback) => {
137+
return class UserElement extends HTMLElement {
138+
constructor() {
139+
super();
140+
upgradeCallback(this);
141+
}
142+
};
143+
};
141144
} else {
142145
// no registry available here
143146
getUpgradableElement = (name: string): UpgradableCustomElementConstructor => {
@@ -149,17 +152,9 @@ if (isCustomElementRegistryAvailable()) {
149152
return elm;
150153
} as unknown as UpgradableCustomElementConstructor;
151154
};
155+
getUserConstructor = (upgradeCallback: UpgradeCallback) => upgradeCallback;
152156
}
153157

154-
export const getUserConstructor = (upgradeCallback: UpgradeCallback) => {
155-
return class UserElement extends HTMLElement {
156-
constructor() {
157-
super();
158-
upgradeCallback(this);
159-
}
160-
};
161-
};
162-
163158
let hydrating = false;
164159

165160
export function setIsHydrating(value: boolean) {

0 commit comments

Comments
 (0)