@lwc/engine-core 2.27.0 → 2.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/engine-core.cjs.js +92 -38
- package/dist/engine-core.js +93 -39
- package/package.json +3 -3
- package/types/framework/vnodes.d.ts +1 -0
package/dist/engine-core.cjs.js
CHANGED
|
@@ -3229,6 +3229,9 @@ function isSameVnode(vnode1, vnode2) {
|
|
|
3229
3229
|
function isVCustomElement(vnode) {
|
|
3230
3230
|
return vnode.type === 3 /* VNodeType.CustomElement */;
|
|
3231
3231
|
}
|
|
3232
|
+
function isVFragment(vnode) {
|
|
3233
|
+
return vnode.type === 5 /* VNodeType.Fragment */;
|
|
3234
|
+
}
|
|
3232
3235
|
function isVScopedSlotFragment(vnode) {
|
|
3233
3236
|
return vnode.type === 6 /* VNodeType.ScopedSlotFragment */;
|
|
3234
3237
|
}
|
|
@@ -3756,9 +3759,14 @@ function mountCustomElement(vnode, parent, anchor, renderer) {
|
|
|
3756
3759
|
if (features.lwcRuntimeFlags.ENABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE) {
|
|
3757
3760
|
disconnectRootElement(elm);
|
|
3758
3761
|
}
|
|
3759
|
-
};
|
|
3762
|
+
}; // Should never get a tag with upper case letter at this point; the compiler
|
|
3763
|
+
// should produce only tags with lowercase letters. However, the Java
|
|
3764
|
+
// compiler may generate tagnames with uppercase letters so - for backwards
|
|
3765
|
+
// compatibility, we lower case the tagname here.
|
|
3766
|
+
|
|
3760
3767
|
|
|
3761
|
-
const
|
|
3768
|
+
const normalizedTagname = sel.toLowerCase();
|
|
3769
|
+
const elm = createCustomElement(normalizedTagname, upgradeCallback, connectedCallback, disconnectedCallback);
|
|
3762
3770
|
vnode.elm = elm;
|
|
3763
3771
|
vnode.vm = vm;
|
|
3764
3772
|
linkNodeToShadow(elm, owner, renderer);
|
|
@@ -4064,6 +4072,17 @@ function allocateChildren(vnode, vm) {
|
|
|
4064
4072
|
shadowMode
|
|
4065
4073
|
} = vm;
|
|
4066
4074
|
|
|
4075
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
4076
|
+
// If any of the children being allocated is a scoped slot fragment, make sure the receiving
|
|
4077
|
+
// component is a light DOM component. This is mainly to validate light dom parent running
|
|
4078
|
+
// in native shadow mode.
|
|
4079
|
+
if (renderMode !== 0
|
|
4080
|
+
/* RenderMode.Light */
|
|
4081
|
+
&& shared.ArraySome.call(children, child => !shared.isNull(child) && isVScopedSlotFragment(child))) {
|
|
4082
|
+
logError(`Invalid usage of 'lwc:slot-data' on ${getComponentTag(vm)} tag. Scoped slot content can only be passed to a light dom child.`);
|
|
4083
|
+
}
|
|
4084
|
+
}
|
|
4085
|
+
|
|
4067
4086
|
if (shadowMode === 1
|
|
4068
4087
|
/* ShadowMode.Synthetic */
|
|
4069
4088
|
|| renderMode === 0
|
|
@@ -4105,26 +4124,26 @@ function createViewModelHook(elm, vnode, renderer) {
|
|
|
4105
4124
|
|
|
4106
4125
|
return vm;
|
|
4107
4126
|
}
|
|
4127
|
+
/**
|
|
4128
|
+
* Collects all slots into a SlotSet, traversing through VFragment Nodes
|
|
4129
|
+
*/
|
|
4108
4130
|
|
|
4109
|
-
function allocateInSlot(vm, children, owner) {
|
|
4110
|
-
var _a, _b;
|
|
4111
4131
|
|
|
4112
|
-
|
|
4113
|
-
|
|
4114
|
-
slotAssignments: oldSlotsMapping
|
|
4115
|
-
}
|
|
4116
|
-
} = vm;
|
|
4117
|
-
const cmpSlotsMapping = shared.create(null);
|
|
4118
|
-
vm.cmpSlots = {
|
|
4119
|
-
owner,
|
|
4120
|
-
slotAssignments: cmpSlotsMapping
|
|
4121
|
-
};
|
|
4132
|
+
function collectSlots(vm, children, cmpSlotsMapping) {
|
|
4133
|
+
var _a, _b;
|
|
4122
4134
|
|
|
4123
4135
|
for (let i = 0, len = children.length; i < len; i += 1) {
|
|
4124
4136
|
const vnode = children[i];
|
|
4125
4137
|
|
|
4126
4138
|
if (shared.isNull(vnode)) {
|
|
4127
4139
|
continue;
|
|
4140
|
+
} // Dive further iff the content is wrapped in a VFragment
|
|
4141
|
+
|
|
4142
|
+
|
|
4143
|
+
if (isVFragment(vnode)) {
|
|
4144
|
+
// Remove the text delimiter nodes to avoid overriding default slot content
|
|
4145
|
+
collectSlots(vm, vnode.children.slice(1, -1), cmpSlotsMapping);
|
|
4146
|
+
continue;
|
|
4128
4147
|
}
|
|
4129
4148
|
|
|
4130
4149
|
let slotName = '';
|
|
@@ -4138,6 +4157,20 @@ function allocateInSlot(vm, children, owner) {
|
|
|
4138
4157
|
const vnodes = cmpSlotsMapping[slotName] = cmpSlotsMapping[slotName] || [];
|
|
4139
4158
|
shared.ArrayPush.call(vnodes, vnode);
|
|
4140
4159
|
}
|
|
4160
|
+
}
|
|
4161
|
+
|
|
4162
|
+
function allocateInSlot(vm, children, owner) {
|
|
4163
|
+
const {
|
|
4164
|
+
cmpSlots: {
|
|
4165
|
+
slotAssignments: oldSlotsMapping
|
|
4166
|
+
}
|
|
4167
|
+
} = vm;
|
|
4168
|
+
const cmpSlotsMapping = shared.create(null);
|
|
4169
|
+
collectSlots(vm, children, cmpSlotsMapping);
|
|
4170
|
+
vm.cmpSlots = {
|
|
4171
|
+
owner,
|
|
4172
|
+
slotAssignments: cmpSlotsMapping
|
|
4173
|
+
};
|
|
4141
4174
|
|
|
4142
4175
|
if (shared.isFalse(vm.isDirty)) {
|
|
4143
4176
|
// We need to determine if the old allocation is really different from the new one
|
|
@@ -4458,27 +4491,42 @@ function s(slotName, data, children, slotset) {
|
|
|
4458
4491
|
!shared.isUndefined(slotset.slotAssignments) &&
|
|
4459
4492
|
!shared.isUndefined(slotset.slotAssignments[slotName]) &&
|
|
4460
4493
|
slotset.slotAssignments[slotName].length !== 0) {
|
|
4461
|
-
children = slotset.slotAssignments[slotName].reduce((
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
4465
|
-
|
|
4466
|
-
//
|
|
4467
|
-
|
|
4468
|
-
|
|
4469
|
-
|
|
4470
|
-
|
|
4471
|
-
|
|
4494
|
+
children = slotset.slotAssignments[slotName].reduce((accumulator, vnode) => {
|
|
4495
|
+
if (vnode) {
|
|
4496
|
+
const assignedNodeIsScopedSlot = isVScopedSlotFragment(vnode);
|
|
4497
|
+
// The only sniff test for a scoped <slot> element is the presence of `slotData`
|
|
4498
|
+
const isScopedSlotElement = !shared.isUndefined(data.slotData);
|
|
4499
|
+
// Check if slot types of parent and child are matching
|
|
4500
|
+
if (assignedNodeIsScopedSlot !== isScopedSlotElement) {
|
|
4501
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
4502
|
+
logError(`Mismatched slot types for ${slotName === '' ? '(default)' : slotName} slot. Both parent and child component must use standard type or scoped type for a given slot.`, slotset.owner);
|
|
4503
|
+
}
|
|
4504
|
+
// Ignore slot content from parent
|
|
4505
|
+
return accumulator;
|
|
4506
|
+
}
|
|
4507
|
+
// If the passed slot content is factory, evaluate it and add the produced vnodes
|
|
4508
|
+
if (assignedNodeIsScopedSlot) {
|
|
4509
|
+
const vmBeingRenderedInception = getVMBeingRendered();
|
|
4510
|
+
let scopedSlotChildren = [];
|
|
4511
|
+
// Evaluate in the scope of the slot content's owner
|
|
4512
|
+
// if a slotset is provided, there will always be an owner. The only case where owner is
|
|
4513
|
+
// undefined is for root components, but root components cannot accept slotted content
|
|
4514
|
+
setVMBeingRendered(slotset.owner);
|
|
4515
|
+
try {
|
|
4516
|
+
scopedSlotChildren = vnode.factory(data.slotData);
|
|
4517
|
+
}
|
|
4518
|
+
finally {
|
|
4519
|
+
setVMBeingRendered(vmBeingRenderedInception);
|
|
4520
|
+
}
|
|
4521
|
+
return shared.ArrayConcat.call(accumulator, scopedSlotChildren);
|
|
4472
4522
|
}
|
|
4473
|
-
|
|
4474
|
-
|
|
4523
|
+
else {
|
|
4524
|
+
// If the slot content is standard type, the content is static, no additional
|
|
4525
|
+
// processing needed on the vnode
|
|
4526
|
+
return shared.ArrayConcat.call(accumulator, vnode);
|
|
4475
4527
|
}
|
|
4476
|
-
return shared.ArrayConcat.call(acc, children);
|
|
4477
|
-
}
|
|
4478
|
-
else {
|
|
4479
|
-
// If the slot content is a static list of child nodes provided by the parent, nothing to do
|
|
4480
|
-
return shared.ArrayConcat.call(acc, vnode);
|
|
4481
4528
|
}
|
|
4529
|
+
return accumulator;
|
|
4482
4530
|
}, []);
|
|
4483
4531
|
}
|
|
4484
4532
|
const vmBeingRendered = getVMBeingRendered();
|
|
@@ -6612,11 +6660,12 @@ function validateClassAttr(vnode, elm, renderer) {
|
|
|
6612
6660
|
}
|
|
6613
6661
|
}
|
|
6614
6662
|
let nodesAreCompatible = true;
|
|
6615
|
-
let
|
|
6616
|
-
|
|
6663
|
+
let readableVnodeClassname;
|
|
6664
|
+
const elmClassName = getProperty(elm, 'className');
|
|
6665
|
+
if (!shared.isUndefined(className) && String(className) !== elmClassName) {
|
|
6617
6666
|
// className is used when class is bound to an expr.
|
|
6618
6667
|
nodesAreCompatible = false;
|
|
6619
|
-
|
|
6668
|
+
readableVnodeClassname = className;
|
|
6620
6669
|
}
|
|
6621
6670
|
else if (!shared.isUndefined(classMap)) {
|
|
6622
6671
|
// classMap is used when class is set to static value.
|
|
@@ -6629,14 +6678,19 @@ function validateClassAttr(vnode, elm, renderer) {
|
|
|
6629
6678
|
nodesAreCompatible = false;
|
|
6630
6679
|
}
|
|
6631
6680
|
}
|
|
6632
|
-
|
|
6681
|
+
readableVnodeClassname = computedClassName.trim();
|
|
6633
6682
|
if (classList.length > shared.keys(classMap).length) {
|
|
6634
6683
|
nodesAreCompatible = false;
|
|
6635
6684
|
}
|
|
6636
6685
|
}
|
|
6686
|
+
else if (shared.isUndefined(className) && elmClassName !== '') {
|
|
6687
|
+
// SSR contains a className but client-side VDOM does not
|
|
6688
|
+
nodesAreCompatible = false;
|
|
6689
|
+
readableVnodeClassname = '';
|
|
6690
|
+
}
|
|
6637
6691
|
if (!nodesAreCompatible) {
|
|
6638
6692
|
if (process.env.NODE_ENV !== 'production') {
|
|
6639
|
-
logError(`Mismatch hydrating element <${getProperty(elm, 'tagName').toLowerCase()}>: attribute "class" has different values, expected "${
|
|
6693
|
+
logError(`Mismatch hydrating element <${getProperty(elm, 'tagName').toLowerCase()}>: attribute "class" has different values, expected "${readableVnodeClassname}" but found "${elmClassName}"`, vnode.owner);
|
|
6640
6694
|
}
|
|
6641
6695
|
}
|
|
6642
6696
|
return nodesAreCompatible;
|
|
@@ -6888,4 +6942,4 @@ exports.swapTemplate = swapTemplate;
|
|
|
6888
6942
|
exports.track = track;
|
|
6889
6943
|
exports.unwrap = unwrap;
|
|
6890
6944
|
exports.wire = wire;
|
|
6891
|
-
/* version: 2.
|
|
6945
|
+
/* version: 2.28.1 */
|
package/dist/engine-core.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* proxy-compat-disable */
|
|
2
2
|
import { lwcRuntimeFlags } from '@lwc/features';
|
|
3
3
|
export { setFeatureFlag, setFeatureFlagForTest } from '@lwc/features';
|
|
4
|
-
import { seal, create, isUndefined as isUndefined$1, isFunction as isFunction$1, ArrayPush as ArrayPush$1, ArrayIndexOf, ArraySplice, StringToLowerCase, isNull, ArrayJoin, isFrozen, defineProperty, hasOwnProperty as hasOwnProperty$1, assign, forEach, keys, AriaPropNameToAttrNameMap, getPropertyDescriptor, defineProperties, getOwnPropertyNames as getOwnPropertyNames$1, getPrototypeOf as getPrototypeOf$1, setPrototypeOf, isObject, freeze, assert, KEY__SYNTHETIC_MODE, isFalse, isTrue, toString as toString$1, getOwnPropertyDescriptor as getOwnPropertyDescriptor$1, LWC_VERSION_COMMENT_REGEX, LWC_VERSION, htmlPropertyToAttribute, ArraySlice, ArrayMap, isArray as isArray$1, KEY__SCOPED_CSS, StringCharCodeAt, XML_NAMESPACE, XLINK_NAMESPACE, isString, StringSlice, SVG_NAMESPACE, KEY__SHADOW_STATIC, KEY__SHADOW_RESOLVER, ArrayConcat as ArrayConcat$1, isNumber, StringReplace, noop, ArrayUnshift, ArrayFilter, ArrayCopyWithin, ArrayFill, ArraySort, ArrayReverse, ArrayShift, ArrayPop } from '@lwc/shared';
|
|
4
|
+
import { seal, create, isUndefined as isUndefined$1, isFunction as isFunction$1, ArrayPush as ArrayPush$1, ArrayIndexOf, ArraySplice, StringToLowerCase, isNull, ArrayJoin, isFrozen, defineProperty, hasOwnProperty as hasOwnProperty$1, assign, forEach, keys, AriaPropNameToAttrNameMap, getPropertyDescriptor, defineProperties, getOwnPropertyNames as getOwnPropertyNames$1, getPrototypeOf as getPrototypeOf$1, setPrototypeOf, isObject, freeze, assert, KEY__SYNTHETIC_MODE, isFalse, isTrue, toString as toString$1, getOwnPropertyDescriptor as getOwnPropertyDescriptor$1, LWC_VERSION_COMMENT_REGEX, LWC_VERSION, htmlPropertyToAttribute, ArraySlice, ArrayMap, isArray as isArray$1, KEY__SCOPED_CSS, StringCharCodeAt, XML_NAMESPACE, XLINK_NAMESPACE, isString, StringSlice, SVG_NAMESPACE, KEY__SHADOW_STATIC, KEY__SHADOW_RESOLVER, ArraySome, ArrayConcat as ArrayConcat$1, isNumber, StringReplace, noop, ArrayUnshift, ArrayFilter, ArrayCopyWithin, ArrayFill, ArraySort, ArrayReverse, ArrayShift, ArrayPop } from '@lwc/shared';
|
|
5
5
|
|
|
6
6
|
/*
|
|
7
7
|
* Copyright (c) 2018, salesforce.com, inc.
|
|
@@ -3226,6 +3226,9 @@ function isSameVnode(vnode1, vnode2) {
|
|
|
3226
3226
|
function isVCustomElement(vnode) {
|
|
3227
3227
|
return vnode.type === 3 /* VNodeType.CustomElement */;
|
|
3228
3228
|
}
|
|
3229
|
+
function isVFragment(vnode) {
|
|
3230
|
+
return vnode.type === 5 /* VNodeType.Fragment */;
|
|
3231
|
+
}
|
|
3229
3232
|
function isVScopedSlotFragment(vnode) {
|
|
3230
3233
|
return vnode.type === 6 /* VNodeType.ScopedSlotFragment */;
|
|
3231
3234
|
}
|
|
@@ -3753,9 +3756,14 @@ function mountCustomElement(vnode, parent, anchor, renderer) {
|
|
|
3753
3756
|
if (lwcRuntimeFlags.ENABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE) {
|
|
3754
3757
|
disconnectRootElement(elm);
|
|
3755
3758
|
}
|
|
3756
|
-
};
|
|
3759
|
+
}; // Should never get a tag with upper case letter at this point; the compiler
|
|
3760
|
+
// should produce only tags with lowercase letters. However, the Java
|
|
3761
|
+
// compiler may generate tagnames with uppercase letters so - for backwards
|
|
3762
|
+
// compatibility, we lower case the tagname here.
|
|
3763
|
+
|
|
3757
3764
|
|
|
3758
|
-
const
|
|
3765
|
+
const normalizedTagname = sel.toLowerCase();
|
|
3766
|
+
const elm = createCustomElement(normalizedTagname, upgradeCallback, connectedCallback, disconnectedCallback);
|
|
3759
3767
|
vnode.elm = elm;
|
|
3760
3768
|
vnode.vm = vm;
|
|
3761
3769
|
linkNodeToShadow(elm, owner, renderer);
|
|
@@ -4061,6 +4069,17 @@ function allocateChildren(vnode, vm) {
|
|
|
4061
4069
|
shadowMode
|
|
4062
4070
|
} = vm;
|
|
4063
4071
|
|
|
4072
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
4073
|
+
// If any of the children being allocated is a scoped slot fragment, make sure the receiving
|
|
4074
|
+
// component is a light DOM component. This is mainly to validate light dom parent running
|
|
4075
|
+
// in native shadow mode.
|
|
4076
|
+
if (renderMode !== 0
|
|
4077
|
+
/* RenderMode.Light */
|
|
4078
|
+
&& ArraySome.call(children, child => !isNull(child) && isVScopedSlotFragment(child))) {
|
|
4079
|
+
logError(`Invalid usage of 'lwc:slot-data' on ${getComponentTag(vm)} tag. Scoped slot content can only be passed to a light dom child.`);
|
|
4080
|
+
}
|
|
4081
|
+
}
|
|
4082
|
+
|
|
4064
4083
|
if (shadowMode === 1
|
|
4065
4084
|
/* ShadowMode.Synthetic */
|
|
4066
4085
|
|| renderMode === 0
|
|
@@ -4102,26 +4121,26 @@ function createViewModelHook(elm, vnode, renderer) {
|
|
|
4102
4121
|
|
|
4103
4122
|
return vm;
|
|
4104
4123
|
}
|
|
4124
|
+
/**
|
|
4125
|
+
* Collects all slots into a SlotSet, traversing through VFragment Nodes
|
|
4126
|
+
*/
|
|
4105
4127
|
|
|
4106
|
-
function allocateInSlot(vm, children, owner) {
|
|
4107
|
-
var _a, _b;
|
|
4108
4128
|
|
|
4109
|
-
|
|
4110
|
-
|
|
4111
|
-
slotAssignments: oldSlotsMapping
|
|
4112
|
-
}
|
|
4113
|
-
} = vm;
|
|
4114
|
-
const cmpSlotsMapping = create(null);
|
|
4115
|
-
vm.cmpSlots = {
|
|
4116
|
-
owner,
|
|
4117
|
-
slotAssignments: cmpSlotsMapping
|
|
4118
|
-
};
|
|
4129
|
+
function collectSlots(vm, children, cmpSlotsMapping) {
|
|
4130
|
+
var _a, _b;
|
|
4119
4131
|
|
|
4120
4132
|
for (let i = 0, len = children.length; i < len; i += 1) {
|
|
4121
4133
|
const vnode = children[i];
|
|
4122
4134
|
|
|
4123
4135
|
if (isNull(vnode)) {
|
|
4124
4136
|
continue;
|
|
4137
|
+
} // Dive further iff the content is wrapped in a VFragment
|
|
4138
|
+
|
|
4139
|
+
|
|
4140
|
+
if (isVFragment(vnode)) {
|
|
4141
|
+
// Remove the text delimiter nodes to avoid overriding default slot content
|
|
4142
|
+
collectSlots(vm, vnode.children.slice(1, -1), cmpSlotsMapping);
|
|
4143
|
+
continue;
|
|
4125
4144
|
}
|
|
4126
4145
|
|
|
4127
4146
|
let slotName = '';
|
|
@@ -4135,6 +4154,20 @@ function allocateInSlot(vm, children, owner) {
|
|
|
4135
4154
|
const vnodes = cmpSlotsMapping[slotName] = cmpSlotsMapping[slotName] || [];
|
|
4136
4155
|
ArrayPush$1.call(vnodes, vnode);
|
|
4137
4156
|
}
|
|
4157
|
+
}
|
|
4158
|
+
|
|
4159
|
+
function allocateInSlot(vm, children, owner) {
|
|
4160
|
+
const {
|
|
4161
|
+
cmpSlots: {
|
|
4162
|
+
slotAssignments: oldSlotsMapping
|
|
4163
|
+
}
|
|
4164
|
+
} = vm;
|
|
4165
|
+
const cmpSlotsMapping = create(null);
|
|
4166
|
+
collectSlots(vm, children, cmpSlotsMapping);
|
|
4167
|
+
vm.cmpSlots = {
|
|
4168
|
+
owner,
|
|
4169
|
+
slotAssignments: cmpSlotsMapping
|
|
4170
|
+
};
|
|
4138
4171
|
|
|
4139
4172
|
if (isFalse(vm.isDirty)) {
|
|
4140
4173
|
// We need to determine if the old allocation is really different from the new one
|
|
@@ -4455,27 +4488,42 @@ function s(slotName, data, children, slotset) {
|
|
|
4455
4488
|
!isUndefined$1(slotset.slotAssignments) &&
|
|
4456
4489
|
!isUndefined$1(slotset.slotAssignments[slotName]) &&
|
|
4457
4490
|
slotset.slotAssignments[slotName].length !== 0) {
|
|
4458
|
-
children = slotset.slotAssignments[slotName].reduce((
|
|
4459
|
-
|
|
4460
|
-
|
|
4461
|
-
|
|
4462
|
-
|
|
4463
|
-
//
|
|
4464
|
-
|
|
4465
|
-
|
|
4466
|
-
|
|
4467
|
-
|
|
4468
|
-
|
|
4491
|
+
children = slotset.slotAssignments[slotName].reduce((accumulator, vnode) => {
|
|
4492
|
+
if (vnode) {
|
|
4493
|
+
const assignedNodeIsScopedSlot = isVScopedSlotFragment(vnode);
|
|
4494
|
+
// The only sniff test for a scoped <slot> element is the presence of `slotData`
|
|
4495
|
+
const isScopedSlotElement = !isUndefined$1(data.slotData);
|
|
4496
|
+
// Check if slot types of parent and child are matching
|
|
4497
|
+
if (assignedNodeIsScopedSlot !== isScopedSlotElement) {
|
|
4498
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
4499
|
+
logError(`Mismatched slot types for ${slotName === '' ? '(default)' : slotName} slot. Both parent and child component must use standard type or scoped type for a given slot.`, slotset.owner);
|
|
4500
|
+
}
|
|
4501
|
+
// Ignore slot content from parent
|
|
4502
|
+
return accumulator;
|
|
4503
|
+
}
|
|
4504
|
+
// If the passed slot content is factory, evaluate it and add the produced vnodes
|
|
4505
|
+
if (assignedNodeIsScopedSlot) {
|
|
4506
|
+
const vmBeingRenderedInception = getVMBeingRendered();
|
|
4507
|
+
let scopedSlotChildren = [];
|
|
4508
|
+
// Evaluate in the scope of the slot content's owner
|
|
4509
|
+
// if a slotset is provided, there will always be an owner. The only case where owner is
|
|
4510
|
+
// undefined is for root components, but root components cannot accept slotted content
|
|
4511
|
+
setVMBeingRendered(slotset.owner);
|
|
4512
|
+
try {
|
|
4513
|
+
scopedSlotChildren = vnode.factory(data.slotData);
|
|
4514
|
+
}
|
|
4515
|
+
finally {
|
|
4516
|
+
setVMBeingRendered(vmBeingRenderedInception);
|
|
4517
|
+
}
|
|
4518
|
+
return ArrayConcat$1.call(accumulator, scopedSlotChildren);
|
|
4469
4519
|
}
|
|
4470
|
-
|
|
4471
|
-
|
|
4520
|
+
else {
|
|
4521
|
+
// If the slot content is standard type, the content is static, no additional
|
|
4522
|
+
// processing needed on the vnode
|
|
4523
|
+
return ArrayConcat$1.call(accumulator, vnode);
|
|
4472
4524
|
}
|
|
4473
|
-
return ArrayConcat$1.call(acc, children);
|
|
4474
|
-
}
|
|
4475
|
-
else {
|
|
4476
|
-
// If the slot content is a static list of child nodes provided by the parent, nothing to do
|
|
4477
|
-
return ArrayConcat$1.call(acc, vnode);
|
|
4478
4525
|
}
|
|
4526
|
+
return accumulator;
|
|
4479
4527
|
}, []);
|
|
4480
4528
|
}
|
|
4481
4529
|
const vmBeingRendered = getVMBeingRendered();
|
|
@@ -6609,11 +6657,12 @@ function validateClassAttr(vnode, elm, renderer) {
|
|
|
6609
6657
|
}
|
|
6610
6658
|
}
|
|
6611
6659
|
let nodesAreCompatible = true;
|
|
6612
|
-
let
|
|
6613
|
-
|
|
6660
|
+
let readableVnodeClassname;
|
|
6661
|
+
const elmClassName = getProperty(elm, 'className');
|
|
6662
|
+
if (!isUndefined$1(className) && String(className) !== elmClassName) {
|
|
6614
6663
|
// className is used when class is bound to an expr.
|
|
6615
6664
|
nodesAreCompatible = false;
|
|
6616
|
-
|
|
6665
|
+
readableVnodeClassname = className;
|
|
6617
6666
|
}
|
|
6618
6667
|
else if (!isUndefined$1(classMap)) {
|
|
6619
6668
|
// classMap is used when class is set to static value.
|
|
@@ -6626,14 +6675,19 @@ function validateClassAttr(vnode, elm, renderer) {
|
|
|
6626
6675
|
nodesAreCompatible = false;
|
|
6627
6676
|
}
|
|
6628
6677
|
}
|
|
6629
|
-
|
|
6678
|
+
readableVnodeClassname = computedClassName.trim();
|
|
6630
6679
|
if (classList.length > keys(classMap).length) {
|
|
6631
6680
|
nodesAreCompatible = false;
|
|
6632
6681
|
}
|
|
6633
6682
|
}
|
|
6683
|
+
else if (isUndefined$1(className) && elmClassName !== '') {
|
|
6684
|
+
// SSR contains a className but client-side VDOM does not
|
|
6685
|
+
nodesAreCompatible = false;
|
|
6686
|
+
readableVnodeClassname = '';
|
|
6687
|
+
}
|
|
6634
6688
|
if (!nodesAreCompatible) {
|
|
6635
6689
|
if (process.env.NODE_ENV !== 'production') {
|
|
6636
|
-
logError(`Mismatch hydrating element <${getProperty(elm, 'tagName').toLowerCase()}>: attribute "class" has different values, expected "${
|
|
6690
|
+
logError(`Mismatch hydrating element <${getProperty(elm, 'tagName').toLowerCase()}>: attribute "class" has different values, expected "${readableVnodeClassname}" but found "${elmClassName}"`, vnode.owner);
|
|
6637
6691
|
}
|
|
6638
6692
|
}
|
|
6639
6693
|
return nodesAreCompatible;
|
|
@@ -6849,4 +6903,4 @@ function getComponentConstructor(elm) {
|
|
|
6849
6903
|
}
|
|
6850
6904
|
|
|
6851
6905
|
export { LightningElement, profilerControl as __unstable__ProfilerControl, api$1 as api, connectRootElement, createContextProvider, createVM, disconnectRootElement, freezeTemplate, getAssociatedVMIfPresent, getComponentConstructor, getComponentDef, getComponentHtmlPrototype, hydrateRoot, isComponentConstructor, parseFragment, parseSVGFragment, readonly, register, registerComponent, registerDecorators, registerTemplate, sanitizeAttribute, setHooks, swapComponent, swapStyle, swapTemplate, track, unwrap, wire };
|
|
6852
|
-
/* version: 2.
|
|
6906
|
+
/* version: 2.28.1 */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lwc/engine-core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.28.1",
|
|
4
4
|
"description": "Core LWC engine APIs.",
|
|
5
5
|
"homepage": "https://lwc.dev/",
|
|
6
6
|
"repository": {
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"types/"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@lwc/features": "2.
|
|
28
|
-
"@lwc/shared": "2.
|
|
27
|
+
"@lwc/features": "2.28.1",
|
|
28
|
+
"@lwc/shared": "2.28.1"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"observable-membrane": "2.0.0"
|
|
@@ -88,4 +88,5 @@ export interface VElementData extends VNodeData {
|
|
|
88
88
|
export declare function isVBaseElement(vnode: VNode): vnode is VElement | VCustomElement;
|
|
89
89
|
export declare function isSameVnode(vnode1: VNode, vnode2: VNode): boolean;
|
|
90
90
|
export declare function isVCustomElement(vnode: VBaseElement): vnode is VCustomElement;
|
|
91
|
+
export declare function isVFragment(vnode: VNode): vnode is VFragment;
|
|
91
92
|
export declare function isVScopedSlotFragment(vnode: VNode): vnode is VScopedSlotFragment;
|