@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.
@@ -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 elm = createCustomElement(sel, upgradeCallback, connectedCallback, disconnectedCallback);
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
- const {
4113
- cmpSlots: {
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((acc, vnode) => {
4462
- // If the passed slot content is factory, evaluate it and use the produced vnodes
4463
- if (vnode && isVScopedSlotFragment(vnode)) {
4464
- const vmBeingRenderedInception = getVMBeingRendered();
4465
- let children = [];
4466
- // Evaluate in the scope of the slot content's owner
4467
- // if a slotset is provided, there will always be an owner. The only case where owner is
4468
- // undefined is for root components, but root components cannot accept slotted content
4469
- setVMBeingRendered(slotset.owner);
4470
- try {
4471
- children = vnode.factory(data.slotData);
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
- finally {
4474
- setVMBeingRendered(vmBeingRenderedInception);
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 vnodeClassName;
6616
- if (!shared.isUndefined(className) && String(className) !== getProperty(elm, 'className')) {
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
- vnodeClassName = className;
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
- vnodeClassName = computedClassName.trim();
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 "${vnodeClassName}" but found "${getProperty(elm, 'className')}"`, vnode.owner);
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.27.0 */
6945
+ /* version: 2.28.1 */
@@ -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 elm = createCustomElement(sel, upgradeCallback, connectedCallback, disconnectedCallback);
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
- const {
4110
- cmpSlots: {
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((acc, vnode) => {
4459
- // If the passed slot content is factory, evaluate it and use the produced vnodes
4460
- if (vnode && isVScopedSlotFragment(vnode)) {
4461
- const vmBeingRenderedInception = getVMBeingRendered();
4462
- let children = [];
4463
- // Evaluate in the scope of the slot content's owner
4464
- // if a slotset is provided, there will always be an owner. The only case where owner is
4465
- // undefined is for root components, but root components cannot accept slotted content
4466
- setVMBeingRendered(slotset.owner);
4467
- try {
4468
- children = vnode.factory(data.slotData);
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
- finally {
4471
- setVMBeingRendered(vmBeingRenderedInception);
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 vnodeClassName;
6613
- if (!isUndefined$1(className) && String(className) !== getProperty(elm, 'className')) {
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
- vnodeClassName = className;
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
- vnodeClassName = computedClassName.trim();
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 "${vnodeClassName}" but found "${getProperty(elm, 'className')}"`, vnode.owner);
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.27.0 */
6906
+ /* version: 2.28.1 */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lwc/engine-core",
3
- "version": "2.27.0",
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.27.0",
28
- "@lwc/shared": "2.27.0"
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;